<% content_for(:native_title, @submission.name || @submission.template&.name) if turbo_native_app? %> <% native_tab = (params[:tab] == 'recipients' ? 'recipients' : 'document') if turbo_native_app? %> <% if local_assigns[:is_preview] %> <%= render 'submissions/preview_tags' %> <% end %> <% font_scale = 1040.0 / PdfUtils::US_LETTER_W %> <% configs = AccountConfig.where(account_id: @submission.account_id, key: [AccountConfig::COMBINE_PDF_RESULT_KEY, AccountConfig::WITH_SIGNATURE_ID, AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY, AccountConfig::WITH_SIGNATURE_ID_REASON_KEY, AccountConfig::WITH_TIMESTAMP_SECONDS_KEY, AccountConfig::WITH_SIGNATURE_ID_COMPLETED_AT_KEY]) %> <% with_signature_id = configs.find { |e| e.key == AccountConfig::WITH_SIGNATURE_ID }&.value == true %> <% is_combined_enabled = configs.find { |e| e.key == AccountConfig::COMBINE_PDF_RESULT_KEY }&.value == true && !@submission.template_fields&.any? { |f| f['type'] == 'verification' } %> <% with_submitter_timezone = configs.find { |e| e.key == AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY }&.value == true %> <% with_timestamp_seconds = configs.find { |e| e.key == AccountConfig::WITH_TIMESTAMP_SECONDS_KEY }&.value == true %> <% with_signature_id_reason = configs.find { |e| e.key == AccountConfig::WITH_SIGNATURE_ID_REASON_KEY }&.value != false %> <% with_signature_id_completed_at = configs.find { |e| e.key == AccountConfig::WITH_SIGNATURE_ID_COMPLETED_AT_KEY }&.value == true %>
<% unless native_tab == 'recipients' %>
<% unless turbo_native_app? %> <%= render 'submissions/logo' %>

<% (@submission.name || @submission.template&.name).to_s.split(/(_)/).each do |item| %><%= item %><% end %>

