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;
 }