From 01fce06e11b9de0dc95388158f320ebebc13d31f Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 1 Sep 2023 12:13:52 +0200 Subject: [PATCH] Add generate_unassigned_logs_report --- app/services/imports/import_report_service.rb | 31 +++++++++++++++++++ .../imports/import_report_service_spec.rb | 31 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/app/services/imports/import_report_service.rb b/app/services/imports/import_report_service.rb index 61d43a9eb..4e387c4c4 100644 --- a/app/services/imports/import_report_service.rb +++ b/app/services/imports/import_report_service.rb @@ -11,6 +11,7 @@ module Imports def create_reports(report_suffix) generate_missing_data_coordinators_report(report_suffix) generate_logs_report(report_suffix) + generate_unassigned_logs_report(report_suffix) end def generate_missing_data_coordinators_report(report_suffix) @@ -53,5 +54,35 @@ module Imports @logger.info("Logs report available in s3 import bucket at #{report_name}") end + + def generate_unassigned_logs_report(report_suffix) + Rails.logger.info("Generating unassigned logs report") + + rep = CSV.generate do |report| + headers = ["Owning Organisation ID", "Old Owning Organisation ID", "Managing Organisation ID", "Old Managing Organisation ID", "Log ID", "Old Log ID", "Tenancy code", "Purchaser code"] + report << headers + + @institutions_csv.each do |row| + name = row[0] + organisation = Organisation.find_by(name:) + next unless organisation + + unassigned_user = organisation.users.find_by(name: "Unassigned") + next unless unassigned_user + + organisation.owned_lettings_logs.where(created_by: unassigned_user).each do |lettings_log| + report << [organisation.id, organisation.old_org_id, lettings_log.managing_organisation.id, lettings_log.managing_organisation.old_org_id, lettings_log.id, lettings_log.old_id, lettings_log.tenancycode, nil] + end + organisation.owned_sales_logs.where(created_by: unassigned_user).each do |sales_log| + report << [organisation.id, organisation.old_org_id, nil, nil, sales_log.id, sales_log.old_id, nil, sales_log.purchid] + end + end + end + + report_name = "UnassignedLogsReport_#{report_suffix}" + @storage_service.write_file(report_name, BYTE_ORDER_MARK + rep) + + @logger.info("Unassigned logs report available in s3 import bucket at #{report_name}") + end end end diff --git a/spec/services/imports/import_report_service_spec.rb b/spec/services/imports/import_report_service_spec.rb index 1d241754d..abd318a8d 100644 --- a/spec/services/imports/import_report_service_spec.rb +++ b/spec/services/imports/import_report_service_spec.rb @@ -67,4 +67,35 @@ RSpec.describe Imports::ImportReportService do report_service.generate_logs_report("report_suffix.csv") end end + + describe "#generate_unassigned_logs_report" do + context "when there is no unassigned user (all the logs have ben assigned)" do + let(:institutions_csv) { CSV.parse("Institution name,Id,Old Completed lettings logs,Old In progress lettings logs,Old Completed sales logs,Old In progress sales logs\norg1,1,2,1,4,3", headers: true) } + + it "writes an empty unassigned logs report" do + expect(storage_service).to receive(:write_file).with("UnassignedLogsReport_report_suffix.csv", "\uFEFFOwning Organisation ID,Old Owning Organisation ID,Managing Organisation ID,Old Managing Organisation ID,Log ID,Old Log ID,Tenancy code,Purchaser code\n") + + report_service.generate_unassigned_logs_report("report_suffix.csv") + end + end + + context "when some logs have been added to Unassigned user" do + let(:organisation) { create(:organisation, old_org_id: "1", name: "org1") } + let(:organisation2) { create(:organisation, old_org_id: "2", name: "org2") } + let(:unassigned_user) { create(:user, name: "Unassigned", organisation:) } + let(:institutions_csv) { CSV.parse("Institution name,Id,Old Completed lettings logs,Old In progress lettings logs,Old Completed sales logs,Old In progress sales logs\norg1,1,2,1,4,3", headers: true) } + let!(:lettings_log) { create(:lettings_log, owning_organisation: organisation, managing_organisation: organisation2, created_by: unassigned_user, tenancycode: "tenancycode", old_id: "12") } + let!(:sales_log) { create(:sales_log, owning_organisation: organisation, created_by: unassigned_user, purchid: "purchid", old_id: "23") } + + before do + create(:organisation_relationship, parent_organisation: organisation, child_organisation: organisation2) + end + + it "writes a report with all unassigned logs" do + expect(storage_service).to receive(:write_file).with("UnassignedLogsReport_report_suffix.csv", "\uFEFFOwning Organisation ID,Old Owning Organisation ID,Managing Organisation ID,Old Managing Organisation ID,Log ID,Old Log ID,Tenancy code,Purchaser code\n#{organisation.id},1,#{organisation2.id},2,#{lettings_log.id},12,tenancycode,\n#{organisation.id},1,,,#{sales_log.id},23,,purchid\n") + + report_service.generate_unassigned_logs_report("report_suffix.csv") + end + end + end end