Esempio n. 1
0
<?php

/**
 * Exchange viewer
 *
 * @category HprimXML
 * @package  Mediboard
 * @author   SARL OpenXtrem <*****@*****.**>
 * @license  GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version  SVN: $Id:$
 * @link     http://www.mediboard.org
 */
CCanDo::checkRead();
$echange_hprim_id = CValue::get("echange_hprim_id");
$echange_hprim = new CEchangeHprim();
$echange_hprim->load($echange_hprim_id);
$evt = new CHPrimXMLEventPatient();
$domGetEvenement = $evt->getHPrimXMLEvenements($this->_message);
$domGetEvenement->formatOutput = true;
$doc_errors_msg = @$domGetEvenement->schemaValidate(null, true, false);
$echange_hprim->_message = utf8_encode($domGetEvenement->saveXML());
// Création du template
$smarty = new CSmartyDP();
$smarty->assign("echange_hprim", $echange_hprim);
$smarty->display("echangeviewer.tpl");
 /**
  * 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;
 }
 /**
  * Event dispatch
  *
  * @param CExchangeDataFormat $data_format Exchange data format
  *
  * @throws CMbException
  *
  * @return string Acquittement
  */
 function event(CExchangeDataFormat $data_format)
 {
     $msg = $data_format->_message;
     /** @var CHPrimXML $evt */
     $evt = $data_format->_family_message;
     $evt->_data_format = $data_format;
     /** @var CHPrimXMLEvenements $dom_evt */
     $dom_evt = $evt->getHPrimXMLEvenements($msg);
     $dom_evt_class = get_class($dom_evt);
     if (!in_array($dom_evt_class, $data_format->_messages_supported_class)) {
         throw new CMbException(CAppUI::tr("CEAIDispatcher-no_message_supported_for_this_actor", $dom_evt_class));
     }
     // Récupération du noeud racine
     $root = $dom_evt->documentElement;
     $nodeName = $root->nodeName;
     // Création de l'échange
     $echg_hprim = new CEchangeHprim();
     $data_format->loadRefsInteropActor();
     $data_format->_ref_sender->getConfigs($data_format);
     $dom_evt->_ref_sender = $data_format->_ref_sender;
     try {
         // Récupération des données de l'entête
         $data = $dom_evt->getEnteteEvenementXML($nodeName);
         $echg_hprim->load($data_format->_exchange_id);
         // Gestion des notifications ?
         if (!$echg_hprim->_id) {
             $echg_hprim->populateEchange($data_format, $dom_evt);
             $echg_hprim->identifiant_emetteur = $data['identifiantMessage'];
             $echg_hprim->message_valide = 1;
         }
         $echg_hprim->loadRefsInteropActor();
         // Chargement des configs de l'expéditeur
         $echg_hprim->_ref_sender->getConfigs($data_format);
         $configs = $echg_hprim->_ref_sender->_configs;
         $display_errors = isset($configs["display_errors"]) ? $configs["display_errors"] : true;
         $doc_errors = $dom_evt->schemaValidate(null, false, $display_errors);
         // Gestion de l'acquittement
         $dom_acq = CHPrimXMLAcquittements::getAcquittementEvenementXML($dom_evt);
         $dom_acq->_identifiant_acquitte = $data['identifiantMessage'];
         $dom_acq->_sous_type_evt = $dom_evt->sous_type;
         // Acquittement d'erreur d'un document XML recu non valide
         if ($doc_errors !== true) {
             $echg_hprim->populateEchange($data_format, $dom_evt);
             $dom_acq->_ref_echange_hprim = $echg_hprim;
             $msgAcq = $dom_acq->generateAcquittements($dom_acq instanceof CHPrimXMLAcquittementsServeurActivitePmsi ? "err" : "erreur", "E002", $doc_errors);
             $doc_valid = $dom_acq->schemaValidate(null, false, $display_errors);
             $echg_hprim->populateErrorEchange($msgAcq, $doc_valid, "erreur");
             return $msgAcq;
         }
         $echg_hprim->date_production = CMbDT::dateTime();
         $echg_hprim->store();
         if (!$data_format->_to_treatment) {
             return null;
         }
         $dom_evt->_ref_echange_hprim = $echg_hprim;
         $dom_acq->_ref_echange_hprim = $echg_hprim;
         // Message événement patient
         if ($dom_evt instanceof CHPrimXMLEvenementsPatients) {
             return self::eventPatient($dom_evt, $dom_acq, $echg_hprim, $data);
         }
         // Message serveur activité PMSI
         if ($dom_evt instanceof CHPrimXMLEvenementsServeurActivitePmsi) {
             return self::eventPMSI($dom_evt, $dom_acq, $echg_hprim, $data);
         }
     } catch (Exception $e) {
         $echg_hprim->populateEchange($data_format, $dom_evt);
         $dom_acq = CHPrimXMLAcquittements::getAcquittementEvenementXML($dom_evt);
         // Type par défaut
         $dom_acq->_sous_type_evt = "none";
         $dom_acq->_identifiant_acquitte = isset($data['identifiantMessage']) ? $data['identifiantMessage'] : "000000000";
         $dom_acq->_ref_echange_hprim = $echg_hprim;
         $msgAcq = $dom_acq->generateAcquittements($dom_acq instanceof CHPrimXMLAcquittementsServeurActivitePmsi ? "err" : "erreur", "E009", $e->getMessage(), null, $data);
         $doc_valid = $dom_acq->schemaValidate(null, false, false);
         $echg_hprim->populateErrorEchange($msgAcq, $doc_valid, "erreur");
         return $msgAcq;
     }
     return null;
 }