trabajo-afectivo/lib/import/otrs/customer_user.rb
2022-01-01 14:38:12 +01:00

106 lines
2.7 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
module Import
module OTRS
class CustomerUser
include Import::Helper
include Import::OTRS::Helper
MAPPING = {
ChangeTime: :updated_at,
CreateTime: :created_at,
CreateBy: :created_by_id,
ChangeBy: :updated_by_id,
UserComment: :note,
UserEmail: :email,
UserFirstname: :firstname,
UserLastname: :lastname,
UserLogin: :login,
UserPassword: :password,
UserPhone: :phone,
UserFax: :fax,
UserMobile: :mobile,
UserStreet: :street,
UserZip: :zip,
UserCity: :city,
UserCountry: :country,
}.freeze
def initialize(customer)
import(customer)
end
private
def import(customer)
create_or_update(map(customer))
end
def create_or_update(customer)
return if updated?(customer)
create(customer)
end
def updated?(customer)
@local_customer = ::User.find_by(login: customer[:login])
return false if !@local_customer
# do not update user if it is already agent
return true if @local_customer.role_ids.include?(Role.find_by(name: 'Agent').id)
# only update roles if different (reduce sql statements)
if @local_customer.role_ids == customer[:role_ids]
customer.delete(:role_ids)
end
log "update User.find_by(login: #{customer[:login]})"
@local_customer.update!(customer)
true
end
def create(customer)
log "add User.find_by(login: #{customer[:login]})"
@local_customer = ::User.new(customer)
@local_customer.save
reset_primary_key_sequence('users')
end
def map(customer)
mapped = map_default(customer)
mapped[:created_at] ||= DateTime.current
mapped[:updated_at] ||= DateTime.current
mapped[:email].downcase!
mapped[:login].downcase!
mapped
end
def map_default(customer)
{
created_by_id: 1,
updated_by_id: 1,
active: active?(customer),
source: 'OTRS Import',
organization_id: organization_id(customer),
role_ids: role_ids,
}
.merge(from_mapping(customer))
end
def role_ids
[
Role.find_by(name: 'Customer').id
]
end
def organization_id(customer)
return if !customer['UserCustomerID']
organization = Import::OTRS::Customer.by_customer_id(customer['UserCustomerID'])
return if !organization
organization.id
end
end
end
end