diff --git a/app/services/imports/user_import_service.rb b/app/services/imports/user_import_service.rb index 46fd84c53..bbeaa1b58 100644 --- a/app/services/imports/user_import_service.rb +++ b/app/services/imports/user_import_service.rb @@ -28,17 +28,19 @@ module Imports user.legacy_users.create!(old_user_id:) #@logger.info("Found duplicated email, updating user #{user.id} with role #{role} and is_dpo #{is_dpo}") else - user = User.create!( - email:, - name:, - password: Devise.friendly_token, - phone: user_field_value(xml_document, "telephone-no"), - organisation:, - role: role(user_field_value(xml_document, "user-type")), - is_dpo: is_dpo?(user_field_value(xml_document, "user-type")), - is_key_contact: is_key_contact?(user_field_value(xml_document, "contact-priority-id")), - active: user_field_value(xml_document, "active"), - ) + user = User.new + user.email = email + user.name = name + user.password = Devise.friendly_token + user.phone = user_field_value(xml_document, "telephone-no") + user.organisation = organisation + user.role = role(user_field_value(xml_document, "user-type")) + user.is_dpo = is_dpo?(user_field_value(xml_document, "user-type")) + user.is_key_contact = is_key_contact?(user_field_value(xml_document, "contact-priority-id")) + user.active = user_field_value(xml_document, "active") + + user.skip_confirmation_notification! + user.save! user.legacy_users.create!(old_user_id:) user end diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake new file mode 100644 index 000000000..6f5866b2c --- /dev/null +++ b/lib/tasks/import.rake @@ -0,0 +1,69 @@ +Import = Struct.new("Import", :import_class, :import_method, :folder) + +namespace :import do + desc "Import orgs, schemes, users, data protection confirmations, and rent periods" + task :org_data, %i[org_csv] => :environment do |_task, args| + org_csv_str = args[:org_csv] + raise "todo" if org_csv_str.blank? + + s3_service = Storage::S3Service.new(Configuration::PaasConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"]) + csv = CSV.parse(org_csv_str) + + import_list = [ + Import.new(Imports::OrganisationImportService, :create_organisations, "institution"), + Import.new(Imports::SchemeImportService, :create_schemes, "mgmtgroups"), + Import.new(Imports::SchemeLocationImportService, :create_scheme_locations, "schemes"), + Import.new(Imports::UserImportService, :create_users, "user"), + Import.new(Imports::DataProtectionConfirmationImportService, :create_data_protection_confirmations, "dataprotect"), + Import.new(Imports::OrganisationRentPeriodImportService, :create_organisation_rent_periods, "rent-period"), + ] + + csv.each { |row| + archive_path = row[1] + archive_io = s3_service.get_file_io(archive_path) + archive_service = Storage::ArchiveService.new(archive_io) + + import_list.each do |step| + if archive_service.folder_present?(step.folder) + Rails.logger.info("Importing folder #{step.folder} for organisation #{row[0]}") + step.import_class.new(archive_service).send(step.import_method, step.folder) + else + Rails.logger.info("#{step.folder} does not exist for organisation #{row[0]}, skipping #{step.import_class}") + end + end + } + + Rails.logger.info("Import complete") + end + + desc "Import logs" + task :logs, %i[org_csv] => :environment do |_task, args| + org_csv_str = args[:org_csv] + raise "todo" if org_csv_str.blank? + + s3_service = Storage::S3Service.new(Configuration::PaasConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"]) + csv = CSV.parse(org_csv_str) + + import_list = [ + Import.new(Imports::LettingsLogsImportService, :create_logs, "logs"), + Import.new(Imports::SalesLogsImportService, :create_logs, "logs"), + ] + + csv.each { |row| + archive_path = row[1] + archive_io = s3_service.get_file_io(archive_path) + archive_service = Storage::ArchiveService.new(archive_io) + + import_list.each do |step| + if archive_service.folder_present?(step.folder) + Rails.logger.info("Importing folder #{step.folder} using #{step.import_class} for organisation #{row[0]}") + step.import_class.new(archive_service).send(step.import_method, step.folder) + else + Rails.logger.info("#{step.folder} does not exist for organisation #{row[0]}, skipping #{step.import_class}") + end + end + } + + Rails.logger.info("Import complete") + end +end