4 changed files with 135 additions and 3 deletions
@ -1,9 +1,33 @@ |
|||||||
module Csv |
module Csv |
||||||
class MissingAddressesCsvService |
class MissingAddressesCsvService |
||||||
def initialize(organisation); end |
def initialize(organisation) |
||||||
|
@organisation = organisation |
||||||
|
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"] |
||||||
|
|
||||||
|
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? |
||||||
|
|
||||||
def create_missing_lettings_addresses_csv; end |
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; 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 |
||||||
end |
end |
||||||
|
|||||||
|
|
@ -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 |
||||||
Loading…
Reference in new issue