view only party

This commit is contained in:
Pete Matsyburka
2026-07-04 15:47:40 +03:00
parent b6fb7c6977
commit e88874e757
42 changed files with 620 additions and 78 deletions
@@ -10,6 +10,8 @@ module Submissions
assign_defined_submitters(submission)
assign_linked_submitters(submission)
Submissions::CreateFromSubmitters.assign_submitters_is_viewer(submission)
submission
end
+30
View File
@@ -90,6 +90,8 @@ module Submissions
maybe_add_invite_submitters(submission, template, attrs[:submitters])
assign_submitters_is_viewer(submission)
submission.template = nil unless with_template
submission.tap(&:save!)
@@ -100,6 +102,34 @@ module Submissions
submissions
end
def assign_submitters_is_viewer(submission)
template_fields = submission.template_fields || submission.template.fields
field_submitter_uuids = Set.new(template_fields.pluck('submitter_uuid'))
viewer_template_submitters =
submission.template_submitters.select { |s| field_submitter_uuids.exclude?(s['uuid']) }
return submission if viewer_template_submitters.blank?
viewer_template_submitters.each { |s| s['is_viewer'] = true }
return submission if submission.template_submitters.any? { |s| s['order'] }
first_submitter = submission.submitters.find(&:sent_at)
return submission unless first_submitter
submitters_index = submission.submitters.reject(&:completed_at?).index_by(&:uuid)
Submissions.find_first_viewers(first_submitter, submitters_index).each do |viewer|
next if viewer.preferences['send_email'] == false || viewer.email.blank?
viewer.sent_at ||= first_submitter.sent_at
end
submission
end
def maybe_set_dynamic_documents(submission)
return submission unless submission.template_id?
+3
View File
@@ -282,6 +282,9 @@ module Submissions
[
composer.document.layout.formatted_text_box(
[
submitter.viewer? && {
text: "#{I18n.t('view_only')}\n"
},
submitter.email && (click_email_event || verify_email_event) && {
text: "#{I18n.t('email_verification')}: #{I18n.t('verified')}\n"
},
@@ -996,7 +996,8 @@ module Submissions
end
def single_sign_reason(submitter)
signers = submitter.submission.submitters.sort_by(&:completed_at).map { |s| s.email || s.name || s.phone }
signers = submitter.submission.submitters.reject(&:viewer?)
.sort_by(&:completed_at).map { |s| s.email || s.name || s.phone }
format(SIGN_REASON, name: signers.reverse.join(', '))
end
@@ -1015,7 +1016,7 @@ module Submissions
return sign_reason(reason_name) if config.value == 'multiple'
if !submitter.submission.submitters.exists?(completed_at: nil) &&
if submitter.submission.completed_at? &&
submitter.completed_at == submitter.submission.submitters.maximum(:completed_at)
return single_sign_reason(submitter)
end