prefill signature

This commit is contained in:
Pete Matsyburka
2024-06-11 18:19:21 +03:00
parent 92da790e77
commit 2389c3fc40
9 changed files with 80 additions and 17 deletions
@@ -0,0 +1,38 @@
# frozen_string_literal: true
module Submitters
module MaybeAssignDefaultSignature
module_function
def call(submitter, params, attachments_index)
return if params[:t].present? && params[:t] != SubmissionEvents.build_tracking_param(submitter, 'click_email')
return if params[:t].blank? && !submitter.submission_events.exists?(event_type: :click_email)
signature_attachment = find_previous_signature(submitter)
return if signature_attachment.blank?
existing_attachment = attachments_index.values.find { |a| a.blob_id == signature_attachment.blob_id }
return existing_attachment if existing_attachment
attachment = submitter.attachments_attachments.create!(blob_id: signature_attachment.blob_id)
attachments_index[attachment.uuid] = attachment
attachment
end
def find_previous_signature(submitter)
return if submitter.email.blank?
submitters_query =
Submitter.where(email: submitter.email)
.where.not(completed_at: nil)
.where(SubmissionEvent.where(Submitter.arel_table[:id].eq(SubmissionEvent.arel_table[:submitter_id]))
.where(event_type: :click_email).limit(1).arel.exists)
ActiveStorage::Attachment.where(name: :signature, record: submitters_query).order(:id).last
end
end
end
+24 -11
View File
@@ -32,17 +32,7 @@ module Submitters
submitter.values.merge!(values)
submitter.opened_at ||= Time.current
if params[:completed] == 'true'
submitter.completed_at = Time.current
submitter.ip = request.remote_ip
submitter.ua = request.user_agent
submitter.values = merge_default_values(submitter)
submitter.values = merge_formula_values(submitter)
submitter.values = maybe_remove_condition_values(submitter)
submitter.values = submitter.values.transform_values do |v|
v == '{{date}}' ? Time.current.in_time_zone(submitter.account.timezone).to_date.to_s : v
end
end
assign_completed_attributes(submitter, request) if params[:completed] == 'true'
ApplicationRecord.transaction do
validate_values!(values, submitter, params, request)
@@ -55,6 +45,29 @@ module Submitters
submitter
end
def assign_completed_attributes(submitter, request)
submitter.completed_at = Time.current
submitter.ip = request.remote_ip
submitter.ua = request.user_agent
submitter.values = merge_default_values(submitter)
submitter.values = merge_formula_values(submitter)
submitter.values = maybe_remove_condition_values(submitter)
submitter.values = submitter.values.transform_values do |v|
v == '{{date}}' ? Time.current.in_time_zone(submitter.account.timezone).to_date.to_s : v
end
signature_attachment =
submitter.submission.template_fields.reduce(nil) do |_, field|
next nil if field['submitter_uuid'] != submitter.uuid || field['type'] != 'signature'
break submitter.attachments_attachments.find_by(uuid: submitter.values[field['uuid']])
end
submitter.build_signature_attachment(blob_id: signature_attachment.blob_id) if signature_attachment
submitter
end
def normalized_values(params)
params.fetch(:values, {}).to_unsafe_h.transform_values do |v|
if params[:cast_boolean] == 'true'