4 changed files with 135 additions and 3 deletions
@ -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 |
||||
|
||||
|
|
@ -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