You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.8 KiB
61 lines
2.8 KiB
namespace :correct_illness do |
|
desc "Export data CSVs for import into Central Data System (CDS)" |
|
task :create_illness_csv, %i[organisation_id] => :environment do |_task, args| |
|
organisation_id = args[:organisation_id] |
|
raise "Usage: rake correct_illness:create_illness_csv['organisation_id']" if organisation_id.blank? |
|
|
|
organisation = Organisation.find_by(id: organisation_id) |
|
if organisation.present? |
|
CreateIllnessCsvJob.perform_later(organisation) |
|
Rails.logger.info("Creating illness CSV for #{organisation.name}") |
|
else |
|
Rails.logger.error("Organisation with ID #{organisation_id} not found") |
|
end |
|
end |
|
|
|
desc "Export data CSVs for import into Central Data System (CDS)" |
|
task :correct_illness_from_csv, %i[file_name] => :environment do |_task, args| |
|
file_name = args[:file_name] |
|
|
|
raise "Usage: rake correct_illness:correct_illness_from_csv['csv_file_name']" if file_name.blank? |
|
|
|
s3_service = Storage::S3Service.new(PlatformHelper.is_paas? ? Configuration::PaasConfigurationService.new : Configuration::EnvConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"]) |
|
illness_csv = CSV.parse(s3_service.get_file_io(file_name), headers: false) |
|
|
|
illness_csv.each_with_index do |row, index| |
|
next if index < 3 |
|
|
|
lettings_log_id = row[1] |
|
|
|
if lettings_log_id.blank? |
|
Rails.logger.info("Lettings log ID not provided") |
|
next |
|
end |
|
|
|
lettings_log = LettingsLog.find_by(id: lettings_log_id) |
|
if lettings_log.blank? |
|
Rails.logger.info("Could not find a lettings log with id #{lettings_log_id}") |
|
next |
|
end |
|
|
|
lettings_log.illness = row[8] |
|
lettings_log.illness_type_1 = row[9].presence || 0 |
|
lettings_log.illness_type_2 = row[10].presence || 0 |
|
lettings_log.illness_type_3 = row[11].presence || 0 |
|
lettings_log.illness_type_4 = row[12].presence || 0 |
|
lettings_log.illness_type_5 = row[13].presence || 0 |
|
lettings_log.illness_type_6 = row[14].presence || 0 |
|
lettings_log.illness_type_7 = row[15].presence || 0 |
|
lettings_log.illness_type_8 = row[16].presence || 0 |
|
lettings_log.illness_type_9 = row[17].presence || 0 |
|
lettings_log.illness_type_10 = row[18].presence || 0 |
|
lettings_log.values_updated_at = Time.zone.now |
|
|
|
if lettings_log.save |
|
Rails.logger.info("Updated lettings log #{lettings_log_id}, with illness: #{([lettings_log.illness] + %w[illness_type_1 illness_type_2 illness_type_3 illness_type_4 illness_type_5 illness_type_6 illness_type_7 illness_type_8 illness_type_9 illness_type_10].select { |illness_type| lettings_log[illness_type] == 1 }).join(', ')}") |
|
else |
|
Rails.logger.error("Validation failed for lettings log with ID #{lettings_log.id}: #{lettings_log.errors.full_messages.join(', ')}}") |
|
end |
|
end |
|
end |
|
end
|
|
|