From 6b1aeb4c7fd32ba809a7da5d2188670ba150bfb3 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Thu, 1 Feb 2024 10:17:48 +0000 Subject: [PATCH] CLDC-2442 Add archived forms (#2149) * Add archived forms to the form handler * Remove archived form if the year after it is no longer editable * Filter logs list by existing forms only * Add archived_lettings if it's not defined in json * Rebase changes * Fix unrelated test --- app/controllers/lettings_logs_controller.rb | 2 +- app/controllers/organisations_controller.rb | 4 +- app/controllers/sales_logs_controller.rb | 2 +- app/models/form_handler.rb | 30 +- app/models/lettings_log.rb | 7 + app/models/sales_log.rb | 7 + app/services/csv/lettings_log_csv_service.rb | 2 +- .../files/lettings_log_csv_export_codes.csv | 4 +- .../files/lettings_log_csv_export_labels.csv | 4 +- ...tings_log_csv_export_non_support_codes.csv | 2 +- ...ings_log_csv_export_non_support_labels.csv | 2 +- .../files/sales_logs_csv_export_codes.csv | 4 +- .../files/sales_logs_csv_export_labels.csv | 4 +- spec/models/form_handler_spec.rb | 84 +++- spec/models/lettings_log_spec.rb | 28 ++ spec/models/sales_log_spec.rb | 27 ++ .../csv/lettings_log_csv_service_spec.rb | 363 +++++++++--------- .../csv/sales_log_csv_service_spec.rb | 2 +- .../merge/merge_organisations_service_spec.rb | 2 +- 19 files changed, 361 insertions(+), 219 deletions(-) diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index dffdec69f..a546488b0 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -13,7 +13,7 @@ class LettingsLogsController < LogsController before_action :redirect_if_bulk_upload_resolved, only: [:index] def index - all_logs = current_user.lettings_logs.visible + all_logs = current_user.lettings_logs.visible.filter_by_years_or_nil(FormHandler.instance.years_of_available_lettings_forms) unpaginated_filtered_logs = filter_manager.filtered_logs(all_logs, search_term, session_filters) @delete_logs_path = delete_logs_lettings_logs_path(search: search_term) diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb index 3bf4cf5a9..0952d12ac 100644 --- a/app/controllers/organisations_controller.rb +++ b/app/controllers/organisations_controller.rb @@ -106,7 +106,7 @@ class OrganisationsController < ApplicationController end def lettings_logs - organisation_logs = LettingsLog.visible.filter_by_organisation(@organisation) + organisation_logs = LettingsLog.visible.filter_by_organisation(@organisation).filter_by_years_or_nil(FormHandler.instance.years_of_available_lettings_forms) unpaginated_filtered_logs = filter_manager.filtered_logs(organisation_logs, search_term, session_filters) @search_term = search_term @@ -134,7 +134,7 @@ class OrganisationsController < ApplicationController end def sales_logs - organisation_logs = SalesLog.visible.filter_by_organisation(@organisation) + organisation_logs = SalesLog.visible.filter_by_organisation(@organisation).filter_by_years_or_nil(FormHandler.instance.years_of_available_sales_forms) unpaginated_filtered_logs = filter_manager.filtered_logs(organisation_logs, search_term, session_filters) respond_to do |format| diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index d97ed8b2a..25cf405a7 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -15,7 +15,7 @@ class SalesLogsController < LogsController end def index - all_logs = current_user.sales_logs.visible + all_logs = current_user.sales_logs.visible.filter_by_years_or_nil(FormHandler.instance.years_of_available_sales_forms) unpaginated_filtered_logs = filter_manager.filtered_logs(all_logs, search_term, session_filters) @delete_logs_path = delete_logs_sales_logs_path(search: search_term) diff --git a/app/models/form_handler.rb b/app/models/form_handler.rb index d9a3d4a35..267fa2968 100644 --- a/app/models/form_handler.rb +++ b/app/models/form_handler.rb @@ -41,7 +41,12 @@ class FormHandler "current_sales" => Form.new(nil, current_collection_start_year, SALES_SECTIONS, "sales"), "previous_sales" => Form.new(nil, previous_collection_start_year, SALES_SECTIONS, "sales"), "next_sales" => Form.new(nil, next_collection_start_year, SALES_SECTIONS, "sales"), + "archived_sales" => Form.new(nil, previous_collection_start_year - 1, SALES_SECTIONS, "sales"), } + if @sales_forms.count { |_name, form| Time.zone.now.between?(form.start_date, form.edit_end_date) } == 1 + @sales_forms.delete("archived_sales") + end + @sales_forms end def ordered_sales_questions_for_all_years @@ -96,9 +101,16 @@ class FormHandler if forms["previous_lettings"].blank? && current_collection_start_year >= 2022 forms["previous_lettings"] = Form.new(nil, previous_collection_start_year, LETTINGS_SECTIONS, "lettings") end + if forms["archived_lettings"].blank? && current_collection_start_year >= 2025 + forms["archived_lettings"] = Form.new(nil, previous_collection_start_year - 1, LETTINGS_SECTIONS, "lettings") + end forms["current_lettings"] = Form.new(nil, current_collection_start_year, LETTINGS_SECTIONS, "lettings") if forms["current_lettings"].blank? forms["next_lettings"] = Form.new(nil, next_collection_start_year, LETTINGS_SECTIONS, "lettings") if forms["next_lettings"].blank? + if forms.count { |_name, form| Time.zone.now.between?(form.start_date, form.edit_end_date) } == 1 + forms.delete("archived_lettings") + end + if Rails.env.test? forms.merge({ fake_lettings_2021: Form.new("spec/fixtures/forms/2021_2022.json"), real_lettings_2021: Form.new("config/forms/2021_2022.json") }) else @@ -115,7 +127,7 @@ class FormHandler end def form_name_from_start_year(year, type) - form_mappings = { 0 => "current_#{type}", 1 => "previous_#{type}", -1 => "next_#{type}" } + form_mappings = { 0 => "current_#{type}", 1 => "previous_#{type}", -1 => "next_#{type}", 2 => "archived_#{type}" } form_mappings[current_collection_start_year - year] end @@ -198,6 +210,22 @@ class FormHandler end end + def years_of_available_lettings_forms + years = [] + lettings_forms.each_value do |form| + years << form.start_date.year + end + years + end + + def years_of_available_sales_forms + years = [] + sales_forms.each_value do |form| + years << form.start_date.year + end + years + end + private def get_all_forms diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 8ebf8092f..9b128dd25 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -40,6 +40,13 @@ class LettingsLog < Log belongs_to :managing_organisation, class_name: "Organisation", optional: true scope :filter_by_year, ->(year) { where(startdate: Time.zone.local(year.to_i, 4, 1)...Time.zone.local(year.to_i + 1, 4, 1)) } + scope :filter_by_years_or_nil, lambda { |years, _user = nil| + first_year = years.shift + query = filter_by_year(first_year) + years.each { |year| query = query.or(filter_by_year(year)) } + query = query.or(where(startdate: nil)) + query.all + } scope :filter_by_tenant_code, ->(tenant_code) { where("tenancycode ILIKE ?", "%#{tenant_code}%") } scope :filter_by_propcode, ->(propcode) { where("propcode ILIKE ?", "%#{propcode}%") } scope :filter_by_location_postcode, ->(postcode_full) { left_joins(:location).where("REPLACE(locations.postcode, ' ', '') ILIKE ?", "%#{postcode_full.delete(' ')}%") } diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index ed5b2424c..f6086a918 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -36,6 +36,13 @@ class SalesLog < Log belongs_to :managing_organisation, class_name: "Organisation", optional: true scope :filter_by_year, ->(year) { where(saledate: Time.zone.local(year.to_i, 4, 1)...Time.zone.local(year.to_i + 1, 4, 1)) } + scope :filter_by_years_or_nil, lambda { |years, _user = nil| + first_year = years.shift + query = filter_by_year(first_year) + years.each { |year| query = query.or(filter_by_year(year)) } + query = query.or(where(saledate: nil)) + query.all + } scope :filter_by_purchaser_code, ->(purchid) { where("purchid ILIKE ?", "%#{purchid}%") } scope :search_by, lambda { |param| filter_by_purchaser_code(param) diff --git a/app/services/csv/lettings_log_csv_service.rb b/app/services/csv/lettings_log_csv_service.rb index 882969169..989144b15 100644 --- a/app/services/csv/lettings_log_csv_service.rb +++ b/app/services/csv/lettings_log_csv_service.rb @@ -252,7 +252,7 @@ module Csv "incref" => INCREF_LABELS, }.freeze - CONVENTIONAL_YES_NO_ATTRIBUTES = %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 refused cbl cap chr letting_allocation_none housingneeds_a housingneeds_b housingneeds_c housingneeds_d housingneeds_e housingneeds_f housingneeds_g housingneeds_h has_benefits nocharge].freeze + CONVENTIONAL_YES_NO_ATTRIBUTES = %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 refused cbl cap chr letting_allocation_none housingneeds_a housingneeds_b housingneeds_c housingneeds_d housingneeds_e housingneeds_f housingneeds_g housingneeds_h has_benefits nocharge postcode_known].freeze YES_OR_BLANK_ATTRIBUTES = %w[declaration rp_homeless rp_insan_unsat rp_medwel rp_hardship rp_dontknow].freeze diff --git a/spec/fixtures/files/lettings_log_csv_export_codes.csv b/spec/fixtures/files/lettings_log_csv_export_codes.csv index cdd43809f..b76d4075f 100644 --- a/spec/fixtures/files/lettings_log_csv_export_codes.csv +++ b/spec/fixtures/files/lettings_log_csv_export_codes.csv @@ -1,2 +1,2 @@ -id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,old_id,old_form_id,collection_start_year,owning_organisation_name,managing_organisation_name,needstype,lettype,renewal,startdate,renttype,rent_type_detail,irproduct,irproduct_other,lar,tenancycode,propcode,uprn_known,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,postcode_full,is_la_inferred,la_label,la,first_time_property_let_as_social_housing,unitletas,rsnvac,newprop,offered,unittype_gn,builtype,wchair,beds,voiddate,vacdays,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,hhmemb,pregnancy_value_check,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2,sex2,ecstat2,details_known_3,relat3,age3,sex3,ecstat3,details_known_4,relat4,age4,sex4,ecstat4,details_known_5,relat5,age5,sex5,ecstat5,details_known_6,relat6,age6,sex6,ecstat6,details_known_7,relat7,age7,sex7,ecstat7,details_known_8,relat8,age8,sex8,ecstat8,armedforces,leftreg,reservist,preg_occ,housingneeds,housingneeds_type,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,housingneeds_other,illness,illness_type_4,illness_type_5,illness_type_2,illness_type_6,illness_type_7,illness_type_3,illness_type_9,illness_type_8,illness_type_1,illness_type_10,layear,waityear,reason,reasonother,prevten,new_old,homeless,ppcodenk,ppostcode_full,previous_la_known,is_previous_la_inferred,prevloc_label,prevloc,reasonpref,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,cbl,cap,chr,letting_allocation_none,referral,referral_value_check,net_income_known,incref,earnings,incfreq,net_income_value_check,hb,has_benefits,benefits,household_charge,nocharge,period,is_carehome,chcharge,wchchrg,carehome_charges_value_check,brent,wrent,rent_value_check,scharge,wscharge,pscharge,wpschrge,supcharg,wsupchrg,tcharge,wtcharge,scharge_value_check,pscharge_value_check,supcharg_value_check,hbrentshortfall,tshortfall_known,tshortfall,wtshortfall,scheme_code,scheme_service_name,scheme_sensitive,SCHTYPE,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_local_authority,location_startdate -,completed,s.port@jeemayle.com,false,2023-06-26T00:00:00+01:00,,2023-06-26T00:00:00+01:00,1,,,2023,DLUHC,DLUHC,1,7,0,2023-06-26,2,1,1,,2,HIJKLMN,ABCDEFG,0,,,fake address,,London,,NW9 5LL,false,Barnet,E09000003,0,2,6,2,2,7,1,1,3,2023-06-24,,,1,2023-06-25,,3,1,4,,2,,1,4,,1,4,0,0,2,35,,F,0,2,13,0,0,P,32,M,6,1,R,-9,R,10,0,R,-9,R,10,,,,,,,,,,,,,,,,,,,,,1,4,1,2,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,2,7,4,,6,2,1,0,TN23 6LZ,1,false,Ashford,E07000105,1,0,1,0,0,0,0,0,1,,2,,0,0,268,1,,6,1,1,,0,2,,,,,200.0,100.0,,50.0,25.0,40.0,20.0,35.0,17.5,325.0,162.5,,,,1,0,12.0,6.0,,,,,,,,,,,,,,,,,,,, +id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,old_id,old_form_id,collection_start_year,owning_organisation_name,managing_organisation_name,needstype,lettype,renewal,startdate,renttype,rent_type_detail,irproduct,irproduct_other,lar,tenancycode,propcode,postcode_known,uprn_known,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,postcode_full,is_la_inferred,la_label,la,first_time_property_let_as_social_housing,unitletas,rsnvac,newprop,offered,unittype_gn,builtype,wchair,beds,voiddate,vacdays,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,hhmemb,pregnancy_value_check,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2,sex2,ecstat2,details_known_3,relat3,age3,sex3,ecstat3,details_known_4,relat4,age4,sex4,ecstat4,details_known_5,relat5,age5,sex5,ecstat5,details_known_6,relat6,age6,sex6,ecstat6,details_known_7,relat7,age7,sex7,ecstat7,details_known_8,relat8,age8,sex8,ecstat8,armedforces,leftreg,reservist,preg_occ,housingneeds,housingneeds_type,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,housingneeds_other,illness,illness_type_4,illness_type_5,illness_type_2,illness_type_6,illness_type_7,illness_type_3,illness_type_9,illness_type_8,illness_type_1,illness_type_10,layear,waityear,reason,reasonother,prevten,new_old,homeless,ppcodenk,ppostcode_full,previous_la_known,is_previous_la_inferred,prevloc_label,prevloc,reasonpref,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,cbl,cap,chr,letting_allocation_none,referral,referral_value_check,net_income_known,incref,earnings,incfreq,net_income_value_check,hb,has_benefits,benefits,household_charge,nocharge,period,is_carehome,chcharge,wchchrg,carehome_charges_value_check,brent,wrent,rent_value_check,scharge,wscharge,pscharge,wpschrge,supcharg,wsupchrg,tcharge,wtcharge,scharge_value_check,pscharge_value_check,supcharg_value_check,hbrentshortfall,tshortfall_known,tshortfall,wtshortfall,scheme_code,scheme_service_name,scheme_sensitive,SCHTYPE,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_local_authority,location_startdate +,completed,s.port@jeemayle.com,false,2023-11-26T00:00:00+00:00,,2023-11-26T00:00:00+00:00,1,,,2023,DLUHC,DLUHC,1,7,0,2023-11-26,2,1,1,,2,HIJKLMN,ABCDEFG,1,0,,,fake address,,London,,NW9 5LL,false,Barnet,E09000003,0,2,6,2,2,7,1,1,3,2023-11-24,,,1,2023-11-25,,3,1,4,,2,,1,4,,1,4,0,0,2,35,,F,0,2,13,0,0,P,32,M,6,1,R,-9,R,10,0,R,-9,R,10,,,,,,,,,,,,,,,,,,,,,1,4,1,2,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,2,7,4,,6,2,1,0,TN23 6LZ,1,false,Ashford,E07000105,1,0,1,0,0,0,0,0,1,,2,,0,0,268,1,,6,1,1,,0,2,,,,,200.0,100.0,,50.0,25.0,40.0,20.0,35.0,17.5,325.0,162.5,,,,1,0,12.0,6.0,,,,,,,,,,,,,,,,,,,, diff --git a/spec/fixtures/files/lettings_log_csv_export_labels.csv b/spec/fixtures/files/lettings_log_csv_export_labels.csv index 7d76b9a36..cc588be87 100644 --- a/spec/fixtures/files/lettings_log_csv_export_labels.csv +++ b/spec/fixtures/files/lettings_log_csv_export_labels.csv @@ -1,2 +1,2 @@ -id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,old_id,old_form_id,collection_start_year,owning_organisation_name,managing_organisation_name,needstype,lettype,renewal,startdate,renttype,rent_type_detail,irproduct,irproduct_other,lar,tenancycode,propcode,uprn_known,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,postcode_full,is_la_inferred,la_label,la,first_time_property_let_as_social_housing,unitletas,rsnvac,newprop,offered,unittype_gn,builtype,wchair,beds,voiddate,vacdays,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,hhmemb,pregnancy_value_check,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2,sex2,ecstat2,details_known_3,relat3,age3,sex3,ecstat3,details_known_4,relat4,age4,sex4,ecstat4,details_known_5,relat5,age5,sex5,ecstat5,details_known_6,relat6,age6,sex6,ecstat6,details_known_7,relat7,age7,sex7,ecstat7,details_known_8,relat8,age8,sex8,ecstat8,armedforces,leftreg,reservist,preg_occ,housingneeds,housingneeds_type,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,housingneeds_other,illness,illness_type_4,illness_type_5,illness_type_2,illness_type_6,illness_type_7,illness_type_3,illness_type_9,illness_type_8,illness_type_1,illness_type_10,layear,waityear,reason,reasonother,prevten,new_old,homeless,ppcodenk,ppostcode_full,previous_la_known,is_previous_la_inferred,prevloc_label,prevloc,reasonpref,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,cbl,cap,chr,letting_allocation_none,referral,referral_value_check,net_income_known,incref,earnings,incfreq,net_income_value_check,hb,has_benefits,benefits,household_charge,nocharge,period,is_carehome,chcharge,wchchrg,carehome_charges_value_check,brent,wrent,rent_value_check,scharge,wscharge,pscharge,wpschrge,supcharg,wsupchrg,tcharge,wtcharge,scharge_value_check,pscharge_value_check,supcharg_value_check,hbrentshortfall,tshortfall_known,tshortfall,wtshortfall,scheme_code,scheme_service_name,scheme_sensitive,SCHTYPE,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_local_authority,location_startdate -,completed,s.port@jeemayle.com,false,2023-06-26T00:00:00+01:00,,2023-06-26T00:00:00+01:00,single log,,,2023,DLUHC,DLUHC,General needs,Affordable rent general needs local authority,No,2023-06-26,2,Affordable Rent,Rent to Buy,,No,HIJKLMN,ABCDEFG,No,,,fake address,,London,,NW9 5LL,No,Barnet,E09000003,No,Affordable rent basis,Tenant abandoned property,No,2,House,Purpose built,Yes,3,2023-06-24,,,Yes,2023-06-25,,Don’t know,Yes,Assured Shorthold Tenancy (AST) – Fixed term,,2,,Yes,4,,Yes,4,0,0,2,35,,Female,White,Irish,Tenant prefers not to say,Other,Yes,Partner,32,Male,Not seeking work,No,Prefers not to say,Not known,Prefers not to say,Prefers not to say,Yes,Person prefers not to say,Not known,Person prefers not to say,Person prefers not to say,,,,,,,,,,,,,,,,,,,,,Yes – the person is a current or former regular,No – they left up to and including 5 years ago,Yes,No,Yes,Fully wheelchair accessible housing,Yes,No,No,No,No,No,No,Yes,No,No,Yes,No,No,No,No,No,No,No,Less than 1 year,1 year but under 2 years,Loss of tied accommodation,,Other supported housing,2,No,Yes,TN23 6LZ,Yes,No,Ashford,E07000105,Yes,,Yes,,,,No,No,Yes,,Tenant applied directly (no referral or nomination),,Yes,No,268,Weekly,,Universal Credit housing element,Yes,All,,No,Every 2 weeks,,,,,200.0,100.0,,50.0,25.0,40.0,20.0,35.0,17.5,325.0,162.5,,,,Yes,Yes,12.0,6.0,,,,,,,,,,,,,,,,,,,, +id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,old_id,old_form_id,collection_start_year,owning_organisation_name,managing_organisation_name,needstype,lettype,renewal,startdate,renttype,rent_type_detail,irproduct,irproduct_other,lar,tenancycode,propcode,postcode_known,uprn_known,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,postcode_full,is_la_inferred,la_label,la,first_time_property_let_as_social_housing,unitletas,rsnvac,newprop,offered,unittype_gn,builtype,wchair,beds,voiddate,vacdays,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,hhmemb,pregnancy_value_check,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2,sex2,ecstat2,details_known_3,relat3,age3,sex3,ecstat3,details_known_4,relat4,age4,sex4,ecstat4,details_known_5,relat5,age5,sex5,ecstat5,details_known_6,relat6,age6,sex6,ecstat6,details_known_7,relat7,age7,sex7,ecstat7,details_known_8,relat8,age8,sex8,ecstat8,armedforces,leftreg,reservist,preg_occ,housingneeds,housingneeds_type,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,housingneeds_other,illness,illness_type_4,illness_type_5,illness_type_2,illness_type_6,illness_type_7,illness_type_3,illness_type_9,illness_type_8,illness_type_1,illness_type_10,layear,waityear,reason,reasonother,prevten,new_old,homeless,ppcodenk,ppostcode_full,previous_la_known,is_previous_la_inferred,prevloc_label,prevloc,reasonpref,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,cbl,cap,chr,letting_allocation_none,referral,referral_value_check,net_income_known,incref,earnings,incfreq,net_income_value_check,hb,has_benefits,benefits,household_charge,nocharge,period,is_carehome,chcharge,wchchrg,carehome_charges_value_check,brent,wrent,rent_value_check,scharge,wscharge,pscharge,wpschrge,supcharg,wsupchrg,tcharge,wtcharge,scharge_value_check,pscharge_value_check,supcharg_value_check,hbrentshortfall,tshortfall_known,tshortfall,wtshortfall,scheme_code,scheme_service_name,scheme_sensitive,SCHTYPE,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_local_authority,location_startdate +,completed,s.port@jeemayle.com,false,2023-11-26T00:00:00+00:00,,2023-11-26T00:00:00+00:00,single log,,,2023,DLUHC,DLUHC,General needs,Affordable rent general needs local authority,No,2023-11-26,2,Affordable Rent,Rent to Buy,,No,HIJKLMN,ABCDEFG,Yes,No,,,fake address,,London,,NW9 5LL,No,Barnet,E09000003,No,Affordable rent basis,Tenant abandoned property,No,2,House,Purpose built,Yes,3,2023-11-24,,,Yes,2023-11-25,,Don’t know,Yes,Assured Shorthold Tenancy (AST) – Fixed term,,2,,Yes,4,,Yes,4,0,0,2,35,,Female,White,Irish,Tenant prefers not to say,Other,Yes,Partner,32,Male,Not seeking work,No,Prefers not to say,Not known,Prefers not to say,Prefers not to say,Yes,Person prefers not to say,Not known,Person prefers not to say,Person prefers not to say,,,,,,,,,,,,,,,,,,,,,Yes – the person is a current or former regular,No – they left up to and including 5 years ago,Yes,No,Yes,Fully wheelchair accessible housing,Yes,No,No,No,No,No,No,Yes,No,No,Yes,No,No,No,No,No,No,No,Less than 1 year,1 year but under 2 years,Loss of tied accommodation,,Other supported housing,2,No,Yes,TN23 6LZ,Yes,No,Ashford,E07000105,Yes,,Yes,,,,No,No,Yes,,Tenant applied directly (no referral or nomination),,Yes,No,268,Weekly,,Universal Credit housing element,Yes,All,,No,Every 2 weeks,,,,,200.0,100.0,,50.0,25.0,40.0,20.0,35.0,17.5,325.0,162.5,,,,Yes,Yes,12.0,6.0,,,,,,,,,,,,,,,,,,,, diff --git a/spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv b/spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv index 9fedc109d..7efdb09fe 100644 --- a/spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv +++ b/spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv @@ -1,2 +1,2 @@ id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,collection_start_year,owning_organisation_name,managing_organisation_name,needstype,lettype,renewal,startdate,renttype,rent_type_detail,irproduct,irproduct_other,lar,tenancycode,propcode,uprn_known,uprn,address_line1,address_line2,town_or_city,county,postcode_full,la_label,unitletas,rsnvac,newprop,offered,unittype_gn,builtype,wchair,beds,voiddate,vacdays,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,hhmemb,refused,age1,sex1,ethnic_group,ethnic,national,ecstat1,relat2,age2,sex2,ecstat2,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,relat7,age7,sex7,ecstat7,relat8,age8,sex8,ecstat8,armedforces,leftreg,reservist,preg_occ,housingneeds,housingneeds_type,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,housingneeds_other,illness,illness_type_4,illness_type_5,illness_type_2,illness_type_6,illness_type_7,illness_type_3,illness_type_9,illness_type_8,illness_type_1,illness_type_10,layear,waityear,reason,reasonother,prevten,homeless,ppcodenk,ppostcode_full,prevloc_label,reasonpref,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,cbl,cap,chr,letting_allocation_none,referral,referral_value_check,incref,earnings,incfreq,hb,has_benefits,benefits,household_charge,nocharge,period,is_carehome,chcharge,wchchrg,carehome_charges_value_check,brent,scharge,pscharge,supcharg,tcharge,scharge_value_check,pscharge_value_check,supcharg_value_check,hbrentshortfall,tshortfall,scheme_code,scheme_service_name,scheme_sensitive,SCHTYPE,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_local_authority,location_startdate -,completed,choreographer@owtluk.com,false,2023-06-26T00:00:00+01:00,,2023-06-26T00:00:00+01:00,1,2023,DLUHC,DLUHC,1,7,0,2023-06-26,2,1,1,,2,HIJKLMN,ABCDEFG,0,,fake address,,London,,NW9 5LL,Barnet,2,6,2,2,7,1,1,3,2023-06-24,1,,1,2023-06-25,,3,1,4,,2,,1,4,1,35,F,0,2,13,0,P,32,M,6,R,-9,R,10,R,-9,R,10,,,,,,,,,,,,,,,,,1,4,1,2,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,2,7,4,,6,1,0,TN23 6LZ,Ashford,1,0,1,0,0,0,0,0,1,,2,,0,268,1,6,1,1,,0,2,,,,,200.0,50.0,40.0,35.0,325.0,,,,1,12.0,,,,,,,,,,,,,,,,,,,, +,completed,choreographer@owtluk.com,false,2023-11-26T00:00:00+00:00,,2023-11-26T00:00:00+00:00,1,2023,DLUHC,DLUHC,1,7,0,2023-11-26,2,1,1,,2,HIJKLMN,ABCDEFG,0,,fake address,,London,,NW9 5LL,Barnet,2,6,2,2,7,1,1,3,2023-11-24,1,,1,2023-11-25,,3,1,4,,2,,1,4,1,35,F,0,2,13,0,P,32,M,6,R,-9,R,10,R,-9,R,10,,,,,,,,,,,,,,,,,1,4,1,2,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,2,7,4,,6,1,0,TN23 6LZ,Ashford,1,0,1,0,0,0,0,0,1,,2,,0,268,1,6,1,1,,0,2,,,,,200.0,50.0,40.0,35.0,325.0,,,,1,12.0,,,,,,,,,,,,,,,,,,,, diff --git a/spec/fixtures/files/lettings_log_csv_export_non_support_labels.csv b/spec/fixtures/files/lettings_log_csv_export_non_support_labels.csv index 563a231b6..670257f96 100644 --- a/spec/fixtures/files/lettings_log_csv_export_non_support_labels.csv +++ b/spec/fixtures/files/lettings_log_csv_export_non_support_labels.csv @@ -1,2 +1,2 @@ id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,collection_start_year,owning_organisation_name,managing_organisation_name,needstype,lettype,renewal,startdate,renttype,rent_type_detail,irproduct,irproduct_other,lar,tenancycode,propcode,uprn_known,uprn,address_line1,address_line2,town_or_city,county,postcode_full,la_label,unitletas,rsnvac,newprop,offered,unittype_gn,builtype,wchair,beds,voiddate,vacdays,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,hhmemb,refused,age1,sex1,ethnic_group,ethnic,national,ecstat1,relat2,age2,sex2,ecstat2,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,relat7,age7,sex7,ecstat7,relat8,age8,sex8,ecstat8,armedforces,leftreg,reservist,preg_occ,housingneeds,housingneeds_type,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,housingneeds_other,illness,illness_type_4,illness_type_5,illness_type_2,illness_type_6,illness_type_7,illness_type_3,illness_type_9,illness_type_8,illness_type_1,illness_type_10,layear,waityear,reason,reasonother,prevten,homeless,ppcodenk,ppostcode_full,prevloc_label,reasonpref,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,cbl,cap,chr,letting_allocation_none,referral,referral_value_check,incref,earnings,incfreq,hb,has_benefits,benefits,household_charge,nocharge,period,is_carehome,chcharge,wchchrg,carehome_charges_value_check,brent,scharge,pscharge,supcharg,tcharge,scharge_value_check,pscharge_value_check,supcharg_value_check,hbrentshortfall,tshortfall,scheme_code,scheme_service_name,scheme_sensitive,SCHTYPE,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_local_authority,location_startdate -,completed,choreographer@owtluk.com,false,2023-06-26T00:00:00+01:00,,2023-06-26T00:00:00+01:00,single log,2023,DLUHC,DLUHC,General needs,Affordable rent general needs local authority,No,2023-06-26,2,Affordable Rent,Rent to Buy,,No,HIJKLMN,ABCDEFG,No,,fake address,,London,,NW9 5LL,Barnet,Affordable rent basis,Tenant abandoned property,No,2,House,Purpose built,Yes,3,2023-06-24,1,,Yes,2023-06-25,,Don’t know,Yes,Assured Shorthold Tenancy (AST) – Fixed term,,2,,Yes,4,Yes,35,Female,White,Irish,Tenant prefers not to say,Other,Partner,32,Male,Not seeking work,Prefers not to say,Not known,Prefers not to say,Prefers not to say,Person prefers not to say,Not known,Person prefers not to say,Person prefers not to say,,,,,,,,,,,,,,,,,Yes – the person is a current or former regular,No – they left up to and including 5 years ago,Yes,No,Yes,Fully wheelchair accessible housing,Yes,No,No,No,No,No,No,Yes,No,No,Yes,No,No,No,No,No,No,No,Less than 1 year,1 year but under 2 years,Loss of tied accommodation,,Other supported housing,No,Yes,TN23 6LZ,Ashford,Yes,,Yes,,,,No,No,Yes,,Tenant applied directly (no referral or nomination),,No,268,Weekly,Universal Credit housing element,Yes,All,,No,Every 2 weeks,,,,,200.0,50.0,40.0,35.0,325.0,,,,Yes,12.0,,,,,,,,,,,,,,,,,,,, +,completed,choreographer@owtluk.com,false,2023-11-26T00:00:00+00:00,,2023-11-26T00:00:00+00:00,single log,2023,DLUHC,DLUHC,General needs,Affordable rent general needs local authority,No,2023-11-26,2,Affordable Rent,Rent to Buy,,No,HIJKLMN,ABCDEFG,No,,fake address,,London,,NW9 5LL,Barnet,Affordable rent basis,Tenant abandoned property,No,2,House,Purpose built,Yes,3,2023-11-24,1,,Yes,2023-11-25,,Don’t know,Yes,Assured Shorthold Tenancy (AST) – Fixed term,,2,,Yes,4,Yes,35,Female,White,Irish,Tenant prefers not to say,Other,Partner,32,Male,Not seeking work,Prefers not to say,Not known,Prefers not to say,Prefers not to say,Person prefers not to say,Not known,Person prefers not to say,Person prefers not to say,,,,,,,,,,,,,,,,,Yes – the person is a current or former regular,No – they left up to and including 5 years ago,Yes,No,Yes,Fully wheelchair accessible housing,Yes,No,No,No,No,No,No,Yes,No,No,Yes,No,No,No,No,No,No,No,Less than 1 year,1 year but under 2 years,Loss of tied accommodation,,Other supported housing,No,Yes,TN23 6LZ,Ashford,Yes,,Yes,,,,No,No,Yes,,Tenant applied directly (no referral or nomination),,No,268,Weekly,Universal Credit housing element,Yes,All,,No,Every 2 weeks,,,,,200.0,50.0,40.0,35.0,325.0,,,,Yes,12.0,,,,,,,,,,,,,,,,,,,, diff --git a/spec/fixtures/files/sales_logs_csv_export_codes.csv b/spec/fixtures/files/sales_logs_csv_export_codes.csv index a82240317..eb08cc6bc 100644 --- a/spec/fixtures/files/sales_logs_csv_export_codes.csv +++ b/spec/fixtures/files/sales_logs_csv_export_codes.csv @@ -1,2 +1,2 @@ -id,status,created_at,updated_at,old_form_id,collection_start_year,creation_method,is_dpo,owning_organisation_name,managing_organisation_name,created_by,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,beds,proptype,builtype,pcodenk,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la_known,la,la_label,wchair,noint,privacynotice,age1,sex1,ethnic_group,ethnic,national,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationalbuy2,ecstat2,buy2livein,hholdcount,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,prevten,ppcodenk,ppostc1,ppostc2,previous_la_known,prevloc,prevloc_label,pregyrha,pregother,pregla,pregghb,pregblank,buy2living,prevtenbuy2,hhregres,hhregresstill,armedforcesspouse,disabled,wheel,income1nk,income1,inc1mort,income2nk,income2,inc2mort,hb,savingsnk,savings,prevown,prevshared,proplen,staircase,stairbought,stairowned,staircasesale,resale,exday,exmonth,exyear,hoday,homonth,hoyear,lanomagr,soctenant,frombeds,fromprop,socprevten,value,equity,mortgageused,mortgage,mortgagelender,mortgagelenderother,mortlen,extrabor,deposit,cashdis,mrent,has_mscharge,mscharge,discount,grant -,completed,2023-02-08T00:00:00+00:00,2023-02-08T00:00:00+00:00,,2022,1,false,DLUHC,DLUHC,billyboy@eyeklaud.com,8,2,2023,,2,8,,,,1,1,2,1,1,0,,,Address line 1,,Town or city,,SW1A,1AA,1,E09000003,Barnet,1,2,1,30,X,17,17,18,1,1,P,35,X,17,,13,1,1,3,C,14,X,9,X,-9,X,3,R,-9,R,10,,,,,1,1,,,0,,,1,1,1,1,,3,,1,4,5,1,1,0,10000,1,0,10000,1,4,1,,1,2,10,,,,,,,,,,,,,,,,,110000.0,,1,20000.0,5,,10,1,80000.0,,,1,100.0,,10000.0 +id,status,created_at,updated_at,old_form_id,collection_start_year,creation_method,is_dpo,owning_organisation_name,managing_organisation_name,created_by,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la_known,la,la_label,beds,proptype,builtype,pcodenk,wchair,noint,privacynotice,age1,sex1,ethnic_group,ethnic,national,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationalbuy2,ecstat2,buy2livein,hholdcount,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,prevten,ppcodenk,ppostc1,ppostc2,previous_la_known,prevloc,prevloc_label,pregyrha,pregother,pregla,pregghb,pregblank,buy2living,prevtenbuy2,hhregres,hhregresstill,armedforcesspouse,disabled,wheel,income1nk,income1,inc1mort,income2nk,income2,inc2mort,hb,savingsnk,savings,prevown,prevshared,proplen,staircase,stairbought,stairowned,staircasesale,resale,exday,exmonth,exyear,hoday,homonth,hoyear,lanomagr,soctenant,frombeds,fromprop,socprevten,value,equity,mortgageused,mortgage,mortgagelender,mortgagelenderother,mortlen,extrabor,deposit,cashdis,mrent,has_mscharge,mscharge,discount,grant +,completed,2023-12-08T00:00:00+00:00,2023-12-08T00:00:00+00:00,,2023,1,false,DLUHC,DLUHC,billyboy@eyeklaud.com,8,12,2023,,2,8,,,,1,1,,,Address line 1,,Town or city,,SW1A,1AA,1,E09000003,Barnet,2,1,1,0,1,2,1,30,X,17,17,18,1,1,P,35,X,17,,13,1,1,3,C,14,X,9,X,-9,X,3,R,-9,R,10,,,,,1,1,,,0,,,1,1,1,1,,3,,1,4,5,1,1,0,10000,1,0,10000,1,4,1,,1,2,10,,,,,,,,,,,,,,,,,110000.0,,1,20000.0,5,,10,1,80000.0,,,1,100.0,,10000.0 diff --git a/spec/fixtures/files/sales_logs_csv_export_labels.csv b/spec/fixtures/files/sales_logs_csv_export_labels.csv index 6c38f5e58..25d1e44e9 100644 --- a/spec/fixtures/files/sales_logs_csv_export_labels.csv +++ b/spec/fixtures/files/sales_logs_csv_export_labels.csv @@ -1,2 +1,2 @@ -id,status,created_at,updated_at,old_form_id,collection_start_year,creation_method,is_dpo,owning_organisation_name,managing_organisation_name,created_by,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,beds,proptype,builtype,pcodenk,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la_known,la,la_label,wchair,noint,privacynotice,age1,sex1,ethnic_group,ethnic,national,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationalbuy2,ecstat2,buy2livein,hholdcount,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,prevten,ppcodenk,ppostc1,ppostc2,previous_la_known,prevloc,prevloc_label,pregyrha,pregother,pregla,pregghb,pregblank,buy2living,prevtenbuy2,hhregres,hhregresstill,armedforcesspouse,disabled,wheel,income1nk,income1,inc1mort,income2nk,income2,inc2mort,hb,savingsnk,savings,prevown,prevshared,proplen,staircase,stairbought,stairowned,staircasesale,resale,exday,exmonth,exyear,hoday,homonth,hoyear,lanomagr,soctenant,frombeds,fromprop,socprevten,value,equity,mortgageused,mortgage,mortgagelender,mortgagelenderother,mortlen,extrabor,deposit,cashdis,mrent,has_mscharge,mscharge,discount,grant -,completed,2023-02-08T00:00:00+00:00,2023-02-08T00:00:00+00:00,,2022,single log,false,DLUHC,DLUHC,billyboy@eyeklaud.com,8,2,2023,,Yes - a discounted ownership scheme,Right to Acquire (RTA),,,,Yes,Yes,2,Flat or maisonette,Purpose built,Yes,,,Address line 1,,Town or city,,SW1A,1AA,Yes,E09000003,Barnet,Yes,Yes,1,30,Non-binary,Buyer 1 prefers not to say,17,United Kingdom,Full-time - 30 hours or more,Yes,Partner,35,Non-binary,17,,13,Full-time - 30 hours or more,Yes,3,Child,14,Non-binary,Child under 16,Other,Not known,Non-binary,"In government training into work, such as New Deal",Prefers not to say,Not known,Prefers not to say,Prefers not to say,,,,,Local authority tenant,No,,,No,,,1,1,1,1,,3,,Yes,Yes,No,Yes,Yes,Yes,10000,Yes,Yes,10000,Yes,"Don’t know ",No,,Yes,2,10,,,,,,,,,,,,,,,,,110000.0,,Yes,20000.0,Cambridge Building Society,,10,Yes,80000.0,,,Yes,100.0,,10000.0 +id,status,created_at,updated_at,old_form_id,collection_start_year,creation_method,is_dpo,owning_organisation_name,managing_organisation_name,created_by,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la_known,la,la_label,beds,proptype,builtype,pcodenk,wchair,noint,privacynotice,age1,sex1,ethnic_group,ethnic,national,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationalbuy2,ecstat2,buy2livein,hholdcount,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,prevten,ppcodenk,ppostc1,ppostc2,previous_la_known,prevloc,prevloc_label,pregyrha,pregother,pregla,pregghb,pregblank,buy2living,prevtenbuy2,hhregres,hhregresstill,armedforcesspouse,disabled,wheel,income1nk,income1,inc1mort,income2nk,income2,inc2mort,hb,savingsnk,savings,prevown,prevshared,proplen,staircase,stairbought,stairowned,staircasesale,resale,exday,exmonth,exyear,hoday,homonth,hoyear,lanomagr,soctenant,frombeds,fromprop,socprevten,value,equity,mortgageused,mortgage,mortgagelender,mortgagelenderother,mortlen,extrabor,deposit,cashdis,mrent,has_mscharge,mscharge,discount,grant +,completed,2023-12-08T00:00:00+00:00,2023-12-08T00:00:00+00:00,,2023,single log,false,DLUHC,DLUHC,billyboy@eyeklaud.com,8,12,2023,,Yes - a discounted ownership scheme,Right to Acquire (RTA),,,,Yes,Yes,,,Address line 1,,Town or city,,SW1A,1AA,1,E09000003,Barnet,2,Flat or maisonette,Purpose built,0,Yes,Yes,1,30,Non-binary,Buyer 1 prefers not to say,17,United Kingdom,Full-time - 30 hours or more,Yes,Partner,35,Non-binary,Buyer 2 prefers not to say,,Buyer prefers not to say,Full-time - 30 hours or more,Yes,3,Child,14,Non-binary,Child under 16,Other,Not known,Non-binary,"In government training into work, such as New Deal",Prefers not to say,Not known,Prefers not to say,Prefers not to say,,,,,Local authority tenant,No,,,No,,,1,1,1,1,,Don't know,,Yes,Yes,No,Yes,Yes,Yes,10000,Yes,Yes,10000,Yes,"Don’t know ",No,,Yes,No,10,,,,,,,,,,,,,,,,,110000.0,,Yes,20000.0,Cambridge Building Society,,10,Yes,80000.0,,,Yes,100.0,,10000.0 diff --git a/spec/models/form_handler_spec.rb b/spec/models/form_handler_spec.rb index 0c06e84fd..fe340f71b 100644 --- a/spec/models/form_handler_spec.rb +++ b/spec/models/form_handler_spec.rb @@ -41,21 +41,36 @@ RSpec.describe FormHandler do all_forms = form_handler.forms expect(all_forms.keys).not_to include nil end + + it "loads archived forms" do + all_forms = form_handler.forms + expect(all_forms.keys).to include("archived_sales") + expect(all_forms.keys).to include("archived_lettings") + end end end describe "Get specific form" do + let(:now) { Time.utc(2023, 9, 20) } + it "is able to load a current lettings form" do form = form_handler.get_form("current_lettings") expect(form).to be_a(Form) expect(form.pages.count).to be_positive - expect(form.name).to eq("2022_2023_lettings") + expect(form.name).to eq("2023_2024_lettings") end it "is able to load a previous lettings form" do form = form_handler.get_form("previous_lettings") expect(form).to be_a(Form) expect(form.pages.count).to be_positive + expect(form.name).to eq("2022_2023_lettings") + end + + it "is able to load a archived lettings form" do + form = form_handler.get_form("archived_lettings") + expect(form).to be_a(Form) + expect(form.pages.count).to be_positive expect(form.name).to eq("2021_2022_lettings") end @@ -63,13 +78,20 @@ RSpec.describe FormHandler do form = form_handler.get_form("current_sales") expect(form).to be_a(Form) expect(form.pages.count).to be_positive - expect(form.name).to eq("2022_2023_sales") + expect(form.name).to eq("2023_2024_sales") end it "is able to load a previous sales form" do form = form_handler.get_form("previous_sales") expect(form).to be_a(Form) expect(form.pages.count).to be_positive + expect(form.name).to eq("2022_2023_sales") + end + + it "is able to load a archived sales form" do + form = form_handler.get_form("archived_sales") + expect(form).to be_a(Form) + expect(form.pages.count).to be_positive expect(form.name).to eq("2021_2022_sales") end end @@ -84,70 +106,86 @@ RSpec.describe FormHandler do describe "Current collection start year" do context "when the date is after 1st of April" do - let(:now) { Time.utc(2022, 8, 3) } + let(:now) { Time.utc(2023, 8, 3) } it "returns the same year as the current start year" do - expect(form_handler.current_collection_start_year).to eq(2022) + expect(form_handler.current_collection_start_year).to eq(2023) end it "returns the correct current lettings form name" do - expect(form_handler.form_name_from_start_year(2022, "lettings")).to eq("current_lettings") + expect(form_handler.form_name_from_start_year(2023, "lettings")).to eq("current_lettings") end it "returns the correct previous lettings form name" do - expect(form_handler.form_name_from_start_year(2021, "lettings")).to eq("previous_lettings") + expect(form_handler.form_name_from_start_year(2022, "lettings")).to eq("previous_lettings") end it "returns the correct next lettings form name" do - expect(form_handler.form_name_from_start_year(2023, "lettings")).to eq("next_lettings") + expect(form_handler.form_name_from_start_year(2024, "lettings")).to eq("next_lettings") + end + + it "returns the correct archived lettings form name" do + expect(form_handler.form_name_from_start_year(2021, "lettings")).to eq("archived_lettings") end it "returns the correct current sales form name" do - expect(form_handler.form_name_from_start_year(2022, "sales")).to eq("current_sales") + expect(form_handler.form_name_from_start_year(2023, "sales")).to eq("current_sales") end it "returns the correct previous sales form name" do - expect(form_handler.form_name_from_start_year(2021, "sales")).to eq("previous_sales") + expect(form_handler.form_name_from_start_year(2022, "sales")).to eq("previous_sales") end it "returns the correct next sales form name" do - expect(form_handler.form_name_from_start_year(2023, "sales")).to eq("next_sales") + expect(form_handler.form_name_from_start_year(2024, "sales")).to eq("next_sales") + end + + it "returns the correct archived sales form name" do + expect(form_handler.form_name_from_start_year(2021, "sales")).to eq("archived_sales") end it "returns the correct current start date" do - expect(form_handler.current_collection_start_date).to eq(Time.zone.local(2022, 4, 1)) + expect(form_handler.current_collection_start_date).to eq(Time.zone.local(2023, 4, 1)) end end context "with the date before 1st of April" do - let(:now) { Time.utc(2022, 2, 3) } + let(:now) { Time.utc(2023, 2, 3) } it "returns the previous year as the current start year" do - expect(form_handler.current_collection_start_year).to eq(2021) + expect(form_handler.current_collection_start_year).to eq(2022) end it "returns the correct current lettings form name" do - expect(form_handler.form_name_from_start_year(2021, "lettings")).to eq("current_lettings") + expect(form_handler.form_name_from_start_year(2022, "lettings")).to eq("current_lettings") end it "returns the correct previous lettings form name" do - expect(form_handler.form_name_from_start_year(2020, "lettings")).to eq("previous_lettings") + expect(form_handler.form_name_from_start_year(2021, "lettings")).to eq("previous_lettings") end it "returns the correct next lettings form name" do - expect(form_handler.form_name_from_start_year(2022, "lettings")).to eq("next_lettings") + expect(form_handler.form_name_from_start_year(2023, "lettings")).to eq("next_lettings") + end + + it "returns the correct archived lettings form name" do + expect(form_handler.form_name_from_start_year(2020, "lettings")).to eq("archived_lettings") end it "returns the correct current sales form name" do - expect(form_handler.form_name_from_start_year(2021, "sales")).to eq("current_sales") + expect(form_handler.form_name_from_start_year(2022, "sales")).to eq("current_sales") end it "returns the correct previous sales form name" do - expect(form_handler.form_name_from_start_year(2020, "sales")).to eq("previous_sales") + expect(form_handler.form_name_from_start_year(2021, "sales")).to eq("previous_sales") end it "returns the correct next sales form name" do - expect(form_handler.form_name_from_start_year(2022, "sales")).to eq("next_sales") + expect(form_handler.form_name_from_start_year(2023, "sales")).to eq("next_sales") + end + + it "returns the correct archived sales form name" do + expect(form_handler.form_name_from_start_year(2020, "sales")).to eq("archived_sales") end end end @@ -197,6 +235,8 @@ RSpec.describe FormHandler do let(:now) { Time.utc(2023, 9, 20) } it "creates current_lettings and next_lettings forms from ruby form objects" do + expect(form_handler.lettings_forms["archived_lettings"]).to be_present + expect(form_handler.lettings_forms["archived_lettings"].start_date.year).to eq(2021) expect(form_handler.lettings_forms["previous_lettings"]).to be_present expect(form_handler.lettings_forms["previous_lettings"].start_date.year).to eq(2022) expect(form_handler.lettings_forms["current_lettings"]).to be_present @@ -206,10 +246,12 @@ RSpec.describe FormHandler do end end - context "when no form is defined in JSON (current collection start year 2024 onwards)" do + context "when only archived form form is defined in JSON (current collection start year 2024 onwards)" do let(:now) { Time.utc(2024, 9, 20) } - it "creates previous_lettings, current_lettings and next_lettings forms from ruby form objects" do + it "creates previous_lettings, current_lettings and next_lettings forms from ruby form objects and archived form from json" do + expect(form_handler.lettings_forms["archived_lettings"]).to be_present + expect(form_handler.lettings_forms["archived_lettings"].start_date.year).to eq(2022) expect(form_handler.lettings_forms["previous_lettings"]).to be_present expect(form_handler.lettings_forms["previous_lettings"].start_date.year).to eq(2023) expect(form_handler.lettings_forms["current_lettings"]).to be_present diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index 1b641f452..f2bbbe4be 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -2849,6 +2849,34 @@ RSpec.describe LettingsLog do end end + context "when filtering by year or nil" do + before do + Timecop.freeze(Time.utc(2021, 5, 3)) + end + + after do + Timecop.unfreeze + end + + it "allows filtering on a single year or nil" do + lettings_log_1.startdate = nil + lettings_log_1.save!(validate: false) + expect(described_class.filter_by_years_or_nil(%w[2021]).count).to eq(2) + end + + it "allows filtering by multiple years or nil using OR" do + lettings_log_1.startdate = nil + lettings_log_1.save!(validate: false) + expect(described_class.filter_by_years_or_nil(%w[2021 2022]).count).to eq(3) + end + + it "can filter by year(s) AND status" do + lettings_log_2.startdate = nil + lettings_log_2.save!(validate: false) + expect(described_class.filter_by_years_or_nil(%w[2021 2022]).filter_by_status("in_progress").count).to eq(3) + end + end + context "when filtering by organisation" do let(:organisation_1) { create(:organisation) } let(:organisation_2) { create(:organisation) } diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb index 15f4e6518..edaf4b60a 100644 --- a/spec/models/sales_log_spec.rb +++ b/spec/models/sales_log_spec.rb @@ -160,6 +160,33 @@ RSpec.describe SalesLog, type: :model do end end + context "when filtering by year or nil" do + before do + Timecop.freeze(Time.utc(2021, 5, 3)) + create(:sales_log, :in_progress, saledate: nil) + create(:sales_log, :in_progress, saledate: Time.zone.local(2021, 4, 1)) + sales_log_3 = create(:sales_log, :in_progress) + sales_log_3.saledate = Time.zone.local(2022, 5, 1) + sales_log_3.save!(validate: false) + end + + after do + Timecop.unfreeze + end + + it "allows filtering on a single year or nil" do + expect(described_class.filter_by_years_or_nil(%w[2021]).count).to eq(2) + end + + it "allows filtering by multiple years or nil using OR" do + expect(described_class.filter_by_years_or_nil(%w[2021 2022]).count).to eq(3) + end + + it "can filter by year(s) AND status" do + expect(described_class.filter_by_years_or_nil(%w[2021 2022]).filter_by_status("in_progress").count).to eq(3) + end + end + context "when filtering duplicate logs" do let(:organisation) { create(:organisation) } let(:log) { create(:sales_log, :duplicate, owning_organisation: organisation) } diff --git a/spec/services/csv/lettings_log_csv_service_spec.rb b/spec/services/csv/lettings_log_csv_service_spec.rb index 4e6e21621..512841380 100644 --- a/spec/services/csv/lettings_log_csv_service_spec.rb +++ b/spec/services/csv/lettings_log_csv_service_spec.rb @@ -1,44 +1,10 @@ require "rails_helper" RSpec.describe Csv::LettingsLogCsvService do - let(:form_handler_mock) { instance_double(FormHandler) } - let(:organisation) { create(:organisation) } - let(:fixed_time) { Time.zone.local(2023, 6, 26) } - let(:log) do - create( - :lettings_log, - :completed, - startdate: fixed_time, - created_at: fixed_time, - updated_at: fixed_time, - mrcdate: fixed_time - 1.day, - voiddate: fixed_time - 2.days, - propcode: "ABCDEFG", - tenancycode: "HIJKLMN", - postcode_full: "NW9 5LL", - ppostcode_full: "TN23 6LZ", - created_by: user, - managing_organisation: organisation, - hhmemb: 4, - details_known_3: 1, - details_known_4: 0, - sex4: "R", - ecstat4: 10, - relat4: "R", - age4_known: 1, - incref: 0, - ) - end - let(:user) { create(:user, :support, email: "s.port@jeemayle.com") } - let(:service) { described_class.new(user:, export_type:) } - let(:export_type) { "labels" } - let(:csv) { CSV.parse(service.prepare_csv(LettingsLog.where(id: logs.map(&:id)))) } - let(:logs) { [log] } - let(:headers) { csv.first } - before do Timecop.freeze(fixed_time) Singleton.__init__(FormHandler) + FormHandler.instance.use_real_forms! log.irproduct = 1 log.save!(validate: false) end @@ -47,180 +13,157 @@ RSpec.describe Csv::LettingsLogCsvService do Timecop.return end - it "calls the form handler to get all questions in order when initialized" do - allow(FormHandler).to receive(:instance).and_return(form_handler_mock) - allow(form_handler_mock).to receive(:ordered_lettings_questions_for_all_years).and_return([]) - service - expect(form_handler_mock).to have_received(:ordered_lettings_questions_for_all_years) - end - - it "returns a string" do - result = service.prepare_csv(LettingsLog.all) - expect(result).to be_a String - end - - it "returns a csv with headers" do - expect(csv.first.first).to eq "id" - end - - context "when stubbing :ordered_lettings_questions_for_all_years" do - let(:lettings_form) do - FormFactory.new(year: 2050, type: "lettings") - .with_sections([build(:section, :with_questions, question_ids:, questions:)]) - .build - end - let(:question_ids) { nil } - let(:questions) { nil } + context "when downloading a csv" do + let(:form_handler_mock) { instance_double(FormHandler) } + let(:organisation) { create(:organisation) } + let(:fixed_time) { Time.zone.local(2023, 11, 26) } + let(:log) do + create( + :lettings_log, + :completed, + startdate: fixed_time, + created_at: fixed_time, + updated_at: fixed_time, + mrcdate: fixed_time - 1.day, + voiddate: fixed_time - 2.days, + propcode: "ABCDEFG", + tenancycode: "HIJKLMN", + postcode_full: "NW9 5LL", + ppostcode_full: "TN23 6LZ", + created_by: user, + managing_organisation: organisation, + hhmemb: 4, + details_known_3: 1, + details_known_4: 0, + sex4: "R", + ecstat4: 10, + relat4: "R", + age4_known: 1, + incref: 0, + ) + end + let(:user) { create(:user, :support, email: "s.port@jeemayle.com") } + let(:service) { described_class.new(user:, export_type:) } + let(:export_type) { "labels" } + let(:csv) { CSV.parse(service.prepare_csv(LettingsLog.where(id: logs.map(&:id)))) } + let(:logs) { [log] } + let(:headers) { csv.first } - before do + it "calls the form handler to get all questions in order when initialized" do allow(FormHandler).to receive(:instance).and_return(form_handler_mock) - allow(form_handler_mock).to receive(:form_name_from_start_year) - allow(form_handler_mock).to receive(:get_form).and_return(lettings_form) - allow(form_handler_mock).to receive(:ordered_lettings_questions_for_all_years).and_return(lettings_form.questions) - allow(form_handler_mock).to receive(:lettings_in_crossover_period?).and_return false + allow(form_handler_mock).to receive(:ordered_lettings_questions_for_all_years).and_return([]) + service + expect(form_handler_mock).to have_received(:ordered_lettings_questions_for_all_years) end - context "when it returns questions with particular ids" do - let(:question_ids) { %w[prevten startdate brent rent_type] } - - it "includes log attributes related to questions to the headers" do - expect(headers).to include(*question_ids.first(3)) - end - - it "removes some log attributes related to questions from the headers and replaces them with their derived values in the correct order" do - expect(headers).not_to include "rent_type" - expect(headers).to include(*%w[wrent renttype rent_type_detail]) - end + it "returns a string" do + result = service.prepare_csv(LettingsLog.all) + expect(result).to be_a String end - context "when it returns checkbox questions" do - let(:questions) do - [ - build(:question, id: "condition_effects", type: "checkbox", answer_options: { "illness_type_1" => {}, "illness_type_2" => {}, "illness_type_3" => {} }), - build(:question, id: "letting_allocation", type: "checkbox", answer_options: { "cbl" => {}, "cap" => {}, "chr" => {} }), - ] - end + it "returns a csv with headers" do + expect(csv.first.first).to eq "id" + end - it "does not add the id of the checkbox question to the headers" do - question_ids = questions.map(&:id) - expect(headers).not_to include(*question_ids) + context "when stubbing :ordered_lettings_questions_for_all_years" do + let(:lettings_form) do + FormFactory.new(year: 2050, type: "lettings") + .with_sections([build(:section, :with_questions, question_ids:, questions:)]) + .build end - - it "adds the related log attributes from the answer options to the headers" do - log_attributes = questions.flat_map { |q| q.answer_options.keys } - expect(headers).to include(*log_attributes) + let(:question_ids) { nil } + let(:questions) { nil } + + before do + allow(FormHandler).to receive(:instance).and_return(form_handler_mock) + allow(form_handler_mock).to receive(:form_name_from_start_year) + allow(form_handler_mock).to receive(:get_form).and_return(lettings_form) + allow(form_handler_mock).to receive(:ordered_lettings_questions_for_all_years).and_return(lettings_form.questions) + allow(form_handler_mock).to receive(:lettings_in_crossover_period?).and_return false end - end - end - it "adds log attributes not related to questions to the headers" do - expect(headers.first(5)).to eq %w[id status created_by is_dpo created_at] - end + context "when it returns questions with particular ids" do + let(:question_ids) { %w[prevten startdate brent rent_type] } - it "adds attributes related to associated schemes and locations to the headers" do - expect(headers).to include(*%w[scheme_service_name scheme_sensitive SCHTYPE scheme_registered_under_care_act]) - expect(headers.last(5)).to eq %w[location_units location_type_of_unit location_mobility_type location_local_authority location_startdate] - end + it "includes log attributes related to questions to the headers" do + expect(headers).to include(*question_ids.first(3)) + end - context "when there are many logs" do - let(:logs) { create_list(:lettings_log, log_count) } - let(:log_count) { 30 } + it "removes some log attributes related to questions from the headers and replaces them with their derived values in the correct order" do + expect(headers).not_to include "rent_type" + expect(headers).to include(*%w[wrent renttype rent_type_detail]) + end + end - it "creates a CSV with the correct number of logs" do - expected_row_count_with_headers = log_count + 1 - expect(csv.size).to be expected_row_count_with_headers - end - end + context "when it returns checkbox questions" do + let(:questions) do + [ + build(:question, id: "condition_effects", type: "checkbox", answer_options: { "illness_type_1" => {}, "illness_type_2" => {}, "illness_type_3" => {} }), + build(:question, id: "letting_allocation", type: "checkbox", answer_options: { "cbl" => {}, "cap" => {}, "chr" => {} }), + ] + end - context "when exporting with human readable labels" do - let(:export_type) { "labels" } + it "does not add the id of the checkbox question to the headers" do + question_ids = questions.map(&:id) + expect(headers).not_to include(*question_ids) + end - it "gives answer to radio questions as labels" do - relat2_column_index = csv.first.index("relat2") - relat2_value = csv.second[relat2_column_index] - expect(relat2_value).to eq "Partner" + it "adds the related log attributes from the answer options to the headers" do + log_attributes = questions.flat_map { |q| q.answer_options.keys } + expect(headers).to include(*log_attributes) + end + end end - it "gives answers to free input questions as the user input" do - age1_column_index = csv.first.index("age1") - age1_value = csv.second[age1_column_index] - expect(age1_value).to eq 35.to_s + it "adds log attributes not related to questions to the headers" do + expect(headers.first(5)).to eq %w[id status created_by is_dpo created_at] end - it "exports the code for the local authority under the heading 'la'" do - la_column_index = csv.first.index("la") - la_value = csv.second[la_column_index] - expect(la_value).to eq "E09000003" + it "adds attributes related to associated schemes and locations to the headers" do + expect(headers).to include(*%w[scheme_service_name scheme_sensitive SCHTYPE scheme_registered_under_care_act]) + expect(headers.last(5)).to eq %w[location_units location_type_of_unit location_mobility_type location_local_authority location_startdate] end - it "exports the label for the local authority under the heading 'la_label'" do - la_label_column_index = csv.first.index("la_label") - la_label_value = csv.second[la_label_column_index] - expect(la_label_value).to eq "Barnet" - end + context "when there are many logs" do + let(:logs) { create_list(:lettings_log, log_count) } + let(:log_count) { 30 } - it "exports the CSV with all values correct" do - expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_labels.csv") - values_to_delete = %w[id vacdays] - values_to_delete.each do |attribute| - index = csv.first.index(attribute) - csv.second[index] = nil + it "creates a CSV with the correct number of logs" do + expected_row_count_with_headers = log_count + 1 + expect(csv.size).to be expected_row_count_with_headers end - expect(csv).to eq expected_content end - end - - context "when exporting as codes" do - let(:export_type) { "codes" } - it "gives answer to radio questions as labels" do - relat2_column_index = csv.first.index("relat2") - relat2_value = csv.second[relat2_column_index] - expect(relat2_value).to eq "P" - end - - it "gives answers to free input questions as the user input" do - age1_column_index = csv.first.index("age1") - age1_value = csv.second[age1_column_index] - expect(age1_value).to eq 35.to_s - end - - it "exports the code for the local authority under the heading 'la'" do - la_column_index = csv.first.index("la") - la_value = csv.second[la_column_index] - expect(la_value).to eq "E09000003" - end - - it "exports the label for the local authority under the heading 'la_label'" do - la_label_column_index = csv.first.index("la_label") - la_label_value = csv.second[la_label_column_index] - expect(la_label_value).to eq "Barnet" - end + context "when exporting with human readable labels" do + let(:export_type) { "labels" } - it "exports the CSV with all values correct" do - expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_codes.csv") - values_to_delete = %w[id vacdays] - values_to_delete.each do |attribute| - index = csv.first.index(attribute) - csv.second[index] = nil + it "gives answer to radio questions as labels" do + relat2_column_index = csv.first.index("relat2") + relat2_value = csv.second[relat2_column_index] + expect(relat2_value).to eq "Partner" end - expect(csv).to eq expected_content - end - end - context "when the user is not a support user" do - let(:user) { create(:user, email: "choreographer@owtluk.com") } + it "gives answers to free input questions as the user input" do + age1_column_index = csv.first.index("age1") + age1_value = csv.second[age1_column_index] + expect(age1_value).to eq 35.to_s + end - it "does not include certain attributes in the headers" do - expect(headers).not_to include(*%w[wrent wscharge wpschrge wsupchrg wtcharge]) - end + it "exports the code for the local authority under the heading 'la'" do + la_column_index = csv.first.index("la") + la_value = csv.second[la_column_index] + expect(la_value).to eq "E09000003" + end - context "and exporting with labels" do - let(:export_type) { "labels" } + it "exports the label for the local authority under the heading 'la_label'" do + la_label_column_index = csv.first.index("la_label") + la_label_value = csv.second[la_label_column_index] + expect(la_label_value).to eq "Barnet" + end it "exports the CSV with all values correct" do - expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_non_support_labels.csv") - values_to_delete = %w[id] + expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_labels.csv") + values_to_delete = %w[id vacdays] values_to_delete.each do |attribute| index = csv.first.index(attribute) csv.second[index] = nil @@ -229,12 +172,36 @@ RSpec.describe Csv::LettingsLogCsvService do end end - context "and exporting values as codes" do + context "when exporting as codes" do let(:export_type) { "codes" } + it "gives answer to radio questions as labels" do + relat2_column_index = csv.first.index("relat2") + relat2_value = csv.second[relat2_column_index] + expect(relat2_value).to eq "P" + end + + it "gives answers to free input questions as the user input" do + age1_column_index = csv.first.index("age1") + age1_value = csv.second[age1_column_index] + expect(age1_value).to eq 35.to_s + end + + it "exports the code for the local authority under the heading 'la'" do + la_column_index = csv.first.index("la") + la_value = csv.second[la_column_index] + expect(la_value).to eq "E09000003" + end + + it "exports the label for the local authority under the heading 'la_label'" do + la_label_column_index = csv.first.index("la_label") + la_label_value = csv.second[la_label_column_index] + expect(la_label_value).to eq "Barnet" + end + it "exports the CSV with all values correct" do - expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv") - values_to_delete = %w[id] + expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_codes.csv") + values_to_delete = %w[id vacdays] values_to_delete.each do |attribute| index = csv.first.index(attribute) csv.second[index] = nil @@ -242,5 +209,41 @@ RSpec.describe Csv::LettingsLogCsvService do expect(csv).to eq expected_content end end + + context "when the user is not a support user" do + let(:user) { create(:user, email: "choreographer@owtluk.com") } + + it "does not include certain attributes in the headers" do + expect(headers).not_to include(*%w[wrent wscharge wpschrge wsupchrg wtcharge]) + end + + context "and exporting with labels" do + let(:export_type) { "labels" } + + it "exports the CSV with all values correct" do + expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_non_support_labels.csv") + values_to_delete = %w[id] + values_to_delete.each do |attribute| + index = csv.first.index(attribute) + csv.second[index] = nil + end + expect(csv).to eq expected_content + end + end + + context "and exporting values as codes" do + let(:export_type) { "codes" } + + it "exports the CSV with all values correct" do + expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_non_support_codes.csv") + values_to_delete = %w[id] + values_to_delete.each do |attribute| + index = csv.first.index(attribute) + csv.second[index] = nil + end + expect(csv).to eq expected_content + end + end + end end end diff --git a/spec/services/csv/sales_log_csv_service_spec.rb b/spec/services/csv/sales_log_csv_service_spec.rb index 28ce1dd5c..b776b5245 100644 --- a/spec/services/csv/sales_log_csv_service_spec.rb +++ b/spec/services/csv/sales_log_csv_service_spec.rb @@ -3,7 +3,7 @@ require "rails_helper" RSpec.describe Csv::SalesLogCsvService do let(:form_handler_mock) { instance_double(FormHandler) } let(:organisation) { create(:organisation) } - let(:fixed_time) { Time.zone.local(2023, 2, 8) } + let(:fixed_time) { Time.zone.local(2023, 12, 8) } let(:user) { create(:user, email: "billyboy@eyeKLAUD.com") } let(:log) do create( diff --git a/spec/services/merge/merge_organisations_service_spec.rb b/spec/services/merge/merge_organisations_service_spec.rb index 8947cca34..8d9b9ff46 100644 --- a/spec/services/merge/merge_organisations_service_spec.rb +++ b/spec/services/merge/merge_organisations_service_spec.rb @@ -752,7 +752,7 @@ RSpec.describe Merge::MergeOrganisationsService do expect(absorbing_organisation.owned_schemes.first.locations.map(&:postcode)).to match_array([location, deactivated_location, location_without_startdate, location_with_past_startdate, location_with_future_startdate].map(&:postcode)) expect(absorbing_organisation.owned_schemes.first.locations.find_by(postcode: location_without_startdate.postcode).startdate).to eq(Time.zone.yesterday) expect(absorbing_organisation.owned_schemes.first.locations.find_by(postcode: location_with_past_startdate.postcode).startdate).to eq(Time.zone.yesterday) - expect(absorbing_organisation.owned_schemes.first.locations.find_by(postcode: location_with_future_startdate.postcode).startdate).to eq(Time.zone.local(2024, 4, 1)) + expect(absorbing_organisation.owned_schemes.first.locations.find_by(postcode: location_with_future_startdate.postcode).startdate.to_date).to eq(Time.zone.today + 2.months) absorbed_active_scheme = absorbing_organisation.owned_schemes.find_by(service_name: scheme.service_name) absorbed_active_location = absorbed_active_scheme.locations.find_by(postcode: location.postcode) expect(absorbed_active_scheme.service_name).to eq(scheme.service_name)