Beispiel #1
0
 /**
  * Fusion de patients
  *
  * @param CPatient[] $objects Liste des patientsx
  * @param bool       $fast    Mode rapide
  *
  * @return string|null
  */
 function merge($objects = array(), $fast = false)
 {
     // Load the matching CDossierMedical objects
     if ($this->_id) {
         $merged_objects = array_merge($objects, array($this));
     } else {
         $merged_objects = $objects;
     }
     $where = array('object_class' => "='{$this->_class}'", 'object_id' => CSQLDataSource::prepareIn(CMbArray::pluck($merged_objects, 'patient_id')));
     $dossier_medical = new CDossierMedical();
     $list = $dossier_medical->loadList($where);
     foreach ($objects as $object) {
         $object->loadIPP();
     }
     if ($msg = parent::merge($objects, $fast)) {
         return $msg;
     }
     CPatientLink::deleteDoubloon();
     $this->store();
     // Merge them
     if (count($list) > 1) {
         $dossier_medical->mergePlainFields($list);
         $dossier_medical->object_class = $this->_class;
         $dossier_medical->object_id = $this->_id;
         return $dossier_medical->merge($list, $fast);
     }
     return null;
 }
$request = "SELECT DISTINCT(d.object_id), d.object_class\r\n            FROM `dossier_medical` d\r\n            WHERE d.`object_id` <> '0'\r\n            AND EXISTS (\r\n              SELECT * FROM `dossier_medical` e\r\n              WHERE e.`object_class` = d.`object_class`\r\n              AND e.`object_id` = d.`object_id`\r\n              AND e.`dossier_medical_id` <> d.`dossier_medical_id`\r\n            );";
$resultats = $ds->loadList($request);
CAppUI::stepAjax("Dossiers à corriger: " . count($resultats), UI_MSG_OK);
if ($mode == "repair") {
    $correction = 0;
    foreach ($resultats as $result) {
        //Dossier de références
        $where = array();
        $where["object_class"] = "= '" . $result['object_class'] . "'";
        $where["object_id"] = "= '" . $result['object_id'] . "'";
        $dossier_ok = new CDossierMedical();
        $dossier_ok->loadObject($where, "dossier_medical_id ASC");
        $dossier_ok->loadRefsAntecedents();
        $dossier_ok->loadRefsEtatsDents();
        $dossier_ok->loadRefsTraitements();
        //Chargement des autres dossiers
        $_dossier = new CDossierMedical();
        $where["dossier_medical_id"] = "!= '" . $dossier_ok->_id . "'";
        $dossiers = $_dossier->loadList($where);
        //Merge des dossiers
        foreach ($dossiers as $dossier) {
            /* @var CDossierMedical $dossier*/
            if ($msg = $dossier_ok->merge(array($dossier))) {
                mbTrace($msg);
            } else {
                $correction++;
            }
        }
    }
    CAppUI::stepAjax("Dossiers corrigés: {$correction}", UI_MSG_OK);
}