diff --git a/app/helpers/check_answers_helper.rb b/app/helpers/check_answers_helper.rb index 3e59de811..1cc1bc65e 100644 --- a/app/helpers/check_answers_helper.rb +++ b/app/helpers/check_answers_helper.rb @@ -56,6 +56,8 @@ module CheckAnswersHelper operator = condition[/[<>=]+/].to_sym operand = condition[/\d+/].to_i case_log[question_key].blank? || !case_log[question_key].send(operator, operand) + when "text" + case_log[question_key].blank? || !condition.include?(case_log[question_key]) when "radio" case_log[question_key].blank? || !condition.include?(case_log[question_key]) else diff --git a/app/views/form/_select_question.html.erb b/app/views/form/_select_question.html.erb new file mode 100644 index 000000000..6f41b6b35 --- /dev/null +++ b/app/views/form/_select_question.html.erb @@ -0,0 +1,11 @@ + +<%= answers = question["answer_options"].map {|key, value| OpenStruct.new(id:key, name: value)} + f.govuk_collection_select question_key, + answers, + :name, + :name, + label: { text: question["header"]}, + hint: { text: question["hint_text"] } + %> + + diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index 210089009..498e064b2 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -3,6 +3,181 @@ "start_year": 2021, "end_year": 2022, "sections": { + "about_this_log": { + "label": "About this log", + "subsections": { + "about_this_log": { + "label": "About this log", + "pages": { + "gdpr_acceptance": { + "header": "DLUHC Privacy Notice Acceptance", + "description": "", + "questions": { + "gdpr_acceptance": { + "check_answer_label": "GDPR acceptance", + "header": "Has the tenant or buyer seen the DLUHC privacy notice?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + } + }, + "conditional_route_to": { + "organisation_details": { "gdpr_acceptance": "Yes" } + }, + "default_next_page": "gdpr_declined" + }, + "gdpr_declined": { + "header": "You cannot use this service", + "hint_text": "", + "description": "We cannot accept data about a tenant or buyer unless they’ve seen the DLUHC privacy notice.", + "questions": { + + }, + "default_next_page" : "check_answers" + }, + "organisation_details": { + "header": "About this log", + "description": "Organisation Details", + "questions": { + "property_owner_organisation": { + "check_answer_label": "", + "header": "Which organisation owns this property?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "A", + "1": "B" + } + }, + "property_manager_organisation": { + "check_answer_label": "", + "header": "Which organisation manages this property?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "A", + "1": "B" + } + } + } + }, + "sale_or_letting": { + "header": "About this log", + "description": "Is this a sale or a letting?", + "questions": { + "sale_or_letting": { + "check_answer_label": "", + "header": "Is this a sale or a letting?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Sale", + "1": "Letting" + } + } + }, + "conditional_route_to": { + "tenant_same_property_renewal": { "sale_or_letting": "Letting" } + }, + "default_next_page" : "check_answers" + }, + "tenant_same_property_renewal": { + "header": "About this log", + "description": "Is this a renewal to the same tenant in the same property?", + "questions": { + "tenant_same_property_renewal": { + "check_answer_label": "", + "header": "Is this a renewal to the same tenant in the same property?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + } + } + }, + "tenancy_start_date": { + "header": "About this log", + "description": "", + "questions": { + "tenancy_start_date": { + "check_answer_label": "When is the tenancy start date?", + "header": "What is the tenancy start date?", + "hint_text": "For example, 27 3 2007", + "type": "date" + } + } + }, + "letting_type": { + "header": "About this log", + "description": "", + "questions": { + "rent_type": { + "check_answer_label": "What is the rent type?", + "header": "What is the rent type?", + "hint_text": "", + "type": "select", + "answer_options": { + "0": "Social Rent", + "1": "Affordable Rent", + "2": "London Affordable Rent", + "3": "Rent To Buy", + "4": "London Living Rent", + "5": "Other Intermediate Rent Product" + }, + "conditional_for": { + "intermediate_rent_product_name": ["Other Intermediate Rent Product"] + } + }, + "intermediate_rent_product_name": { + "check_answer_label": "Enter the product name", + "header": "What is intermediate rent product name?", + "type": "text" + }, + "needs_type": { + "check_answer_label": "What is the needs type?", + "header": "What is the needs type?", + "hint_text": "", + "type": "select", + "answer_options": { + "0": "Supported Housing", + "1": "General Needs" + } + } + } + }, + "sale_completion_date": { + "header": "About this log", + "description": "", + "questions": { + "sale_completion_date": { + "check_answer_label": "What is the sale completion date?", + "header": "What is the sale completion date?", + "hint_text": "For example, 27 3 2007", + "type": "date" + } + } + }, + "purchaser_code": { + "header": "About this log", + "description": "", + "questions": { + "purchaser_code": { + "check_answer_label": "What is the purchaser code?", + "header": "What is the purchaser code?", + "hint_text": "", + "type": "text" + } + } + } + } + } + } + }, "household": { "label": "About the household", "subsections": { diff --git a/db/migrate/20211102100820_add_about_this_log_readable_columns.rb b/db/migrate/20211102100820_add_about_this_log_readable_columns.rb new file mode 100644 index 000000000..b451af20e --- /dev/null +++ b/db/migrate/20211102100820_add_about_this_log_readable_columns.rb @@ -0,0 +1,17 @@ +class AddAboutThisLogReadableColumns < ActiveRecord::Migration[6.1] + def change + change_table :case_logs, bulk: true do |t| + t.column :gdpr_acceptance, :string + t.column :gdpr_declined, :string + t.column :property_owner_organisation, :string + t.column :property_manager_organisation, :string + t.column :sale_or_letting, :string + t.column :tenant_same_property_renewal, :string + t.column :rent_type, :string + t.column :intermediate_rent_product_name, :string + t.column :needs_type, :string + t.column :sale_completion_date, :string + t.column :purchaser_code, :string + end + end +end diff --git a/spec/fixtures/forms/test_aboutthislog.json b/spec/fixtures/forms/test_aboutthislog.json new file mode 100644 index 000000000..2cfd8ff26 --- /dev/null +++ b/spec/fixtures/forms/test_aboutthislog.json @@ -0,0 +1,180 @@ +{ + "form_type": "lettings", + "sections": { + "about_this_log": { + "label": "About this log", + "subsections": { + "about_this_log": { + "label": "About this log", + "pages": { + "gdpr_acceptance": { + "header": "DLUHC Privacy Notice Acceptance", + "description": "", + "questions": { + "gdpr_acceptance": { + "check_answer_label": "GDPR acceptance", + "header": "Has the tenant or buyer seen the DLUHC privacy notice?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + } + }, + "conditional_route_to": { + "organisation_details": { "gdpr_acceptance": "Yes" } + }, + "default_next_page": "gdpr_declined" + }, + "gdpr_declined": { + "header": "You cannot use this service", + "hint_text": "", + "description": "We cannot accept data about a tenant or buyer unless they’ve seen the DLUHC privacy notice.", + "questions": { + + }, + "default_next_page" : "check_answers" + }, + "organisation_details": { + "header": "About this log", + "description": "Organisation Details", + "questions": { + "property_owner_organisation": { + "check_answer_label": "", + "header": "Which organisation owns this property?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "A", + "1": "B" + } + }, + "property_manager_organisation": { + "check_answer_label": "", + "header": "Which organisation manages this property?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "A", + "1": "B" + } + } + } + }, + "sale_or_letting": { + "header": "About this log", + "description": "Is this a sale or a letting?", + "questions": { + "sale_or_letting": { + "check_answer_label": "", + "header": "Is this a sale or a letting?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Sale", + "1": "Letting" + } + } + }, + "conditional_route_to": { + "tenant_same_property_renewal": { "sale_or_letting": "Letting" } + }, + "default_next_page" : "check_answers" + }, + "tenant_same_property_renewal": { + "header": "About this log", + "description": "Is this a renewal to the same tenant in the same property?", + "questions": { + "tenant_same_property_renewal": { + "check_answer_label": "", + "header": "Is this a renewal to the same tenant in the same property?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + } + } + }, + "tenancy_start_date": { + "header": "About this log", + "description": "", + "questions": { + "tenancy_start_date": { + "check_answer_label": "When is the tenancy start date?", + "header": "What is the tenancy start date?", + "hint_text": "For example, 27 3 2007", + "type": "date" + } + } + }, + "letting_type": { + "header": "About this log", + "description": "", + "questions": { + "rent_type": { + "check_answer_label": "What is the rent type?", + "header": "What is the rent type?", + "hint_text": "", + "type": "select", + "answer_options": { + "0": "Social Rent", + "1": "Affordable Rent", + "2": "London Affordable Rent", + "3": "Rent To Buy", + "4": "London Living Rent", + "5": "Other Intermediate Rent Product" + }, + "conditional_for": { + "intermediate_rent_product_name": ["Other Intermediate Rent Product"] + } + }, + "intermediate_rent_product_name": { + "check_answer_label": "Enter the product name", + "header": "What is intermediate rent product name?", + "type": "text" + }, + "needs_type": { + "check_answer_label": "What is the needs type?", + "header": "What is the needs type?", + "hint_text": "", + "type": "select", + "answer_options": { + "0": "Supported Housing", + "1": "General Needs" + } + } + } + }, + "sale_completion_date": { + "header": "About this log", + "description": "", + "questions": { + "sale_completion_date": { + "check_answer_label": "What is the sale completion date?", + "header": "What is the sale completion date?", + "hint_text": "For example, 27 3 2007", + "type": "date" + } + } + }, + "purchaser_code": { + "header": "About this log", + "description": "", + "questions": { + "purchaser_code": { + "check_answer_label": "What is the purchaser code?", + "header": "What is the purchaser code?", + "hint_text": "", + "type": "text" + } + } + } + } + } + } + } + } +} diff --git a/spec/helpers/check_answers_helper_spec.rb b/spec/helpers/check_answers_helper_spec.rb index 41ffd70ef..fb8deec77 100644 --- a/spec/helpers/check_answers_helper_spec.rb +++ b/spec/helpers/check_answers_helper_spec.rb @@ -102,7 +102,7 @@ RSpec.describe CheckAnswersHelper do end it "raises an error" do - allow_any_instance_of(Form).to receive(:pages_for_subsection).and_return(unimplemented_conditional) + allow_any_instance_of(Form).to receive(:questions_for_page).and_return(unimplemented_conditional) expect { total_number_of_questions(subsection, case_log, form) }.to raise_error(RuntimeError, "Not implemented yet") end end