<?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();
 }
Esempio n. 3
0
        $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;
Esempio n. 4
0
        // 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;
 }
Esempio n. 7
0
 /**
  * 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;
 }