adjust validation
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user