From 40b6f4d53fc372dd88ce6b3b43c22eaf29c4aa10 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:46:29 +0000 Subject: [PATCH 1/3] Remove email from footer (#2076) --- app/views/layouts/_footer.html.erb | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/app/views/layouts/_footer.html.erb b/app/views/layouts/_footer.html.erb index 3dc3a70b3..f105cb9d5 100644 --- a/app/views/layouts/_footer.html.erb +++ b/app/views/layouts/_footer.html.erb @@ -17,16 +17,6 @@
  • Monday to Friday, 9am to 5:30pm
    (except public holidays)
  • - -
    -

    Email

    - -

    Helpful links

    From 1098e6f2c55f38306356fafd5c743c71001611fe Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:59:21 +0000 Subject: [PATCH 2/3] CLDC-3028 Allow bulk uploading for merged organisations (#2067) * Allow bulk uploading for merged organisations * Allow bu for absorbed orgs with moved users --- app/models/organisation.rb | 5 +++ .../lettings/year2023/row_parser.rb | 8 ++-- .../bulk_upload/sales/year2023/row_parser.rb | 7 ++-- .../lettings/year2023/row_parser_spec.rb | 22 ++++++++++ .../sales/year2023/row_parser_spec.rb | 40 +++++++++++++++++++ 5 files changed, 74 insertions(+), 8 deletions(-) diff --git a/app/models/organisation.rb b/app/models/organisation.rb index 077f0413e..da6a92d0d 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -25,6 +25,11 @@ class Organisation < ApplicationRecord ids << id end + absorbed_organisations.each do |organisation| + ids.concat(organisation.stock_owners.pluck(:id)) + ids << organisation.id if organisation.holds_own_stock? + end + ids.concat(stock_owners.pluck(:id)) Organisation.where(id: ids) diff --git a/app/services/bulk_upload/lettings/year2023/row_parser.rb b/app/services/bulk_upload/lettings/year2023/row_parser.rb index 585ec7c93..25b00302c 100644 --- a/app/services/bulk_upload/lettings/year2023/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2023/row_parser.rb @@ -540,11 +540,11 @@ private def validate_created_by_related return unless created_by + return if created_by.organisation == owning_organisation || created_by.organisation == managing_organisation + return if created_by.organisation == owning_organisation&.absorbing_organisation || created_by.organisation == managing_organisation&.absorbing_organisation - unless (created_by.organisation == owning_organisation) || (created_by.organisation == managing_organisation) - block_log_creation! - errors.add(:field_3, "User must be related to owning organisation or managing organisation") - end + block_log_creation! + errors.add(:field_3, "User must be related to owning organisation or managing organisation") end def created_by diff --git a/app/services/bulk_upload/sales/year2023/row_parser.rb b/app/services/bulk_upload/sales/year2023/row_parser.rb index 6ce207abf..c83c9161a 100644 --- a/app/services/bulk_upload/sales/year2023/row_parser.rb +++ b/app/services/bulk_upload/sales/year2023/row_parser.rb @@ -1195,11 +1195,10 @@ private def validate_created_by_related return unless created_by + return if created_by.organisation == owning_organisation || created_by.organisation == owning_organisation&.absorbing_organisation - unless created_by.organisation == owning_organisation - block_log_creation! - errors.add(:field_2, "User must be related to owning organisation", category: :setup) - end + block_log_creation! + errors.add(:field_2, "User must be related to owning organisation", category: :setup) end def setup_question?(question) diff --git a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb index 86e45ca2d..af713d29b 100644 --- a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb @@ -1384,6 +1384,28 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do expect(parser).to be_block_log_creation end end + + context "when user's org has absorbed owning organisation" do + let(:merged_org) { create(:organisation, :with_old_visible_id, holds_own_stock: true) } + let(:merged_org_stock_owner) { create(:organisation, :with_old_visible_id, holds_own_stock: true) } + + let(:attributes) { { bulk_upload:, field_1: merged_org_stock_owner.old_visible_id, field_2: merged_org.old_visible_id, field_3: user.email } } + + before do + create(:organisation_relationship, parent_organisation: merged_org_stock_owner, child_organisation: merged_org) + merged_org.update!(absorbing_organisation: user.organisation, merge_date: Time.zone.today) + merged_org.reload + user.organisation.reload + end + + it "is permitted" do + parser = described_class.new(attributes) + + parser.valid? + expect(parser.errors.where(:field_1)).not_to be_present + expect(parser.errors.where(:field_3)).not_to be_present + end + end end describe "#field_2" do # managing org diff --git a/spec/services/bulk_upload/sales/year2023/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2023/row_parser_spec.rb index 0745274fc..408ce099b 100644 --- a/spec/services/bulk_upload/sales/year2023/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2023/row_parser_spec.rb @@ -417,6 +417,46 @@ RSpec.describe BulkUpload::Sales::Year2023::RowParser do expect(parser).to be_block_log_creation end end + + context "when user's org has absorbed owning organisation with stock owners" do + let(:merged_org) { create(:organisation, :with_old_visible_id, holds_own_stock: true) } + let(:merged_org_stock_owner) { create(:organisation, :with_old_visible_id, holds_own_stock: true) } + + let(:attributes) { { bulk_upload:, field_1: merged_org_stock_owner.old_visible_id } } + + before do + create(:organisation_relationship, parent_organisation: merged_org_stock_owner, child_organisation: merged_org) + merged_org.update!(absorbing_organisation: user.organisation, merge_date: Time.zone.today) + merged_org.reload + user.organisation.reload + end + + it "is permitted" do + parser.valid? + expect(parser.errors.where(:field_1)).not_to be_present + end + end + + context "when user's org has absorbed owning organisation" do + let(:merged_org) { create(:organisation, :with_old_visible_id, holds_own_stock: true) } + + let(:attributes) { { bulk_upload:, field_1: merged_org.old_visible_id, field_2: user.email } } + + before do + merged_org.update!(absorbing_organisation: user.organisation, merge_date: Time.zone.today) + merged_org.reload + user.organisation.reload + user.reload + end + + it "is permitted" do + parser = described_class.new(attributes) + + parser.valid? + expect(parser.errors.where(:field_1)).not_to be_present + expect(parser.errors.where(:field_2)).not_to be_present + end + end end describe "#field_2" do # username for created_by From 98e07753ff0060ddb26d3022962170a2c0aa1b31 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Wed, 6 Dec 2023 15:35:58 +0000 Subject: [PATCH 3/3] CLDC-2938 Add sales managing org (#2048) * Add managing_organisation_id to sales * Set sales managing org id to owning org id --- app/models/sales_log.rb | 2 + ...1131725_add_sales_managing_organisation.rb | 7 +++ db/schema.rb | 4 +- .../set_sales_managing_organisation.rake | 4 ++ .../set_sales_managing_organisation_spec.rb | 48 +++++++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20231121131725_add_sales_managing_organisation.rb create mode 100644 lib/tasks/set_sales_managing_organisation.rake create mode 100644 spec/lib/tasks/set_sales_managing_organisation_spec.rb diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index 4345b9694..fd330f5c5 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -33,6 +33,8 @@ class SalesLog < Log before_validation :set_derived_fields! before_validation :process_uprn_change!, if: :should_process_uprn_change? + belongs_to :managing_organisation, class_name: "Organisation", optional: true + 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 :filter_by_purchaser_code, ->(purchid) { where("purchid ILIKE ?", "%#{purchid}%") } scope :search_by, lambda { |param| diff --git a/db/migrate/20231121131725_add_sales_managing_organisation.rb b/db/migrate/20231121131725_add_sales_managing_organisation.rb new file mode 100644 index 000000000..f4085414a --- /dev/null +++ b/db/migrate/20231121131725_add_sales_managing_organisation.rb @@ -0,0 +1,7 @@ +class AddSalesManagingOrganisation < ActiveRecord::Migration[7.0] + def change + change_table :sales_logs, bulk: true do |t| + t.references :managing_organisation, class_name: "Organisation" + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 7eda570d1..b3c7e3797 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_10_23_142854) do +ActiveRecord::Schema[7.0].define(version: 2023_11_21_131725) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -624,8 +624,10 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_23_142854) do t.integer "creation_method", default: 1 t.integer "old_form_id" t.datetime "values_updated_at" + t.bigint "managing_organisation_id" t.index ["bulk_upload_id"], name: "index_sales_logs_on_bulk_upload_id" 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 ["old_id"], name: "index_sales_logs_on_old_id", unique: true 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" diff --git a/lib/tasks/set_sales_managing_organisation.rake b/lib/tasks/set_sales_managing_organisation.rake new file mode 100644 index 000000000..85e2ced22 --- /dev/null +++ b/lib/tasks/set_sales_managing_organisation.rake @@ -0,0 +1,4 @@ +desc "Set sales managing organisation id to owning organisation id" +task set_sales_managing_organisation: :environment do + SalesLog.where.not(owning_organisation_id: nil).update_all("managing_organisation_id = owning_organisation_id") +end diff --git a/spec/lib/tasks/set_sales_managing_organisation_spec.rb b/spec/lib/tasks/set_sales_managing_organisation_spec.rb new file mode 100644 index 000000000..c8e304d9f --- /dev/null +++ b/spec/lib/tasks/set_sales_managing_organisation_spec.rb @@ -0,0 +1,48 @@ +require "rails_helper" +require "rake" + +RSpec.describe "set_sales_managing_organisation" do + describe ":set_sales_managing_organisation", type: :task do + subject(:task) { Rake::Task["set_sales_managing_organisation"] } + + before do + Rake.application.rake_require("tasks/set_sales_managing_organisation") + Rake::Task.define_task(:environment) + task.reenable + end + + context "when the rake task is run" do + let!(:sales_log) { create(:sales_log, :completed, managing_organisation_id: nil) } + + it "updates sales log managing_organisation_id with owning_organisation_id" do + expect(sales_log.managing_organisation_id).to eq(nil) + expect(sales_log.status).to eq("completed") + task.invoke + sales_log.reload + expect(sales_log.managing_organisation_id).to eq(sales_log.owning_organisation_id) + expect(sales_log.status).to eq("completed") + end + + it "does not update sales log managing_organisation_id if owning_organisation_id is nil" do + sales_log.update!(owning_organisation_id: nil) + expect(sales_log.status).to eq("in_progress") + expect(sales_log.managing_organisation_id).to eq(nil) + task.invoke + sales_log.reload + expect(sales_log.managing_organisation_id).to eq(nil) + expect(sales_log.status).to eq("in_progress") + end + + it "skips validations" do + sales_log.saledate = Time.zone.local(2021, 3, 3) + sales_log.save!(validate: false) + expect(sales_log.managing_organisation_id).to eq(nil) + expect(sales_log.status).to eq("in_progress") + task.invoke + sales_log.reload + expect(sales_log.managing_organisation_id).to eq(sales_log.owning_organisation_id) + expect(sales_log.status).to eq("in_progress") + end + end + end +end