";
print "";
}
}
}
if ($do==1) {
$file=stripslashes($file);
$fp=@fopen($file,"r");
//Lecture de la première ligne
$line=fgets($fp);
$nline=1;
if ($line===false) {
print "
".$msg['secouru_invalid_file']."
";
fclose($fp);
} else {
$etat="attente";
$line=trim($line);
while ($etat!="stop") {
switch ($etat) {
case "attente":
if (($line!="RETOUR SECOURU")&&($line!="PRET SECOURU")) {
$error=true;
$error_message=$msg['secouru_error_file_intro'];
$etat="stop";
} else {
if ($line=="PRET SECOURU") $etat="debut_pret"; else {
print "".$msg['secouru_retour']."
";
$etat="debut_retour";
}
}
break;
case "debut_pret":
$line=read_line($fp);
if ($line===false) {
$etat="stop";
} else {
if (is_reader($line)) {
$reader=$line;
print "".$msg['secouru_pret']."
";
$etat="pret";
} else {
$error=true;
$error_message=$msg['secouru_error_file_empr'];
$etat="stop";
}
}
case "pret":
$line=read_line($fp);
if ($line===false) {
print "
";
fclose($fp);
}
}
// <-------------- check_document_secouru() --------------->
// récupère différents paramètres sur le document à emprunter
/* ce qui nous intéresse :
- si le document est inconnu : on ne fait rien bien entendu -> retour EX_INCONNU
- si le document est déja en prêt -> allready_BORROWED
- si l'exemplaire a une note -> l'utilisateur doit confirmer le prêt (HAS_NOTE)
- si le document est en consultation sur place -> l'utilisateur doit confirmer le prêt retour SUR_PLACE
- si le document est réservé pour un autre lecteur -> l'utilisateur doit confirmer le prêt retour HAS_RESA
- si le document est réservé pour ce lecteur -> on efface la réservation et on retourne EX_OK */
function check_document_secouru($id_expl, $id_empr) {
$retour = new stdClass();
$retour -> flag = 0;
if (!$id_expl || !$id_empr)
return $retour -> flag;
// on tente de récupérer les infos exemplaire utiles
$query = "select e.expl_cb as cb, e.expl_id as id, s.pret_flag as pretable, e.expl_notice as notice, e.expl_bulletin as bulletin, e.expl_note as note, expl_comment, s.statut_libelle as statut";
$query.= " from exemplaires e, docs_statut s";
$query.= " where e.expl_id=$id_expl";
$query.= " and s.idstatut=e.expl_statut";
$query.= " limit 1";
$result = pmb_mysql_query($query);
// exemplaire inconnu
if (!pmb_mysql_num_rows($result)) {
$retour -> flag = EX_INCONNU;
return $retour;
}
$expl = pmb_mysql_fetch_object($result);
$retour -> expl_cb = $expl -> cb;
// une autre query pour savoir si l'exemplaire est en prêt...
$query = "select pret_idempr from pret where pret_idexpl=$id_expl limit 1";
$result = pmb_mysql_query($query);
if (@ pmb_mysql_num_rows($result)) {
// l'exemplaire est déjà en prêt
$empr = pmb_mysql_result($result, '0', 'pret_idempr');
// l'emprunteur est l'emprunteur actuel
if ($empr == $id_empr) $retour -> flag += ALREADY_LOANED;
else $retour -> flag += ALREADY_BORROWED;
}
// cas de l'exemplaire qui a une note
if ($expl -> note) {
$retour -> flag += HAS_NOTE;
$retour -> note = $expl -> note;
}
// cas de l'exemplaire en consultation sur place
if (!$expl -> pretable) {
// l'exemplaire est en consultation sur place
$retour -> flag += NON_PRETABLE;
$retour -> note = $expl -> statut;
}
// cas des réservations
// on checke si l'exemplaire a une réservation
$query = "select resa_idempr as empr, id_resa, resa_cb from resa where resa_idnotice='$expl->notice' and resa_idbulletin='$expl->bulletin' order by resa_date limit 1";
$result = pmb_mysql_query($query);
if (pmb_mysql_num_rows($result)) {
$reservataire = pmb_mysql_result($result, 0, 'empr');
$id_resa = pmb_mysql_result($result, 0, 'id_resa');
$resa_cb = pmb_mysql_result($result, 0, 'resa_cb');
$retour -> idnotice = $expl -> notice;
$retour -> idbulletin = $expl -> bulletin;
$retour -> id_resa = $id_resa ;
$retour -> resa_cb = $resa_cb ;
if ($reservataire == $id_empr) {
// la réservation est pour ce lecteur
$retour -> flag += HAS_RESA_GOOD;
} else {
// réservé pour un autre lecteur
$retour -> flag += HAS_RESA_FALSE;
}
}
return $retour;
}
// ajoute le prêt en table
function add_pret($id_empr, $id_expl, $cb_doc) {
global $msg;
global $pmb_quotas_avances;
/* on prépare la date de début*/
$pret_date = time();
/* on cherche la durée du prêt */
if($pmb_quotas_avances) {
//Initialisation de la classe
$qt=new quota("LEND_TIME_QUOTA");
$struct["READER"]=$id_empr;
$struct["EXPL"]=$id_expl;
$struct["NOTI"] = exemplaire::get_expl_notice_from_id($id_expl);
$struct["BULL"] = exemplaire::get_expl_bulletin_from_id($id_expl);
$duree_pret=$qt->get_quota_value($struct);
if ($duree_pret==-1) $duree_pret=0;
} else {
$query = "SELECT duree_pret";
$query.= " FROM exemplaires, docs_type";
$query.= " WHERE expl_id='".$id_expl;
$query.= "' and idtyp_doc=expl_typdoc LIMIT 1";
$result = @ pmb_mysql_query($query) or die("can't SELECT exemplaires ".$query);
$expl_properties = pmb_mysql_fetch_object($result);
$duree_pret = $expl_properties -> duree_pret;
}
// calculer la date de retour prévue
$pret_retour = $pret_date +3600 * 24 * $duree_pret;
// insérer le prêt
$query = "INSERT INTO pret SET ";
$query.= "pret_idempr = '".$id_empr."', ";
$query.= "pret_idexpl = '".$id_expl."', ";
$query.= "pret_date = sysdate(), ";
$query.= "pret_retour = '".date("Y-m-d", $pret_retour)."', ";
$query.= "retour_initial = '".date("Y-m-d", $pret_retour)."' ";
pmb_mysql_query($query) or die(pmb_mysql_error()." can't INSERT into pret".$query);
// insérer la trace en stat, récupérer l'id et le mettre dans la table des prêts pour la maj ultérieure
$stat_avant_pret = pret_construit_infos_stat ($id_expl) ;
$stat_id = stat_stuff ($stat_avant_pret) ;
$query = "update pret SET pret_arc_id='$stat_id' where ";
$query.= "pret_idempr = '".$id_empr."' and ";
$query.= "pret_idexpl = '".$id_expl."' ";
pmb_mysql_query($query) or die("can't update pret for stats ".$query);
audit::insert_creation (AUDIT_PRET, $stat_id) ;
//enregistrer les champs perso pret
$p_perso=new pret_parametres_perso("pret");
$p_perso->rec_fields_perso($stat_id);
$query = "update exemplaires SET ";
$query.= "last_loan_date = sysdate() ";
$query.= "where expl_id= '".$id_expl."' ";
pmb_mysql_query($query) or die("can't update last_loan_date in exemplaires : ".$query);
$query = "update empr SET ";
$query.= "last_loan_date = sysdate() ";
$query.= "where id_empr= '".$id_empr."' ";
pmb_mysql_query($query) or die("can't update last_loan_date in empr : ".$query);
/**
* Publication d'un évenement à l'enregistrement du prêt en base (pièges passés et prêt validé (quotas etc..) )
*/
$evt_handler = events_handler::get_instance();
$event = new event_loan("loan", "add_loan");
$event->set_id_loan($id_loan);
$event->set_id_empr($id_empr);
$evt_handler->send($event);
}
// efface une résa pour un emprunteur donné et réaffecte le cb éventuellement
function del_resa($id_empr, $id_notice, $id_bulletin, $cb_encours_de_pret) {
if (!$id_empr || (!$id_notice && !$id_bulletin))
return FALSE;
$id_notice += 0;
$id_bulletin += 0;
$rqt = "select resa_cb, id_resa from resa where resa_idnotice='".$id_notice."' and resa_idbulletin='".$id_bulletin."' and resa_idempr='".$id_empr."' ";
$res = pmb_mysql_query($rqt);
$obj = pmb_mysql_fetch_object($res);
$cb_recup = $obj->resa_cb;
$id_resa = $obj->id_resa;
// suppression
$rqt = "delete from resa where id_resa='".$id_resa."' ";
$res = pmb_mysql_query($rqt);
// si on delete une resa à partir d'un prêt, on invalide la résa qui était validée avec le cb, mais on ne change pas les dates, ça sera fait par affect_cb
$rqt_invalide_resa = "update resa set resa_cb='' where resa_cb='".$cb_encours_de_pret."' " ;
$res = pmb_mysql_query($rqt_invalide_resa) ;
// réaffectation du doc éventuellement
if ($cb_recup != $cb_encours_de_pret) {
// les cb sont différents
if (!verif_cb_utilise($cb_recup)) {
// le cb qui était affecté à la résa qu'on vient de supprimer n'est pas utilisé
// on va affecter le cb_récupéré à une resa non validée
$res_affectation = affecte_cb($cb_recup) ;
if (!$res_affectation && $cb_recup) {
// cb non réaffecté, il faut transférer les infos de la résa dans la table des docs à ranger
$rqt = "insert into resa_ranger (resa_cb) values ('".$cb_recup."') ";
$res = pmb_mysql_query($rqt);
}
}
}
// Au cas où il reste des résa invalidées par resa_cb, on leur colle les dates comme il faut...
$rqt_invalide_resa = "update resa set resa_date_debut='0000-00-00', resa_date_fin='0000-00-00' where resa_cb='' " ;
$res = pmb_mysql_query($rqt_invalide_resa) ;
return TRUE;
}
function rec_pret($reader,$line) {
global $msg;
//Recherche du lecteur
$requete="select id_empr from empr where empr_cb='".addslashes($reader)."'";
$resultat=pmb_mysql_query($requete);
if (pmb_mysql_num_rows($resultat)) {
$id_empr=pmb_mysql_result($resultat,0,0);
//Recherche du lecteur
$requete="select expl_id from exemplaires where expl_cb='".addslashes($line)."'";
$resultat=pmb_mysql_query($requete);
if (pmb_mysql_num_rows($resultat)) {
$expl_id=pmb_mysql_result($resultat,0,0);
print pmb_bidi("
";
}
}
function rec_retour($line) {
global $action_piege,$piege_resa;
global $msg;
$form_cb_expl=$line;
$expl=new expl_to_do($form_cb_expl);
//print $expl->cb_tmpl;
//if(!$form_cb_expl) exit;
$expl->do_form_retour($action_piege,$piege_resa);
print $expl->expl_form;
return;
// la suite n'est plus utilisé
if ($form_cb_expl) {
print "";
// étape 1 : on regarde si le code-barre est connu
if($stuff=check_barcode($form_cb_expl)) {
$stuff = check_pret($stuff);
$stuff = check_resa($stuff);
// appel de la fonction do_retour, qui va gérer tout cela
do_retour_secouru($stuff);
} else {
print "
";
}
// code de suppression prêt et la mise en table de stat
if (del_pret($stuff)) {
if(!stat_stuff($stuff)) {
// impossible d'insérer en table stat
print "
${msg[371]}
";
}
} else {
// impossible de supprimer en table pret
print "
${msg[372]}
";
}
} else {
print "
${msg[605]}
";
}
if ($stuff->expl_note)
print pmb_bidi("
${msg[377]} :
".nl2br($stuff->expl_note)."
");
if ($stuff->expl_comment)
print pmb_bidi("
".$msg['expl_zone_comment']." :
".nl2br($stuff->expl_comment)." ");
// traitement de l'éventuelle réservation
if ($stuff->resa_idempr) {
// le doc en retour peut servir à valider une résa suivante
if (!verif_cb_utilise ($stuff->expl_cb)) {
$affect = affecte_cb ($stuff->expl_cb) ;
// affichage message de réservation
if ($affect) {
print pmb_bidi("