diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 6c5c44b46..b0468c875 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -9,9 +9,8 @@ class FormController < ApplicationController @page = @log.form.get_page(params[@log.model_name.param_key][:page]) responses_for_page = responses_for_page(@page) mandatory_questions_with_no_response = mandatory_questions_with_no_response(responses_for_page) - reset_created_by - if mandatory_questions_with_no_response.empty? && @log.update(responses_for_page) + if mandatory_questions_with_no_response.empty? && @log.update(responses_for_page.merge(updated_by: current_user)) session[:errors] = session[:fields] = nil redirect_to(successful_redirect_path) else @@ -184,12 +183,4 @@ private redirect_to lettings_log_path(@log) unless @log.collection_period_open? end - - def reset_created_by - return unless current_user.support? - return if @log.owning_organisation.blank? || @log.managing_organisation.blank? - return if @log.created_by&.organisation == @log.managing_organisation || @log.created_by&.organisation == @log.owning_organisation - - @log.update!(created_by: nil) - end end diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 14d0ead2c..a7d4f80d6 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -27,7 +27,6 @@ class LettingsLog < Log before_validation :reset_scheme_location!, if: :scheme_changed?, unless: :location_changed? before_validation :process_postcode_changes!, if: :postcode_full_changed? before_validation :process_previous_postcode_changes!, if: :ppostcode_full_changed? - before_validation :reset_invalidated_dependent_fields! before_validation :reset_location_fields!, unless: :postcode_known? before_validation :reset_previous_location_fields!, unless: :previous_postcode_known? before_validation :set_derived_fields! diff --git a/app/models/log.rb b/app/models/log.rb index 8f9589c6f..45cd2d297 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -4,7 +4,9 @@ class Log < ApplicationRecord belongs_to :owning_organisation, class_name: "Organisation", optional: true belongs_to :managing_organisation, class_name: "Organisation", optional: true belongs_to :created_by, class_name: "User", optional: true + belongs_to :updated_by, class_name: "User", optional: true before_save :update_status! + before_validation :reset_invalidated_dependent_fields! STATUS = { "not_started" => 0, "in_progress" => 1, "completed" => 2 }.freeze enum status: STATUS @@ -76,5 +78,15 @@ private return unless form form.reset_not_routed_questions(self) + + reset_created_by! + end + + def reset_created_by! + return unless updated_by&.support? + return if owning_organisation.blank? || managing_organisation.blank? + return if created_by&.organisation == managing_organisation || created_by&.organisation == owning_organisation + + update!(created_by: nil) end end diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index d3066974f..557a8046d 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -19,7 +19,6 @@ class SalesLog < Log validates_with SalesLogValidator before_validation :set_derived_fields! - before_validation :reset_invalidated_dependent_fields! 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 :search_by, ->(param) { filter_by_id(param) } diff --git a/app/services/csv/lettings_log_csv_service.rb b/app/services/csv/lettings_log_csv_service.rb index 67078fb03..d084bfaa1 100644 --- a/app/services/csv/lettings_log_csv_service.rb +++ b/app/services/csv/lettings_log_csv_service.rb @@ -1,6 +1,6 @@ module Csv class LettingsLogCsvService - CSV_FIELDS_TO_OMIT = %w[hhmemb net_income_value_check first_time_property_let_as_social_housing renttype needstype postcode_known is_la_inferred totchild totelder totadult net_income_known is_carehome previous_la_known is_previous_la_inferred age1_known age2_known age3_known age4_known age5_known age6_known age7_known age8_known letting_allocation_unknown details_known_2 details_known_3 details_known_4 details_known_5 details_known_6 details_known_7 details_known_8 rent_type_detail wrent wscharge wpschrge wsupchrg wtcharge wtshortfall rent_value_check old_form_id old_id retirement_value_check tshortfall_known pregnancy_value_check hhtype new_old vacdays la prevloc unresolved].freeze + CSV_FIELDS_TO_OMIT = %w[hhmemb net_income_value_check first_time_property_let_as_social_housing renttype needstype postcode_known is_la_inferred totchild totelder totadult net_income_known is_carehome previous_la_known is_previous_la_inferred age1_known age2_known age3_known age4_known age5_known age6_known age7_known age8_known letting_allocation_unknown details_known_2 details_known_3 details_known_4 details_known_5 details_known_6 details_known_7 details_known_8 rent_type_detail wrent wscharge wpschrge wsupchrg wtcharge wtshortfall rent_value_check old_form_id old_id retirement_value_check tshortfall_known pregnancy_value_check hhtype new_old vacdays la prevloc unresolved updated_by_id].freeze def initialize(user) @user = user diff --git a/db/migrate/20221207141947_add_updated_by_to_logs.rb b/db/migrate/20221207141947_add_updated_by_to_logs.rb new file mode 100644 index 000000000..9bc80c526 --- /dev/null +++ b/db/migrate/20221207141947_add_updated_by_to_logs.rb @@ -0,0 +1,10 @@ +class AddUpdatedByToLogs < ActiveRecord::Migration[7.0] + def change + change_table :lettings_logs, bulk: true do |t| + t.belongs_to :updated_by, class_name: "User" + end + change_table :sales_logs, bulk: true do |t| + t.belongs_to :updated_by, class_name: "User" + end + end +end diff --git a/db/schema.rb b/db/schema.rb index ac78ab8fc..e32a01805 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -250,12 +250,14 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_13_085819) do t.integer "housingneeds_type" t.integer "housingneeds_other" t.boolean "unresolved" + t.bigint "updated_by_id" t.index ["created_by_id"], name: "index_lettings_logs_on_created_by_id" t.index ["location_id"], name: "index_lettings_logs_on_location_id" t.index ["managing_organisation_id"], name: "index_lettings_logs_on_managing_organisation_id" t.index ["old_id"], name: "index_lettings_logs_on_old_id", unique: true t.index ["owning_organisation_id"], name: "index_lettings_logs_on_owning_organisation_id" t.index ["scheme_id"], name: "index_lettings_logs_on_scheme_id" + t.index ["updated_by_id"], name: "index_lettings_logs_on_updated_by_id" end create_table "location_deactivation_periods", force: :cascade do |t| @@ -403,6 +405,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_13_085819) do t.integer "savings" t.integer "prevown" t.string "sex3" + t.bigint "updated_by_id" t.integer "details_known_1" t.integer "income1_value_check" t.integer "mortgage" @@ -411,6 +414,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_13_085819) do t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id" t.index ["managing_organisation_id"], name: "index_sales_logs_on_managing_organisation_id" t.index ["owning_organisation_id"], name: "index_sales_logs_on_owning_organisation_id" + t.index ["updated_by_id"], name: "index_sales_logs_on_updated_by_id" end create_table "scheme_deactivation_periods", force: :cascade do |t|