OEModule\OphCiExamination\models\Element_OphCiExamination_Diagnoses::updateDiagnoses PHP Method

updateDiagnoses() public method

.. ].
public updateDiagnoses ( $update_disorders )
$update_disorders
    public function updateDiagnoses($update_disorders)
    {
        $current_diagnoses = OphCiExamination_Diagnosis::model()->findAll('element_diagnoses_id=?', array($this->id));
        $curr_by_disorder_id = array();
        $secondary_disorder_ids = array();
        foreach ($current_diagnoses as $cd) {
            $curr_by_disorder_id[$cd->disorder_id] = $cd;
        }
        foreach ($update_disorders as $u_disorder) {
            if (!($curr = @$curr_by_disorder_id[$u_disorder['disorder_id']])) {
                $curr = new OphCiExamination_Diagnosis();
                $curr->element_diagnoses_id = $this->id;
                $curr->disorder_id = $u_disorder['disorder_id'];
            } else {
                unset($curr_by_disorder_id[$u_disorder['disorder_id']]);
            }
            if ($curr->eye_id != $u_disorder['eye_id'] || $curr->principal != $u_disorder['principal']) {
                // need to update & save
                $curr->eye_id = $u_disorder['eye_id'];
                $curr->principal = $u_disorder['principal'];
                if (!$curr->save()) {
                    throw new \Exception('save failed' . print_r($curr->getErrors(), true));
                }
            }
            if ($u_disorder['principal']) {
                $this->event->episode->setPrincipalDiagnosis($u_disorder['disorder_id'], $u_disorder['eye_id']);
            } else {
                //add a secondary diagnosis
                // Note that this may be creating duplicate diagnoses, but that is okay as the dates on them will differ
                $this->event->episode->patient->addDiagnosis($u_disorder['disorder_id'], $u_disorder['eye_id'], substr($this->event->created_date, 0, 10));
                // and track
                $secondary_disorder_ids[] = $u_disorder['disorder_id'];
            }
        }
        // remove any current diagnoses no longer needed
        foreach ($curr_by_disorder_id as $curr) {
            if (!$curr->delete()) {
                throw new \Exception('Unable to remove old disorder');
            }
        }
        // ensure secondary diagnoses are consistent
        // FIXME: ongoing discussion as to whether we should be removing diagnosis from the patient here
        // particularly if this is a save of an older examination record.
        foreach (\SecondaryDiagnosis::model()->findAll('patient_id=?', array($this->event->episode->patient_id)) as $sd) {
            if ($sd->disorder->specialty && $sd->disorder->specialty->code == 130) {
                if (!in_array($sd->disorder_id, $secondary_disorder_ids)) {
                    $this->event->episode->patient->removeDiagnosis($sd->id);
                }
            }
        }
    }