> aucune info de gestion : liste simple, attention utilisée un peu partout !
define ('GESTION_INFO_GESTION', 1); // pour traitement des résa
define ('LECTEUR_INFO_GESTION', 2); // pour affichage en fiche lecteur
function resa_list ($idnotice=0, $idbulletin=0, $idempr=0, $order="", $where = "", $info_gestion=NO_INFO_GESTION, $url_gestion="") {
global $dbh ;
global $msg;
global $montrerquoi ;
global $current_module ;
global $pdflettreresa_priorite_email_manuel;
global $deflt2docs_location, $pmb_lecteurs_localises, $empr_location_id ;
global $pmb_transferts_actif,$f_loc, $transferts_choix_lieu_opac;
global $resa_liste_jscript_GESTION_INFO_GESTION, $ajout_resa_jscript_choix_loc_retrait,$deflt_resas_location;
global $tdoc,$charset,$transferts_site_fixe, $pmb_location_reservation;
if (!$montrerquoi) $montrerquoi='all' ;
if (!$order) $order="notices_m.index_sew, resa_idnotice, resa_idbulletin, resa_date" ;
if ($pmb_lecteurs_localises && !$idempr){
if ($f_loc=="") $f_loc = $deflt_resas_location;
if ($f_loc) $sql_expl_loc= " and expl_location='".$f_loc."' ";
}
if ($pmb_transferts_actif=="1" && $f_loc && !$idempr) {
switch ($transferts_choix_lieu_opac) {
case "1":
//retrait de la resa sur lieu choisi par le lecteur
$sql_suite .= " AND resa_loc_retrait='".$f_loc."' ";
break;
case "2":
//retrait de la resa sur lieu fixé
if ($f_loc!=$transferts_site_fixe)
$sql_suite.= " AND 0";
break;
case "3":
//retrait de la resa sur lieu exemplaire
// On affiche les résa que peut satisfaire la loc
// respecter les droits de réservation du lecteur
if($pmb_location_reservation) {
$sql_loc_resa.=" and empr_location=resa_emprloc and resa_loc='".$f_loc."' ";
$sql_loc_resa_from=", resa_loc ";
}
if ($f_loc && !$idempr )$sql_expl_loc= " and expl_location='".$f_loc."' ";
break;
default:
//retrait de la resa sur lieu lecteur
$sql_suite .= " AND empr_location='".$f_loc."' ";
if ($f_loc && !$idempr )$sql_expl_loc= " and expl_location='".$f_loc."' ";
break;
}
}elseif($pmb_location_reservation && $f_loc && !$idempr) {
$sql_loc_resa.=" and empr_location=resa_emprloc and resa_loc='".$f_loc."' ";
$sql_loc_resa_from=", resa_loc ";
}
$sql="SELECT resa_idnotice, resa_idbulletin, resa_date, resa_date_debut, resa_date_fin, resa_cb, resa_confirmee, resa_idempr, ifnull(expl_cote,'') as expl_cote, empr_nom, empr_prenom, empr_cb, location_libelle, resa_loc_retrait, ";
$sql.=" trim(concat(if(series_m.serie_name <>'', if(notices_m.tnvol <>'', concat(series_m.serie_name,', ',notices_m.tnvol,'. '), concat(series_m.serie_name,'. ')), if(notices_m.tnvol <>'', concat(notices_m.tnvol,'. '),'')), ";
$sql.=" if(series_s.serie_name <>'', if(notices_s.tnvol <>'', concat(series_s.serie_name,', ',notices_s.tnvol,'. '), series_s.serie_name), if(notices_s.tnvol <>'', concat(notices_s.tnvol,'. '),'')), ";
$sql.=" ifnull(notices_m.tit1,''),ifnull(notices_s.tit1,''),' ',ifnull(bulletin_numero,''), if (mention_date, concat(' (',mention_date,')') ,''))) as tit, id_resa, ";
$sql.=" ifnull(notices_m.typdoc,notices_s.typdoc) as typdoc, ";
$sql.=" IF(resa_date_fin>=sysdate() or resa_date_fin='0000-00-00',0,1) as perimee, date_format(resa_date_debut, '".$msg["format_date"]."') as aff_resa_date_debut, if(resa_date_fin='0000-00-00', '', date_format(resa_date_fin, '".$msg["format_date"]."')) as aff_resa_date_fin, date_format(resa_date, '".$msg["format_date"]."') as aff_resa_date " ;
$sql.=" FROM ((((resa LEFT JOIN notices AS notices_m ON resa_idnotice = notices_m.notice_id ";
$sql.=" LEFT JOIN series AS series_m ON notices_m.tparent_id = series_m.serie_id ) ";
$sql.=" LEFT JOIN bulletins ON resa_idbulletin = bulletins.bulletin_id) ";
$sql.=" LEFT JOIN notices AS notices_s ON bulletin_notice = notices_s.notice_id ";
$sql.=" LEFT JOIN series AS series_s ON notices_s.tparent_id = series_s.serie_id ) ";
$sql.=" LEFT JOIN exemplaires ON resa_cb = exemplaires.expl_cb), ";
$sql.=" empr, docs_location $sql_loc_resa_from ";
$sql.=" WHERE resa_idempr = id_empr AND idlocation = empr_location ";
$sql.=$sql_suite;
if ($idempr)
$sql.=" AND id_empr='$idempr'";
if ($montrerquoi=='validees')
$sql .= " AND resa_cb<>''";
if ($montrerquoi=='invalidees')
$sql .= " AND resa_cb=''";
if ($montrerquoi=='valid_noconf') {
$sql .= " AND resa_cb!=''";
$sql .= " AND resa_confirmee=0";
}
if ($where)
$sql.=" AND ".$where ;
$sql.=" $sql_loc_resa GROUP BY resa_idnotice, resa_idbulletin, resa_idempr ";
$sql.=" ORDER BY ".$order ;
if ($idnotice || $idbulletin) {
$sql="SELECT resa_idnotice, resa_idbulletin, resa_date, resa_date_debut, resa_date_fin, resa_cb, resa_confirmee, resa_idempr, ifnull(expl_cote,'') as expl_cote, empr_nom, empr_prenom, empr_cb, location_libelle, resa_loc_retrait, ";
$sql.=" trim(concat(if(series_m.serie_name <>'', if(notices_m.tnvol <>'', concat(series_m.serie_name,', ',notices_m.tnvol,'. '), concat(series_m.serie_name,'. ')), if(notices_m.tnvol <>'', concat(notices_m.tnvol,'. '),'')), ";
$sql.=" if(series_s.serie_name <>'', if(notices_s.tnvol <>'', concat(series_s.serie_name,', ',notices_s.tnvol,'. '), series_s.serie_name), if(notices_s.tnvol <>'', concat(notices_s.tnvol,'. '),'')), ";
$sql.=" ifnull(notices_m.tit1,''),ifnull(notices_s.tit1,''),' ',ifnull(bulletin_numero,''), if (mention_date, concat(' (',mention_date,')') ,''))) as tit, id_resa, ";
$sql.=" ifnull(notices_m.typdoc,notices_s.typdoc) as typdoc, ";
$sql.=" IF(resa_date_fin>=sysdate() or resa_date_fin='0000-00-00',0,1) as perimee, date_format(resa_date_debut, '".$msg["format_date"]."') as aff_resa_date_debut, if(resa_date_fin='0000-00-00', '', date_format(resa_date_fin, '".$msg["format_date"]."')) as aff_resa_date_fin, date_format(resa_date, '".$msg["format_date"]."') as aff_resa_date " ;
$sql.=" FROM ((((resa LEFT JOIN notices AS notices_m ON resa_idnotice = notices_m.notice_id ";
$sql.=" LEFT JOIN series AS series_m ON notices_m.tparent_id = series_m.serie_id ) ";
$sql.=" LEFT JOIN bulletins ON resa_idbulletin = bulletins.bulletin_id) ";
$sql.=" LEFT JOIN notices AS notices_s ON bulletin_notice = notices_s.notice_id ";
$sql.=" LEFT JOIN series AS series_s ON notices_s.tparent_id = series_s.serie_id) ";
$sql.=" LEFT JOIN exemplaires ON resa_cb = exemplaires.expl_cb), ";
$sql.=" empr, docs_location ";
$sql.=" WHERE resa_idempr = id_empr AND idlocation = empr_location AND resa_idnotice = '$idnotice' AND resa_idbulletin='$idbulletin' ";
$sql.=" ORDER BY resa_date" ;
$f_loc=0;
}
$req = mysql_query($sql) or die("Erreur SQL ! ".$sql." ".mysql_error());
switch ($info_gestion) {
case GESTION_INFO_GESTION:
$aff_final .=
"
" ;
break;
case LECTEUR_INFO_GESTION:
break;
default:
case NO_INFO_GESTION:
break;
}
return $aff_final ;
}
$aff_final .= "
";
$aff_final .= "
" ;
if (!$idnotice && !$idbulletin) $aff_final .= "
$msg[233]
" ;
$aff_final .= "
$msg[296]
" ;
if (!$idempr) {
$aff_final .= "
$msg[empr_nom_prenom]
";
if ($pmb_lecteurs_localises) $aff_final .= "
$msg[empr_location]
";
}
$aff_final .= "
$msg[366]
".
"
$msg[374]
".
"
$msg[resa_condition]
".
"
$msg[resa_date_fin]
";
switch ($info_gestion) {
case GESTION_INFO_GESTION:
$aff_final .= "
" . $msg["resa_validee"] . "
";
$aff_final .= "
" . $msg["resa_confirmee"] . "
";
if ($pmb_transferts_actif=="1")
$aff_final .= "
" . $msg["resa_loc_retrait"] . "
";
$aff_final .= "
" . $msg["resa_selectionner"] . "
" ;
if ($pmb_transferts_actif=="1") {
$aff_final .= "
";
}
break;
case LECTEUR_INFO_GESTION:
$aff_final .= "
" . $msg["resa_confirmee"] . "
";
if ($pmb_transferts_actif=="1")
$aff_final .= "
";
$odd_even=0;
//on parcours la liste des réservations
while ($data = mysql_fetch_array($req)) {
$resa_idnotice = $data['resa_idnotice'];
$resa_idbulletin = $data['resa_idbulletin'];
$resa_idempr = $data['resa_idempr'] ;
$precedenteresa_idbulletin=0;
$precedenteresa_idnotice=0;
$no_aff=0;
if(!($idnotice || $idbulletin))
if($f_loc &&!$idempr && $data['resa_cb'] && $data['resa_confirmee']){
// Dans la liste des résa à traiter, on n'affiche pas la résa qui a été affecté par un autre site
$query = "SELECT expl_location FROM exemplaires WHERE expl_cb='".$data['resa_cb']."' ";
$res = @mysql_query($query, $dbh);
if(($data_expl = mysql_fetch_array($res))){
if($data_expl['expl_location']!=$f_loc) {
$no_aff=1;
continue;
}
}
}
if($idempr)$f_loc=0;
$rank = recupere_rang($resa_idempr, $resa_idnotice, $resa_idbulletin,$f_loc) ;
$resa=new reservation($resa_idempr,$resa_idnotice, $resa_idbulletin);
$resa->get_resa_cb();
if (($resa_idnotice != $precedenteresa_idnotice) || ($resa_idbulletin != $precedenteresa_idbulletin)) {
$precedenteresa_idnotice=$resa_idnotice;
$precedenteresa_idbulletin=$resa_idbulletin;
// détermination de la date à afficher dans la case retour pour le rang 1
// disponible, réservé ou date de retour du premier exemplaire
// on compte le nombre total d'exemplaires prêtables pour la notice
$query = "SELECT count(1) FROM exemplaires, docs_statut WHERE expl_statut=idstatut AND statut_allow_resa=1 $sql_expl_loc ";
if ($resa_idnotice) $query .= " AND expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " AND expl_bulletin=".$resa_idbulletin;
$tresult = @mysql_query($query, $dbh);
$total_ex = mysql_result($tresult, 0, 0);
if($sql_expl_loc && !$total_ex) $no_aff=1;
// on compte le nombre d'exemplaires sortis
$query = "SELECT count(1) as qte FROM exemplaires , pret WHERE pret_idexpl=expl_id $sql_expl_loc ";
if ($resa_idnotice) $query .= " and expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " and expl_bulletin=".$resa_idbulletin;
$tresult = @mysql_query($query, $dbh);
$total_sortis = mysql_result($tresult, 0, 0);
// on en déduit le nombre d'exemplaires disponibles
$total_dispo = $total_ex - $total_sortis;
$lien_transfert = false;
if($total_dispo>0) {
// un exemplaire est disponible pour le réservataire (affichage : disponible)
$situation = "$msg[359]";
if($data['resa_cb']&& $data['aff_resa_date_fin']) $situation = "".$msg['expl_reserve']."";
elseif($rank>$total_dispo) $situation = "".$msg['expl_resa_already_reserved']."";
if ( ($pmb_transferts_actif=="1") && ($info_gestion==GESTION_INFO_GESTION) ) {
$dest_loc = resa_loc_retrait($data['id_resa']);
if ($dest_loc!=0) {
$query = "SELECT count(1) FROM exemplaires, docs_statut WHERE expl_statut=idstatut AND statut_allow_resa=1";
$query .= " AND expl_location=".$dest_loc;
if ($resa_idnotice) $query .= " AND expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " AND expl_bulletin=".$resa_idbulletin;
$tresult = mysql_query($query, $dbh);
$total_ex = mysql_result($tresult, 0);
if ($total_ex==0) {
//on a pas d'exemplaires sur le site de retrait
//on regarde si on en ailleurs
$query = "SELECT count(1) FROM exemplaires, docs_statut WHERE expl_statut=idstatut AND statut_allow_resa=1";
$query .= " AND expl_location<>".$dest_loc;
if ($resa_idnotice) $query .= " AND expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " AND expl_bulletin=".$resa_idbulletin;
$tresult = mysql_query($query, $dbh);
$total_ex = mysql_result($tresult, 0);
if ($total_ex!=0) {
//on en a au moins un ailleurs!
//on regarde si un des exemplaires n'est pas en transfert pour cette resa !
$query = "SELECT count(1) FROM transferts WHERE etat_transfert=0 AND origine=4 AND origine_comp=".$data['id_resa'];
$tresult = mysql_query($query, $dbh);
$nb_trans = mysql_result($tresult, 0);
if ($nb_trans!=0) {
//on a un transfert en cours
$situation = "" . $msg["transferts_circ_resa_lib_en_transfert"] . "";
} elseif($total_ex>=$rank) {
$lien_transfert = true;
}
}
} //if ($total_ex==0)
} //if ($dest_loc!=0)
} //if ( ($pmb_transferts_actif=="1") && ($info_gestion==GESTION_INFO_GESTION) )
} else {
if($total_dispo) {
// un ou des exemplaires sont disponibles, mais pas pour ce réservataire (affichage : reservé)
$situation = $msg["resa_expl_reserve"];
} else {
// rien n'est disponible, on trouve la date du premier retour
$query = "SELECT date_format(pret_retour, '".$msg["format_date"]."') as aff_pret_retour from pret p, exemplaires e ";
if ($resa_idnotice) $query .= " WHERE e.expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " WHERE e.expl_bulletin=".$resa_idbulletin;
$query .= " AND e.expl_id=p.pret_idexpl";
$query .= " ORDER BY p.pret_retour LIMIT 1";
$tresult = mysql_query($query, $dbh);
if (mysql_num_rows($tresult)) {
$situation = mysql_result($tresult, 0, 0);
}else {
$situation = $msg["resa_no_expl"];
}
if ( ($pmb_transferts_actif=="1") && ($f_loc!=0) && $transferts_choix_lieu_opac!=3) {
//on regarde si un des exemplaires n'est pas en transfert pour cette resa !
$query = "SELECT count(1) FROM transferts WHERE origine_comp=".$data['id_resa'];
$no_aff=0;
$tresult = mysql_query($query, $dbh);
$nb_trans = mysql_result($tresult, 0);
if ($nb_trans!=0) {
//on a un transfert en cours
$situation = "" . $msg["transferts_circ_resa_lib_en_transfert"] . "";
} else {
$query = "SELECT count(1) FROM exemplaires, docs_statut WHERE expl_statut=idstatut AND statut_allow_resa=1";
$query .= " AND expl_location<>".$f_loc;
if ($resa_idnotice) $query .= " AND expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " AND expl_bulletin=".$resa_idbulletin;
$tresult = mysql_query($query, $dbh);
$total_ex = mysql_result($tresult, 0);
if ($total_ex!=0) {
//on en a au moins un ailleurs!
// sont-il déjà prêtés ou réservé
$query = "SELECT count(1) FROM exemplaires, docs_statut
WHERE expl_statut=idstatut AND statut_allow_resa=1";
$query .= " AND expl_location<>".$f_loc;
if ($resa_idnotice) $query .= " AND expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " AND expl_bulletin=".$resa_idbulletin;
$query .= " and expl_id not in(select pret_idexpl from pret, exemplaires where pret_idexpl=expl_id ";
if ($resa_idnotice) $query .= " AND expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " AND expl_bulletin=".$resa_idbulletin;
$query .= ")";
$query .= " and expl_cb not in(select resa_cb from resa, exemplaires where resa_cb=expl_cb ";
if ($resa_idnotice) $query .= " AND expl_notice=".$resa_idnotice;
elseif ($resa_idbulletin) $query .= " AND expl_bulletin=".$resa_idbulletin;
$query .= ")";
$tresult = mysql_query($query, $dbh);
$nb_trans = mysql_result($tresult, 0);
if (!$nb_trans) {
$situation = $msg["resa_no_expl"];
} elseif($total_ex>=$rank) {
$lien_transfert = true;
}
}
}
}
}
}
} else
$situation='';
if(!$no_aff || ($idnotice || $idbulletin)) {
// on affiche les résultats
if ($odd_even==0) {
$aff_final .= "\n
";
$odd_even=1;
} else if ($odd_even==1) {
$aff_final .= "\n
";
}
break;
case LECTEUR_INFO_GESTION:
$aff_final .= "\n
";
if ($data['resa_confirmee']) $aff_final .= "X" ; else $aff_final .= " " ;
$aff_final .= "
" ;
if ($pmb_transferts_actif=="1") {
if (($transferts_choix_lieu_opac=="1")&&($data['aff_resa_date_fin']=="")) {
//choix du lieu de retrait
$rqt = "SELECT idlocation, location_libelle FROM docs_location ORDER BY location_libelle";
$res_loc = mysql_query($rqt);
$liste_loc = "";
while($value = mysql_fetch_object($res_loc)) {
$liste_loc .= "";
}
$aff_final .= str_replace("!!liste_loc!!",$liste_loc,"
");
} else {
//on affiche le lieu de retrait
$loc_retrait = resa_loc_retrait($data['id_resa']);
$rqt = "SELECT location_libelle FROM docs_location WHERE idlocation='".$loc_retrait."'";
$res = mysql_query($rqt);
if (mysql_num_rows($res))
$libloc = mysql_result($res,0);
$aff_final .= "
".$libloc."
";
}
}
$aff_final .= "\n
";
$aff_final .= "" ;
$aff_final .= "
";
break;
default:
case NO_INFO_GESTION:
break;
}
$aff_final .= "
\n";
}
} //fin du while
$aff_final .= "
";
switch ($info_gestion) {
case GESTION_INFO_GESTION:
$aff_final .= "
";
if ($pdflettreresa_priorite_email_manuel!=3) $aff_final .= "
";
$aff_final .= "";
$aff_final .= "
";
$aff_final .= "
";
$aff_final .= "";
$aff_final .= "
" ;
break;
case LECTEUR_INFO_GESTION:
break;
default:
case NO_INFO_GESTION:
break;
}
mysql_free_result ($req);
return $aff_final ;
}
// cette fonction va retourner un tableau des résa pas traitées
function resa_list_resa_a_traiter () {
/* Traitement :
chercher toutes les réservations non traitées (resa_cb ="")
construire le tableau avec le titre de l'ouvrage, le nom du réservataire et son rang
*/
global $dbh ;
global $msg;
global $pmb_lecteurs_localises;
$tableau_final=array();
$order="tit, resa_idnotice, resa_idbulletin, resa_date" ;
$sql="SELECT resa_idnotice, resa_idbulletin, resa_date, resa_date_fin, resa_cb, resa_idempr, empr_nom, empr_prenom, empr_cb, empr_location, ";
$sql.=" trim(concat(ifnull(notices_m.tit1,''),ifnull(notices_s.tit1,''),' ',ifnull(bulletin_numero,''), if (mention_date, concat(' (',mention_date,')') ,''))) as tit, id_resa, ";
$sql.=" IF(resa_date_fin>=sysdate() or resa_date_fin='0000-00-00',0,1) as perimee, date_format(resa_date_debut, '".$msg["format_date"]."') as aff_resa_date_debut, if(resa_date_fin='0000-00-00', '', date_format(resa_date_fin, '".$msg["format_date"]."')) as aff_resa_date_fin, date_format(resa_date, '".$msg["format_date"]."') as aff_resa_date " ;
$sql.=" FROM (((resa LEFT JOIN notices AS notices_m ON resa_idnotice = notices_m.notice_id ) ";
$sql.=" LEFT JOIN bulletins ON resa_idbulletin = bulletins.bulletin_id) ";
$sql.=" LEFT JOIN notices AS notices_s ON bulletin_notice = notices_s.notice_id), empr ";
$sql.=" where resa_idempr=id_empr and (resa_cb='' or resa_cb is null) ";
$sql.=" group by resa_idnotice, resa_idbulletin, resa_idempr ";
$sql.=" order by ".$order ;
$req = mysql_query($sql) or die("Erreur SQL ! ".$sql." ".mysql_error());
if (!mysql_num_rows($req)) return $tableau_final;
while ($data = mysql_fetch_array($req)) {
if($pmb_lecteurs_localises){
$requete = "SELECT location_libelle as empr_loc_libelle FROM docs_location WHERE idlocation= '".$data['empr_location']."' ";
$result = @mysql_query($requete, $dbh);
$res_empr = mysql_fetch_object($result);
}
$rank = recupere_rang($data['resa_idempr'], $data['resa_idnotice'], $data['resa_idbulletin']) ;
$tableau_final[] = array(
'resa_tit' => $data['tit'],
'resa_idnotice' => $data['resa_idnotice'],
'resa_idbulletin' => $data['resa_idbulletin'],
'resa_idempr' => $data['resa_idempr'],
'resa_empr' => $data['empr_nom']." ".$data['empr_prenom'],
'resa_empr_loc_libelle' => $res_empr->empr_loc_libelle,
'rank' => $rank ) ;
} // fin while
mysql_free_result ($req);
return $tableau_final ;
}
function resa_ranger_list () {
global $dbh ;
global $msg;
global $begin_result_liste;
global $end_result_liste;
$sql="SELECT resa_cb, expl_id from resa_ranger left join exemplaires on resa_cb=expl_cb ";
$res = mysql_query($sql, $dbh) ;
while ($ranger = mysql_fetch_object($res)) {
if ($ranger->expl_id) {
if($stuff = get_expl_info($ranger->expl_id)) {
$stuff = check_pret($stuff);
$aff_final .= print_info($stuff,0,0,0);
} else {
$aff_final .= "".$ranger->resa_cb." : ${msg[395]}";
}
} else {
$aff_final .= "".$ranger->resa_cb." : ${msg[395]}";
}
}
if ($aff_final) return $begin_result_liste.$aff_final.$end_result_liste;
else return $msg['resa_liste_docranger_nodoc'] ;
}
// permet de savoir si un CB expl est déjà affecté à une résa
function verif_cb_utilise ($cb) {
global $dbh ;
$rqt = "select id_resa from resa where resa_cb='".addslashes($cb)."' ";
$res = mysql_query ($rqt, $dbh) ;
$nb=mysql_num_rows($res) ;
if (!$nb) return 0 ;
$obj=mysql_fetch_object($res) ;
return $obj->id_resa ;
}
function verif_cb_resa_flag($cb){
global $dbh ;
$query = " select statut_allow_resa from exemplaires , docs_statut where expl_cb='".addslashes($cb)."' and idstatut=expl_statut";
$result = mysql_query($query, $dbh);
if(mysql_num_rows($result)) {
$expl = mysql_fetch_object($result);
return $expl->statut_allow_resa;
}
}
// Ancien prototype générant une erreur sur une version PHP:
// function get_loc_resa_transfert ($cb,&$id_resa=0) {
// Cette fonction ne semble plus utilisée
function get_loc_resa_transfert ($cb,&$id_resa) {
global $dbh;
global $pmb_utiliser_calendrier, $deflt2docs_location,$pmb_location_reservation,$pmb_transferts_actif;
// chercher s'il s'agit d'une notice ou d'un bulletin
$rqt = "SELECT expl_notice, expl_bulletin FROM exemplaires WHERE expl_cb='".$cb."' ";
$res = mysql_query ($rqt, $dbh) ;
$nb=mysql_num_rows($res) ;
if (!$nb) return 0 ;
$obj=mysql_fetch_object($res) ;
if ($id_resa==0)
// chercher le premier (par ordre de rang, donc de date de début de résa, non validé
$rqt = "SELECT id_resa, resa_idempr,resa_loc_retrait
FROM resa
WHERE resa_idnotice='".$obj->expl_notice."'
AND resa_idbulletin='".$obj->expl_bulletin."'
AND resa_cb=''
AND resa_date_fin='0000-00-00'
ORDER BY resa_date ";
else
//on sait de qu'elle resa on parle .....
$rqt = "SELECT id_resa, resa_idempr,resa_loc_retrait FROM resa WHERE id_resa='".$id_resa."'";
$res = mysql_query ($rqt, $dbh) ;
if (!mysql_num_rows($res)) return 0 ;
$obj_resa=mysql_fetch_object($res) ;
$loc_retait=resa_loc_retrait($obj_resa->id_resa);
$id_resa= $obj_resa->id_resa ;
if ($loc_retait!=$deflt2docs_location) return $loc_retait;
$nb_days = get_time($obj_resa->resa_idempr,$obj->expl_notice,$obj->expl_bulletin) ;
$rqt_date = "select date_add(sysdate(), INTERVAL '$nb_days' DAY) as date_fin ";
$resultatdate = mysql_query($rqt_date);
$res = mysql_fetch_object($resultatdate) ;
$date_fin = $res->date_fin ;
if ($pmb_utiliser_calendrier) {
$rqt_date = "select date_ouverture from ouvertures where ouvert=1 and num_location=$deflt2docs_location and to_days(date_ouverture)>=to_days('$date_fin') order by date_ouverture ";
$resultatdate=mysql_query($rqt_date);
$res=@mysql_fetch_object($resultatdate) ;
if ($res->date_ouverture) $date_fin=$res->date_ouverture ;
}
// mettre resa_cb à jour pour cette resa
$rqt = "update resa set resa_cb='".$cb."' " ;
$rqt .= ", resa_date_debut=sysdate() " ;
$rqt .= ", resa_date_fin='$date_fin' and resa_loc_retrait='$deflt2docs_location' ";
$rqt .= " where id_resa='".$obj_resa->id_resa."' ";
$res = mysql_query ($rqt, $dbh) or die(mysql_error()." $rqt");
$id_resa= $obj_resa->id_resa ;
return $loc_retait;
}
function affecte_cb ($cb,$id_resa=0) {
global $dbh;
global $pmb_utiliser_calendrier, $pmb_location_reservation,$pmb_transferts_actif,$transferts_choix_lieu_opac,$deflt_docs_location,$pmb_location_reservation;
// chercher s'il s'agit d'une notice ou d'un bulletin
$rqt = "SELECT expl_notice, expl_bulletin FROM exemplaires WHERE expl_cb='".$cb."' ";
$res = mysql_query ($rqt, $dbh) ;
$nb=mysql_num_rows($res) ;
if (!$nb) return 0 ;
$obj=mysql_fetch_object($res) ;
if ($id_resa==0) {
if ($pmb_transferts_actif=="1") {
switch ($transferts_choix_lieu_opac) {
case "1":
//retrait de la resa sur lieu choisi par le lecteur
$where= " AND resa_loc_retrait=" . $deflt_docs_location;
break;
case "2":
//retrait de la resa sur lieu fixé
$where= " AND resa_loc_retrait=" . $deflt_docs_location;
break;
case "3":
//retrait de la resa sur lieu exemplaire
$from= " ,exemplaires ";
$where= " AND expl_cb='$cb' and expl_location=" . $deflt_docs_location;
break;
default:
//retrait de la resa sur lieu lecteur
if(!$pmb_location_reservation)$from= " ,empr ";
$where= " AND resa_idempr=id_empr and empr_location=" . $deflt_docs_location;
break;
} //switch $transferts_choix_lieu_opac
}
if($pmb_location_reservation) {
$from_loc_resa= " ,empr, resa_loc ";
$sql_loc_resa=" and resa_idempr=id_empr and empr_location=resa_emprloc and resa_loc='$deflt_docs_location' ";
}
// chercher le premier (par ordre de rang, donc de date de début de résa, non validé
$rqt = "SELECT id_resa, resa_idempr,resa_loc_retrait
FROM resa $from $from_loc_resa
WHERE resa_idnotice='".$obj->expl_notice."'
AND resa_idbulletin='".$obj->expl_bulletin."'
AND resa_cb=''
AND resa_date_fin='0000-00-00'
$where
$sql_loc_resa
ORDER BY resa_date ";
} else {
//on sait de qu'elle resa on parle .....
$rqt = "SELECT id_resa, resa_idempr,resa_loc_retrait FROM resa WHERE id_resa='".$id_resa."'";
}
$res = mysql_query ($rqt, $dbh) ;
if (!mysql_num_rows($res)) return 0 ;
$obj_resa=mysql_fetch_object($res) ;
/*
$rqt_loc_retrait="";
if($pmb_transferts_actif) {
$rqt = "SELECT empr_location FROM resa INNER JOIN empr ON resa_idempr = id_empr WHERE id_resa=".$obj_resa->id_resa;
$res = mysql_query($rqt);
$empr_location = mysql_result($res,0) ;
if($obj_resa->resa_loc_retrait==$deflt_docs_location || $empr_location==$deflt_docs_location) {
$rqt_loc_retrait.= ", resa_loc_retrait='$deflt2docs_location' " ;
} else return 0 ;
}
*/
$nb_days = get_time($obj_resa->resa_idempr,$obj->expl_notice,$obj->expl_bulletin) ;
$rqt_date = "select date_add(sysdate(), INTERVAL '$nb_days' DAY) as date_fin ";
$resultatdate = mysql_query($rqt_date);
$res = mysql_fetch_object($resultatdate) ;
$date_fin = $res->date_fin ;
if ($pmb_utiliser_calendrier) {
$rqt_date = "select date_ouverture from ouvertures where ouvert=1 and num_location=$deflt_docs_location and to_days(date_ouverture)>=to_days('$date_fin') order by date_ouverture ";
$resultatdate=mysql_query($rqt_date);
$res=@mysql_fetch_object($resultatdate) ;
if ($res->date_ouverture) $date_fin=$res->date_ouverture ;
}
// mettre resa_cb à jour pour cette resa
$rqt = "update resa set resa_cb='".$cb."' " ;
$rqt .= ", resa_date_debut=sysdate() " ;
$rqt .= ", resa_date_fin='$date_fin', resa_loc_retrait='$deflt_docs_location' ";
$rqt .= " where id_resa='".$obj_resa->id_resa."' ";
$res = mysql_query ($rqt, $dbh) or die(mysql_error()." $rqt");
$rqt = "delete from resa_ranger where resa_cb='".$cb."' ";
$res = mysql_query ($rqt, $dbh);
return $obj_resa->id_resa ;
}
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 = mysql_query($rqt);
$expl_loc = 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 = mysql_query($rqt);
$loc_retrait = 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 = mysql_query($rqt);
$empr_location = 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 resa_loc_retrait($id_resa) {
global $transferts_choix_lieu_opac, $transferts_site_fixe;
$res_trans = 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 = mysql_query($rqt);
$res_trans = mysql_result($res,0);
break;
case "2":
//retrait de la resa sur lieu fixé
$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 = mysql_query($rqt);
$res_trans = mysql_result($res,0) ;
break;
}
return $res_trans;
}
function desaffecte_cb ($cb,$id_resa=0) {
global $dbh ;
if ($id_resa!=0)
$rqt = "UPDATE resa SET resa_cb='', resa_date_debut='0000-00-00', resa_date_fin='0000-00-00' WHERE resa_cb='".$cb."' AND id_resa='".$id_resa."'";
else
$rqt = "UPDATE resa SET resa_cb='', resa_date_debut='0000-00-00', resa_date_fin='0000-00-00' WHERE resa_cb='".$cb."' ";
$res = mysql_query ($rqt, $dbh) ;
return mysql_affected_rows($dbh) ;
}
function recupere_cb ($id) {
global $dbh ;
$rqt = "select resa_cb from resa where id_resa='".$id."' ";
$res = mysql_query ($rqt, $dbh) ;
$nb=mysql_num_rows($res) ;
if (!$nb) return "" ;
$obj=mysql_fetch_object($res) ;
return $obj->resa_cb ;
}
// calcul du rang d'un emprunteur sur une réservation
function recupere_rang($id_empr, $id_notice, $id_bulletin,$loc=0) {
global $dbh;
global $pmb_lecteurs_localises, $pmb_location_reservation,$deflt_docs_location;
$rank = 1;
if (!$id_notice) $id_notice=0;
if (!$id_bulletin) $id_bulletin=0 ;
if($pmb_lecteurs_localises){
if($pmb_location_reservation && $loc) {
$query = "SELECT resa_idempr
FROM resa, empr, resa_loc
WHERE
resa_idnotice='".$id_notice."' AND resa_idbulletin='".$id_bulletin."'
and id_empr=resa_idempr
and empr_location=resa_emprloc and resa_loc=$loc
ORDER BY resa_date";
} else {
$query = "SELECT resa_idempr FROM resa WHERE resa_idnotice='".$id_notice."' AND resa_idbulletin='".$id_bulletin."' ORDER BY resa_date";
}
} else{
$query = "SELECT resa_idempr FROM resa WHERE resa_idnotice='".$id_notice."' AND resa_idbulletin='".$id_bulletin."' ORDER BY resa_date";
}
$result = mysql_query($query, $dbh);
while($resa=mysql_fetch_object($result)) {
if($resa->resa_idempr == $id_empr) break;
$rank++;
}
return $rank;
}
//Récupération de la durée de réservation pour une notice ou un bulletin et un emprunteur
function get_time($id_empr,$id_notice,$id_bulletin) {
global $pmb_quotas_avances;
//Si les quotas avancés sont actifs
if ($pmb_quotas_avances) {
$struct=array();
if ($id_notice) {
$struct["NOTI"]=$id_notice;
$quota_type="BOOK_TIME_QUOTA";
} else {
$struct["BULL"]=$id_bulletin;
$quota_type="BOOK_TIME_SERIAL_QUOTA";
}
$struct["READER"]=$id_empr;
$qt=new quota($quota_type);
$t=$qt->get_quota_value($struct);
if ($t==-1) $t=0;
} else {
//Sinon je regarde la durée de réservation la plus défavorable par type de document
if ($id_notice)
$requete="select min(duree_resa) from docs_type, exemplaires where expl_notice=$id_notice and expl_typdoc=idtyp_doc";
else
$requete="select min(duree_resa) from docs_type, exemplaires where expl_bulletin=$id_bulletin and expl_typdoc=idtyp_doc";
$resultat=mysql_query($requete);
if (mysql_num_rows($resultat)) $t=mysql_result($resultat,0,0); else $t=0;
}
return $t;
}
function check_quota_resa($id_empr,$id_notice,$id_bulletin) {
global $dbh;
global $msg;
global $pmb_quotas_avances;
global $_quotas_elements_;
global $pmb_resa_quota_pret_depasse;
//Initialisation résultat
$error=array();
$error["ERROR"]=false;
//Si les quotas avancés sont autorisés
if ($pmb_quotas_avances) {
$struct=array();
//Quota de notice ou bulletin ?
if ($id_notice) {
$quota_type="BOOK_NMBR_QUOTA";
$struct["NOTI"]=$id_notice;
$elt_name="NOTICETYPE";
} else {
$quota_type="BOOK_NMBR_SERIAL_QUOTA";
$struct["BULL"]=$id_bulletin;
$elt_name="BULLETINTYPE";
}
//Initialisation du quota
$qt=new quota($quota_type);
$struct["READER"]=$id_empr;
//Si résa bloquée en cas de dépassement de quota de prêt
if (!$pmb_resa_quota_pret_depasse) {
//Le quota de prêt est-il atteint pour cette notice ou bulletin
//Récupération de l'élément indirect à tester
$elt=$qt->get_element_by_name($elt_name);
//Récupération de l'exemplaire le plus défavorable associé à la réservation
$object_id=$qt->get_object_for_indirect_element($_quotas_elements_[$elt],$struct);
//Initialisation du quota de prêt
$qt_pret=new quota("LEND_NMBR_QUOTA");
$struct_pret["READER"]=$id_empr;
$struct_pret["EXPL"]=$object_id;
$r=$qt_pret->check_quota($struct_pret);
} else $r=false;
//Si quota de prêt non violé alors on regarde les quotas de réservation
if (!$r) {
//Vérification
$r=$qt->check_quota($struct);
//Si quota violé
if ($r) {
$error["ERROR"]=true;
//Erreur
$error["MESSAGE"]=$qt->error_message;
//Peut-on forcer ou pas la résa
$error["FORCE"] = $qt->force;
return $error;
}
} else {
$error["ERROR"]=true;
//Erreur
$error["MESSAGE"]=$qt_pret->error_message." ".$msg["resa_quota_pret_error"];
//Peut-on forcer ou pas la résa
$r_force=$qt->check_quota($struct);
if($r_force){
$error["FORCE"] = $qt->force;
}
else $error["FORCE"] = 0;
return $error;
}
return $error;
} else return $error;
}
// retourne un tableau constitué des exemplaires disponibles pour une résa donnée
function expl_dispo ($no_notice=0, $no_bulletin=0) {
global $dbh;
global $pmb_lecteurs_localises, $pmb_location_reservation,$deflt_docs_location;
if($pmb_location_reservation) {
$sql_loc_resa.=" and exemplaires.expl_location=resa_emprloc and resa_loc='".$deflt_docs_location."' ";
$sql_loc_resa_from=", resa_loc ";
}
if ($pmb_lecteurs_localises) {
$sql_localisation=", case when exemplaires.expl_location = $deflt_docs_location then 1 else 0 END as loc_ici ";
$sql_order_localisation=" loc_ici desc, ";
}
// on récupère les données des exemplaires
$requete = "SELECT expl_id, expl_cb, expl_cote, expl_notice, expl_bulletin, pret_retour, location_libelle, section_libelle, statut_libelle, tdoc_libelle $sql_localisation ";
$requete .= " FROM docs_location, docs_section, docs_statut, docs_type $sql_loc_resa_from , ";
$requete .= " exemplaires LEFT JOIN pret ON exemplaires.expl_id=pret.pret_idexpl";
$requete .= " WHERE expl_notice='$no_notice' and expl_bulletin='$no_bulletin' ";
$requete .= " AND docs_statut.statut_allow_resa=1";
$requete .= " AND exemplaires.expl_location=docs_location.idlocation";
$requete .= " AND exemplaires.expl_section=docs_section.idsection ";
$requete .= " AND exemplaires.expl_statut=docs_statut.idstatut ";
$requete .= " AND exemplaires.expl_typdoc=docs_type.idtyp_doc $sql_loc_resa";
$requete .= " order by $sql_order_localisation location_libelle, section_libelle, expl_cote ";
$result = mysql_query($requete, $dbh);
while($expl = mysql_fetch_object($result)) {
if(!$expl->pret_retour && !verif_cb_utilise($expl->expl_cb))
if (!$pmb_lecteurs_localises) $expl->loc_ici =1;
$tableau[] = array (
'expl_id' => $expl->expl_id,
'expl_cb' => $expl->expl_cb,
'expl_notice' => $expl->expl_notice,
'expl_bulletin' => $expl->expl_bulletin,
'expl_cote' => $expl->expl_cote,
'location' => $expl->location_libelle,
'section' => $expl->section_libelle,
'statut' => $expl->statut_libelle ,
'support' => $expl->tdoc_libelle ,
'loc_ici' => $expl->loc_ici ) ;
}
return $tableau ;
}