/**
  * Send event patient
  *
  * @param CHPrimXMLEvenementsPatients $dom_evt    Event
  * @param CMbObject                   $mbObject   Object
  * @param bool                        $referent   Referent
  * @param bool                        $initiateur Initiateur
  *
  * @throws CMbException
  *
  * @return void
  */
 function sendEvenementPatient(CHPrimXMLEvenementsPatients $dom_evt, CMbObject $mbObject, $referent = null, $initiateur = null)
 {
     if (!($msg = $dom_evt->generateTypeEvenement($mbObject, $referent, $initiateur))) {
         return;
     }
     $exchange = $dom_evt->_ref_echange_hprim;
     if (!$exchange->message_valide) {
         return null;
     }
     if (!$this->synchronous) {
         return null;
     }
     $source = CExchangeSource::get("{$this->_guid}-evenementPatient");
     if (!$source->_id || !$source->active) {
         return;
     }
     $source->setData($msg, false, $exchange);
     try {
         $source->send();
     } catch (Exception $e) {
         throw new CMbException("CExchangeSource-no-response");
     }
     $exchange->date_echange = CMbDT::dateTime();
     $acq = $source->getACQ();
     if (!$acq) {
         $exchange->store();
         return;
     }
     $dom_acq = new CHPrimXMLAcquittementsPatients();
     $dom_acq->loadXML($acq);
     $dom_acq->_ref_echange_hprim = $exchange;
     $doc_valid = $dom_acq->schemaValidate(null, false, $this->display_errors);
     $exchange->statut_acquittement = $dom_acq->getStatutAcquittementPatient();
     $exchange->acquittement_valide = $doc_valid ? 1 : 0;
     $exchange->_acquittement = $acq;
     $exchange->store();
 }
 /**
  * Fusion and recording a stay with an num_dos in the system
  * 
  * @param CHPrimXMLAcquittementsPatients $dom_acq    Acquittement
  * @param CPatient                       $newPatient Patient
  * @param array                          $data       Datas
  *
  * @return string acquittement 
  **/
 function fusionVenue(CHPrimXMLAcquittementsPatients $dom_acq, CPatient $newPatient, $data)
 {
     $echg_hprim = $this->_ref_echange_hprim;
     $sender = $echg_hprim->_ref_sender;
     $sender->loadConfigValues();
     $this->_ref_sender = $sender;
     // Traitement du patient
     $domEnregistrementPatient = new CHPrimXMLEnregistrementPatient();
     $domEnregistrementPatient->_ref_echange_hprim = $echg_hprim;
     $msgAcq = $domEnregistrementPatient->enregistrementPatient($dom_acq, $newPatient, $data);
     if ($echg_hprim->statut_acquittement != "OK") {
         return $msgAcq;
     }
     $dom_acq = new CHPrimXMLAcquittementsPatients();
     $dom_acq->_identifiant_acquitte = $data['identifiantMessage'];
     $dom_acq->_sous_type_evt = $this->sous_type;
     $dom_acq->_ref_echange_hprim = $echg_hprim;
     $commentaire = $avertissement = "";
     $codes = array();
     $mbVenue = new CSejour();
     $mbVenueEliminee = new CSejour();
     $newVenue = new CSejour();
     // Si CIP
     if (!CAppUI::conf('smp server')) {
         // Acquittement d'erreur : identifiants source et cible non fournis pour le venue / venueEliminee
         if (!$data['idSourceVenue'] && !$data['idCibleVenue'] && !$data['idSourceVenueEliminee'] && !$data['idCibleVenueEliminee']) {
             return $dom_acq->generateAcquittementsError("E100", $commentaire, $newVenue);
         }
         $etatVenue = CHPrimXMLEvenementsPatients::getEtatVenue($data['venue']);
         $etatVenueEliminee = CHPrimXMLEvenementsPatients::getEtatVenue($data['venueEliminee']);
         $tag = $etatVenue == "préadmission" ? CAppUI::conf('dPplanningOp CSejour tag_dossier_pa') . $sender->_tag_sejour : $sender->_tag_sejour;
         $idexVenue = CIdSante400::getMatch("CSejour", $tag, $data['idSourceVenue']);
         if ($mbVenue->load($data['idCibleVenue'])) {
             // Pas de test dans le cas ou la fusion correspond à un changement de numéro de dossier
             if ($etatVenue == "préadmission" || $etatVenueEliminee != "préadmission") {
                 if ($idexVenue->object_id && $mbVenue->_id != $idexVenue->object_id) {
                     $commentaire = "L'identifiant source fait référence au séjour : {$idexVenue->object_id} ";
                     $commentaire .= "et l'identifiant cible au séjour : {$mbVenue->_id}.";
                     return $dom_acq->generateAcquittementsError("E104", $commentaire, $newVenue);
                 }
             }
         }
         if (!$mbVenue->_id) {
             $mbVenue->_id = $idexVenue->object_id;
         }
         $tag = $etatVenue == "préadmission" ? CAppUI::conf('dPplanningOp CSejour tag_dossier_pa') . $sender->_tag_sejour : $sender->_tag_sejour;
         $idexVenueEliminee = CIdSante400::getMatch("CSejour", $tag, $data['idSourceVenueEliminee']);
         if ($mbVenueEliminee->load($data['idCibleVenueEliminee'])) {
             if ($idexVenueEliminee->object_id && $mbVenueEliminee->_id != $idexVenueEliminee->object_id) {
                 $commentaire = "L'identifiant source fait référence au séjour : {$idexVenueEliminee->object_id} ";
                 $commentaire .= "et l'identifiant cible au séjour : {$mbVenueEliminee->_id}.";
                 return $dom_acq->generateAcquittementsError("E141", $commentaire, $mbVenueEliminee);
             }
         }
         if (!$mbVenueEliminee->_id) {
             $mbVenueEliminee->_id = $idexVenueEliminee->object_id;
         }
         $messages = array();
         $avertissement = null;
         // Cas 0 : Aucun séjour
         if (!$mbVenue->_id && !$mbVenueEliminee->_id) {
             $newVenue->patient_id = $newPatient->_id;
             $newVenue->group_id = CGroups::loadCurrent()->_id;
             $messages = $this->mapAndStoreVenue($newVenue, $data, $etatVenueEliminee, $idexVenue, $idexVenueEliminee);
         } else {
             if ($mbVenue->_id || $mbVenueEliminee->_id) {
                 // Suppression de l'identifiant du séjour trouvé
                 if ($mbVenue->_id) {
                     $newVenue->load($mbVenue->_id);
                     $messages['msgNumDosVenue'] = $idexVenue->delete();
                 } else {
                     if ($mbVenueEliminee->_id) {
                         $newVenue->load($mbVenueEliminee->_id);
                         $messages['msgNumDosVenueEliminee'] = $idexVenueEliminee->delete();
                     }
                 }
                 // Cas 0
                 $messages = $this->mapAndStoreVenue($newVenue, $data, $etatVenueEliminee, $idexVenue, $idexVenueEliminee);
                 $commentaire = "Séjour modifié : {$newVenue->_id}.";
             } else {
                 if ($mbVenue->_id && $mbVenueEliminee->_id) {
                     // Suppression des identifiants des séjours trouvés
                     $messages['msgNumDosVenue'] = $idexVenue->delete();
                     $messages['msgNumDosVenueEliminee'] = $idexVenueEliminee->delete();
                     // Transfert des backsref
                     $mbVenueEliminee->transferBackRefsFrom($mbVenue);
                     // Suppression de la venue a éliminer
                     $mbVenueEliminee->delete();
                     // Cas 0
                     $newVenue->load($mbVenue->_id);
                     $messages = $this->mapAndStoreVenue($newVenue, $data, $etatVenueEliminee, $idexVenue, $idexVenueEliminee);
                 }
             }
         }
         $codes = array($messages['msgVenue'] ? $messages['_code_Venue'] == "store" ? "A103" : "A102" : ($messages['_code_Venue'] == "store" ? "I102" : "I101"), $messages['msgNumDosVenue'] ? "A105" : $messages['_code_NumDos']);
         if ($messages['msgVenue']) {
             $avertissement = $messages['msgVenue'];
         }
         $commentaire = CEAISejour::getComment($newVenue, $mbVenueEliminee);
     }
     return $echg_hprim->setAck($dom_acq, $codes, $avertissement, $commentaire, $newVenue);
 }
