Browse Source

Deduplicate 2022 sales logs

pull/1612/head
Kat 3 years ago
parent
commit
b8e6aab6c1
  1. 36
      app/services/bulk_upload/sales/year2022/row_parser.rb
  2. 65
      spec/services/bulk_upload/sales/year2022/row_parser_spec.rb

36
app/services/bulk_upload/sales/year2022/row_parser.rb

@ -285,6 +285,7 @@ class BulkUpload::Sales::Year2022::RowParser
validate :validate_created_by_related, on: :after_log validate :validate_created_by_related, on: :after_log
validate :validate_relevant_collection_window, on: :after_log validate :validate_relevant_collection_window, on: :after_log
validate :validate_incomplete_soft_validations, on: :after_log validate :validate_incomplete_soft_validations, on: :after_log
validate :validate_if_log_already_exists, on: :after_log
def self.question_for_field(field) def self.question_for_field(field)
QUESTIONS[field] QUESTIONS[field]
@ -848,6 +849,24 @@ private
@questions ||= log.form.subsections.flat_map { |ss| ss.applicable_questions(log) } @questions ||= log.form.subsections.flat_map { |ss| ss.applicable_questions(log) }
end end
def duplicate_check_fields
%w[
saledate
age1
sex1
ecstat1
owning_organisation
postcode_full
purchid
]
end
def log_already_exists?
@log_already_exists ||= SalesLog
.where(status: %w[not_started in_progress completed])
.exists?(duplicate_check_fields.index_with { |field| log.public_send(field) })
end
def validate_owning_org_data_given def validate_owning_org_data_given
if field_92.blank? if field_92.blank?
block_log_creation! block_log_creation!
@ -985,4 +1004,21 @@ private
end end
end end
end end
def validate_if_log_already_exists
if log_already_exists?
error_message = "This is a duplicate log"
errors.add(:field_92, error_message) # Owning org
errors.add(:field_2, error_message) # Sale completion date
errors.add(:field_3, error_message) # Sale completion date
errors.add(:field_4, error_message) # Sale completion date
errors.add(:field_41, error_message) # Postcode
errors.add(:field_42, error_message) # Postcode
errors.add(:field_7, error_message) # Buyer 1 age
errors.add(:field_13, error_message) # Buyer 1 gender
errors.add(:field_24, error_message) # Buyer 1 working situation
errors.add(:field_1, error_message) # Purchaser code
end
end
end end

65
spec/services/bulk_upload/sales/year2022/row_parser_spec.rb

@ -539,6 +539,71 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
end end
end end
end end
context "when the log already exists in the db" do
let(:attributes) { valid_attributes }
before do
parser.log.save!
parser.instance_variable_set(:@valid, nil)
end
it "is not a valid row" do
expect(parser).not_to be_valid
end
it "adds an error to all (and only) the fields used to determine duplicates" do
parser.valid?
error_message = "This is a duplicate log"
[
:field_92, # Owning org
:field_2, # Sale completion date
:field_3, # Sale completion date
:field_4, # Sale completion date
:field_41, # Postcode
:field_42, # Postcode
:field_7, # Buyer 1 age
:field_13, # Buyer 1 gender
:field_24, # Buyer 1 working situation
:field_1, # Purchaser code
].each do |field|
expect(parser.errors[field]).to include(error_message)
end
end
end
context "when a hidden log already exists in db" do
before do
parser.log.status = "pending"
parser.log.skip_update_status = true
parser.log.save!
end
it "is a valid row" do
expect(parser).to be_valid
end
it "does not add duplicate errors" do
parser.valid?
[
:field_92, # Owning org
:field_2, # Sale completion date
:field_3, # Sale completion date
:field_4, # Sale completion date
:field_41, # Postcode
:field_42, # Postcode
:field_7, # Buyer 1 age
:field_13, # Buyer 1 gender
:field_24, # Buyer 1 working situation
:field_1, # Purchaser code
].each do |field|
expect(parser.errors[field]).to be_blank
end
end
end
end end
describe "inferences" do describe "inferences" do

Loading…
Cancel
Save