add field default values
This commit is contained in:
@@ -4,6 +4,8 @@ module Submitters
|
||||
module SubmitValues
|
||||
ValidationError = Class.new(StandardError)
|
||||
|
||||
VARIABLE_REGEXP = /\{\{?(\w+)\}\}?/
|
||||
|
||||
module_function
|
||||
|
||||
def call(submitter, params, request)
|
||||
@@ -36,6 +38,7 @@ module Submitters
|
||||
submitter.completed_at = Time.current
|
||||
submitter.ip = request.remote_ip
|
||||
submitter.ua = request.user_agent
|
||||
submitter.values = merge_default_values(submitter)
|
||||
end
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
@@ -69,6 +72,52 @@ module Submitters
|
||||
end
|
||||
end
|
||||
|
||||
def merge_default_values(submitter)
|
||||
default_values = submitter.submission.template_fields.each_with_object({}) do |field, acc|
|
||||
next if field['submitter_uuid'] != submitter.uuid
|
||||
|
||||
value = field['default_value']
|
||||
|
||||
next if value.blank?
|
||||
|
||||
acc[field['uuid']] = template_default_value_for_submitter(value, submitter, with_time: true)
|
||||
end
|
||||
|
||||
default_values.compact_blank.merge(submitter.values)
|
||||
end
|
||||
|
||||
def template_default_value_for_submitter(value, submitter, with_time: false)
|
||||
return if value.blank?
|
||||
|
||||
role = submitter.submission.template_submitters.find { |e| e['uuid'] == submitter.uuid }['name']
|
||||
|
||||
replace_default_variables(value,
|
||||
submitter.attributes.merge('role' => role),
|
||||
submitter.submission.template,
|
||||
with_time:)
|
||||
end
|
||||
|
||||
def replace_default_variables(value, attrs, template, with_time: false)
|
||||
return if value.blank?
|
||||
|
||||
value.gsub(VARIABLE_REGEXP) do |e|
|
||||
case key = ::Regexp.last_match(1)
|
||||
when 'time'
|
||||
if with_time
|
||||
I18n.l(Time.current.in_time_zone(template.account.timezone), format: :long, locale: template.account.locale)
|
||||
end
|
||||
when 'date'
|
||||
I18n.l(Time.current.in_time_zone(template.account.timezone).to_date) if with_time
|
||||
when 'name', 'full_name'
|
||||
"#{attrs['first_name']} #{attrs['last_name']}".strip.presence || e
|
||||
when 'role', 'email', 'phone'
|
||||
attrs[key] || e
|
||||
else
|
||||
e
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def validate_value!(_value, _field, _params, _submitter, _request)
|
||||
true
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user