add time formats
This commit is contained in:
@@ -103,17 +103,43 @@ module Submitters
|
||||
end
|
||||
|
||||
def normalize_date(field, value)
|
||||
if value.is_a?(Integer)
|
||||
format = field.dig('preferences', 'format')
|
||||
|
||||
if TimeUtils.format_with_time?(format)
|
||||
normalize_date_time(value, format)
|
||||
elsif TimeUtils.month_only_format?(format)
|
||||
normalize_date_month(value, format)
|
||||
elsif value.is_a?(Integer)
|
||||
Time.zone.at(value.to_s.first(10).to_i).to_date.to_s
|
||||
elsif value.gsub(/\w/, '0') == field.dig('preferences', 'format').to_s.gsub(/\w/, '0')
|
||||
TimeUtils.parse_date_string(value, field.dig('preferences', 'format')).to_s
|
||||
elsif value.gsub(/\w/, '0') == format.to_s.gsub(/\w/, '0')
|
||||
TimeUtils.parse_date_string(value, format).to_s
|
||||
else
|
||||
Date.parse(value).to_s
|
||||
end
|
||||
rescue Date::Error
|
||||
rescue ArgumentError
|
||||
value
|
||||
end
|
||||
|
||||
def normalize_date_time(value, format)
|
||||
if value.is_a?(Integer)
|
||||
Time.zone.at(value.to_s.first(10).to_i).utc.iso8601
|
||||
elsif value.to_s.match?(/T\d{2}:\d{2}/)
|
||||
Time.iso8601(value).utc.iso8601
|
||||
else
|
||||
TimeUtils.parse_date_string(value, format).utc.iso8601
|
||||
end
|
||||
end
|
||||
|
||||
def normalize_date_month(value, format)
|
||||
if value.is_a?(Integer)
|
||||
Time.zone.at(value.to_s.first(10).to_i).strftime('%Y-%m')
|
||||
elsif value.to_s.match?(/\A\d{4}-\d{2}\z/)
|
||||
value
|
||||
else
|
||||
TimeUtils.parse_date_string(value, format).strftime('%Y-%m')
|
||||
end
|
||||
end
|
||||
|
||||
def fetch_fields(template, submitter_name: nil, for_submitter: nil)
|
||||
if submitter_name && !for_submitter
|
||||
submitter =
|
||||
|
||||
@@ -86,9 +86,7 @@ module Submitters
|
||||
submitter.values = maybe_remove_condition_values(submitter, required_field_uuids_acc:)
|
||||
end
|
||||
|
||||
submitter.values = submitter.values.transform_values do |v|
|
||||
v == '{{date}}' ? Time.current.in_time_zone(submitter.account.timezone).to_date.to_s : v
|
||||
end
|
||||
submitter.values = replace_current_date_placeholders(submitter)
|
||||
|
||||
required_field_uuids_acc.each do |uuid|
|
||||
next if submitter.values[uuid].present?
|
||||
@@ -194,7 +192,7 @@ module Submitters
|
||||
|
||||
next if value.blank?
|
||||
|
||||
acc[field['uuid']] = template_default_value_for_submitter(value, submitter, with_time: true)
|
||||
acc[field['uuid']] = template_default_value_for_submitter(value, submitter, field:, with_time: true)
|
||||
end
|
||||
|
||||
default_values.compact_blank.merge(submitter.values)
|
||||
@@ -248,7 +246,20 @@ module Submitters
|
||||
0
|
||||
end
|
||||
|
||||
def template_default_value_for_submitter(value, submitter, with_time: false)
|
||||
def replace_current_date_placeholders(submitter)
|
||||
submitter.values.each_with_object({}) do |(uuid, v), acc|
|
||||
acc[uuid] =
|
||||
if v == '{{date}}'
|
||||
field = submitter.submission.fields_uuid_index[uuid]
|
||||
|
||||
TimeUtils.current_date_value(field&.dig('preferences', 'format'), submitter.account.timezone)
|
||||
else
|
||||
v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def template_default_value_for_submitter(value, submitter, with_time: false, field: nil)
|
||||
return if value.blank?
|
||||
return if submitter.blank?
|
||||
|
||||
@@ -257,7 +268,8 @@ module Submitters
|
||||
replace_default_variables(value,
|
||||
submitter.attributes.merge('role' => role),
|
||||
submitter.submission,
|
||||
with_time:)
|
||||
with_time:,
|
||||
field:)
|
||||
end
|
||||
|
||||
def maybe_remove_condition_values(submitter, required_field_uuids_acc: nil)
|
||||
@@ -394,7 +406,7 @@ module Submitters
|
||||
end
|
||||
# rubocop:enable Metrics
|
||||
|
||||
def replace_default_variables(value, attrs, submission, with_time: false)
|
||||
def replace_default_variables(value, attrs, submission, with_time: false, field: nil)
|
||||
return value if value.in?([true, false]) || value.is_a?(Numeric) || value.is_a?(Array)
|
||||
return if value.blank?
|
||||
|
||||
@@ -412,7 +424,7 @@ module Submitters
|
||||
when 'hour', 'minute', 'day', 'month', 'year'
|
||||
with_time ? Time.current.in_time_zone(submission.account.timezone).strftime(STRFTIME_MAP[key]) : e
|
||||
when 'date'
|
||||
with_time ? Time.current.in_time_zone(submission.account.timezone).to_date.to_s : e
|
||||
with_time ? TimeUtils.current_date_value(field&.dig('preferences', 'format'), submission.account.timezone) : e
|
||||
when 'role', 'email', 'phone', 'name'
|
||||
attrs[key] || e
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user