adjust validation

pull/475/head
Pete Matsyburka 7 months ago
parent 86d2cd93f8
commit 1cae12b728

@ -1407,9 +1407,17 @@ export default {
if (data.field_uuid) { if (data.field_uuid) {
const field = this.fieldsUuidIndex[data.field_uuid] const field = this.fieldsUuidIndex[data.field_uuid]
this.goToStep(this.stepFields.findIndex((fields) => fields.includes(field)), this.autoscrollFields) if (field) {
const step = this.stepFields.findIndex((fields) => fields.includes(field))
this.showFillAllRequiredFields = true if (step !== -1) {
this.goToStep(step, this.autoscrollFields)
this.showFillAllRequiredFields = true
}
}
return Promise.reject(new Error('Required field: ' + data.field_uuid))
} else if (data.error) { } else if (data.error) {
const i18nKey = data.error.replace(/\s+/g, '_').toLowerCase() const i18nKey = data.error.replace(/\s+/g, '_').toLowerCase()

@ -6,10 +6,11 @@ module Submitters
RequiredFieldError = Class.new(StandardError) RequiredFieldError = Class.new(StandardError)
VARIABLE_REGEXP = /\{\{?(\w+)\}\}?/ VARIABLE_REGEXP = /\{\{?(\w+)\}\}?/
NONEDITABLE_FIELD_TYPES = %w[stamp heading].freeze
module_function module_function
def call(submitter, params, request) def call(submitter, params, request, validate_required: true)
Submissions.update_template_fields!(submitter.submission) if submitter.submission.template_fields.blank? Submissions.update_template_fields!(submitter.submission) if submitter.submission.template_fields.blank?
unless submitter.submission_events.exists?(event_type: 'start_form') unless submitter.submission_events.exists?(event_type: 'start_form')
@ -21,7 +22,7 @@ module Submitters
end end
end end
update_submitter!(submitter, params, request) update_submitter!(submitter, params, request, validate_required:)
submitter.submission.save! submitter.submission.save!
@ -30,13 +31,13 @@ module Submitters
submitter submitter
end end
def update_submitter!(submitter, params, request) def update_submitter!(submitter, params, request, validate_required: true)
values = normalized_values(params) values = normalized_values(params)
submitter.values.merge!(values) submitter.values.merge!(values)
submitter.opened_at ||= Time.current submitter.opened_at ||= Time.current
assign_completed_attributes(submitter, request) if params[:completed] == 'true' assign_completed_attributes(submitter, request, validate_required:) if params[:completed] == 'true'
ApplicationRecord.transaction do ApplicationRecord.transaction do
maybe_set_signature_reason!(values, submitter, params) maybe_set_signature_reason!(values, submitter, params)
@ -50,7 +51,7 @@ module Submitters
submitter submitter
end end
def assign_completed_attributes(submitter, request) def assign_completed_attributes(submitter, request, validate_required: true)
submitter.completed_at = Time.current submitter.completed_at = Time.current
submitter.ip = request.remote_ip submitter.ip = request.remote_ip
submitter.ua = request.user_agent submitter.ua = request.user_agent
@ -73,7 +74,11 @@ module Submitters
end end
required_field_uuids_acc.each do |uuid| required_field_uuids_acc.each do |uuid|
raise RequiredFieldError, uuid if submitter.values[uuid].blank? next if submitter.values[uuid].present?
raise RequiredFieldError, uuid if validate_required
Rollbar.warning("Required field #{submitter.id}: #{uuid}") if defined?(Rollbar)
end end
submitter submitter
@ -197,23 +202,27 @@ module Submitters
end end
def maybe_remove_condition_values(submitter, required_field_uuids_acc: nil) def maybe_remove_condition_values(submitter, required_field_uuids_acc: nil)
fields_uuid_index = submitter.submission.template_fields.index_by { |e| e['uuid'] } submission = submitter.submission
fields_uuid_index = submission.template_fields.index_by { |e| e['uuid'] }
submitters_values = nil submitters_values = nil
has_other_submitters = submitter.submission.template_submitters.size > 1 has_other_submitters = submission.template_submitters.size > 1
has_document_conditions = submitter.submission.template_schema.any? { |e| e['conditions'].present? }
has_document_conditions =
(submission.template_schema || submission.template.schema).any? { |e| e['conditions'].present? }
attachments_index = attachments_index =
if has_document_conditions if has_document_conditions
Submissions.filtered_conditions_schema(submitter.submission).index_by { |i| i['attachment_uuid'] } Submissions.filtered_conditions_schema(submission).index_by { |i| i['attachment_uuid'] }
end end
submitter.submission.template_fields.each do |field| submission.template_fields.each do |field|
next if field['submitter_uuid'] != submitter.uuid next if field['submitter_uuid'] != submitter.uuid
required_field_uuids_acc.add(field['uuid']) if required_field_uuids_acc && required_editable_field?(field) required_field_uuids_acc.add(field['uuid']) if required_field_uuids_acc && required_editable_field?(field)
if has_document_conditions && check_field_areas_attachments(field, attachments_index) if has_document_conditions && !check_field_areas_attachments(field, attachments_index)
submitter.values.delete(field['uuid']) submitter.values.delete(field['uuid'])
required_field_uuids_acc.delete(field['uuid']) required_field_uuids_acc.delete(field['uuid'])
end end
@ -233,11 +242,15 @@ module Submitters
end end
def required_editable_field?(field) def required_editable_field?(field)
return false if NONEDITABLE_FIELD_TYPES.include?(field['type'])
field['required'].present? && field['readonly'].blank? field['required'].present? && field['readonly'].blank?
end end
def check_field_areas_attachments(field, attachments_index) def check_field_areas_attachments(field, attachments_index)
field['areas'].present? && field['areas'].none? { |area| attachments_index[area['attachment_uuid']] } return true if field['areas'].blank?
field['areas'].any? { |area| attachments_index[area['attachment_uuid']] }
end end
def merge_submitters_values(submitter) def merge_submitters_values(submitter)

Loading…
Cancel
Save