function resa_transfert($id_resa, $cb) { global $transferts_choix_lieu_opac, $transferts_site_fixe; global $deflt_docs_location; $res_trans = 0; //pour la gestion des transferts $trans = new transfert(); //les informations de l'exemplaire $rqt = "SELECT expl_location FROM exemplaires WHERE expl_cb='" . $cb . "'"; $res = pmb_mysql_query($rqt); $expl_loc = pmb_mysql_result($res, 0); switch ($transferts_choix_lieu_opac) { case "1": //retrait de la resa sur lieu choisi par le lecteur $rqt = "SELECT resa_loc_retrait FROM resa WHERE id_resa='" . $id_resa . "'"; $res = pmb_mysql_query($rqt); $loc_retrait = pmb_mysql_result($res, 0); if ($loc_retrait != $expl_loc) { //l'exemplaire n'est pas sur le bon site //on genere un transfert du site de l'exemplaire vers le site de retrait $trans->transfert_pour_resa($cb, $loc_retrait, $id_resa); $res_trans = $loc_retrait; } break; case "2": //retrait de la resa sur lieu fixé if ($transferts_site_fixe != $expl_loc) { //l'exemplaire n'est pas sur le bon site //on genere un transfert du site de l'exemplaire vers le site fixé $trans->transfert_pour_resa($cb, $transferts_site_fixe, $id_resa); $res_trans = $transferts_site_fixe; } break; case "3": //retrait de la resa sur lieu exemplaire //==>on fait rien ! break; default: //retrait de la resa sur lieu lecteur //on recupere la localisation de l'emprunteur $rqt = "SELECT empr_location FROM resa INNER JOIN empr ON resa_idempr = id_empr WHERE id_resa=" . $id_resa; $res = pmb_mysql_query($rqt); $empr_location = pmb_mysql_result($res, 0); if ($empr_location != $expl_loc) { //l'exemplaire n'est pas sur le bon site //on genere un transfert du site de l'exemplaire vers le site du lecteur $trans->transfert_pour_resa($cb, $empr_location, $id_resa); $res_trans = $empr_location; } break; } return $res_trans; }
function do_retour_selfservice() { global $deflt_docs_location, $pmb_transferts_actif, $pmb_lecteurs_localises; global $transferts_retour_origine, $transferts_retour_origine_force; global $selfservice_loc_autre_todo, $selfservice_resa_ici_todo, $selfservice_resa_loc_todo; global $selfservice_loc_autre_todo_msg, $selfservice_resa_ici_todo_msg, $selfservice_resa_loc_todo_msg; if (!$this->expl_id) { // l'exemplaire est inconnu $this->status = -1; return false; } if ($pmb_transferts_actif == "1") { $trans = new transfert(); // transfert actif if (transfert::is_retour_exemplaire_loc_origine($this->expl_id)) { // retour sur le site d'origne, il faut nettoyer $trans->retour_exemplaire_loc_origine($this->expl_id); $this->expl->expl_location = $deflt_docs_location; } if ($this->expl->expl_location != $deflt_docs_location) { // l'exemplaire n'appartient pas à cette localisation if ($transferts_retour_origine == "1" && $transferts_retour_origine_force == "0") { //pas de forcage possible, on interdit le retour $non_retournable = 1; } else { // Quoi faire? switch ($selfservice_loc_autre_todo) { case '4': // Refuser le retour $non_retournable = 1; break; case '1': // Accepter et Générer un transfert $trans->retour_exemplaire_genere_transfert_retour($this->expl_id); $non_reservable = 1; break; case '2': // Accepter et changer la localisation $trans->retour_exemplaire_change_localisation($this->expl_id); break; case '3': // Accepter sans changer la localisation break; default: // Accepter et sera traiter plus tard $non_reservable = 1; $plus_tard = 1; break; } } $this->message_loc = $selfservice_loc_autre_todo_msg; if (!$non_retournable) { if ($this->expl->pret_idempr) { $this->message_del_pret = $this->del_pret(); } if (!$non_reservable) { $resa_id = $this->calcul_resa(); if ($this->flag_resa_is_affecte) { // Déjà affecté: il aurai du ne pas etre en prêt $this->message_resa = $selfservice_resa_ici_todo_msg; } elseif ($this->flag_resa_ici) { switch ($selfservice_resa_ici_todo) { case '1': // Valider la rservation alert_empr_resa($this->affecte_resa(), 0, 1); break; default: // A traiter plus tard $plus_tard = 1; break; } $this->message_resa = $selfservice_resa_ici_todo_msg; } elseif ($this->flag_resa_autre_site) { switch ($selfservice_resa_loc_todo) { case '1': // Valider la rservation //Gen transfert sur site de la résa.... $trans->transfert_pour_resa($this->expl_cb, $this->resa_loc_trans, $resa_id); break; default: // A traiter plus tard $plus_tard = 1; break; } $this->message_resa = $selfservice_resa_loc_todo_msg; } else { // pas de résa à gérer } } } } else { // c'est la bonne localisation ( et transfert actif) if ($this->expl->pret_idempr) { $this->message_del_pret = $this->del_pret(); } $this->calcul_resa(); if ($this->flag_resa_is_affecte) { // Déjà affecté: il aurai du ne pas etre en prêt $this->message_resa = $selfservice_resa_ici_todo_msg; } elseif ($this->flag_resa_ici) { switch ($selfservice_resa_ici_todo) { case '1': // Valider la rservation alert_empr_resa($this->affecte_resa(), 0, 1); break; default: // A traiter plus tard $plus_tard = 1; break; } $this->message_resa = $selfservice_resa_ici_todo_msg; } elseif ($this->flag_resa_autre_site) { switch ($selfservice_resa_loc_todo) { case '1': // Valider la rservation //Gen transfert sur site de la résa.... $trans->transfert_pour_resa($this->expl_cb, $this->resa_loc_trans, $resa_id); break; default: // A traiter plus tard $plus_tard = 1; break; } $this->message_resa = $selfservice_resa_loc_todo_msg; } else { // pas de résa à gérer } //Fin bonne localisation } //Fin transfert actif } else { // transfert inactif $pmb_lecteurs_localises if ($pmb_lecteurs_localises && $this->expl->expl_location != $deflt_docs_location) { //ce n'est pas la bonne localisation switch ($selfservice_loc_autre_todo) { case '4': // Refuser le retour $non_retournable = 1; break; case '3': // Accepter sans changer la localisation break; default: // Accepter et sera traiter plus tard $non_reservable = 1; $plus_tard = 1; break; } $this->message_loc = $selfservice_loc_autre_todo_msg; if (!$non_retournable) { if (!$non_reservable) { $this->calcul_resa(); if ($this->flag_resa_ici || $this->flag_resa_is_affecte) { if ($selfservice_resa_ici_todo == 4) { $this->message_resa = $selfservice_resa_ici_todo_msg; $non_retournable = 1; } } elseif ($this->flag_resa_autre_site) { if ($selfservice_resa_loc_todo == 4) { $this->message_resa = $selfservice_resa_loc_todo_msg; $non_retournable = 1; } } if ($non_retournable) { $this->status = -1; return false; } if ($this->expl->pret_idempr) { $this->message_del_pret = $this->del_pret(); } if ($this->flag_resa_is_affecte) { $this->message_resa = $selfservice_resa_ici_todo_msg; } elseif ($this->flag_resa_ici) { switch ($selfservice_resa_ici_todo) { case '1': // Valider la rservation alert_empr_resa($this->affecte_resa(), 0, 1); break; default: // A traiter plus tard $plus_tard = 1; break; } $this->message_resa = $selfservice_resa_ici_todo_msg; } elseif ($this->flag_resa_autre_site) { switch ($selfservice_resa_loc_todo) { case '1': // Valider la rservation alert_empr_resa($this->affecte_resa(), 0, 1); break; default: // A traiter plus tard $plus_tard = 1; break; } $this->message_resa = $selfservice_resa_loc_todo_msg; } } else { if ($this->expl->pret_idempr) { $this->message_del_pret = $this->del_pret(); } } } } else { // c'est une bonne localisation ou lecteur non localisé: $this->calcul_resa(); if ($this->flag_resa_ici || $this->flag_resa_is_affecte) { $this->message_resa = $selfservice_resa_ici_todo_msg; if ($selfservice_resa_ici_todo == 4) { $non_retournable = 1; } } elseif ($this->flag_resa_autre_site) { $this->message_resa = $selfservice_resa_loc_todo_msg; if ($selfservice_resa_loc_todo == 4) { $non_retournable = 1; } } if ($non_retournable) { $this->status = -1; return false; } if ($this->expl->pret_idempr) { $this->message_del_pret = $this->del_pret(); } // $this->calcul_resa(); if ($this->flag_resa_is_affecte) { $this->message_resa = $selfservice_resa_ici_todo_msg; } elseif ($this->flag_resa_ici) { switch ($selfservice_resa_ici_todo) { case '1': // Valider la rservation alert_empr_resa($this->affecte_resa(), 0, 1); break; default: // A traiter plus tard $plus_tard = 1; break; } $this->message_resa = $selfservice_resa_ici_todo_msg; } elseif ($this->flag_resa_autre_site) { switch ($selfservice_resa_loc_todo) { case '1': // Valider la rservation alert_empr_resa($this->affecte_resa(), 0, 1); break; default: // A traiter plus tard $plus_tard = 1; break; } $this->message_resa = $selfservice_resa_loc_todo_msg; } else { // pas de résa à gérer } // fin bonne loc } // fin transfert inactif } if ($non_retournable) { $this->status = -1; return false; } if ($plus_tard) { // il y a des pieges, on marque comme exemplaire à problème dans la localisation qui fait le retour $sql = "UPDATE exemplaires set expl_retloc='" . $deflt_docs_location . "' where expl_cb='" . addslashes($this->expl_cb) . "' limit 1"; } else { // pas de pièges, ou pièges résolus, on démarque $sql = "UPDATE exemplaires set expl_retloc=0 where expl_cb='" . addslashes($this->expl_cb) . "' limit 1"; } pmb_mysql_query($sql); return true; }