diff --git a/app/services/csv/missing_addresses_csv_service.rb b/app/services/csv/missing_addresses_csv_service.rb index c052f1594..e49e7ea94 100644 --- a/app/services/csv/missing_addresses_csv_service.rb +++ b/app/services/csv/missing_addresses_csv_service.rb @@ -1,9 +1,33 @@ module Csv class MissingAddressesCsvService - def initialize(organisation); end + def initialize(organisation) + @organisation = organisation + end - def create_missing_lettings_addresses_csv; end + def create_missing_lettings_addresses_csv + CSV.generate(headers: true) do |csv| + csv << ["Tenancy start date", "Tenant code", "Property code", "Log owner", "Owning organisation name", "Managing organisation name", "Address line 1", "Address line 2", "Town or City", "County", "Postcode", "Local authority"] - def create_missing_sales_addresses_csv; end + logs_with_missing_addresses = @organisation.managed_lettings_logs.imported.filter_by_year(2023).where(needstype: 1, address_line1: nil, town_or_city: nil, uprn_known: [0, nil]) + return if logs_with_missing_addresses.empty? + + logs_with_missing_addresses.each do |log| + csv << [log.startdate&.to_date, log.tenancycode, log.propcode, log.created_by&.email, log.owning_organisation&.name, log.managing_organisation&.name, log.address_line1, log.address_line2, log.town_or_city, log.county, log.postcode_full, log.la] + end + end + end + + def create_missing_sales_addresses_csv + CSV.generate(headers: true) do |csv| + csv << ["Sale completion date", "Purchaser code", "Log owner", "Owning organisation name", "Address line 1", "Address line 2", "Town or City", "County", "Postcode", "Local authority"] + + logs_with_missing_addresses = @organisation.sales_logs.imported.filter_by_year(2023).where(address_line1: nil, town_or_city: nil, uprn_known: [0, nil]) + return if logs_with_missing_addresses.empty? + + logs_with_missing_addresses.each do |log| + csv << [log.saledate&.to_date, log.purchid, log.created_by&.email, log.owning_organisation&.name, log.address_line1, log.address_line2, log.town_or_city, log.county, log.postcode_full, log.la] + end + end + end end end diff --git a/spec/fixtures/files/missing_lettings_logs_addresses.csv b/spec/fixtures/files/missing_lettings_logs_addresses.csv new file mode 100644 index 000000000..240813911 --- /dev/null +++ b/spec/fixtures/files/missing_lettings_logs_addresses.csv @@ -0,0 +1,2 @@ +Tenancy start date,Tenant code,Property code,Log owner,Owning organisation name,Managing organisation name,Address line 1,Address line 2,Town or City,County,Postcode,Local authority +2023-04-05,tenancycode,propcode,testy@example.com,Address test,Address test,,,,,, \ No newline at end of file diff --git a/spec/fixtures/files/missing_sales_logs_addresses.csv b/spec/fixtures/files/missing_sales_logs_addresses.csv new file mode 100644 index 000000000..21fed20b3 --- /dev/null +++ b/spec/fixtures/files/missing_sales_logs_addresses.csv @@ -0,0 +1,2 @@ +Sale completion date,Purchaser code,Log owner,Owning organisation name,Address line 1,Address line 2,Town or City,County,Postcode,Local authority +2023-04-05,purchaser code,testy@example.com,Address test,,,,,, \ No newline at end of file diff --git a/spec/services/csv/missing_addresses_csv_service_spec.rb b/spec/services/csv/missing_addresses_csv_service_spec.rb new file mode 100644 index 000000000..10bae9d01 --- /dev/null +++ b/spec/services/csv/missing_addresses_csv_service_spec.rb @@ -0,0 +1,104 @@ +require "rails_helper" + +RSpec.describe Csv::MissingAddressesCsvService do + let(:organisation) { create(:organisation, name: "Address test") } + let(:user) { create(:user, organisation:, email: "testy@example.com") } + let(:service) { described_class.new(organisation) } + + describe "#create_missing_lettings_addresses_csv" do + let!(:lettings_log) do + create(:lettings_log, + tenancycode: "tenancycode", + propcode: "propcode", + startdate: Time.zone.local(2023, 4, 5), + created_by: user, + owning_organisation: organisation, + managing_organisation: organisation, + address_line1: nil, + town_or_city: nil, + old_id: "old_id", + needstype: 1, + uprn_known: 0) + end + + context "when the organisation has logs with missing addresses" do + it "returns a csv with relevant logs" do + expected_content = CSV.read("spec/fixtures/files/missing_lettings_logs_addresses.csv") + csv = CSV.parse(service.create_missing_lettings_addresses_csv) + expect(csv).to eq(expected_content) + end + end + + context "when the organisation only has supported housing logs with missing addresses" do + before do + lettings_log.update!(needstype: 2) + end + + it "returns nil" do + expect(service.create_missing_lettings_addresses_csv).to be_nil + end + end + + context "when the organisation only has logs with missing addresses from 2022" do + before do + lettings_log.update!(startdate: Time.zone.local(2022, 4, 5)) + end + + it "returns nil" do + expect(service.create_missing_lettings_addresses_csv).to be_nil + end + end + + context "when the organisation has any address fields filled in" do + before do + lettings_log.update!(address_line1: "address_line1") + end + + it "returns nil" do + expect(service.create_missing_lettings_addresses_csv).to be_nil + end + end + end + + describe "#create_missing_sales_addresses_csv" do + let!(:sales_log) do + create(:sales_log, + purchid: "purchaser code", + saledate: Time.zone.local(2023, 4, 5), + created_by: user, + owning_organisation: organisation, + address_line1: nil, + town_or_city: nil, + old_id: "old_id", + uprn_known: 0) + end + + context "when the organisation has logs with missing addresses" do + it "returns a csv with relevant logs" do + expected_content = CSV.read("spec/fixtures/files/missing_sales_logs_addresses.csv") + csv = CSV.parse(service.create_missing_sales_addresses_csv) + expect(csv).to eq(expected_content) + end + end + + context "when the organisation only has logs with missing addresses from 2022" do + before do + sales_log.update!(saledate: Time.zone.local(2022, 4, 5)) + end + + it "returns nil" do + expect(service.create_missing_sales_addresses_csv).to be_nil + end + end + + context "when the organisation has any address fields filled in" do + before do + sales_log.update!(town_or_city: "town") + end + + it "returns nil" do + expect(service.create_missing_sales_addresses_csv).to be_nil + end + end + end +end