diff --git a/app/models/log.rb b/app/models/log.rb index 33d3c4547..288fcdeb8 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -102,6 +102,9 @@ class Log < ApplicationRecord next if setup_ids.include?(error.attribute.to_s) public_send("#{error.attribute}=", nil) + form.conditional_question_conditions.map { |c| c[:from] if c[:to] == error.attribute }.compact.each do |conditional_attribute| + public_send("#{conditional_attribute}=", nil) + end end end diff --git a/app/services/bulk_upload/lettings/validator.rb b/app/services/bulk_upload/lettings/validator.rb index 1a0e6ecf5..32286633d 100644 --- a/app/services/bulk_upload/lettings/validator.rb +++ b/app/services/bulk_upload/lettings/validator.rb @@ -40,11 +40,29 @@ class BulkUpload::Lettings::Validator end end - def create_logs? + def can_create_logs? return false if any_setup_errors? return false if row_parsers.any?(&:block_log_creation?) - row_parsers.all? { |row_parser| row_parser.log.valid? } + if row_parsers.all? { |row_parser| row_parser.log.valid? } + true + else + row_parsers.each do |row_parser| + next if row_parser.log.valid? + + row_parser.log.errors.each do |error| + attribute = error.attribute.to_s + if row_parser.log.form.questions.find { |q| q.id == attribute }.type != "radio" + row_parser.log[attribute] = nil + row_parser.log.form.conditional_question_conditions.map { |c| c[:from] if c[:to] == attribute}.compact.each do |conditional_attribute| + row_parser.log[conditional_attribute] = nil + end + end + end + end + + row_parsers.all? { |row_parser| row_parser.log.valid? } + end end def self.question_for_field(field) diff --git a/app/services/bulk_upload/processor.rb b/app/services/bulk_upload/processor.rb index 49d44261f..26f4a8da7 100644 --- a/app/services/bulk_upload/processor.rb +++ b/app/services/bulk_upload/processor.rb @@ -14,7 +14,7 @@ class BulkUpload::Processor if validator.any_setup_errors? send_setup_errors_mail - elsif validator.create_logs? + elsif validator.can_create_logs? create_logs if created_logs_but_incompleted? diff --git a/db/seeds.rb b/db/seeds.rb index 400308d1c..2b9934897 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -98,6 +98,16 @@ unless Rails.env.test? user.confirmed_at = Time.zone.now end + User.find_or_create_by!( + name: "Nat", + email: "nat.dean-lewis@softwire.com", + organisation: org, + role: "data_coordinator", + ) do |user| + user.password = "password" + user.confirmed_at = Time.zone.now + end + standalone_no_stock = Organisation.find_or_create_by!( name: "Standalone No Stock 1 Ltd", address_line1: "2 Marsham Street",