trabajo-afectivo/app/models/data_privacy_task.rb

87 lines
2.2 KiB
Ruby
Raw Normal View History

2022-01-01 13:38:12 +00:00
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
class DataPrivacyTask < ApplicationModel
include DataPrivacyTask::HasActivityStreamLog
include ChecksClientNotification
store :preferences
belongs_to :created_by, class_name: 'User'
belongs_to :updated_by, class_name: 'User'
# optional because related data will get deleted and it would
# cause validation errors if e.g. the created_by_id of the task
# would need to get mapped by a deletion
belongs_to :deletable, polymorphic: true, optional: true
before_create :prepare_deletion_preview
validates_with DataPrivacyTask::Validation
def perform
perform_deletable
update!(state: 'completed')
rescue => e
handle_exception(e)
end
def perform_deletable
return if deletable.blank?
prepare_deletion_preview
save!
if delete_organization?
deletable.organization.destroy(associations: true)
else
deletable.destroy
end
end
def handle_exception(e)
Rails.logger.error e
preferences[:error] = "ERROR: #{e.inspect}"
self.state = 'failed'
save!
end
def delete_organization?
return false if preferences[:delete_organization].blank?
return false if preferences[:delete_organization] != 'true'
return false if !deletable.organization
return false if deletable.organization.members.count != 1
true
end
def prepare_deletion_preview
prepare_deletion_preview_tickets
prepare_deletion_preview_user
prepare_deletion_preview_organization
prepare_deletion_preview_anonymize
end
def prepare_deletion_preview_tickets
preferences[:owner_tickets] = deletable.owner_tickets.order(id: 'DESC').map(&:number)
preferences[:customer_tickets] = deletable.customer_tickets.order(id: 'DESC').map(&:number)
end
def prepare_deletion_preview_user
preferences[:user] = {
firstname: deletable.firstname,
lastname: deletable.lastname,
email: deletable.email,
}
end
def prepare_deletion_preview_organization
return if !deletable.organization
preferences[:user][:organization] = deletable.organization.name
end
def prepare_deletion_preview_anonymize
preferences[:user] = Pseudonymisation.of_hash(preferences[:user])
end
end