Improved article creation, moved customer creation to own def.
This commit is contained in:
parent
41d2c6c881
commit
19d2b9750c
1 changed files with 79 additions and 74 deletions
|
@ -530,17 +530,15 @@ module Import::OTRS2
|
||||||
# cleanup values
|
# cleanup values
|
||||||
_cleanup(record)
|
_cleanup(record)
|
||||||
|
|
||||||
|
_utf8_encode(record)
|
||||||
|
|
||||||
ticket_new = {
|
ticket_new = {
|
||||||
title: '',
|
title: '',
|
||||||
created_by_id: 1,
|
created_by_id: 1,
|
||||||
updated_by_id: 1,
|
updated_by_id: 1,
|
||||||
}
|
}
|
||||||
map[:Ticket].each { |key, value|
|
map[:Ticket].each { |key, value|
|
||||||
if record[key.to_s] && record[key.to_s].class == String
|
|
||||||
ticket_new[value] = Encode.conv( 'utf8', record[key.to_s] )
|
|
||||||
else
|
|
||||||
ticket_new[value] = record[key.to_s]
|
ticket_new[value] = record[key.to_s]
|
||||||
end
|
|
||||||
}
|
}
|
||||||
ticket_old = Ticket.where( id: ticket_new[:id] ).first
|
ticket_old = Ticket.where( id: ticket_new[:id] ).first
|
||||||
|
|
||||||
|
@ -581,71 +579,12 @@ module Import::OTRS2
|
||||||
|
|
||||||
# utf8 encode
|
# utf8 encode
|
||||||
record['Articles'].each { |article|
|
record['Articles'].each { |article|
|
||||||
article.each { |key, value|
|
_utf8_encode(article)
|
||||||
next if !value
|
|
||||||
next if value.class != String
|
|
||||||
article[key] = Encode.conv( 'utf8', value )
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# lookup customers to create first
|
# lookup customers to create first
|
||||||
record['Articles'].each { |article|
|
record['Articles'].each { |article|
|
||||||
|
_article_based_customers(article, locks)
|
||||||
# create customer/sender if needed
|
|
||||||
if article['sender'] == 'customer' && article['created_by_id'].to_i == 1 && !article['from'].empty?
|
|
||||||
|
|
||||||
email = nil
|
|
||||||
begin
|
|
||||||
email = Mail::Address.new( article['from'] ).address
|
|
||||||
rescue
|
|
||||||
email = article['from']
|
|
||||||
if article['from'] =~ /<(.+?)>/
|
|
||||||
email = $1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# create article user if not exists
|
|
||||||
while locks[:User][ email ]
|
|
||||||
log "user #{email} is locked"
|
|
||||||
sleep 1
|
|
||||||
end
|
|
||||||
|
|
||||||
# lock user
|
|
||||||
locks[:User][ email ] = true
|
|
||||||
|
|
||||||
user = User.where( email: email ).first
|
|
||||||
if !user
|
|
||||||
user = User.where( login: email ).first
|
|
||||||
end
|
|
||||||
if !user
|
|
||||||
begin
|
|
||||||
display_name = Mail::Address.new( article['from'] ).display_name ||
|
|
||||||
( Mail::Address.new( article['from'] ).comments && Mail::Address.new( article['from'] ).comments[0] )
|
|
||||||
rescue
|
|
||||||
display_name = article['from']
|
|
||||||
end
|
|
||||||
|
|
||||||
# do extra decoding because we needed to use field.value
|
|
||||||
display_name = Mail::Field.new( 'X-From', display_name ).to_s
|
|
||||||
|
|
||||||
roles = Role.lookup( name: 'Customer' )
|
|
||||||
user = User.create(
|
|
||||||
login: email,
|
|
||||||
firstname: display_name,
|
|
||||||
lastname: '',
|
|
||||||
email: email,
|
|
||||||
password: '',
|
|
||||||
active: true,
|
|
||||||
role_ids: [roles.id],
|
|
||||||
updated_by_id: 1,
|
|
||||||
created_by_id: 1,
|
|
||||||
)
|
|
||||||
end
|
|
||||||
article['created_by_id'] = user.id
|
|
||||||
|
|
||||||
# unlock user
|
|
||||||
locks[:User][ email ] = false
|
|
||||||
end
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ActiveRecord::Base.transaction do
|
ActiveRecord::Base.transaction do
|
||||||
|
@ -658,9 +597,7 @@ module Import::OTRS2
|
||||||
}
|
}
|
||||||
|
|
||||||
map[:Article].each { |key, value|
|
map[:Article].each { |key, value|
|
||||||
if article[key.to_s]
|
article_new[value] = article[key.to_s]
|
||||||
article_new[value] = Encode.conv( 'utf8', article[key.to_s] )
|
|
||||||
end
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if article_new[:sender] == 'customer'
|
if article_new[:sender] == 'customer'
|
||||||
|
@ -1164,7 +1101,6 @@ module Import::OTRS2
|
||||||
end
|
end
|
||||||
|
|
||||||
# sync organizations
|
# sync organizations
|
||||||
|
|
||||||
def self.organization(records)
|
def self.organization(records)
|
||||||
map = {
|
map = {
|
||||||
ChangeTime: :updated_at,
|
ChangeTime: :updated_at,
|
||||||
|
@ -1205,7 +1141,6 @@ module Import::OTRS2
|
||||||
end
|
end
|
||||||
|
|
||||||
# sync settings
|
# sync settings
|
||||||
|
|
||||||
def self.setting(records)
|
def self.setting(records)
|
||||||
|
|
||||||
records.each { |setting|
|
records.each { |setting|
|
||||||
|
@ -1255,14 +1190,12 @@ module Import::OTRS2
|
||||||
end
|
end
|
||||||
|
|
||||||
# log
|
# log
|
||||||
|
|
||||||
def self.log(message)
|
def self.log(message)
|
||||||
thread_no = Thread.current[:thread_no] || '-'
|
thread_no = Thread.current[:thread_no] || '-'
|
||||||
puts "#{Time.new.to_s}/thread##{thread_no}: #{message}"
|
puts "#{Time.new.to_s}/thread##{thread_no}: #{message}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# set translate valid ids to active = true|false
|
# set translate valid ids to active = true|false
|
||||||
|
|
||||||
def self._set_valid(record)
|
def self._set_valid(record)
|
||||||
|
|
||||||
# map
|
# map
|
||||||
|
@ -1282,7 +1215,6 @@ module Import::OTRS2
|
||||||
end
|
end
|
||||||
|
|
||||||
# cleanup invalid values
|
# cleanup invalid values
|
||||||
|
|
||||||
def self._cleanup(record)
|
def self._cleanup(record)
|
||||||
record.each {|key, value|
|
record.each {|key, value|
|
||||||
if value == '0000-00-00 00:00:00'
|
if value == '0000-00-00 00:00:00'
|
||||||
|
@ -1295,4 +1227,77 @@ module Import::OTRS2
|
||||||
record['Closed'] = record['Created']
|
record['Closed'] = record['Created']
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# utf8 convert
|
||||||
|
def self._utf8_encode(data)
|
||||||
|
data.each { |key, value|
|
||||||
|
next if !value
|
||||||
|
next if value.class != String
|
||||||
|
data[key] = Encode.conv( 'utf8', value )
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
# create customers for article
|
||||||
|
def self._article_based_customers(article, locks)
|
||||||
|
|
||||||
|
# create customer/sender if needed
|
||||||
|
return if article['sender'] != 'customer'
|
||||||
|
return if article['created_by_id'].to_i != 1
|
||||||
|
return if article['from'].empty?
|
||||||
|
|
||||||
|
email = nil
|
||||||
|
begin
|
||||||
|
email = Mail::Address.new( article['from'] ).address
|
||||||
|
rescue
|
||||||
|
email = article['from']
|
||||||
|
if article['from'] =~ /<(.+?)>/
|
||||||
|
email = $1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# create article user if not exists
|
||||||
|
while locks[:User][ email ]
|
||||||
|
log "user #{email} is locked"
|
||||||
|
sleep 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# lock user
|
||||||
|
locks[:User][ email ] = true
|
||||||
|
|
||||||
|
user = User.where( email: email ).first
|
||||||
|
if !user
|
||||||
|
user = User.where( login: email ).first
|
||||||
|
end
|
||||||
|
if !user
|
||||||
|
begin
|
||||||
|
display_name = Mail::Address.new( article['from'] ).display_name ||
|
||||||
|
( Mail::Address.new( article['from'] ).comments && Mail::Address.new( article['from'] ).comments[0] )
|
||||||
|
rescue
|
||||||
|
display_name = article['from']
|
||||||
|
end
|
||||||
|
|
||||||
|
# do extra decoding because we needed to use field.value
|
||||||
|
display_name = Mail::Field.new( 'X-From', display_name ).to_s
|
||||||
|
|
||||||
|
roles = Role.lookup( name: 'Customer' )
|
||||||
|
user = User.create(
|
||||||
|
login: email,
|
||||||
|
firstname: display_name,
|
||||||
|
lastname: '',
|
||||||
|
email: email,
|
||||||
|
password: '',
|
||||||
|
active: true,
|
||||||
|
role_ids: [roles.id],
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
article['created_by_id'] = user.id
|
||||||
|
|
||||||
|
# unlock user
|
||||||
|
locks[:User][ email ] = false
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue