/**
* Print the next letter for an operation.
*
* @param OEPDFPrint $pdf_print
* @param Element_OphTrOperationbooking_Operation $operation
* @param bool $auto_confirm
*
* @throws CException
*/
protected function printLetter($operation, $auto_confirm = false)
{
$patient = $operation->event->episode->patient;
$letter_status = $operation->getDueLetter();
if ($letter_status === null && $operation->getLastLetter() == Element_OphTrOperationbooking_Operation::LETTER_GP) {
$letter_status = Element_OphTrOperationbooking_Operation::LETTER_GP;
}
$letter_templates = array(Element_OphTrOperationbooking_Operation::LETTER_INVITE => 'invitation_letter', Element_OphTrOperationbooking_Operation::LETTER_REMINDER_1 => 'reminder_letter', Element_OphTrOperationbooking_Operation::LETTER_REMINDER_2 => 'reminder_letter', Element_OphTrOperationbooking_Operation::LETTER_GP => 'gp_letter', Element_OphTrOperationbooking_Operation::LETTER_REMOVAL => false);
$letter_template = isset($letter_templates[$letter_status]) ? $letter_templates[$letter_status] : false;
if ($letter_template) {
$firm = $operation->event->episode->firm;
$site = $operation->site;
$waitingListContact = $operation->waitingListContact;
// Don't print GP letter if practice address is not defined
if ($letter_status != Element_OphTrOperationbooking_Operation::LETTER_GP || $patient->practice && $patient->practice->contact->address) {
Yii::log('Printing letter: ' . $letter_template, 'trace');
$html = call_user_func(array($this, 'print_' . $letter_template), $operation);
if ($auto_confirm) {
$operation->confirmLetterPrinted();
}
return $html;
} else {
Yii::log('Patient has no practice address, printing letter supressed: ' . $patient->id, 'trace');
}
} elseif ($letter_status === null) {
Yii::log('No letter is due: ' . $patient->id, 'trace');
} else {
throw new CException('Undefined letter status');
}
}