Exemplo n.º 3
0
        } else {
            $notification->date_echange = "";
            $notification->store();
        }
    }
} else {
    // Chargement de l'objet
    /** @var CEchangeHprim $echange_hprim */
    $echange_hprim = new $echange_hprim_classname();
    $echange_hprim->load($echange_hprim_id);
    $dest_hprim = new CDestinataireHprim();
    $dest_hprim->load($echange_hprim->receiver_id);
    $source = CExchangeSource::get("{$dest_hprim->_guid}-evenementPatient");
    $source->setData($echange_hprim->_message);
    $source->send();
    $acquittement = $source->getACQ();
    if ($acquittement) {
        $domGetAcquittement = new CHPrimXMLAcquittementsPatients();
        $domGetAcquittement->loadXML($acquittement);
        $doc_valid = $domGetAcquittement->schemaValidate(null, false, $dest_hprim->display_errors);
        if ($doc_valid) {
            $echange_hprim->statut_acquittement = $domGetAcquittement->getStatutAcquittementPatient();
        }
        $echange_hprim->acquittement_valide = $doc_valid ? 1 : 0;
        $echange_hprim->date_echange = CMbDT::dateTime();
        $echange_hprim->_acquittement = $acquittement;
        $echange_hprim->store();
        CAppUI::setMsg("Message HPRIM envoyé", UI_MSG_OK);
        echo CAppUI::getMsg();
    }
}
Exemplo n.º 4
0
 /**
  * Get observations
  *
  * @param bool $display_errors Display errors
  *
  * @return array
  */
 function getObservations($display_errors = false)
 {
     if (!$this->_acquittement) {
         return null;
     }
     if ($this->type == "patients") {
         $domGetAcquittement = new CHPrimXMLAcquittementsPatients();
         $domGetAcquittement->loadXML($this->_acquittement);
         $doc_valid = $domGetAcquittement->schemaValidate(null, false, false);
         if ($doc_valid) {
             return $this->_observations = $domGetAcquittement->getAcquittementObservationPatients();
         }
     }
     /* @todo a remplir ... */
     if ($this->type == "pmsi") {
         return $this->_observations = array();
     }
     return null;
 }