Fichier non valide !";
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="PRET SECOURU ou RETOUR SECOURU attendu";
$etat="stop";
} else {
if ($line=="PRET SECOURU") $etat="debut_pret"; else {
$etat="debut_retour";
}
}
break;
case "debut_pret":
$line=read_line($fp);
if ($line===false) {
$etat="stop";
} else {
if (is_reader($line)) {
$reader=$line;
$etat="pret";
} else {
$error=true;
$error_message="Un code barre lecteur est attendu";
$etat="stop";
}
}
case "pret":
$line=read_line($fp);
if ($line===false) {
$etat="stop";
} else {
if (($line=="PRET SECOURU")||($line=="RETOUR SECOURU")) {
$etat="attente";
} else {
if (!is_cb_ex($line)) {
$error=true;
$error_message="Un code barre exemplaire est attendu";
$etat="stop";
} else $etat="pret";
}
}
break;
case "debut_retour":
$line=read_line($fp);
if ($line===false) {
$etat="stop";
} else {
if (($line=="PRET SECOURU")||($line=="RETOUR SECOURU")) {
$etat="attente";
} else {
if (!is_cb_ex($line)) {
$error=true;
$error_message="Un code barre exemplaire est attendu";
$etat="stop";
} else $etat="debut_retour";
}
}
break;
}
}
fclose($fp);
if ($error) {
print "
Erreur à la ligne ".$nline." : ".$error_message."
";
print "
";
} else {
print "
Fichier valide : lancement de la récupération...
";
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 "
Fichier non valide !
";
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="PRET SECOURU ou RETOUR SECOURU attendu";
$etat="stop";
} else {
if ($line=="PRET SECOURU") $etat="debut_pret"; else {
print "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 "Prêt
";
$etat="pret";
} else {
$error=true;
$error_message="Un code barre lecteur est attendu";
$etat="stop";
}
}
case "pret":
$line=read_line($fp);
if ($line===false) {
print "
";
fclose($fp);
}
}
// <-------------- check_empr_secouru --------------->
// teste l'id_empr passée en paramètre (check si l'emprunteur existe)
function check_empr_secouru($id) {
global $dbh;
if (!$id)
return FALSE;
$query = "select count(1) as qte from empr where id_empr='$id' ";
$result = mysql_query($query, $dbh);
return mysql_result($result, 0, 0);
}
// <-------------- check_document() --------------->
// 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($id_expl, $id_empr) {
global $dbh;
$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 = mysql_query($query, $dbh);
// exemplaire inconnu
if (!mysql_num_rows($result)) {
$retour -> flag = EX_INCONNU;
return $retour;
}
$expl = 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 = mysql_query($query, $dbh);
if (@ mysql_num_rows($result)) {
// l'exemplaire est déjà en prêt
$empr = 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 = mysql_query($query, $dbh);
if (mysql_num_rows($result)) {
$reservataire = mysql_result($result, 0, 'empr');
$id_resa = mysql_result($result, 0, 'id_resa');
$resa_cb = 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) {
// le lien MySQL
global $dbh;
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;
$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 = @ mysql_query($query, $dbh) or die("can't SELECT exemplaires ".$query);
$expl_properties = 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)."' ";
$result = @ mysql_query($query, $dbh) or die(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."' ";
$result = @ mysql_query($query, $dbh) or die("can't update pret for stats ".$query);
audit::insert_creation (AUDIT_PRET, $stat_id) ;
$query = "update exemplaires SET ";
$query.= "last_loan_date = sysdate() ";
$query.= "where expl_id= '".$id_expl."' ";
$result = @ mysql_query($query, $dbh) 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."' ";
$result = @ mysql_query($query, $dbh) or die("can't update last_loan_date in empr : ".$query);
}
// 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) {
global $dbh;
if (!$id_empr || (!$id_notice && !$id_bulletin))
return FALSE;
if (!$id_notice)
$id_notice = 0;
if (!$id_bulletin)
$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 = mysql_query($rqt, $dbh);
$obj = 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 = mysql_query($rqt, $dbh);
// 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 = mysql_query ($rqt_invalide_resa, $dbh) ;
// 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 = mysql_query($rqt, $dbh);
}
}
}
// 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 = mysql_query ($rqt_invalide_resa, $dbh) ;
return TRUE;
}
function rec_pret($reader,$line) {
global $msg,$dbh;
//Recherche du lecteur
$requete="select id_empr from empr where empr_cb='".addslashes($reader)."'";
$resultat=mysql_query($requete);
if (mysql_num_rows($resultat)) {
$id_empr=mysql_result($resultat,0,0);
//Recherche du lecteur
$requete="select expl_id from exemplaires where expl_cb='".addslashes($line)."'";
$resultat=mysql_query($requete);
if (mysql_num_rows($resultat)) {
$expl_id=mysql_result($resultat,0,0);
print pmb_bidi("
");
if (check_empr_secouru($id_empr)) {
$empr_temp = new emprunteur($id_empr, '', FALSE, 1);
$statut = check_document($expl_id, $id_empr);
if ($statut -> flag & ALREADY_LOANED || $statut -> flag & ALREADY_BORROWED) {
if ($statut -> flag & ALREADY_LOANED) {
print "
$msg[386]
";
}
if ($statut -> flag & ALREADY_BORROWED) {
print "
$msg[387]
";
}
} else {
if ($statut -> flag && ($statut -> flag & HAS_RESA_GOOD)) {
// archivage resa
$rqt_arch = "UPDATE resa_archive, resa SET resarc_pretee = 1 WHERE id_resa = '".$statut->id_resa."' AND resa_arc = resarc_id ";
mysql_query($rqt_arch, $dbh);
// suppression de la resa pour ce lecteur
del_resa($id_empr, $statut -> idnotice, $statut -> idbulletin, $statut -> expl_cb);
}
// ajout du prêt
add_pret($id_empr, $expl_id, $line);
print "
effectué
";
}
} else {
print "
".$reader." : Lecteur inconnu"."
";
}
} else {
print "
".$line." : Exemplaire inconnu"."
";
}
} else {
print "
".$reader." : Lecteur inconnu"."
";
}
}
function rec_retour($line) {
global $action_piege,$piege_resa;
$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);
// on a maintenant un gros objet $stuff avec toutes les infos pour traiter les choses
// les propriétés de cet objet sont visibles dans la fonction show_reports() plus bas
// show_report($stuff); // uncomment for debugging
// appel de la fonction do_retour, qui va gérer tout cela
do_retour_secouru($stuff);
} else {
print "
".$form_cb_expl." : Exemplaire inconnu"."
";
}
}
}
// effectue les opérations de retour et mise en stat
function do_retour_secouru($stuff) {
global $dbh;
global $msg;
global $alert_sound_list;
if(!is_object($stuff))
die("erreur grave dans le module ./circ/retour_secouru.inc [do_retour_secouru()]. Contactez l'admin");
print pmb_bidi(''.$stuff->libelle.'');
// récupération localisation exemplaire
$query = "select t.tdoc_libelle as type_doc";
$query .= ", l.location_libelle as location";
$query .= ", s.section_libelle as section";
$query .= " from docs_type t";
$query .= ", docs_location l";
$query .= ", docs_section s";
$query .= " where t.idtyp_doc=".$stuff->expl_typdoc;
$query .= " and l.idlocation=".$stuff->expl_location;
$query .= " and s.idsection=".$stuff->expl_section;
$query .= " limit 1";
$result = mysql_query($query, $dbh);
$info_doc = mysql_fetch_object($result);
print pmb_bidi(' '.$info_doc->type_doc);
print pmb_bidi('. '.$info_doc->location);
print pmb_bidi('. '.$info_doc->section);
print pmb_bidi('. '.$stuff->expl_cote);
if($stuff->pret_idempr) {
// l'exemplaire était effectivement emprunté
// on affiche les infos de l'emprunteur
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]} :
".$stuff->expl_note."
");
if ($stuff->expl_comment)
print pmb_bidi("
".$msg[expl_zone_comment]." :
".$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("