<?php /** * $Id:$ * * @package Mediboard * @subpackage dPhospi * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision:$ */ $sejour_id = CValue::post("sejour_id"); $item_prestation_id = CValue::post("item_prestation_id"); $date = CValue::post("date"); $item_liaison = new CItemLiaison(); $item_liaison->item_souhait_id = $item_prestation_id; $item_liaison->sejour_id = $sejour_id; $item_liaison->date = $date; $item_liaison->quantite = 1; if ($msg = $item_liaison->store()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } else { CAppUI::setMsg(CAppUI::tr("CPrestationPonctuelle-msg-create"), UI_MSG_OK); } echo CAppUI::getMsg(); CApp::rip();
/** * Récupération du code tarif du séjour * * @param DOMNode $node PV1 Node * @param CSejour $newVenue Admit * * @return void */ function getFinancialClass(DOMNode $node, CSejour $newVenue) { $sender = $this->_ref_sender; if ($sender->_configs["handle_PV1_20"] == "none") { return; } $systeme_presta = CAppUI::conf("dPhospi prestations systeme_prestations", "CGroups-" . $newVenue->group_id); if ($systeme_presta == "standard") { return; } // Uniquement pour les prestas expertes $prestation = explode("#", $this->queryTextNode("PV1.20", $node)); $presta_name = CMbArray::get($prestation, 0); $item_name = CMbArray::get($prestation, 1); $item_presta = new CItemPrestation(); if ($item_name) { // Chargement de la prestation journalière $presta_journa = new CPrestationJournaliere(); $presta_journa->nom = $presta_name; $presta_journa->loadMatchingObject(); $item_presta->object_class = "CPrestationJournaliere"; $item_presta->object_id = $presta_journa->_id; } else { $item_name = $presta_name; } // Chargement d'un item de prestation $item_presta->nom = $item_name; $item_presta->loadMatchingObject(); if (!$item_presta->_id) { return; } $item_liaison = new CItemLiaison(); $ljoin = array("item_prestation" => "item_prestation.item_prestation_id = item_liaison.item_souhait_id", "prestation_journaliere" => "item_prestation.object_id = prestation_journaliere_id"); $where["item_liaison.sejour_id"] = " = '{$newVenue->_id}'"; $where["item_liaison.date"] = " = '" . CMbDT::date($newVenue->entree) . "'"; $where["prestation_journaliere.prestation_journaliere_id"] = " = '{$presta_journa->_id}'"; $item_liaison->loadObject($where, null, null, $ljoin); if (!$item_liaison->_id) { $item_liaison->sejour_id = $newVenue->_id; $item_liaison->date = CMbDT::date($newVenue->entree); } $item_liaison->item_souhait_id = $item_presta->_id; $item_liaison->_eai_sender_guid = $sender->_guid; $item_liaison->store(); }
$save_state[$_prestation_id] = $item_liaison; } else { $save_state[$_prestation_id] = $item_liaison; $liaisons_j_date[$_prestation_id] = $item_liaison; } } foreach ($dates as $_date => $_value) { if ($_date <= $date_temp) { continue; } if (!isset($liaisons_j[$_date])) { $liaisons_j[$_date] = array(); } $liaisons_j_date =& $liaisons_j[$_date]; foreach ($prestations_j as $_prestation_id => $_prestation) { $item_liaison = new CItemLiaison(); $item_liaison->_id = "temp"; $item_liaison->loadRefItem(); $item_liaison->loadRefItemRealise(); $item_liaison->loadRefSousItem(); if (isset($liaisons_j_date[$_prestation_id])) { $date_modif[$_date] = 1; $save_liaison = $liaisons_j_date[$_prestation_id]; $item_liaison->item_souhait_id = $save_liaison->item_souhait_id; $item_liaison->item_realise_id = $save_liaison->item_realise_id; $item_liaison->sous_item_id = $save_liaison->sous_item_id; $item_liaison->_ref_item->_id = $save_liaison->_ref_item->_id; $item_liaison->_ref_item->nom = $save_liaison->_ref_item->nom; $item_liaison->_ref_item->rank = $save_liaison->_ref_item->rank; $item_liaison->_ref_item->color = $save_liaison->_ref_item->color; $item_liaison->_ref_item_realise->_id = $save_liaison->_ref_item_realise->_id;
// Enregistrement si la quantité est valide if ($quantite) { $item_liaison->quantite = $quantite; $item_liaison->store(); } else { $item_liaison->delete(); } } } if (is_array($liaisons_j)) { foreach ($liaisons_j as $prestation_id => $by_date) { foreach ($by_date as $date => $liaison) { $souhait_id = null; $realise_id = null; $sous_item_id = null; $item_liaison = new CItemLiaison(); // Liaison utilisée pour l'affichage // Pas de store if (@isset($liaison['souhait']['temp']) && !@isset($liaison['realise']['new']) || @isset($liaison['realise']['temp']) && !@isset($liaison['souhait']['new'])) { continue; } if (isset($liaison['souhait'])) { if (isset($liaison['souhait']['new'])) { $souhait_id = $liaison['souhait']['new']['item_souhait_id']; $sous_item_id = @$liaison['souhait']['new']['sous_item_id']; } else { $souhait_id = reset($liaison['souhait']); if ($souhait_id) { $souhait_id = @$souhait_id['item_souhait_id']; } $sous_item_id = @reset($liaison['souhait']);
<?php /** * $Id$ * * @category Hospi * @package Mediboard * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ * @link http://www.mediboard.org */ $date = CValue::post("date"); $sejour_id = CValue::post("sejour_id"); if (!$date) { CApp::rip(); } $liaison = new CItemLiaison(); $liaison->date = $date; $liaison->sejour_id = $sejour_id; foreach ($liaison->loadMatchingList() as $_liaison) { $_liaison->delete(); }
/** * @see parent::store() */ function store() { $this->completeField("sejour_id", "lit_id", "entree", "sortie"); $create_affectations = false; $sejour = $this->loadRefSejour(); $sejour->loadRefPatient(); // Conserver l'ancien objet avant d'enregistrer $old = new CAffectation(); if ($this->_id) { $old->load($this->_id); // Si ce n'est pas la première affectation de la série, alors la ref_prev et la ref_next sont erronées // si prises depuis l'affectation old if (isset($this->_is_prev) || isset($this->_is_next)) { $this->loadRefsAffectations(); $old->_ref_prev = $this->_ref_prev; $old->_ref_next = $this->_ref_next; } else { $old->loadRefsAffectations(); } } // Gestion du service_id if ($this->lit_id) { $this->service_id = $this->loadRefLit(false)->loadRefChambre(false)->service_id; } // Gestion des UFs $this->makeUF(); // Si c'est une création d'affectation, avec ni une précédente ni une suivante, // que le séjour est relié à une grossesse, et que le module maternité est actif, // alors il faut créer les affectations des bébés. if (CModule::getActive("maternite") && !is_numeric($sejour->_ref_patient->nom) && $sejour->grossesse_id && !$this->_id) { $this->loadRefsAffectations(); if (!$this->_ref_prev->_id && !$this->_ref_next->_id) { $create_affectations = true; } } $store_prestations = false; if ($this->lit_id && $this->sejour_id && (!$this->_id || $this->fieldModified("lit_id"))) { $store_prestations = true; } // Si on place le patient alors que le séjour a déjà une sortie réelle // alors on passe le flag effectue à 1 sur l'affectation if (!$this->_id && $sejour->sortie_reelle) { $this->effectue = 1; } // Enregistrement standard if ($msg = parent::store()) { return $msg; } // Niveaux de prestations réalisées à créer // pour une nouvelle affectation (par rapport aux niveaux de prestations du lit) if ($store_prestations) { $this->loadRefsAffectations(); $lit = $this->_ref_lit; $liaisons_lit = $lit->loadRefsLiaisonsItems(); CMbObject::massLoadFwdRef($liaisons_lit, "item_prestation_id"); $where = array(); $ljoin = array(); $where["sejour_id"] = "= '{$sejour->_id}'"; $where["item_prestation.object_class"] = "= 'CPrestationJournaliere'"; // On teste également le réalisé, si une affectation avait déjà été faite puis supprimée. $ljoin["item_prestation"] = "item_prestation.item_prestation_id = item_liaison.item_souhait_id\r\n OR item_prestation.item_prestation_id = item_liaison.item_realise_id"; $filter_entree = CMbDT::date($this->entree); foreach ($liaisons_lit as $_liaison) { $item_liaison = new CItemLiaison(); $_item = $_liaison->loadRefItemPrestation(); // Recherche d'une liaison : // - date de début si première affectation ou dans la même journée // - le jour suivant sinon, car il doit y avoir un passage d'une case pour le calcul des prestations $where["item_prestation.object_id"] = "= '{$_item->object_id}'"; $where["date"] = "= '" . $filter_entree . "'"; $item_liaison->loadObject($where, null, null, $ljoin); // Si existante, alors on affecte le réalisé au niveau de prestation du lit if ($item_liaison->_id) { $item_liaison->item_realise_id = $_liaison->item_prestation_id; if ($msg = $item_liaison->store()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } else { $item_liaison->sejour_id = $sejour->_id; $item_liaison->date = $filter_entree; $item_liaison->quantite = 0; $item_liaison->item_realise_id = $_liaison->item_prestation_id; // Recherche d'une précédente liaison pour appliquer l'item souhaité s'il existe $where["date"] = "<= '" . CMbDT::date($this->entree) . "'"; $ljoin["item_prestation"] = "item_prestation.item_prestation_id = item_liaison.item_souhait_id"; $_item_liaison_souhait = new CItemLiaison(); $_item_liaison_souhait->loadObject($where, "date DESC", null, $ljoin); if ($_item_liaison_souhait->_id) { $item_liaison->item_souhait_id = $_item_liaison_souhait->item_souhait_id; $item_liaison->sous_item_id = $_item_liaison_souhait->sous_item_id; } if ($msg = $item_liaison->store()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } // Dans tous les cas, il faut parcourir les liaisons existantes entre les dates de début et fin de l'affectation $where["date"] = "BETWEEN '" . $filter_entree . "' AND '" . CMbDT::date($this->sortie) . "'"; $ljoin["item_prestation"] = "item_prestation.item_prestation_id = item_liaison.item_souhait_id\r\n OR item_prestation.item_prestation_id = item_liaison.item_realise_id"; $liaisons_existantes = $item_liaison->loadList($where, null, null, null, $ljoin); foreach ($liaisons_existantes as $_liaison_existante) { $_liaison_existante->item_realise_id = $_liaison->item_prestation_id; if ($msg = $_liaison_existante->store()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } } } if ($create_affectations) { $grossesse = $this->_ref_sejour->loadRefGrossesse(); $naissances = $grossesse->loadRefsNaissances(); $sejours = CMbObject::massLoadFwdRef($naissances, "sejour_enfant_id"); foreach ($sejours as $_sejour) { $_affectation = new CAffectation(); $_affectation->lit_id = $this->lit_id; $_affectation->sejour_id = $_sejour->_id; $_affectation->parent_affectation_id = $this->_id; $_affectation->entree = CMbDT::dateTime(); $_affectation->sortie = $this->sortie; if ($msg = $_affectation->store()) { return $msg; } } } // Pas de problème de synchro pour les blocages de lits if (!$this->sejour_id || $this->_no_synchro) { return $msg; } // Modification de la date d'admission et de la durée de l'hospi $this->load($this->_id); if ($old->_id) { $this->_ref_prev = $old->_ref_prev; $this->_ref_next = $old->_ref_next; } else { $this->loadRefsAffectations(); } $changeSejour = 0; $changePrev = 0; $changeNext = 0; $prev = $this->_ref_prev; $next = $this->_ref_next; // Mise à jour vs l'entrée if (!$prev->_id) { if ($this->entree != $sejour->entree) { $field = $sejour->entree_reelle ? "entree_reelle" : "entree_prevue"; $sejour->{$field} = $this->entree; $changeSejour = 1; } } elseif ($this->entree != $prev->sortie) { $prev->sortie = $this->entree; $changePrev = 1; } // Mise à jour vs la sortie if (!$next->_id) { if ($this->sortie != $sejour->sortie) { $field = $sejour->sortie_reelle ? "sortie_reelle" : "sortie_prevue"; $sejour->{$field} = $this->sortie; $changeSejour = 1; } } elseif ($this->sortie != $next->entree) { $next->entree = $this->sortie; $changeNext = 1; } if ($changePrev) { $prev->_is_prev = 1; $prev->store(); } if ($changeNext) { $next->_is_next = 1; $next->store(); } if ($changeSejour) { $sejour->_no_synchro = 1; $sejour->updateFormFields(); if ($msg = $sejour->store()) { return $msg; } } return $msg; }
/** * get prestations for a particular day * check for previous prestation to keep only "active" liaisons * * @param int $prestation_id prestation * @param date $date date * * @return CStoredObject[] */ function loadLiaisonsForDay($prestation_id, $date) { $maxs = array(); $item_liaison = new CItemLiaison(); $where = array(); $groupby = "item_liaison_id"; $order = "item_liaison_id DESC"; $where["sejour_id"] = "= '{$this->_id}'"; $where["object_class"] = " = 'CPrestationJournaliere'"; if ($prestation_id == "all") { $prestation_id = null; } if ($prestation_id) { $where["object_id"] = " = '{$prestation_id}'"; } $ljoin["item_prestation"] = " item_prestation.item_prestation_id = item_liaison.item_souhait_id\r\n OR item_prestation.item_prestation_id = item_liaison.item_realise_id"; $where["date"] = "<= '{$date}'"; $this->_liaisons_for_prestation = $item_liaison->loadList($where, $order, null, $groupby, $ljoin); CMbObject::massLoadFwdRef($this->_liaisons_for_prestation, "item_souhait_id"); CMbObject::massLoadFwdRef($this->_liaisons_for_prestation, "item_realise_id"); /** @var CItemLiaison $_liaison */ foreach ($this->_liaisons_for_prestation as $_liaison) { $_liaison->loadRefItem(); $_liaison->loadRefItemRealise(); $_liaison->loadRefSousItem(); //@todo : find a better way to cleanup old prestas $cat_id = $_liaison->_ref_item_realise->_id ? $_liaison->_ref_item_realise->object_id : $_liaison->_ref_item->object_id; $maxs[$_liaison->date][$cat_id] = $_liaison->_id; foreach ($maxs as $date => $data) { if ($date > $_liaison->date) { foreach ($data as $cat => $id) { if ($cat == $cat_id) { unset($this->_liaisons_for_prestation[$_liaison->_id]); } } } } } return $this->_liaisons_for_prestation; }