# frozen_string_literal: true # Provides methods for SupportingDocumentFile class SupportingDocumentFileService def self.list(operator, filters = {}) files = [] if filters[:supportable_id].present? && can_list?(operator, filters[:supportable_id], filters[:supportable_type]) files = SupportingDocumentFile.where(supportable_id: filters[:supportable_id], supportable_type: filters[:supportable_type]) end files end def self.can_list?(operator, supportable_id, supportable_type) operator.privileged? || (supportable_type == 'User' && supportable_id.to_i == operator.id) || (supportable_type == 'Child' && operator.children.exists?(id: supportable_id.to_i)) end def self.create(supporting_document_file) saved = supporting_document_file.save if saved all_files_are_upload = true if supporting_document_file.supportable_type == 'User' user = supporting_document_file.supportable user.group.supporting_document_types.each do |type| file = type.supporting_document_files.find_by(supportable_id: supporting_document_file.supportable_id, supportable_type: supporting_document_file.supportable_type) all_files_are_upload = false unless file end end if all_files_are_upload && (supporting_document_file.supportable_type == 'User') NotificationCenter.call type: 'notify_admin_user_supporting_document_files_created', receiver: User.admins_and_managers, attached_object: user end end saved end def self.update(supporting_document_file, params) updated = supporting_document_file.update(params) if updated all_files_are_upload = true if supporting_document_file.supportable_type == 'User' user = supporting_document_file.supportable user.group.supporting_document_types.each do |type| file = type.supporting_document_files.find_by(supportable_id: supporting_document_file.supportable_id, supportable_type: supporting_document_file.supportable_type) all_files_are_upload = false unless file end end if all_files_are_upload && (supporting_document_file.supportable_type == 'User') NotificationCenter.call type: 'notify_admin_user_supporting_document_files_updated', receiver: User.admins_and_managers, attached_object: supporting_document_file end end updated end end