/**
* custom validation for virtual clinic referral.
*
* @TODO: this should hand off validation to a faked PatientTicket request via the API.
*
* @param array $data
*
* @return array
*/
protected function setAndValidateElementsFromData($data)
{
$errors = parent::setAndValidateElementsFromData($data);
if (isset($data['patientticket_queue']) && ($api = Yii::app()->moduleAPI->get('PatientTicketing'))) {
$co_sid = @$data[\CHtml::modelName(models\Element_OphCiExamination_ClinicOutcome::model())]['status_id'];
$status = models\OphCiExamination_ClinicOutcome_Status::model()->findByPk($co_sid);
if ($status && $status->patientticket) {
$err = array();
$queue = null;
if (!$data['patientticket_queue']) {
$err['patientticket_queue'] = 'You must select a valid Virtual Clinic for referral';
} elseif (!($queue = $api->getQueueForUserAndFirm(Yii::app()->user, $this->firm, $data['patientticket_queue']))) {
$err['patientticket_queue'] = 'Virtual Clinic not found';
}
if ($queue) {
if (!$api->canAddPatientToQueue($this->patient, $queue)) {
$err['patientticket_queue'] = 'Cannot add Patient to Queue';
} else {
list($ignore, $fld_errs) = $api->extractQueueData($queue, $data, true);
$err = array_merge($err, $fld_errs);
}
}
if (count($err)) {
$et_name = models\Element_OphCiExamination_ClinicOutcome::model()->getElementTypeName();
if (@$errors[$et_name]) {
$errors[$et_name] = array_merge($errors[$et_name], $err);
} else {
$errors[$et_name] = $err;
}
}
}
}
return $errors;
}