diff --git a/.github/workflows/aws_deploy.yml b/.github/workflows/aws_deploy.yml index bd258ce8e..247efbfab 100644 --- a/.github/workflows/aws_deploy.yml +++ b/.github/workflows/aws_deploy.yml @@ -116,7 +116,7 @@ jobs: - name: Run migrations task env: ad_hoc_task_definition: ${{ inputs.aws_resource_prefix }}-ad-hoc - cluster: ${{ inputs.aws_resource_prefix }} + cluster: ${{ inputs.aws_resource_prefix }}-app service: ${{ inputs.aws_resource_prefix }}-app run: | network=$(aws ecs describe-services --cluster $cluster --services $service --query services[0].networkConfiguration) @@ -146,7 +146,7 @@ jobs: - name: Deploy updated application uses: aws-actions/amazon-ecs-deploy-task-definition@v1 with: - cluster: ${{ inputs.aws_resource_prefix }} + cluster: ${{ inputs.aws_resource_prefix }}-app service: ${{ inputs.aws_resource_prefix }}-app task-definition: ${{ steps.app-task-def.outputs.task-definition }} wait-for-service-stability: true @@ -168,7 +168,7 @@ jobs: - name: Deploy updated sidekiq uses: aws-actions/amazon-ecs-deploy-task-definition@v1 with: - cluster: ${{ inputs.aws_resource_prefix }} + cluster: ${{ inputs.aws_resource_prefix }}-app service: ${{ inputs.aws_resource_prefix }}-sidekiq task-definition: ${{ steps.sidekiq-task-def.outputs.task-definition }} wait-for-service-stability: true diff --git a/app/helpers/data_sharing_agreement_helper.rb b/app/helpers/data_sharing_agreement_helper.rb index 662f1b30b..d2e2e074d 100644 --- a/app/helpers/data_sharing_agreement_helper.rb +++ b/app/helpers/data_sharing_agreement_helper.rb @@ -75,7 +75,7 @@ private return "Not accepted" unless organisation.data_protection_confirmed? if user.support? - "Accepted #{organisation.data_protection_confirmation.created_at.strftime('%d/%m/%Y')}" + "Accepted #{organisation.data_protection_confirmation.signed_at.strftime('%d/%m/%Y')}" else "Accepted" end diff --git a/app/models/bulk_upload.rb b/app/models/bulk_upload.rb index e98103b6d..9db828184 100644 --- a/app/models/bulk_upload.rb +++ b/app/models/bulk_upload.rb @@ -10,6 +10,11 @@ class BulkUpload < ApplicationRecord after_initialize :generate_identifier, unless: :identifier + def completed? + incomplete_logs = logs.where.not(status: "completed") + !incomplete_logs.exists? + end + def year_combo "#{year}/#{year - 2000 + 1}" end diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index 09b3a5fde..9679a9839 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -186,7 +186,7 @@ private end def get_refused - return 1 if age_refused? || sex_refused? || relat_refused? || ecstat_refused? + return 1 if details_unknown? || age_refused? || sex_refused? || relat_refused? || ecstat_refused? 0 end diff --git a/app/models/forms/bulk_upload_lettings_resume/chosen.rb b/app/models/forms/bulk_upload_lettings_resume/chosen.rb index 6a6f670c4..b795d8d4b 100644 --- a/app/models/forms/bulk_upload_lettings_resume/chosen.rb +++ b/app/models/forms/bulk_upload_lettings_resume/chosen.rb @@ -8,7 +8,7 @@ module Forms attribute :bulk_upload def view_path - "bulk_upload_lettings_resume/chosen" + bulk_upload.completed? ? "bulk_upload_lettings_resume/completed" : "bulk_upload_lettings_resume/chosen" end def back_path diff --git a/app/models/forms/bulk_upload_sales_resume/chosen.rb b/app/models/forms/bulk_upload_sales_resume/chosen.rb index 2fa85c6c9..3bf32ee71 100644 --- a/app/models/forms/bulk_upload_sales_resume/chosen.rb +++ b/app/models/forms/bulk_upload_sales_resume/chosen.rb @@ -8,7 +8,7 @@ module Forms attribute :bulk_upload def view_path - "bulk_upload_sales_resume/chosen" + bulk_upload.completed? ? "bulk_upload_sales_resume/completed" : "bulk_upload_sales_resume/chosen" end def back_path diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 45d13a792..79a6837d3 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -703,6 +703,10 @@ private [ecstat1, ecstat2, ecstat3, ecstat4, ecstat5, ecstat6, ecstat7, ecstat8].any?(10) end + def details_unknown? + [details_known_2, details_known_3, details_known_4, details_known_5, details_known_6, details_known_7, details_known_8].any?(1) + end + def soft_value_for_period(value) num_of_weeks = NUM_OF_WEEKS_FROM_PERIOD[period] return "" unless value && num_of_weeks diff --git a/app/models/log.rb b/app/models/log.rb index 849927cf1..5354b3ba5 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -44,6 +44,7 @@ class Log < ApplicationRecord .where(bulk_upload: { id: bulk_upload_id, user: }) } scope :created_by, ->(user) { where(created_by: user) } + scope :imported, -> { where.not(old_id: nil) } attr_accessor :skip_update_status, :skip_update_uprn_confirmed diff --git a/app/services/csv/lettings_log_csv_service.rb b/app/services/csv/lettings_log_csv_service.rb index a4daf6d1a..a034d6a04 100644 --- a/app/services/csv/lettings_log_csv_service.rb +++ b/app/services/csv/lettings_log_csv_service.rb @@ -117,6 +117,15 @@ module Csv }, }.freeze + PERSON_DETAILS = {}.tap { |hash| + (2..8).each do |i| + hash["age#{i}_known"] = { "refused_code" => "1", "refused_label" => "No", "details_known_field" => "details_known_#{i}" } + hash["sex#{i}"] = { "refused_code" => "R", "refused_label" => "Prefers not to say", "details_known_field" => "details_known_#{i}" } + hash["relat#{i}"] = { "refused_code" => "R", "refused_label" => "Prefers not to say", "details_known_field" => "details_known_#{i}" } + hash["ecstat#{i}"] = { "refused_code" => "10", "refused_label" => "Prefers not to say", "details_known_field" => "details_known_#{i}" } + end + }.freeze + FIELDS_ALWAYS_EXPORTED_AS_CODES = %w[ la prevloc @@ -148,6 +157,13 @@ module Csv get_label(value, attribute, log) elsif DATE_FIELDS.include? attribute log.public_send(attribute)&.iso8601 + elsif PERSON_DETAILS.any? { |key, _value| key == attribute } && person_details_not_known?(log, attribute) + case @export_type + when "codes" + PERSON_DETAILS.find { |key, _value| key == attribute }[1]["refused_code"] + when "labels" + PERSON_DETAILS.find { |key, _value| key == attribute }[1]["refused_label"] + end else value = log.public_send(attribute) case @export_type @@ -218,5 +234,10 @@ module Csv final_attributes = non_question_fields + attributes + scheme_and_location_attributes @user.support? ? final_attributes : final_attributes - SUPPORT_ONLY_ATTRIBUTES end + + def person_details_not_known?(log, attribute) + details_known_field = PERSON_DETAILS.find { |key, _value| key == attribute }[1]["details_known_field"] + log[details_known_field] == 1 + end end end diff --git a/app/services/exports/lettings_log_export_service.rb b/app/services/exports/lettings_log_export_service.rb index b06457ca7..16ce5c187 100644 --- a/app/services/exports/lettings_log_export_service.rb +++ b/app/services/exports/lettings_log_export_service.rb @@ -213,6 +213,17 @@ module Exports add_location_fields!(lettings_log.location, attribute_hash) if lettings_log.location attribute_hash.delete("unittype_gn") end + + # details unknown fields + (2..8).each do |index| + next unless lettings_log["details_known_#{index}"] == 1 + + attribute_hash["age#{index}"] = -9 + attribute_hash["sex#{index}"] = "R" + attribute_hash["relat#{index}"] = "R" + attribute_hash["ecstat#{index}"] = 10 + end + attribute_hash end diff --git a/app/services/imports/import_report_service.rb b/app/services/imports/import_report_service.rb index 4db8151cf..b714c9a9d 100644 --- a/app/services/imports/import_report_service.rb +++ b/app/services/imports/import_report_service.rb @@ -41,10 +41,10 @@ module Imports organisation = Organisation.find_by(name:) next unless organisation - completed_sales_logs = organisation.owned_sales_logs.where(status: "completed").count - in_progress_sales_logs = organisation.owned_sales_logs.where(status: "in_progress").count - completed_lettings_logs = organisation.owned_lettings_logs.where(status: "completed").count - in_progress_lettings_logs = organisation.owned_lettings_logs.where(status: "in_progress").count + completed_sales_logs = organisation.owned_sales_logs.imported.where(status: "completed").count + in_progress_sales_logs = organisation.owned_sales_logs.imported.where(status: "in_progress").count + completed_lettings_logs = organisation.owned_lettings_logs.imported.where(status: "completed").count + in_progress_lettings_logs = organisation.owned_lettings_logs.imported.where(status: "in_progress").count report << row.push(completed_lettings_logs, in_progress_lettings_logs, completed_sales_logs, in_progress_sales_logs) end end @@ -70,10 +70,10 @@ module Imports 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| + organisation.owned_lettings_logs.imported.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| + organisation.owned_sales_logs.imported.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 diff --git a/app/views/bulk_upload_lettings_resume/completed.html.erb b/app/views/bulk_upload_lettings_resume/completed.html.erb new file mode 100644 index 000000000..0487d1921 --- /dev/null +++ b/app/views/bulk_upload_lettings_resume/completed.html.erb @@ -0,0 +1,14 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: @form.back_path %> +<% end %> + +
+
+ Bulk upload for lettings (<%= @bulk_upload.year_combo %>) +

These logs are complete

+ +

You have created logs from your bulk upload, and the logs are complete. Return to lettings logs to view them.

+ + <%= govuk_button_link_to "Return to lettings logs", lettings_logs_path %> +
+
diff --git a/app/views/bulk_upload_lettings_soft_validations_check/chosen.html.erb b/app/views/bulk_upload_lettings_soft_validations_check/chosen.html.erb index 418387fc9..0487d1921 100644 --- a/app/views/bulk_upload_lettings_soft_validations_check/chosen.html.erb +++ b/app/views/bulk_upload_lettings_soft_validations_check/chosen.html.erb @@ -5,9 +5,9 @@
Bulk upload for lettings (<%= @bulk_upload.year_combo %>) -

These logs have been created

+

These logs are complete

-

You have created logs from your bulk upload. Return to lettings logs to view them.

+

You have created logs from your bulk upload, and the logs are complete. Return to lettings logs to view them.

<%= govuk_button_link_to "Return to lettings logs", lettings_logs_path %>
diff --git a/app/views/bulk_upload_sales_resume/completed.html.erb b/app/views/bulk_upload_sales_resume/completed.html.erb new file mode 100644 index 000000000..9fcc656ad --- /dev/null +++ b/app/views/bulk_upload_sales_resume/completed.html.erb @@ -0,0 +1,14 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: @form.back_path %> +<% end %> + +
+
+ Bulk upload for sales (<%= @bulk_upload.year_combo %>) +

These logs are complete

+ +

You have created logs from your bulk upload, and the logs are complete. Return to sales logs to view them.

+ + <%= govuk_button_link_to "Return to sales logs", sales_logs_path %> +
+
diff --git a/app/views/bulk_upload_sales_soft_validations_check/chosen.html.erb b/app/views/bulk_upload_sales_soft_validations_check/chosen.html.erb index 211f9c03c..9fcc656ad 100644 --- a/app/views/bulk_upload_sales_soft_validations_check/chosen.html.erb +++ b/app/views/bulk_upload_sales_soft_validations_check/chosen.html.erb @@ -5,9 +5,9 @@
Bulk upload for sales (<%= @bulk_upload.year_combo %>) -

These logs have been created

+

These logs are complete

-

You have created logs from your bulk upload. Return to sales logs to view them.

+

You have created logs from your bulk upload, and the logs are complete. Return to sales logs to view them.

<%= govuk_button_link_to "Return to sales logs", sales_logs_path %>
diff --git a/app/views/logs/delete_duplicates.html.erb b/app/views/logs/delete_duplicates.html.erb index 18b3d56e4..4acfc2314 100644 --- a/app/views/logs/delete_duplicates.html.erb +++ b/app/views/logs/delete_duplicates.html.erb @@ -1,6 +1,6 @@ <% content_for :before_content do %> <% content_for :title, "Are you sure you want to delete #{@duplicate_logs.count == 1 ? 'this duplicate log' : 'these duplicate logs'}?" %> - <%= govuk_back_link href: @log.lettings? ? lettings_log_duplicate_logs_path(@log) : sales_log_duplicate_logs_path(@log) %> + <%= govuk_back_link href: @log.lettings? ? lettings_log_duplicate_logs_path(@original_log, original_log_id: @original_log.id) : sales_log_duplicate_logs_path(@original_log, original_log_id: @original_log.id) %> <% end %>
@@ -32,7 +32,7 @@ params: { ids: @duplicate_logs.map(&:id), original_log_id: @original_log.id, remaining_log_id: @log.id } %> <%= govuk_button_link_to( "Cancel", - send("#{@log.class.name.underscore}_duplicate_logs_path", @log), + send("#{@log.class.name.underscore}_duplicate_logs_path", @original_log, original_log_id: @original_log.id), secondary: true, ) %>
diff --git a/db/seeds.rb b/db/seeds.rb index 94d36a7fb..3631e2c07 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -12,6 +12,9 @@ def create_data_protection_confirmation(user) organisation: user.organisation, confirmed: true, data_protection_officer: user, + signed_at: Time.zone.local(2019, 1, 1), + data_protection_officer_email: user.email, + data_protection_officer_name: user.name, ) end diff --git a/lib/tasks/recalculate_refused_values.rake b/lib/tasks/recalculate_refused_values.rake new file mode 100644 index 000000000..fed2a641c --- /dev/null +++ b/lib/tasks/recalculate_refused_values.rake @@ -0,0 +1,12 @@ +desc "Forces to recalculate refused values for lettings logs with unknown person details" +task recalculate_refused_values: :environment do + LettingsLog.exportable.where('details_known_2 = 1 + OR details_known_3 = 1 + OR details_known_4 = 1 + OR details_known_5 = 1 + OR details_known_6 = 1 + OR details_known_7 = 1 + OR details_known_8 = 1').each do |log| + log.update!(values_updated_at: Time.zone.now) + end +end diff --git a/spec/factories/data_protection_confirmation.rb b/spec/factories/data_protection_confirmation.rb index 24ef504df..5295e3a52 100644 --- a/spec/factories/data_protection_confirmation.rb +++ b/spec/factories/data_protection_confirmation.rb @@ -15,6 +15,6 @@ FactoryBot.define do created_at { Time.zone.now } updated_at { Time.zone.now } - signed_at { Time.zone.now } + signed_at { Time.zone.local(2022, 2, 4) } end end diff --git a/spec/fixtures/files/lettings_log_csv_export_codes.csv b/spec/fixtures/files/lettings_log_csv_export_codes.csv index 41e8cadde..fec9884a9 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,age1_known,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2_known,age2,sex2,ecstat2,details_known_3,relat3,age3_known,age3,sex3,ecstat3,details_known_4,relat4,age4_known,age4,sex4,ecstat4,details_known_5,relat5,age5_known,age5,sex5,ecstat5,details_known_6,relat6,age6_known,age6,sex6,ecstat6,details_known_7,relat7,age7_known,age7,sex7,ecstat7,details_known_8,relat8,age8_known,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_unknown,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_admin_district,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-26T00:00:00+01:00,2,1,,,,HIJKLMN,ABCDEFG,0,,,fake address,,London,,NW9 5LL,false,Barnet,E09000003,0,2,6,2,2,7,1,1,3,2023-06-24T00:00:00+01:00,,,1,2023-06-25T00:00:00+01:00,,3,1,4,,2,,1,2,,0,0,4,0,0,2,35,,F,0,2,13,0,0,P,0,32,M,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,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,68,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,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,age1_known,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2_known,age2,sex2,ecstat2,details_known_3,relat3,age3_known,age3,sex3,ecstat3,details_known_4,relat4,age4_known,age4,sex4,ecstat4,details_known_5,relat5,age5_known,age5,sex5,ecstat5,details_known_6,relat6,age6_known,age6,sex6,ecstat6,details_known_7,relat7,age7_known,age7,sex7,ecstat7,details_known_8,relat8,age8_known,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_unknown,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_admin_district,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-26T00:00:00+01:00,2,1,,,,HIJKLMN,ABCDEFG,0,,,fake address,,London,,NW9 5LL,false,Barnet,E09000003,0,2,6,2,2,7,1,1,3,2023-06-24T00:00:00+01:00,,,1,2023-06-25T00:00:00+01:00,,3,1,4,,2,,1,3,,0,1,4,0,0,2,35,,F,0,2,13,0,0,P,0,32,M,6,1,R,1,,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,68,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,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/spec/fixtures/files/lettings_log_csv_export_labels.csv b/spec/fixtures/files/lettings_log_csv_export_labels.csv index 729f1a63d..d8646b675 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,age1_known,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2_known,age2,sex2,ecstat2,details_known_3,relat3,age3_known,age3,sex3,ecstat3,details_known_4,relat4,age4_known,age4,sex4,ecstat4,details_known_5,relat5,age5_known,age5,sex5,ecstat5,details_known_6,relat6,age6_known,age6,sex6,ecstat6,details_known_7,relat7,age7_known,age7,sex7,ecstat7,details_known_8,relat8,age8_known,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_unknown,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_admin_district,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,7,No,2023-06-26T00:00:00+01:00,2,Affordable Rent,,,,HIJKLMN,ABCDEFG,No,,,fake address,,London,,NW9 5LL,No,Barnet,E09000003,No,Affordable rent basis,Tenant abandoned property,2,2,House,Purpose built,Yes,3,2023-06-24T00:00:00+01:00,,,Yes,2023-06-25T00:00:00+01:00,,Don’t know,Yes,Assured Shorthold Tenancy (AST) – Fixed term,,2,,1,2,,Yes,0,4,0,0,2,35,,Female,White,Irish,Tenant prefers not to say,Other,Yes,Partner,Yes,32,Male,Not seeking work,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,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,1,0,0,0,0,0,No,Yes,0,0,1,0,0,0,0,0,0,0,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,0,1,0,0,0,0,0,1,,Tenant applied directly (no referral or nomination),,Yes,0,68,Weekly,,Universal Credit housing element,1,All,,0,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,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,age1_known,refused,hhtype,totchild,totelder,totadult,age1,retirement_value_check,sex1,ethnic_group,ethnic,national,ecstat1,details_known_2,relat2,age2_known,age2,sex2,ecstat2,details_known_3,relat3,age3_known,age3,sex3,ecstat3,details_known_4,relat4,age4_known,age4,sex4,ecstat4,details_known_5,relat5,age5_known,age5,sex5,ecstat5,details_known_6,relat6,age6_known,age6,sex6,ecstat6,details_known_7,relat7,age7_known,age7,sex7,ecstat7,details_known_8,relat8,age8_known,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_unknown,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_admin_district,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,7,No,2023-06-26T00:00:00+01:00,2,Affordable Rent,,,,HIJKLMN,ABCDEFG,No,,,fake address,,London,,NW9 5LL,No,Barnet,E09000003,No,Affordable rent basis,Tenant abandoned property,2,2,House,Purpose built,Yes,3,2023-06-24T00:00:00+01:00,,,Yes,2023-06-25T00:00:00+01:00,,Don’t know,Yes,Assured Shorthold Tenancy (AST) – Fixed term,,2,,1,3,,Yes,1,4,0,0,2,35,,Female,White,Irish,Tenant prefers not to say,Other,Yes,Partner,Yes,32,Male,Not seeking work,No,Prefers not to say,No,,Prefers not to say,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,1,0,0,0,0,0,No,Yes,0,0,1,0,0,0,0,0,0,0,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,0,1,0,0,0,0,0,1,,Tenant applied directly (no referral or nomination),,Yes,0,68,Weekly,,Universal Credit housing element,1,All,,0,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,,,,,,,,,,,,,,,,,,,, \ No newline at end of file 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 46d68db05..3dee684b2 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,lettype,renewal,startdate,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,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,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,referral,referral_value_check,incref,earnings,incfreq,hb,has_benefits,benefits,household_charge,nocharge,period,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_admin_district,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,7,0,2023-06-26T00:00:00+01:00,,,,HIJKLMN,ABCDEFG,0,,fake address,,London,,NW9 5LL,Barnet,2,6,2,2,7,1,1,3,2023-06-24T00:00:00+01:00,,1,2023-06-25T00:00:00+01:00,,3,1,4,,2,,1,0,35,F,0,2,13,0,P,32,M,6,,,,,,,,,,,,,,,,,,,,,,,,,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,68,1,6,1,1,,0,2,,,,200.0,50.0,40.0,35.0,325.0,,,,1,12.0,,,,,,,,,,,,,,,,,,,, +id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,collection_start_year,owning_organisation_name,managing_organisation_name,lettype,renewal,startdate,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,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,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,referral,referral_value_check,incref,earnings,incfreq,hb,has_benefits,benefits,household_charge,nocharge,period,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_admin_district,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,7,0,2023-06-26T00:00:00+01:00,,,,HIJKLMN,ABCDEFG,0,,fake address,,London,,NW9 5LL,Barnet,2,6,2,2,7,1,1,3,2023-06-24T00:00:00+01:00,,1,2023-06-25T00:00:00+01:00,,3,1,4,,2,,1,1,35,F,0,2,13,0,P,32,M,6,R,,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,68,1,6,1,1,,0,2,,,,200.0,50.0,40.0,35.0,325.0,,,,1,12.0,,,,,,,,,,,,,,,,,,,, \ No newline at end of file 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 0b475c037..32bb0d3f3 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,lettype,renewal,startdate,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,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,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,referral,referral_value_check,incref,earnings,incfreq,hb,has_benefits,benefits,household_charge,nocharge,period,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_admin_district,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,7,No,2023-06-26T00:00:00+01:00,,,,HIJKLMN,ABCDEFG,No,,fake address,,London,,NW9 5LL,Barnet,Affordable rent basis,Tenant abandoned property,2,2,House,Purpose built,Yes,3,2023-06-24T00:00:00+01:00,,Yes,2023-06-25T00:00:00+01:00,,Don’t know,Yes,Assured Shorthold Tenancy (AST) – Fixed term,,2,,1,0,35,Female,White,Irish,Tenant prefers not to say,Other,Partner,32,Male,Not seeking work,,,,,,,,,,,,,,,,,,,,,,,,,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,1,0,0,0,0,0,No,Yes,0,0,1,0,0,0,0,0,0,0,Less than 1 year,1 year but under 2 years,Loss of tied accommodation,,Other supported housing,No,Yes,TN23 6LZ,Ashford,Yes,0,1,0,0,0,0,0,1,Tenant applied directly (no referral or nomination),,0,68,Weekly,Universal Credit housing element,1,All,,0,Every 2 weeks,,,,200.0,50.0,40.0,35.0,325.0,,,,Yes,12.0,,,,,,,,,,,,,,,,,,,, +id,status,created_by,is_dpo,created_at,updated_by,updated_at,creation_method,collection_start_year,owning_organisation_name,managing_organisation_name,lettype,renewal,startdate,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,void_date_value_check,majorrepairs,mrcdate,major_repairs_date_value_check,joint,startertenancy,tenancy,tenancyother,tenancylength,sheltered,declaration,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,referral,referral_value_check,incref,earnings,incfreq,hb,has_benefits,benefits,household_charge,nocharge,period,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_admin_district,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,7,No,2023-06-26T00:00:00+01:00,,,,HIJKLMN,ABCDEFG,No,,fake address,,London,,NW9 5LL,Barnet,Affordable rent basis,Tenant abandoned property,2,2,House,Purpose built,Yes,3,2023-06-24T00:00:00+01:00,,Yes,2023-06-25T00:00:00+01:00,,Don’t know,Yes,Assured Shorthold Tenancy (AST) – Fixed term,,2,,1,1,35,Female,White,Irish,Tenant prefers not to say,Other,Partner,32,Male,Not seeking work,Prefers not to say,,Prefers not to say,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,1,0,0,0,0,0,No,Yes,0,0,1,0,0,0,0,0,0,0,Less than 1 year,1 year but under 2 years,Loss of tied accommodation,,Other supported housing,No,Yes,TN23 6LZ,Ashford,Yes,0,1,0,0,0,0,0,1,Tenant applied directly (no referral or nomination),,0,68,Weekly,Universal Credit housing element,1,All,,0,Every 2 weeks,,,,200.0,50.0,40.0,35.0,325.0,,,,Yes,12.0,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/spec/lib/tasks/recalculate_refused_values_spec.rb b/spec/lib/tasks/recalculate_refused_values_spec.rb new file mode 100644 index 000000000..1f8ce37bf --- /dev/null +++ b/spec/lib/tasks/recalculate_refused_values_spec.rb @@ -0,0 +1,84 @@ +require "rails_helper" +require "rake" + +RSpec.describe "recalculate_refused_values" do + describe ":recalculate_refused_values", type: :task do + subject(:task) { Rake::Task["recalculate_refused_values"] } + + before do + Rake.application.rake_require("tasks/recalculate_refused_values") + Rake::Task.define_task(:environment) + task.reenable + end + + context "when the rake task is run" do + let!(:lettings_log) { create(:lettings_log, :completed, values_updated_at: nil) } + + it "updates refused value to 1 if details for person are not known" do + lettings_log.refused = 0 + lettings_log.details_known_2 = 1 + lettings_log.hhmemb = 2 + lettings_log.save!(validate: false) + task.invoke + lettings_log.reload + expect(lettings_log.refused).to eq(1) + expect(lettings_log.values_updated_at).not_to be_nil + end + + it "does not update refused value if details known is nil" do + lettings_log.update!(details_known_2: nil, hhmemb: 2) + lettings_log.refused = 0 + lettings_log.save!(validate: false) + task.invoke + lettings_log.reload + expect(lettings_log.refused).to eq(0) + expect(lettings_log.values_updated_at).to be_nil + end + + it "does not update refused value if details are known" do + lettings_log.refused = 0 + lettings_log.details_known_2 = 0 + lettings_log.hhmemb = 2 + lettings_log.save!(validate: false) + task.invoke + lettings_log.reload + expect(lettings_log.refused).to eq(0) + expect(lettings_log.values_updated_at).to be_nil + end + + it "updates refused value to 1 if details for any person are not known" do + lettings_log.refused = 0 + lettings_log.details_known_2 = 0 + lettings_log.details_known_3 = 0 + lettings_log.details_known_4 = 0 + lettings_log.details_known_5 = 0 + lettings_log.details_known_6 = 1 + lettings_log.details_known_7 = 0 + lettings_log.details_known_8 = 0 + lettings_log.hhmemb = 8 + lettings_log.save!(validate: false) + task.invoke + lettings_log.reload + expect(lettings_log.refused).to eq(1) + expect(lettings_log.values_updated_at).not_to be_nil + end + + it "updates values updated at if refused is already set to 1 but some details are unknown" do + lettings_log.refused = 1 + lettings_log.details_known_2 = 0 + lettings_log.details_known_3 = 0 + lettings_log.details_known_4 = 0 + lettings_log.details_known_5 = 0 + lettings_log.details_known_6 = 1 + lettings_log.details_known_7 = 0 + lettings_log.details_known_8 = 0 + lettings_log.hhmemb = 8 + lettings_log.save!(validate: false) + task.invoke + lettings_log.reload + expect(lettings_log.refused).to eq(1) + expect(lettings_log.values_updated_at).not_to be_nil + end + end + end +end diff --git a/spec/models/bulk_upload_spec.rb b/spec/models/bulk_upload_spec.rb new file mode 100644 index 000000000..8af5f63ea --- /dev/null +++ b/spec/models/bulk_upload_spec.rb @@ -0,0 +1,21 @@ +require "rails_helper" + +RSpec.describe BulkUpload, type: :model do + let(:bulk_upload) { create(:bulk_upload, log_type: "lettings") } + + describe "def bulk_upload.completed?" do + context "when there are incomplete logs" do + it "returns false" do + create_list(:lettings_log, 2, :in_progress, bulk_upload:) + expect(bulk_upload.completed?).to equal(false) + end + end + + context "when there are no incomplete logs" do + it "returns true" do + create_list(:lettings_log, 2, :completed, bulk_upload:) + expect(bulk_upload.completed?).to equal(true) + end + end + end +end diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index b73c37f4a..82cc254cb 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -1810,22 +1810,41 @@ RSpec.describe LettingsLog do end context "when answering the household characteristics questions" do - let!(:lettings_log) do - described_class.create({ - managing_organisation: owning_organisation, - owning_organisation:, - created_by: created_by_user, - age1_known: 1, - sex1: "R", - relat2: "R", - ecstat1: 10, - }) + context "and some person details are refused" do + let!(:lettings_log) do + described_class.create({ + managing_organisation: owning_organisation, + owning_organisation:, + created_by: created_by_user, + age1_known: 1, + sex1: "R", + relat2: "R", + ecstat1: 10, + }) + end + + it "correctly derives and saves refused" do + record_from_db = described_class.find(lettings_log.id) + expect(record_from_db["refused"]).to eq(1) + expect(lettings_log["refused"]).to eq(1) + end end - it "correctly derives and saves refused" do - record_from_db = described_class.find(lettings_log.id) - expect(record_from_db["refused"]).to eq(1) - expect(lettings_log["refused"]).to eq(1) + context "and some person details are not known" do + let!(:lettings_log) do + described_class.create({ + managing_organisation: owning_organisation, + owning_organisation:, + created_by: created_by_user, + details_known_2: 1, + }) + end + + it "correctly derives and saves refused" do + record_from_db = described_class.find(lettings_log.id) + expect(record_from_db["refused"]).to eq(1) + expect(lettings_log["refused"]).to eq(1) + end end end diff --git a/spec/requests/bulk_upload_lettings_resume_controller_spec.rb b/spec/requests/bulk_upload_lettings_resume_controller_spec.rb index fddba7190..3da25553a 100644 --- a/spec/requests/bulk_upload_lettings_resume_controller_spec.rb +++ b/spec/requests/bulk_upload_lettings_resume_controller_spec.rb @@ -10,10 +10,27 @@ RSpec.describe BulkUploadLettingsResumeController, type: :request do end describe "GET /lettings-logs/bulk-upload-resume/:ID/start" do - it "redirects to choice page" do - get "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/start" + context "when a choice has not been made" do + it "redirects to choice page" do + get "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/start" - expect(response).to redirect_to("/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice") + expect(response).to redirect_to("/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice") + end + end + + context "when a choice has been made and then the logs have been completed" do + let(:lettings_log) { create_list(:lettings_log, 2, :completed, bulk_upload:) } + + it "redirects to the complete page if the bulk uploads are completed" do + bulk_upload.update!(choice: "create-fix-inline") + + get "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/start" + follow_redirect! + expect(response).to redirect_to("/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/chosen") + + follow_redirect! + expect(response.body).to include("You have created logs from your bulk upload, and the logs are complete. Return to lettings logs to view them.") + end end end diff --git a/spec/requests/bulk_upload_sales_resume_controller_spec.rb b/spec/requests/bulk_upload_sales_resume_controller_spec.rb index 9e4ec4a2b..6848112cd 100644 --- a/spec/requests/bulk_upload_sales_resume_controller_spec.rb +++ b/spec/requests/bulk_upload_sales_resume_controller_spec.rb @@ -9,14 +9,6 @@ RSpec.describe BulkUploadSalesResumeController, type: :request do sign_in user end - describe "GET /sales-logs/bulk-upload-resume/:ID/start" do - it "redirects to choice page" do - get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/start" - - expect(response).to redirect_to("/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice") - end - end - describe "GET /sales-logs/bulk-upload-resume/:ID/fix-choice" do it "renders the page correctly" do get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice" @@ -142,11 +134,28 @@ RSpec.describe BulkUploadSalesResumeController, type: :request do end end - describe "GET /sales-logs/bulk-upload-resume/:ID/chosen" do - it "displays correct content" do - get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/chosen" + describe "GET /sales-logs/bulk-upload-resume/:ID/start" do + context "when a choice has not been made" do + it "redirects to choice page" do + get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/start" + + expect(response).to redirect_to("/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice") + end + end + + context "when a choice has been made and then the logs have been completed" do + let(:sales_log) { create_list(:sales_log, 2, :completed, bulk_upload:) } + + it "redirects to the complete page if the bulk uploads are completed" do + bulk_upload.update!(choice: "create-fix-inline") - expect(response.body).to include("You need to fix logs from your bulk upload") + get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/start" + follow_redirect! + expect(response).to redirect_to("/sales-logs/bulk-upload-resume/#{bulk_upload.id}/chosen") + + follow_redirect! + expect(response.body).to include("You have created logs from your bulk upload, and the logs are complete. Return to sales logs to view them.") + end end end end diff --git a/spec/requests/duplicate_logs_controller_spec.rb b/spec/requests/duplicate_logs_controller_spec.rb index fa989e836..9df134e76 100644 --- a/spec/requests/duplicate_logs_controller_spec.rb +++ b/spec/requests/duplicate_logs_controller_spec.rb @@ -192,8 +192,8 @@ RSpec.describe DuplicateLogsController, type: :request do expect(page).to have_button(text: "Delete this log") expect(page).to have_link(text: "Log #{duplicate_log.id}", href: sales_log_path(duplicate_log.id)) expect(page).not_to have_link(text: "Log #{id}", href: sales_log_path(id)) - expect(page).to have_link(text: "Cancel", href: sales_log_duplicate_logs_path(id)) - expect(page).to have_link(text: "Back", href: sales_log_duplicate_logs_path(id)) + expect(page).to have_link(text: "Cancel", href: sales_log_duplicate_logs_path(id, original_log_id: id)) + expect(page).to have_link(text: "Back", href: sales_log_duplicate_logs_path(id, original_log_id: id)) end end @@ -210,8 +210,8 @@ RSpec.describe DuplicateLogsController, type: :request do expect(page).to have_button(text: "Delete these logs") expect(page).to have_link(text: "Log #{duplicate_log.id}", href: sales_log_path(duplicate_log.id)) expect(page).to have_link(text: "Log #{duplicate_log_2.id}", href: sales_log_path(duplicate_log_2.id)) - expect(page).to have_link(text: "Cancel", href: sales_log_duplicate_logs_path(id)) - expect(page).to have_link(text: "Back", href: sales_log_duplicate_logs_path(id)) + expect(page).to have_link(text: "Cancel", href: sales_log_duplicate_logs_path(id, original_log_id: id)) + expect(page).to have_link(text: "Back", href: sales_log_duplicate_logs_path(id, original_log_id: id)) end end @@ -267,8 +267,8 @@ RSpec.describe DuplicateLogsController, type: :request do expect(page).to have_button(text: "Delete this log") expect(page).to have_link(text: "Log #{duplicate_log.id}", href: lettings_log_path(duplicate_log.id)) expect(page).not_to have_link(text: "Log #{id}", href: lettings_log_path(id)) - expect(page).to have_link(text: "Cancel", href: lettings_log_duplicate_logs_path(id)) - expect(page).to have_link(text: "Back", href: lettings_log_duplicate_logs_path(id)) + expect(page).to have_link(text: "Cancel", href: lettings_log_duplicate_logs_path(id, original_log_id: id)) + expect(page).to have_link(text: "Back", href: lettings_log_duplicate_logs_path(id, original_log_id: id)) end end @@ -285,8 +285,8 @@ RSpec.describe DuplicateLogsController, type: :request do expect(page).to have_button(text: "Delete these logs") expect(page).to have_link(text: "Log #{duplicate_log.id}", href: lettings_log_path(duplicate_log.id)) expect(page).to have_link(text: "Log #{duplicate_log_2.id}", href: lettings_log_path(duplicate_log_2.id)) - expect(page).to have_link(text: "Cancel", href: lettings_log_duplicate_logs_path(id)) - expect(page).to have_link(text: "Back", href: lettings_log_duplicate_logs_path(id)) + expect(page).to have_link(text: "Cancel", href: lettings_log_duplicate_logs_path(id, original_log_id: id)) + expect(page).to have_link(text: "Back", href: lettings_log_duplicate_logs_path(id, original_log_id: id)) end end diff --git a/spec/services/csv/lettings_log_csv_service_spec.rb b/spec/services/csv/lettings_log_csv_service_spec.rb index 5236f1206..c0e04bf54 100644 --- a/spec/services/csv/lettings_log_csv_service_spec.rb +++ b/spec/services/csv/lettings_log_csv_service_spec.rb @@ -19,6 +19,8 @@ RSpec.describe Csv::LettingsLogCsvService do ppostcode_full: "TN23 6LZ", created_by: user, managing_organisation: organisation, + hhmemb: 3, + details_known_3: 1, ) end let(:user) { create(:user, :support, email: "s.port@jeemayle.com") } diff --git a/spec/services/exports/lettings_log_export_service_spec.rb b/spec/services/exports/lettings_log_export_service_spec.rb index 7b9f55b93..5402c19db 100644 --- a/spec/services/exports/lettings_log_export_service_spec.rb +++ b/spec/services/exports/lettings_log_export_service_spec.rb @@ -150,6 +150,32 @@ RSpec.describe Exports::LettingsLogExportService do end end + context "and one lettings log with unknown user details is available for export" do + let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, details_known_2: 1, created_by: user, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) } + + def replace_person_details(export_file) + export_file.sub!("32", "-9") + export_file.sub!("6", "10") + export_file.sub!("M", "R") + export_file.sub!("P", "R") + export_file.sub!("0", "1") + export_file.sub!("4", "3") + export_file.sub!("2", "1") + end + + it "generates an XML export file with the expected content within the ZIP file" do + expected_content = replace_entity_ids(lettings_log, xml_export_file.read) + expected_content = replace_person_details(expected_content) + expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) do |_, content| + entry = Zip::File.open_buffer(content).find_entry(expected_data_filename) + expect(entry).not_to be_nil + expect(entry.get_input_stream.read).to eq(expected_content) + end + + export_service.export_xml_lettings_logs + end + end + context "with 23/24 collection period" do before do Timecop.freeze(Time.zone.local(2023, 4, 3)) diff --git a/spec/services/imports/import_report_service_spec.rb b/spec/services/imports/import_report_service_spec.rb index 82e7aace7..ac6b58d31 100644 --- a/spec/services/imports/import_report_service_spec.rb +++ b/spec/services/imports/import_report_service_spec.rb @@ -58,12 +58,16 @@ RSpec.describe Imports::ImportReportService 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\norg2,2,5,6,5,7", headers: true) } before do - create(:organisation, old_visible_id: "1", name: "org1") + org1 = create(:organisation, old_visible_id: "1", name: "org1") create(:organisation, old_visible_id: "2", name: "org2") + create(:lettings_log, :completed, owning_organisation: org1, old_id: "fake_old_id") + create(:lettings_log, :completed, owning_organisation: org1, old_id: nil) + create(:sales_log, :completed, owning_organisation: org1, old_id: "fake_sales_old_id") + create(:sales_log, :completed, owning_organisation: org1, old_id: nil) end it "generates a report with imported logs" do - expect(storage_service).to receive(:write_file).with("MigratedLogsReport_report_suffix.csv", "\uFEFFInstitution name,Id,Old Completed lettings logs,Old In progress lettings logs,Old Completed sales logs,Old In progress sales logs,New Completed lettings logs,New In Progress lettings logs,New Completed sales logs,New In Progress sales logs\norg1,1,2,1,4,3,0,0,0,0\norg2,2,5,6,5,7,0,0,0,0\n") + expect(storage_service).to receive(:write_file).with("MigratedLogsReport_report_suffix.csv", "\uFEFFInstitution name,Id,Old Completed lettings logs,Old In progress lettings logs,Old Completed sales logs,Old In progress sales logs,New Completed lettings logs,New In Progress lettings logs,New Completed sales logs,New In Progress sales logs\norg1,1,2,1,4,3,1,0,1,0\norg2,2,5,6,5,7,0,0,0,0\n") report_service.generate_logs_report("report_suffix.csv") end end @@ -89,6 +93,8 @@ RSpec.describe Imports::ImportReportService do before do create(:organisation_relationship, parent_organisation: organisation, child_organisation: organisation2) + create(:sales_log, owning_organisation: organisation, created_by: unassigned_user, purchid: "purchid_2", old_id: nil) + create(:lettings_log, owning_organisation: organisation, managing_organisation: organisation2, created_by: unassigned_user, tenancycode: "tenancycode_2", old_id: nil) end it "writes a report with all unassigned logs" do diff --git a/spec/views/organisations/show.html.erb_spec.rb b/spec/views/organisations/show.html.erb_spec.rb index 142097c27..119462349 100644 --- a/spec/views/organisations/show.html.erb_spec.rb +++ b/spec/views/organisations/show.html.erb_spec.rb @@ -98,7 +98,7 @@ RSpec.describe "organisations/show.html.erb" do it "shows data sharing agreement accepted with date" do render - expect(fragment).to have_content("Accepted 10/01/2023") + expect(fragment).to have_content("Accepted 04/02/2022") end it "shows show name of who signed the agreement" do