/** * Send event * * @param CHL7v2Event $evenement Event type * @param CMbObject $mbObject Object * * @return null|string * * @throws CMbException */ function sendEvent($evenement, CMbObject $mbObject) { $evenement->_receiver = $this; // build_mode = Mode simplifié lors de la génération du message $this->loadConfigValues(); CHL7v2Message::setBuildMode($this->_configs["build_mode"]); $evenement->build($mbObject); CHL7v2Message::resetBuildMode(); if (!($msg = $evenement->flatten())) { return null; } $exchange = $evenement->_exchange_hl7v2; // Si l'échange est invalide if (!$exchange->message_valide) { return null; } // Si on n'est pas en synchrone if (!$this->synchronous) { return null; } // Si on n'a pas d'IPP et NDA if ($exchange->master_idex_missing) { return null; } $evt = $this->getEventMessage($evenement->profil); $source = CExchangeSource::get("{$this->_guid}-{$evt}"); if (!$source->_id || !$source->active) { return null; } if ($this->_configs["encoding"] == "UTF-8") { $msg = utf8_encode($msg); } $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; } $data_format = CIHE::getEvent($exchange); $ack = new CHL7v2Acknowledgment($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; }
$ipp = $xml->queryNode("PID.3", $PID); $PV1 = $xml->queryNode("PV1"); $nda = $xml->queryNode("PV1.19", $PV1); if (!$ipp || $ipp && $ipp->nodeValue == "waiting" || (!$nda || $nda && $nda->nodeValue == "waiting")) { CHL7v2Message::setBuildMode($receiver->_configs["build_mode"]); $data_format->build($object); CHL7v2Message::resetBuildMode(); $data_format->flatten(); if (!$data_format->message->isOK(CHL7v2Error::E_ERROR)) { $_exchange->date_echange = ""; $_exchange->store(); continue; } } if ($_exchange->code != "A40" && (!$ipp && !$ipp->nodeValue || $ipp->nodeValue == "0" || ($_exchange->sous_type != "ITI30" || $_exchange->sous_type == "ITI30" && $_exchange->code == "A08") && !$nda && empty($nda->nodeValue))) { CHL7v2Message::setBuildMode($receiver->_configs["build_mode"]); $data_format->build($object); CHL7v2Message::resetBuildMode(); $data_format->flatten(); if (!$data_format->message->isOK(CHL7v2Error::E_ERROR)) { $_exchange->date_echange = ""; $_exchange->store(); continue; } } $evt = $receiver->getEventMessage($data_format->profil); $source = CExchangeSource::get("{$receiver->_guid}-{$evt}"); if (!$source->_id || !$source->active) { new CMbException("Source inactive"); } $msg = $data_format->msg_hl7 ? $data_format->msg_hl7 : $_exchange->_message;