Esempio n. 1
0
 /**
  * Recording NDA
  * 
  * @param CIdSante400    $NDA    Object id400
  * @param CSejour        $sejour Admit
  * @param CInteropSender $sender Sender
  * 
  * @return null|string null if successful otherwise returns and error message
  */
 static function storeNDA(CIdSante400 $NDA, CSejour $sejour, CInteropSender $sender)
 {
     /* Gestion du numéroteur */
     $group = new CGroups();
     $group->load($sender->group_id);
     $group->loadConfigValues();
     // Purge du NDA existant sur le séjour et on le remplace par le nouveau
     if ($sender->_configs["purge_idex_movements"]) {
         // On charge le NDA courant du séjour
         $sejour->loadNDA($sender->group_id);
         $ref_NDA = $sejour->_ref_NDA;
         if ($ref_NDA) {
             // Si le NDA actuel est identique à celui qu'on reçoit on ne fait rien
             if ($ref_NDA->id400 == $NDA->id400) {
                 return;
             }
             // On passe le NDA courant en trash
             $ref_NDA->tag = CAppUI::conf("dPplanningOp CSejour tag_dossier_trash") . $ref_NDA->tag;
             $ref_NDA->_eai_sender_guid = $sender->_guid;
             $ref_NDA->store();
         }
         // On sauvegarde le nouveau
         $NDA->tag = $sender->_tag_sejour;
         $NDA->object_class = "CSejour";
         $NDA->object_id = $sejour->_id;
         $NDA->last_update = CMbDT::dateTime();
         $NDA->_eai_sender_guid = $sender->_guid;
         return $NDA->store();
     }
     // Génération du NDA ?
     // Non
     if (!$group->_configs["smp_idex_generator"]) {
         if (!$NDA->id400) {
             return null;
         }
         if ($sejour) {
             $NDA->object_id = $sejour->_id;
         }
         $NDA->last_update = CMbDT::dateTime();
         $NDA->_eai_sender_guid = $sender->_guid;
         return $NDA->store();
     } else {
         $NDA_temp = CIdSante400::getMatch("CSejour", $sender->_tag_sejour, null, $sejour->_id);
         if ($NDA_temp->_id) {
             return;
         }
         // Pas de NDA passé
         if (!$NDA->id400) {
             if (!CIncrementer::generateIdex($sejour, $sender->_tag_sejour, $sender->group_id)) {
                 return CAppUI::tr("CEAISejour-error-generate-idex");
             }
             return null;
         } else {
             $incrementer = $sender->loadRefGroup()->loadDomainSupplier("CSejour");
             if ($incrementer && $NDA->id400 < $incrementer->range_min || $NDA->id400 > $incrementer->range_max) {
                 return CAppUI::tr("CEAISejour-idex-not-in-the-range");
             }
             $NDA->object_id = $sejour->_id;
             $NDA->last_update = CMbDT::dateTime();
             $NDA->_eai_sender_guid = $sender->_guid;
             return $NDA->store();
         }
     }
 }
 /**
  * Trigger after event store
  *
  * @param CMbObject $mbObject Object
  *
  * @throws CMbException
  *
  * @return bool
  */
 function onAfterStore(CMbObject $mbObject)
 {
     if (!$this->isHandled($mbObject)) {
         return false;
     }
     $receiver = $mbObject->_receiver;
     // Traitement Sejour
     if ($mbObject instanceof CSejour) {
         $sejour = $mbObject;
         $sejour->loadRefPraticien();
         $sejour->loadNDA();
         $sejour->loadLastLog();
         $sejour->loadRefPatient();
         $sejour->loadRefAdresseParPraticien();
         // Si Serveur
         if (CAppUI::conf('smp server')) {
             $echange_hprim = new CEchangeHprim();
             if (isset($sejour->_eai_exchange_initiator_id)) {
                 $echange_hprim->load($sejour->_eai_exchange_initiator_id);
             }
             $initiateur = $receiver->_id == $echange_hprim->sender_id ? $echange_hprim->_id : null;
             $group = new CGroups();
             $group->load($receiver->group_id);
             $group->loadConfigValues();
             $mbObject->_id400 = null;
             $idexPatient = new CIdSante400();
             $idexPatient->loadLatestFor($sejour, $receiver->_tag_sejour);
             $mbObject->_id400 = $idexPatient->id400;
             $this->generateTypeEvenement("CHPrimXMLVenuePatient", $sejour, true, $initiateur);
         } else {
             if (!$receiver->isMessageSupported("CHPrimXMLVenuePatient")) {
                 return false;
             }
             if (CGroups::loadCurrent()->_id != $receiver->group_id) {
                 return false;
             }
             if (!$sejour->_NDA) {
                 // Génération du NDA dans le cas de la création, ce dernier n'était pas créé
                 if ($msg = $sejour->generateNDA()) {
                     CAppUI::setMsg($msg, UI_MSG_ERROR);
                 }
                 $NDA = new CIdSante400();
                 $NDA->loadLatestFor($sejour, $receiver->_tag_sejour);
                 $sejour->_NDA = $NDA->id400;
             }
             if (!$sejour->_ref_patient->_IPP) {
                 $IPP = new CIdSante400();
                 //Paramétrage de l'id 400
                 $IPP->loadLatestFor($sejour->_ref_patient, $receiver->_tag_patient);
                 $sejour->_ref_patient->_IPP = $IPP->id400;
             }
             $this->sendEvenementPatient("CHPrimXMLVenuePatient", $sejour);
             if ($receiver->isMessageSupported("CHPrimXMLDebiteursVenue") && $sejour->_ref_patient->code_regime) {
                 $this->sendEvenementPatient("CHPrimXMLDebiteursVenue", $sejour);
             }
             if ($receiver->isMessageSupported("CHPrimXMLMouvementPatient") && $sejour->_ref_last_log->type == "create") {
                 $affectation = $sejour->loadRefFirstAffectation();
                 // $this->sendEvenementPatient("CHPrimXMLMouvementPatient", $affectation);
             }
             $sejour->_NDA = null;
         }
         return true;
     } elseif ($mbObject instanceof CAffectation) {
         $affectation = $mbObject;
         $current_log = $affectation->_ref_current_log;
         if (!$current_log || $affectation->_no_synchro || !in_array($current_log->type, array("create", "store"))) {
             return false;
         }
         // Cas où :
         // * on est l'initiateur du message
         // * le destinataire ne supporte pas le message
         if (!$receiver->isMessageSupported("CHPrimXMLMouvementPatient")) {
             return false;
         }
         // Affectation non liée à un séjour
         $sejour = $affectation->loadRefSejour();
         if (!$sejour->_id) {
             return false;
         }
         $sejour->loadRefPatient();
         $sejour->_receiver = $receiver;
         // Envoi de l'événement
         $this->sendEvenementPatient("CHPrimXMLMouvementPatient", $affectation);
     }
     return true;
 }
 /**
  * Trigger after event store
  *
  * @param CMbObject $mbObject Object
  *
  * @throws CMbException
  *
  * @return bool
  */
 function onAfterStore(CMbObject $mbObject)
 {
     if (!$this->isHandled($mbObject)) {
         return false;
     }
     $receiver = $mbObject->_receiver;
     if ($mbObject instanceof CCorrespondantPatient) {
         $patient = $mbObject->loadRefPatient();
         $patient->_receiver = $receiver;
     } else {
         $patient = $mbObject;
     }
     // Si Serveur
     if (CAppUI::conf('sip server')) {
         $echange_hprim = new CEchangeHprim();
         if (isset($patient->_eai_exchange_initiator_id)) {
             $echange_hprim->load($patient->_eai_exchange_initiator_id);
         }
         $initiateur = $receiver->_id == $echange_hprim->sender_id ? $echange_hprim->_id : null;
         $group = new CGroups();
         $group->load($receiver->group_id);
         $group->loadConfigValues();
         if (!$initiateur && !$group->_configs["sip_notify_all_actors"]) {
             return false;
         }
         $patient->_id400 = null;
         $idexPatient = new CIdSante400();
         $idexPatient->loadLatestFor($patient, $receiver->_tag_patient);
         $patient->_id400 = $idexPatient->id400;
         $this->generateTypeEvenement("CHPrimXMLEnregistrementPatient", $patient, true, $initiateur);
     } else {
         if (!$receiver->isMessageSupported("CHPrimXMLEnregistrementPatient")) {
             return false;
         }
         if (!$patient->_IPP) {
             // Génération de l'IPP dans le cas de la création, ce dernier n'était pas créé
             if ($msg = $patient->generateIPP()) {
                 CAppUI::setMsg($msg, UI_MSG_ERROR);
             }
             $IPP = new CIdSante400();
             $IPP->loadLatestFor($patient, $receiver->_tag_patient);
             $patient->_IPP = $IPP->id400;
         }
         // Envoi pas les patients qui n'ont pas d'IPP
         if (!$receiver->_configs["send_all_patients"] && !$patient->_IPP) {
             return false;
         }
         $this->sendEvenementPatient("CHPrimXMLEnregistrementPatient", $patient);
         if ($receiver->_configs["send_insured_without_admit"]) {
             if (!$receiver->isMessageSupported("CHPrimXMLDebiteursVenue")) {
                 return false;
             }
             $sejour = new CSejour();
             $where = array();
             $where["patient_id"] = "= '{$patient->_id}'";
             $where["group_id"] = "= '{$receiver->group_id}'";
             $datetime = CMbDT::dateTime();
             $where["sortie"] = ">= '{$datetime}'";
             /** @var CSejour[] $sejours */
             $sejours = $sejour->loadList($where);
             // On va transmettre les informations sur le débiteur pour le séjour en cours, et ceux à venir
             foreach ($sejours as $_sejour) {
                 if (!$patient->code_regime) {
                     continue;
                 }
                 $_sejour->_receiver = $receiver;
                 $_sejour->loadLastLog();
                 $_sejour->loadRefPatient();
                 if (!$_sejour->_NDA) {
                     // Génération du NDA dans le cas de la création, ce dernier n'était pas créé
                     if ($msg = $_sejour->generateNDA()) {
                         CAppUI::setMsg($msg, UI_MSG_ERROR);
                     }
                     $NDA = new CIdSante400();
                     $NDA->loadLatestFor($_sejour, $receiver->_tag_sejour);
                     $sejour->_NDA = $NDA->id400;
                 }
                 if ($receiver->isMessageSupported("CHPrimXMLDebiteursVenue")) {
                     $this->sendEvenementPatient("CHPrimXMLDebiteursVenue", $_sejour);
                 }
             }
         }
         $patient->_IPP = null;
     }
     return true;
 }
