Class: Renalware::Letters::Mailshots::MailshotLetterFactory

Inherits:
Object
  • Object
show all
Defined in:
app/models/renalware/letters/mailshots/mailshot.rb

Overview

Factory class responsible for creating a mailshot letter by moving it through its ‘state machine’ states until it is approved and ready to print. Doing it this ways ensures all pub/sub events, callbacks etc happen in correctly and in order.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#letterObject (readonly)

Returns the value of attribute letter.



85
86
87
# File 'app/models/renalware/letters/mailshots/mailshot.rb', line 85

def letter
  @letter
end

Instance Method Details

#approveObject



108
109
110
111
112
113
# File 'app/models/renalware/letters/mailshots/mailshot.rb', line 108

def approve
  ApproveLetter
    .build(letter)
    .broadcasting_to_configured_subscribers
    .call(by: current_user)
end

#createObject



87
88
89
90
91
92
# File 'app/models/renalware/letters/mailshots/mailshot.rb', line 87

def create
  draft
  submit_for_review
  approve
  letter
end

#draftObject



94
95
96
97
98
99
100
# File 'app/models/renalware/letters/mailshots/mailshot.rb', line 94

def draft
  @letter = LetterFactory
    .new(patient, letter_attributes)
    .with_contacts_as_default_ccs
    .build
  letter.save_by!(current_user)
end

#submit_for_reviewObject



102
103
104
105
106
# File 'app/models/renalware/letters/mailshots/mailshot.rb', line 102

def submit_for_review
  letter.submit(by: current_user) # now pending review
  letter.save!
  @letter = Letters::Letter::PendingReview.find(letter.id)
end