Sha256: 88cbce06fbf584c7da01b6504bf288bcbdc7b6a169b0375a24a7e6f8699eff29
Contents?: true
Size: 1.39 KB
Versions: 66
Compression:
Stored size: 1.39 KB
Contents
# frozen_string_literal: true require_dependency "renalware/letters" require "attr_extras" module Renalware module Letters class ApproveLetter include Broadcasting pattr_initialize :letter class << self alias_method :build, :new end def call(by:) Letter.transaction do add_missing_counterpart_cc_recipients archive_recipients sign(by: by) archive_content(by: by) broadcast(:letter_approved, letter) end end private def sign(by:) # Needs to be saved before changing the STI type (signature would be lost otherwise) letter.sign(by: by).save! end # Note that generate_archive returns the letter as a Letter::Approved object. # We need to update our letter reference as it's this Approved letter we need to broadcast # to subscribers. def archive_content(by:) @letter = letter.generate_archive(by: by) letter.save! end def archive_recipients letter.archive_recipients! end def add_missing_counterpart_cc_recipients DetermineCounterpartCCs.new(letter).call.each do |recipient| already_a_recipient = letter.recipients.exists?(addressee: recipient.addressee) unless already_a_recipient recipient.save! end end end end end end
Version data entries
66 entries across 66 versions & 1 rubygems