diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index 82ea9ec1e..f039e2d56 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -26,7 +26,7 @@ class CaseLogsController < ApplicationController previous_page = params[:case_log][:previous_page] questions_for_page = form.questions_for_page(previous_page) responses_for_page = question_responses(questions_for_page) - + @case_log.previous_page = previous_page if @case_log.update(responses_for_page) redirect_path = form.next_page_redirect_path(previous_page) redirect_to(send(redirect_path, @case_log)) @@ -45,7 +45,7 @@ class CaseLogsController < ApplicationController form = Form.new(2021, 2022) form.all_pages.map do |page_key, page_info| - define_method(page_key) do + define_method(page_key) do |_errors = {}| @case_log = CaseLog.find(params[:case_log_id]) render "form/page", locals: { form: form, page_key: page_key, page_info: page_info } end diff --git a/app/models/case_log.rb b/app/models/case_log.rb index c05ed887b..aa17eddf6 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -1,5 +1,37 @@ +class CaseLogValidator < ActiveModel::Validator + # Methods need to be named 'validate_' followed by field name + # this is how the metaprogramming of the method name being + # call in the validate method works. + + def validate_tenant_code(record) + if record.tenant_code.blank? + record.errors.add :tenant_code, "Tenant code can't be blank" + end + end + + def validate_tenant_age(record) + if record.tenant_age.blank? + record.errors.add :tenant_age, "Tenant age can't be blank" + elsif !/^[1-9][0-9]?$|^100$/.match?(record.tenant_age.to_s) + record.errors.add :tenant_age, "Tenant age must be between 0 and 100" + end + end + + def validate(record) + question_to_validate = options[:previous_page] + if respond_to?("validate_#{question_to_validate}") + public_send("validate_#{question_to_validate}", record) + end + end +end + class CaseLog < ApplicationRecord + validate :instance_validations + attr_writer :previous_page + enum status: { "in progress" => 0, "submitted" => 1 } - # validates :tenant_age, presence: true + def instance_validations + validates_with CaseLogValidator, ({ previous_page: @previous_page } || {}) + end end diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index 64123b540..2d6619dd5 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -6,6 +6,7 @@ <% end %> <%= turbo_frame_tag "case_log_form", target: "_top" do %> + <% if page_info["header"].present? %>

<%= page_info["header"] %> diff --git a/db/migrate/20211011115946_rename_economic_status_fields.rb b/db/migrate/20211011115946_rename_economic_status_fields.rb index b7c6a94ab..6862554bb 100644 --- a/db/migrate/20211011115946_rename_economic_status_fields.rb +++ b/db/migrate/20211011115946_rename_economic_status_fields.rb @@ -1,5 +1,5 @@ class RenameEconomicStatusFields < ActiveRecord::Migration[6.1] - def change + def up change_table :case_logs, bulk: true do |t| t.rename :person_2_economic, :person_2_economic_status t.rename :person_3_economic, :person_3_economic_status @@ -8,7 +8,20 @@ class RenameEconomicStatusFields < ActiveRecord::Migration[6.1] t.rename :person_6_economic, :person_6_economic_status t.rename :person_7_economic, :person_7_economic_status t.rename :person_8_economic, :person_8_economic_status - t.rename :postcode, :property_postcode end + remove_column :case_logs, :postcode + end + + def down + change_table :case_logs, bulk: true do |t| + t.rename :person_2_economic_status, :person_2_economic + t.rename :person_3_economic_status, :person_3_economic + t.rename :person_4_economic_status, :person_4_economic + t.rename :person_5_economic_status, :person_5_economic + t.rename :person_6_economic_status, :person_6_economic + t.rename :person_7_economic_status, :person_7_economic + t.rename :person_8_economic_status, :person_8_economic + end + add_column :case_logs, :postcode, :string end end diff --git a/db/schema.rb b/db/schema.rb index 3f5910828..08f44eb0a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -101,12 +101,14 @@ ActiveRecord::Schema.define(version: 2021_10_11_115946) do t.string "time_lived_in_la" t.string "time_on_la_waiting_list" t.string "previous_la" + t.string "property_postcode" t.string "reasonable_preference" t.string "reasonable_preference_reason" t.string "cbl_letting" t.string "chr_letting" t.string "cap_letting" t.string "outstanding_rent_or_charges" + t.string "other_reason_for_leaving_last_settled_home" t.boolean "accessibility_requirements_fully_wheelchair_accessible_housing" t.boolean "accessibility_requirements_wheelchair_access_to_essential_rooms" t.boolean "accessibility_requirements_level_access_housing" @@ -130,7 +132,6 @@ ActiveRecord::Schema.define(version: 2021_10_11_115946) do t.boolean "reasonable_preference_reason_medical_grounds" t.boolean "reasonable_preference_reason_avoid_hardship" t.boolean "reasonable_preference_reason_do_not_know" - t.string "property_postcode" end end