/** * 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); }