<% end %>
<% if signed_in? && can?(:destroy, @submission) && @submission.archived_at? && !@submission.completed_at? %> <%= button_to button_title(title: t('unarchive'), disabled_with: t('unarchive')[0..-2], icon: svg_icon('rotate', class: 'w-6 h-6')), submission_unarchive_index_path(@submission), class: 'btn btn-primary btn-ghost text-base hidden md:flex' %> <% end %> <% if @submission.audit_trail.present? %> <%= svg_icon('external_link', class: 'w-6 h-6') %> <% elsif signed_in? %> <%= link_to submission_events_path(@submission), class: 'white-button', data: { turbo_frame: :modal } do %> <%= svg_icon('logs', class: 'w-6 h-6') %> <% end %> <% end %> <% if signed_in? && !@submission.completed_at? && can?(:manage, :resend_all) && @submission.submitters.to_a.size > 3 && !@submission.archived_at? && !@submission.template&.archived_at? && !@submission.expired? && can?(:update, @submission) %> <% pending_submitters_count = @submission.submitters.to_a.count { |s| !s.completed_at? && s.email.present? && !s.declined_at? } %> <% if pending_submitters_count.positive? %> <%= button_to button_title(title: t('re_send_emails'), title_class: 'hidden md:inline', disabled_with: t('sending'), icon: svg_icon('mail_forward', class: 'w-6 h-6')), submission_resend_email_index_path(@submission), class: 'white-button', data: { turbo_confirm: t('are_you_sure_you_want_to_re_send_email_to_n_recipients', count: pending_submitters_count) } %> <% end %> <% end %> <% if @submission.submitters.to_a.any?(&:completed_at?) %> <% show_combined_download = @submission.completed_at? && !is_combined_enabled %> <% show_unarchive = signed_in? && can?(:destroy, @submission) && @submission.archived_at? && @submission.completed_at? %> <% show_download_dropdown = show_combined_download || show_unarchive %> <% if @submission.completed_at? || !is_combined_enabled %>
<%= svg_icon('download', class: 'w-6 h-6') %> <% if show_download_dropdown %> <% end %>
<% end %> <% elsif @submission.submitters.to_a.size == 1 && !@submission.expired? && !@submission.submitters.to_a.first.declined_at? && !@submission.archived_at? && !@submission.template&.archived_at? %> <%= render 'shared/clipboard_copy', text: submit_form_url(slug: @submission.submitters.to_a.first.slug, host: form_link_host), class: 'base-button', icon_class: 'w-6 h-6 text-white', copy_title: t('copy_share_link'), copied_title: t('copied_to_clipboard') %> <% end %>
<% end %>
<% values = @submission.submitters.reduce({}) { |acc, sub| acc.merge(sub.values) } %> <% service_url_time = ActiveStorage::Attachment.service_url_time %> <% attachments_index = ActiveStorage::Attachment.where(record: @submission.submitters, name: :attachments).preload(:blob).index_by(&:uuid) %> <% unless native_tab == 'recipients' %> <% schema = Submissions.filtered_conditions_schema(@submission, values:) %> <% unless turbo_native_app? %> <% end %>
<% fields_index = Templates.build_field_areas_index(@submission.template_fields || @submission.template.fields) %> <% submitters_index = @submission.submitters.index_by(&:uuid) %> <% submitters_order_index = nil %> <% page_blob_struct = Struct.new(:url, :metadata) %> <% bg_classes = %w[bg-red-100 bg-sky-100 bg-emerald-100 bg-yellow-100 bg-purple-100 bg-pink-100 bg-cyan-100 bg-orange-100 bg-lime-100 bg-indigo-100] %> <% schema.each do |item| %> <% document = @submission.schema_documents.find { |e| e.uuid == item['attachment_uuid'] } %> <% document_annots_index = document.metadata.dig('pdf', 'annotations')&.group_by { |e| e['page'] } || {} %> <% preview_images_index = document.preview_images.loaded? ? document.preview_images.index_by { |e| e.filename.base.to_i } : {} %> <% lazyload_metadata = document.preview_images.first&.metadata || Templates::ProcessDocument::US_LETTER_SIZE %> <% (document.metadata.dig('pdf', 'number_of_pages') || (document.preview_images.loaded? ? preview_images_index.size : document.preview_images.size)).times do |index| %> <% page = preview_images_index[index] || page_blob_struct.new(metadata: lazyload_metadata, url: preview_document_page_path(document.signed_key, "#{index}#{Templates::ProcessDocument::PREVIEW_FORMAT}")) %> " class="block before:border before:absolute before:top-0 before:bottom-0 before:left-0 before:right-0 before:rounded relative mb-4" style="container-type: size; aspect-ratio: <%= width = page.metadata['width'] %> / <%= height = page.metadata['height'] %>"> <%= ">
<% document_annots_index[index]&.each do |annot| %> <%= render 'submissions/annotation', annot: %> <% end %> <% fields_index.dig(document.uuid, index)&.each do |(area, field)| %> <% value = values[field['uuid']].presence || (field['default_value'] != '{{date}}' && field['readonly'] == true && field['conditions'].blank? && field['default_value'].present? ? Submitters::SubmitValues.template_default_value_for_submitter(field['default_value'], @submission.submitters.find { |e| e.uuid == field['submitter_uuid'] }, with_time: false) : nil) %> <% value ||= field['default_value'] if field['type'] == 'heading' %> <% submitter = submitters_index[field['submitter_uuid']] %> <% if value.present? %> <% if (mask = field.dig('preferences', 'mask').presence) && signed_in? && can?(:read, @submission) %> <%= render 'submissions/value', font_scale:, area:, field:, attachments_index:, value: Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', '), locale: @submission.account.locale, timezone: @submission.account.timezone, submitter:, with_signature_id: %> <% else %> <%= render 'submissions/value', page_width: width, page_height: height, font_scale:, area:, field:, attachments_index:, value: mask.present? ? Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', ') : value, locale: @submission.account.locale, timezone: @submission.account.timezone, submitter:, with_signature_id:, with_submitter_timezone:, with_timestamp_seconds:, with_signature_id_reason:, with_signature_id_completed_at: %> <% end %> <% elsif field['readonly'] != true && submitter && !submitter.completed_at? %> <% submitters_order_index ||= (@submission.template_submitters || @submission.template.submitters).each_with_index.to_h { |s, i| [s['uuid'], i] } %> <% submitter_index = submitters_order_index[submitter.uuid] %> <% bg_class = bg_classes[submitter_index % bg_classes.size] %>
<%= svg_icon(SubmissionsController::FIELD_ICONS.fetch(field['type'], 'text_size'), class: 'max-h-10 w-full h-full stroke-2 opacity-50') %>
<% end %> <% end %>
<% end %> <% end %>
<% end %> <% unless native_tab == 'document' %>
<% colors = %w[bg-red-500 bg-sky-500 bg-emerald-500 bg-yellow-300 bg-purple-600 bg-pink-500 bg-cyan-500 bg-orange-500 bg-lime-500 bg-indigo-500] %> <% submitter_fields_index = (@submission.template_fields || @submission.template.fields).group_by { |f| f['submitter_uuid'] } %> <% submitter_field_counters = Hash.new { 0 } %> <% (@submission.template_submitters || @submission.template.submitters).each_with_index do |item, index| %> <% submitter = @submission.submitters.find { |e| e.uuid == item['uuid'] } %>
<%= (@submission.template_submitters || @submission.template.submitters).find { |e| e['uuid'] == submitter&.uuid }&.dig('name') || "#{(index + 1).ordinalize} Submitter" %>
<% if signed_in? && can?(:update, @submission) && submitter && !submitter.completed_at? && !@submission.completed_at? && !submitter.declined_at? && !@submission.archived_at? && !@submission.template&.archived_at? && !@submission.expired? && !submitter.start_form_submission_events.any? %> <%= link_to edit_submitter_path(submitter), class: 'shrink-0 inline md:hidden md:group-hover:inline', data: { turbo_frame: 'modal', native_modal: 'medium' }, aria: { label: t('edit_recipient') } do %> <%= svg_icon('pencil', class: 'w-5 h-5') %> <% end %> <% end %>
<% if submitter&.name.present? %>
<%= svg_icon('user', class: 'w-5 h-5') %> <%= submitter&.name %>
<% end %> <% if submitter&.email.present? %>
<%= svg_icon('mail', class: 'w-5 h-5') %> <%= submitter.email || 'N/A' %>
<% end %> <% if submitter&.phone.present? %>
<%= svg_icon('phone', class: 'w-5 h-5') %> <%= submitter.phone %>
<% end %>
<% if submitter&.viewer? %> <%= svg_icon(submitter.opened_at? ? 'file_check' : 'file_unknown', class: 'w-5 h-5') %> <% elsif submitter && !submitter.completed_at? && @submission.completed_at? %> <%= svg_icon('writing_off', class: 'w-5 h-5') %> <% elsif @submission.expire_at? && submitter && !submitter.completed_at? %> <%= svg_icon('clock_exclamation', class: 'w-5 h-5') %> <% else %> <%= svg_icon('writing', class: 'w-5 h-5') %> <% end %> <% if submitter&.declined_at? %> <%= t('declined_on_time', time: l(submitter.declined_at.in_time_zone(@submission.account.timezone), format: :short, locale: @submission.account.locale)) %> <% elsif submitter&.viewer? %> <% if submitter.opened_at? %> <%= t('viewed_on_time', time: l(submitter.opened_at.in_time_zone(@submission.account.timezone), format: :short, locale: @submission.account.locale)) %> <% elsif @submission.completed_at? %> <%= t('not_viewed') %> <% else %> <%= t('not_viewed_yet') %> <% end %> <% elsif submitter %> <% if submitter.completed_at? %> <%= l(submitter.completed_at.in_time_zone(@submission.account.timezone), format: :long, locale: @submission.account.locale) %> <% elsif @submission.completed_at? %> <%= t('not_completed') %> <% elsif @submission.expire_at? %> <% if @submission.expired? %> <%= t(:expired) %> <% else %> <%= t('expire_on_time', time: l(@submission.expire_at.in_time_zone(@submission.account.timezone), format: :short, locale: @submission.account.locale)) %> <% end %> <% else %> <%= t('not_completed_yet') %> <% end %> <% else %> <%= t('not_invited_yet') %> <% end %>
<% if submitter&.declined_at? %>
<%= t('reason') %>: <%= simple_format(h(submitter.submission_events.find_by(event_type: :decline_form).data['reason']), {}, sanitize: false) %>
<% end %> <% if signed_in? && submitter && submitter.email && !submitter.completed_at && !@submission.completed_at? && !@submission.archived_at? && !@submission.template&.archived_at? && can?(:update, @submission) && (Docuseal.multitenant? || Accounts.can_send_emails?(current_account)) && !@submission.expired? && !submitter.declined_at? %>
<%= button_to button_title(title: submitter.sent_at? ? t('re_send_email') : t('send_email'), disabled_with: t('sending')), submitter_send_email_index_path(submitter), class: 'btn btn-sm btn-primary w-full' %>
<% end %> <% if signed_in? && submitter && submitter.phone && !submitter.completed_at && !@submission.completed_at? && !@submission.archived_at? && !@submission.template&.archived_at? && can?(:update, @submission) && !@submission.expired? && !submitter.declined_at? %> <%= render 'submissions/send_sms_button', submitter: %> <% end %> <% if signed_in? && submitter && !submitter.viewer? && !submitter.completed_at? && !@submission.completed_at? && !@submission.archived_at? && !@submission.template&.archived_at? && can?(:create, @submission) && !@submission.expired? && !submitter.declined_at? %> <% end %> <% if signed_in? && submitter && submitter.completed_at? && submitter.email == current_user.email && submitter.completed_at > 1.month.ago && can?(:update, @submission) %>
<%= button_to t('resubmit'), submitters_resubmit_path(submitter), method: :put, class: 'btn btn-sm btn-primary w-full', form: { target: '_blank' }, data: { turbo: false } %>
<% end %>
<% submitter_fields_index[item['uuid']].to_a.each_with_index do |field, index| %> <% submitter_field_counters[field['type']] += 1 %> <% value = values[field['uuid']].presence || (field['default_value'] != '{{date}}' && field['readonly'] == true && field['default_value'].present? ? Submitters::SubmitValues.template_default_value_for_submitter(field['default_value'], @submission.submitters.find { |e| e.uuid == field['submitter_uuid'] }, with_time: false) : nil) %> <% next if value.blank? %> <% next if field['type'] == 'heading' || field['type'] == 'strikethrough' %>
<%= field['name'].presence || "#{t("#{field['type']}_field")} #{submitter_field_counters[field['type']]}" %>
<% if field['type'].in?(%w[signature initials]) %>
<% img_height = attachments_index[value].metadata['height'] %> <%= field['name'] || field['title'] || field['type'] %>
<% elsif field['type'].in?(['image', 'stamp', 'kba']) && attachments_index[value].image? %> <% img_height = attachments_index[value].metadata['height'] %> <%= field['name'] || field['title'] || field['type'] %> <% elsif field['type'].in?(['file', 'payment', 'image']) %> <% elsif field['type'] == 'checkbox' %> <%= svg_icon('check', class: 'w-6 h-6') %> <% else %> <% if field['type'] == 'number' %> <% value = NumberUtils.format_number(value, field.dig('preferences', 'format')) %> <% elsif field['type'] == 'date' %> <% value = TimeUtils.format_date_string(value, field.dig('preferences', 'format'), @submission.account.locale, timezone: (with_submitter_timezone ? (submitter.timezone.presence || @submission.account.timezone) : @submission.account.timezone)) %> <% end %> <% if (mask = field.dig('preferences', 'mask').presence) %> <% if signed_in? && can?(:read, @submission) %>
<% else %>
<%= Array.wrap(value).map { |e| TextUtils.mask_value(e, mask) }.join(', ') %>
<% end %> <% else %>
<%= Array.wrap(value).join(', ') %>
<% end %> <% end %>
<% end %>
<% end %>
<% end %>
<% if native_tab == 'document' %> <% elsif !native_tab %> <% end %>
<% unless request.headers['HTTP_X_TURBO_REQUEST_ID'] %> <%= render 'scripts/autosize_field' %> <% end %>