Esempio n. 4
0
 /**
  * Recording IPP
  * 
  * @param CIdSante400    $IPP     Object id400
  * @param CPatient       $patient Patient
  * @param CInteropSender $sender  Sender
  * 
  * @return null|string null if successful otherwise returns and error message
  */
 static function storeIPP(CIdSante400 $IPP, CPatient $patient, CInteropSender $sender)
 {
     /* Gestion du numéroteur */
     $group = new CGroups();
     $group->load($sender->group_id);
     $group->loadConfigValues();
     // Purge de l'IPP existant sur le patient et on le remplace par le nouveau
     if ($sender->_configs && $sender->_configs["purge_idex_movements"]) {
         // On charge l'IPP courant du patient
         $patient->loadIPP($sender->group_id);
         $ref_IPP = $patient->_ref_IPP;
         if ($ref_IPP) {
             // Si l'IPP actuel est identique à celui qu'on reçoit on ne fait rien
             if ($ref_IPP->id400 == $IPP->id400) {
                 return;
             }
             // On passe l'IPP courant en trash
             $ref_IPP->tag = CAppUI::conf("dPpatients CPatient tag_ipp_trash") . $ref_IPP->tag;
             $ref_IPP->_eai_sender_guid = $sender->_guid;
             $ref_IPP->store();
             $patient->trashIPP($ref_IPP);
         }
         // On sauvegarde le nouveau
         $IPP->tag = $sender->_tag_patient;
         $IPP->object_class = "CPatient";
         $IPP->object_id = $patient->_id;
         $IPP->last_update = CMbDT::dateTime();
         $IPP->_eai_sender_guid = $sender->_guid;
         return $IPP->store();
     }
     // Génération de l'IPP ?
     /* @todo sip_idex_generator doit être remplacé par isIPPSupplier */
     if ($sender->_configs && !$group->_configs["sip_idex_generator"]) {
         if (!$IPP->id400) {
             return null;
         }
         if ($patient) {
             $IPP->object_id = $patient->_id;
         }
         $IPP->last_update = CMbDT::dateTime();
         $IPP->_eai_sender_guid = $sender->_guid;
         return $IPP->store();
     } else {
         $IPP_temp = CIdSante400::getMatch("CPatient", $sender->_tag_patient, null, $patient->_id);
         // Pas d'IPP passé
         if (!$IPP->id400) {
             if ($IPP_temp->_id) {
                 return null;
             }
             if (!CIncrementer::generateIdex($patient, $sender->_tag_patient, $sender->group_id)) {
                 return CAppUI::tr("CEAIPatient-error-generate-idex");
             }
             return null;
         } else {
             // Si j'ai déjà un identifiant
             if ($IPP_temp->_id) {
                 // On passe l'IPP courant en trash
                 $IPP_temp->tag = CAppUI::conf("dPpatients CPatient tag_ipp_trash") . $IPP_temp->tag;
                 $IPP_temp->_eai_sender_guid = $sender->_guid;
                 $IPP_temp->store();
             }
             $incrementer = $sender->loadRefGroup()->loadDomainSupplier("CPatient");
             if ($incrementer && $IPP->id400 < $incrementer->range_min || $IPP->id400 > $incrementer->range_max) {
                 return CAppUI::tr("CEAIPatient-idex-not-in-the-range");
             }
             $IPP->object_id = $patient->_id;
             $IPP->last_update = CMbDT::dateTime();
             $IPP->_eai_sender_guid = $sender->_guid;
             return $IPP->store();
         }
     }
 }