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
-
- -
- <%= govuk_mail_to("dluhc.digital-services@levellingup.gov.uk", subject: "CORE:", class: "govuk-footer__link") %>
-
- - We aim to respond within 2 working days
-
-
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