Browse Source

Add `updated_by` to logs to track who was the last person to update a log

- Reset `created_by` automatically when a form is updated and the owner does not belong to the managing or owning organisation
pull/1055/head
James Rose 4 years ago committed by Kat
parent
commit
9ccead7087
  1. 11
      app/controllers/form_controller.rb
  2. 1
      app/models/lettings_log.rb
  3. 12
      app/models/log.rb
  4. 1
      app/models/sales_log.rb
  5. 2
      app/services/csv/lettings_log_csv_service.rb
  6. 10
      db/migrate/20221207141947_add_updated_by_to_logs.rb
  7. 4
      db/schema.rb

11
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

1
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!

12
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

1
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) }

2
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

10
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

4
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|

Loading…
Cancel
Save