add field default values

This commit is contained in:
Pete Matsyburka
2023-11-05 01:41:54 +02:00
parent 7210badde9
commit 59d9a59769
6 changed files with 153 additions and 45 deletions
+49
View File
@@ -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