/**
  * Send en event
  *
  * @param CHPrimSanteEvent $evenement evenement
  * @param CMbObject        $mbObject  object
  *
  * @return null|String
  * @throws CMbException
  */
 function sendEvent($evenement, CMbObject $mbObject)
 {
     $evenement->_receiver = $this;
     $this->loadConfigValues();
     $evenement->build($mbObject);
     if (!($msg = $evenement->flatten())) {
         return null;
     }
     /** @var CExchangeHprimSante $exchange */
     $exchange = $evenement->_exchange_hpr;
     if (!$exchange->message_valide) {
         return null;
     }
     if (!$this->synchronous) {
         return null;
     }
     $source = CExchangeSource::get("{$this->_guid}-{$evenement->type}");
     if (!$source->_id || !$source->active) {
         return null;
     }
     $source->setData($msg, null, $exchange);
     try {
         $source->send();
     } catch (Exception $e) {
         throw new CMbException("CExchangeSource-no-response");
     }
     $exchange->date_echange = CMbDT::dateTime();
     $ack_data = $source->getACQ();
     if (!$ack_data) {
         $exchange->store();
         return null;
     }
     /** @var CHPrimSanteEvent $data_format */
     $data_format = CHPrimSante::getEvent($exchange);
     $ack = new CHPrimSanteAcknowledgment($data_format);
     $ack->handle($ack_data);
     $exchange->date_echange = CMbDT::dateTime();
     $exchange->statut_acquittement = $ack->getStatutAcknowledgment();
     $exchange->acquittement_valide = $ack->message->isOK(CHL7v2Error::E_ERROR) ? 1 : 0;
     $exchange->_acquittement = $ack_data;
     $exchange->store();
     return $ack_data;
 }
예제 #2
0
 /**
  * @see parent::build()
  */
 function build($object)
 {
     parent::build($object);
     if ($object instanceof CPatient) {
         $patient = $object;
     } else {
         $patient = $object->loadRefPatient();
     }
     $this->addP($patient);
     $this->addL();
 }
예제 #3
0
 /**
  * @see parent::build()
  */
 function build($object)
 {
     parent::build($object);
     /* @todo Pas de création de message pour le moment */
 }
 /**
  * Event
  *
  * @param CExchangeDataFormat $data_format data format
  *
  * @return $this|CHPrimSanteAcknowledgment|null|void
  */
 function event(CExchangeDataFormat $data_format)
 {
     $msg = $data_format->_message;
     /** @var CHPrimSanteEvent $evt */
     $evt = $data_format->_family_message;
     $evt->_data_format = $data_format;
     // Récupération des informations du message
     /** @var CHPrimSanteMessageXML $dom_evt */
     $dom_evt = $evt->handle($msg);
     try {
         // Création de l'échange
         $exchange_hpr = new CExchangeHprimSante();
         $exchange_hpr->load($data_format->_exchange_id);
         // Récupération des données du segment H
         $data = $dom_evt->getHEvenementXML();
         // Gestion de l'acquittement
         $ack = new CHPrimSanteAcknowledgment($evt);
         $evt_class = CHPrimSanteEvent::getEventClass($evt);
         if (!in_array($evt_class, $data_format->_messages_supported_class)) {
             $data_format->_ref_sender->_delete_file = false;
             // Pas de création d'échange dans le cas :
             // * où l'on ne souhaite pas traiter le message
             // * où le sender n'enregistre pas les messages non pris en charge
             if (!$data_format->_to_treatment || !$data_format->_ref_sender->save_unsupported_message) {
                 return null;
             }
             $exchange_hpr->populateExchange($data_format, $evt);
             $exchange_hpr->loadRefsInteropActor();
             $ack->_ref_exchange_hpr = $exchange_hpr;
             $error = new CHPrimSanteError($exchange_hpr, "T", "09", array("P", 1, array("")), "8.1");
             $ack = $ack->generateAcknowledgment(array($error));
             $exchange_hpr->populateExchangeACK($ack);
             return $ack;
         }
         // Acquittement d'erreur d'un document XML recu non valide
         $exchange_hpr->populateExchange($data_format, $evt);
         $exchange_hpr->message_valide = 1;
         // Gestion des notifications ?
         if (!$exchange_hpr->_id) {
             $exchange_hpr->date_production = $data['dateHeureProduction'];
             $exchange_hpr->nom_fichier = $data['filename'];
         }
         $exchange_hpr->store();
         // Pas de traitement du message
         if (!$data_format->_to_treatment) {
             return null;
         }
         $exchange_hpr->loadRefsInteropActor();
         // Chargement des configs de l'expéditeur
         $sender = $exchange_hpr->_ref_sender;
         $sender->getConfigs($data_format);
         $dom_evt->_ref_exchange_hpr = $exchange_hpr;
         $dom_evt->_ref_sender = $sender;
         $ack->_ref_exchange_hpr = $exchange_hpr;
         // Message ADM / REG
         $ack = self::handleEvent($data, $exchange_hpr, $dom_evt, $ack);
     } catch (Exception $e) {
         $exchange_hpr->populateExchange($data_format, $evt);
         $exchange_hpr->loadRefsInteropActor();
         $ack = new CHPrimSanteAcknowledgment($evt);
         $ack->_ref_exchange_hpr = $exchange_hpr;
         $error = new CHPrimSanteError($exchange_hpr, "T", "09", array("P", 1, array("")), "8.1", $e->getMessage());
         $ack = $ack->generateAcknowledgment(array($error));
         $exchange_hpr->populateExchangeACK($ack);
     }
     return $ack;
 }