function do_retour($stuff, $confirmed = 1) { global $dbh; global $msg; global $alert_sound_list, $pmb_play_pret_sound; global $pmb_gestion_amende, $pmb_gestion_financiere, $pmb_blocage_retard, $pmb_blocage_max, $pmb_blocage_delai, $pmb_blocage_coef; global $deflt_docs_location; $erreur_affichage = ''; if (!is_object($stuff)) { die("erreur dans le module ./circ/retour.inc [do_retour()]. Contactez l'admin"); } // 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("<br /><form><div class='row'><div class='left'><strong>" . $stuff->libelle . "</strong></div>"); // flag confirm retour if (!$confirmed and $stuff->pret_idempr) { print "\n\t\t\t<div class='right'>\n\t\t\t<input type='button' class='bouton' \n\t\t\t\t\tname='confirm_ret' value='" . $msg['retour_confirm'] . "'\n\t\t\t\t\tonClick=\"document.location='./circ.php?categ=retour&cb_expl=" . $stuff->expl_cb . "'\">\n\t\t\t</div>"; } elseif ($stuff->pret_idempr) { print "\n\t\t\t\t<div class='right'>\n\t\t\t\t\t<font color='RED'><b>{$msg['retour_ok']}</b></font>\n\t\t\t\t</div>"; } print "</div>"; print pmb_bidi("<br /><b>" . $stuff->expl_cb . "</b> " . $info_doc->type_doc); print pmb_bidi('. ' . $info_doc->location); print pmb_bidi('. ' . $info_doc->section); print pmb_bidi('. ' . $stuff->expl_cote); print " <input class='bouton' type='button' value=\"" . $msg[375] . "\" onClick=\"document.location='circ.php?categ=visu_ex&form_cb_expl=" . $stuff->expl_cb . "';\" />"; print "</form>"; //Champs personalisés $p_perso = new parametres_perso("expl"); $perso_aff = ""; if (!$p_perso->no_special_fields) { $perso_ = $p_perso->show_fields($stuff->expl_id); for ($i = 0; $i < count($perso_["FIELDS"]); $i++) { $p = $perso_["FIELDS"][$i]; if ($p["AFF"]) { $perso_aff .= "<br />" . $p["TITRE"] . " " . $p["AFF"]; } } } if ($perso_aff) { print "<div class='row'>" . $perso_aff . "</div>"; } $script_magnetique = "\n<script language='javascript' type='text/javascript'>\nvar requete = null;\n\nfunction creerRequette(){\n\tif(window.XMLHttpRequest) // Firefox\n\t\trequete = new XMLHttpRequest();\n\telse if(window.ActiveXObject) // Internet Explorer\n \t\trequete = new ActiveXObject('Microsoft.XMLHTTP');\n\telse { // XMLHttpRequest non supporté par le navigateur\n \t\talert('Votre navigateur ne supporte pas les objets XMLHTTPRequest...');\n \treturn;\n\t}\n}\n\nfunction magnetise(commande){\n\tcreerRequette();\n\tif(netscape.security.PrivilegeManager)netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');\t\n\trequete.open('GET', 'http://localhost:30000/?send_value='+commande+'&command=Send', false);\n\trequete.send(null);\n\tif(requete.readyState != 4) alert('Requête antivol non effectuée !');\n}\n\n"; global $pmb_antivol; if ($pmb_antivol > 0) { if ($stuff->type_antivol == 1) { // c'est un support non magnétique (livre, revue...) print "{$script_magnetique}" . "magnetise('RRR');</script>"; } if ($stuff->type_antivol == 2) { //c'est un support magnétique (cassette) print "{$script_magnetique}" . "magnetise('SSS');</script>"; } } //si le retour se passe sur un site différent de ce lui de l'exemplaire global $pmb_transferts_actif; $transfert_mauvais_site = false; if ($stuff->expl_location != $deflt_docs_location) { $alert_sound_list[] = "critique"; $html_erreur_site = "<hr /><div class='erreur'>"; //on agit pour faire l'action par defaut //et que c'est un retour d'emprunt if ($pmb_transferts_actif && $stuff->pret_idempr) { global $transferts_retour_action_defaut; global $transferts_retour_action_autorise_autre; $trans = new transfert(); //pour afficher le site de l'exemplaire $rqtSite = "SELECT location_libelle FROM docs_location WHERE idlocation=" . $stuff->expl_location; $resSite = mysql_result(mysql_query($rqtSite), 0); //si on propose une autre action if ($transferts_retour_action_autorise_autre == "1") { $texte_change_loc = str_replace("!!lbl_site!!", $resSite, $msg["transferts_circ_retour_lbl_change_localisation"]); } $texte_change_loc = str_replace("!!liste_sections!!", "<select onchange='enregLoc(this)'>!!liste!!</select>", $texte_change_loc); //on genere la liste des sections $rqt = "SELECT idsection, section_libelle FROM docs_section ORDER BY section_libelle"; $res_section = mysql_query($rqt); $liste_section = ""; while ($value = mysql_fetch_object($res_section)) { $liste_section .= "<option value='" . $value->idsection . "'"; if ($value->idsection == $stuff->expl_section) { $liste_section .= " selected"; $expl_section_libelle = $value->section_libelle; } $liste_section .= ">" . $value->section_libelle . "</option>"; } $texte_change_loc = addslashes(str_replace("!!liste!!", $liste_section, $texte_change_loc)); $html_erreur_site .= "\n<form name='actionTrans'>\n<input type='hidden' name='typeTrans' value='" . $transferts_retour_action_defaut . "'>\n<input type='hidden' name='explTrans' value='" . $stuff->expl_id . "'>\n<script language='javascript'>\nmsg_inf_loc = '" . $texte_change_loc . "';\nmsg_bt_loc = '" . str_replace("'", "\\'", $msg["transferts_circ_retour_bt_retour_mauvaise_localisation"]) . "';\nmsg_inf_trans = '" . str_replace("'", "\\'", str_replace("!!lbl_site!!", $resSite, $msg["transferts_circ_retour_lbl_transfert"])) . "';\nmsg_bt_trans = '" . str_replace("'", "\\'", $msg["transferts_circ_retour_bt_changement_localisation"]) . "';\n\nfunction changeAction() {\n\n\tvar actionTrans = new http_request();\n\tvar url= './ajax.php?module=circ&categ=transferts&idexpl=' + document.actionTrans.explTrans.value + '&action=';\n\t\t\t\t\n\tswitch (document.actionTrans.typeTrans.value) {\n\t\tcase '0':\n\t\t\t//il y a eu un changement localisation\n\t\t\t//on propose un transfert\n\t\t\tif (confirm('" . addslashes($msg["transferts_circ_retour_confirm_gen_transfert"]) . "')) {\n\n\t\t\t\turl = url + 'gen_transfert¶m=' + document.actionTrans.paramTrans.value ;\n\t\t\t\n\t\t\t\tif (actionTrans.request(url)) {\n\t\t\t\t\t// Il y a une erreur. Afficher le message retourné\n\t\t\t\t\talert ( '" . addslashes($msg["540"]) . " : ' + actionTrans.get_text() );\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t//tout c'est bien passe\n\t\t\t\t\t\n\t\t\t\t\t//on recupere les infos\n\t\t\t\t\tdocument.actionTrans.typeTrans.value = '1';\n\t\t\t\t\tdocument.actionTrans.paramTrans.value = actionTrans.get_text();\n\t\t\t\t\t\n\t\t\t\t\t//on change les textes\n\t\t\t\t\tdocument.actionTrans.btActionTrans.value = msg_bt_trans;\n\t\t\t\t\tdocument.getElementById('libInfoTransfert').innerHTML = msg_inf_trans; \n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\n\t\t\t}//if confirm\n\t\t\t\n\t\t\t\n\t\t\tbreak;\n\t\n\t\tcase '1':\n\t\t\t//il y a eu un transfert\n\t\t\t//on propose un changement de localisation\n\t\t\tif (confirm('" . addslashes($msg["transferts_circ_retour_confirm_change_loc"]) . "')) {\n\n\t\t\t\turl = url + 'change_loc¶m=' + document.actionTrans.paramTrans.value ;\n\t\t\t\n\t\t\t\tif (actionTrans.request(url)) {\n\t\t\t\t\t// Il y a une erreur. Afficher le message retourné\n\t\t\t\t\talert ( '" . addslashes($msg["540"]) . " : ' + actionTrans.get_text() );\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t//tout c'est bien passe\n\t\t\t\t\t\n\t\t\t\t\t//on recupere les infos\n\t\t\t\t\tdocument.actionTrans.typeTrans.value = '0';\n\t\t\t\t\tdocument.actionTrans.paramTrans.value = actionTrans.get_text();\n\t\t\t\t\t\n\t\t\t\t\t//on change les textes\n\t\t\t\t\tdocument.actionTrans.btActionTrans.value = msg_bt_loc;\n\t\t\t\t\tdocument.getElementById('libInfoTransfert').innerHTML = msg_inf_loc; \n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\n\t\t\t} //if confirm\n\t\t\tbreak;\n\t} //switch\n\t\t\n}\n\nfunction enregLoc(obj) {\n\tval = obj.options[obj.selectedIndex].value;\n\t\n\tvar actionTrans = new http_request();\n\tvar url= './ajax.php?module=circ&categ=transferts&idexpl=' + document.actionTrans.explTrans.value + '&action=change_section¶m='+val;\n\t\n\tif (actionTrans.request(url)) {\n\t\t// Il y a une erreur. Afficher le message retourné\n\t\talert ( '" . addslashes($msg["540"]) . " : ' + actionTrans.get_text() );\t\t\t\n\t}\n}\n</script>"; 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); } } if (!$affect) { switch ($transferts_retour_action_defaut) { case "0": //change la localisation d'origine $param = $trans->retour_exemplaire_change_localisation($stuff->expl_id); //le message a l'ecran $html_erreur_site .= "<div id='libInfoTransfert'>" . str_replace("!!lbl_site!!", $resSite, $msg["transferts_circ_retour_lbl_change_localisation"]) . "</div>"; if ($transferts_retour_action_autorise_autre == "1") { //on propose de générer le transfert $html_erreur_site .= " <input class='bouton' name='btActionTrans' type='button' value=\"" . $msg["transferts_circ_retour_bt_retour_mauvaise_localisation"] . "\" " . " onclick=\"changeAction();\"" . ">"; } break; case "1": //genere le transfert automatique de l'exemplaire $param = $trans->retour_exemplaire_genere_transfert_retour($stuff->expl_id); //le message a l'ecran $html_erreur_site .= "<div id='libInfoTransfert'>" . $msg["transferts_circ_retour_lbl_transfert"] . "</div>"; if ($transferts_retour_action_autorise_autre == "1") { //on propose de changer la localisation $html_erreur_site .= " <input class='bouton' name='btActionTrans' type='button' value=\"" . $msg["transferts_circ_retour_bt_changement_localisation"] . "\" " . " onclick=\"changeAction();\"" . ">"; } break; } //switch } if ($transferts_retour_action_autorise_autre == "1") { $html_erreur_site .= "<input type='hidden' name='paramTrans' value='" . $param . "'></form>"; } $html_erreur_site = str_replace("!!lbl_site!!", $resSite, $html_erreur_site); $html_erreur_site = str_replace("!!liste_sections!!", $expl_section_libelle, $html_erreur_site); $transfert_mauvais_site = true; } else { //if (($pmb_transferts_actif)&&($stuff->pret_idempr)) //le message à l'écran $html_erreur_site .= $msg[expl_retour_bad_location]; } $html_erreur_site .= "</div>"; print pmb_bidi($html_erreur_site); // fin de if ($stuff->expl_location != $deflt_docs_location) } if ($stuff->expl_note) { $alert_sound_list[] = "critique"; print pmb_bidi("<hr /><div class='erreur'>{$msg[377]} :</div><div class='message_important'>" . $stuff->expl_note . "</div>"); } elseif ($pmb_play_pret_sound) { $alert_sound_list[] = "information"; } // zone du dernier emrunteur if ($stuff->expl_lastempr) { $dernier_empr = "<hr /><div class='row'>{$msg['expl_prev_empr']} "; $link = "<a href='./circ.php?categ=pret&form_cb=" . rawurlencode($stuff->lastempr_cb) . "'>"; $dernier_empr .= $link . $stuff->lastempr_prenom . ' ' . $stuff->lastempr_nom . ' (' . $stuff->lastempr_cb . ')</a>'; $dernier_empr .= "</div><hr />"; } if ($stuff->pret_idempr) { // l'exemplaire était effectivement emprunté // calcul du retard éventuel $rqt_date = "select ((TO_DAYS(CURDATE()) - TO_DAYS('{$stuff->pret_retour}'))) as retard "; $resultatdate = mysql_query($rqt_date); $resdate = mysql_fetch_object($resultatdate); $retard = $resdate->retard; if ($retard > 0) { //Calcul du vrai nombre de jours $date_debut = explode("-", $stuff->pret_retour); $ndays = calendar::get_open_days($date_debut[2], $date_debut[1], $date_debut[0], date("d"), date("m"), date("Y")); if ($ndays > 0) { $retard = (int) $ndays; print "<br /><div class='erreur'>" . $msg[369] . " : " . $retard . " " . $msg[370] . "</div>"; $alert_sound_list[] = "critique"; } } //Calcul du blocage if ($pmb_blocage_retard) { $date_debut = explode("-", $stuff->pret_retour); $ndays = calendar::get_open_days($date_debut[2], $date_debut[1], $date_debut[0], date("d"), date("m"), date("Y")); if ($ndays > $pmb_blocage_delai) { $ndays = $ndays * $pmb_blocage_coef; if ($ndays > $pmb_blocage_max && $pmb_blocage_max != 0) { $ndays = $pmb_blocage_max; } } else { $ndays = 0; } if ($ndays > 0) { //Le lecteur est-il déjà bloqué ? $date_fin_blocage_empr = mysql_result(mysql_query("select date_fin_blocage from empr where id_empr='" . $stuff->pret_idempr . "'"), 0, 0); //Calcul de la date de fin $date_fin = calendar::add_days(date("d"), date("m"), date("Y"), $ndays); if ($date_fin > $date_fin_blocage_empr) { //Mise à jour mysql_query("update empr set date_fin_blocage='" . $date_fin . "' where id_empr='" . $stuff->pret_idempr . "'"); print "<br /><div class='erreur'>" . sprintf($msg["blocage_retard_pret"], formatdate($date_fin)) . "</div>"; $alertsound_list[] = "critique"; } else { print "<br /><div class='erreur'>" . sprintf($msg["blocage_already_retard_pret"], formatdate($date_fin_blocage_empr)) . "</div>"; $alertsound_list[] = "critique"; } } } //Vérification des amendes if ($pmb_gestion_financiere && $pmb_gestion_amende) { $amende = new amende($stuff->pret_idempr); $amende_t = $amende->get_amende($stuff->pret_idexpl); //Si il y a une amende, je la débite if ($amende_t["valeur"]) { print pmb_bidi("<br /><div class='erreur'>" . $msg["finance_retour_amende"] . " : " . comptes::format($amende_t["valeur"])); $alert_sound_list[] = "critique"; $compte_id = comptes::get_compte_id_from_empr($stuff->pret_idempr, 2); if ($compte_id) { $cpte = new comptes($compte_id); if ($cpte->id_compte) { $cpte->record_transaction("", $amende_t["valeur"], -1, sprintf($msg["finance_retour_amende_expl"], $stuff->pret_idexpl), 0); print " " . $msg["finance_retour_amende_recorded"]; } } print "</div>"; } } // zone du dernier emrunteur print pmb_bidi($dernier_empr); // code de suppression prêt et la mise en table de stat if ($confirmed) { if (del_pret($stuff)) { if (!maj_stat_pret($stuff)) { // impossible de maj en table stat print "<div class='erreur'>{$msg[371]}</div>"; } } else { // impossible de supprimer en table pret print "<div class='erreur'>{$msg[372]}</div>"; } // 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) { if (!$affect) { $affect = affecte_cb($stuff->expl_cb); } // affichage message de réservation if ($affect) { $trans_en_cours = false; $msg_trans = ""; if ($pmb_transferts_actif == "1" && !$transfert_mauvais_site) { //si le transfert est actif et qu'un transfert n'est pas deja fait $res_transfert = resa_transfert($affect, $stuff->expl_cb); if ($res_transfert != 0) { $rqt = "SELECT location_libelle FROM docs_location WHERE idlocation=" . $res_transfert; $lib_loc = mysql_result(mysql_query($rqt), 0); $msg_trans = "<strong>" . str_replace("!!site_dest!!", $lib_loc, $msg["transferts_circ_resa_validation_alerte"]) . "</strong><br />"; $trans_en_cours = true; } } $query = "select distinct "; $query .= "empr_prenom, empr_nom, empr_cb "; $query .= "from (((resa LEFT JOIN notices AS notices_m ON resa_idnotice = notices_m.notice_id ) LEFT JOIN bulletins ON resa_idbulletin = bulletins.bulletin_id) LEFT JOIN notices AS notices_s ON bulletin_notice = notices_s.notice_id), empr "; $query .= "where id_resa in (" . $affect . ") and resa_idempr=id_empr"; $result = mysql_query($query, $dbh); $empr = @mysql_fetch_object($result); print pmb_bidi("<div class='message_important'>{$msg['352']}</div>\n\t\t\t\t\t\t\t<div class='row'>{$msg_trans}\n\t\t\t\t\t\t\t{$msg[373]}\n\t\t\t\t\t\t\t<strong><a href='./circ.php?categ=pret&form_cb=" . rawurlencode($empr->empr_cb) . "'>" . $empr->empr_prenom . " " . $empr->empr_nom . "</a></strong>\n\t\t\t\t\t\t\t ({$empr->empr_cb} )\n\t\t\t\t\t\t\t</div>"); $alert_sound_list[] = "critique"; if (!$trans_en_cours) { alert_empr_resa($affect); } } // fin if affect } // fin if !verif_cb_utilise } // fin if resa } // fin confirmed $empr = new emprunteur($stuff->pret_idempr, $erreur_affichage, FALSE, 2); print pmb_bidi($empr->fiche_affichage); } else { print "<div class='erreur'>{$msg[605]}</div>"; $alert_sound_list[] = "critique"; } // show_report($stuff); // this stands for debugging }
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, idlocation, 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 = pmb_mysql_query($requete, $dbh); if ($result) { while ($expl = pmb_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, 'idlocation' => $expl->idlocation, 'location' => $expl->location_libelle, 'section' => $expl->section_libelle, 'statut' => $expl->statut_libelle, 'support' => $expl->tdoc_libelle, 'loc_ici' => $expl->loc_ici); } } return $tableau; }
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('<strong>' . $stuff->libelle . '</strong>'); // 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 = pmb_mysql_query($query, $dbh); $info_doc = pmb_mysql_fetch_object($result); print pmb_bidi('<br />' . $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 "<hr /><div class='row'>{$msg[368]} : </div>"; print "<a href='./circ.php?categ=pret&form_cb=" . rawurlencode($stuff->empr_cb) . "'>"; print pmb_bidi($stuff->empr_prenom . ' ' . $stuff->empr_nom . '</a>'); if ($stuff->empr_msg) { $message_fiche_empr = "\n\t\t\t\t\t<div class='row'>\n\t\t\t\t\t<div class='colonne10'><img src='./images/info.png' /></div>\n\t\t\t\t\t<div class='colonne-suite'><span class='erreur'>{$stuff->empr_msg}</span></div>\n\t\t\t\t\t</div><br />"; $alert_sound_list[] = "information"; print $message_fiche_empr; } // calcul du retard éventuel $rqt_date = "select ((TO_DAYS(CURDATE()) - TO_DAYS('{$stuff->pret_retour}'))) as retard "; $resultatdate = pmb_mysql_query($rqt_date); $resdate = pmb_mysql_fetch_object($resultatdate); $retard = $resdate->retard; if ($retard > 0) { print "<hr /><div class='erreur'>{$msg[369]} : {$retard} {$msg[370]}</div>"; } // zone du dernier emrunteur if ($stuff->expl_lastempr) { print "<hr /><div class='row'>{$msg['expl_prev_empr']} "; $link = "<a href='./circ.php?categ=pret&form_cb=" . rawurlencode($stuff->lastempr_cb) . "'>"; print pmb_bidi($link . $stuff->lastempr_prenom . ' ' . $stuff->lastempr_nom . ' (' . $stuff->lastempr_cb . ')</a>'); print "</div><hr />"; } // 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 "<div class='erreur'>{$msg[371]}</div>"; } } else { // impossible de supprimer en table pret print "<div class='erreur'>{$msg[372]}</div>"; } } else { print "<div class='erreur'>{$msg[605]}</div>"; } if ($stuff->expl_note) { print pmb_bidi("<hr /><div class='erreur'>{$msg[377]} :</div><div class='message_important'>" . $stuff->expl_note . "</div>"); } if ($stuff->expl_comment) { print pmb_bidi("<hr /><div class='erreur'>" . $msg[expl_zone_comment] . " :</div>" . $stuff->expl_comment . "<br />"); } // 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("<div class='erreur'>{$msg['352']}</div>\n\t\t\t\t\t<div class='row'>\n\t\t\t\t\t{$msg[373]}\n\t\t\t\t\t<strong><a href='./circ.php?categ=pret&form_cb=" . rawurlencode($stuff->cb_reservataire) . "'>" . $stuff->prenom_reservataire . " " . $stuff->nom_reservataire . "</a></strong>\n\t\t\t\t\t ( {$stuff->cb_reservataire} )\n\t\t\t\t\t</div>"); $alert_sound_list[] = "information"; if ($affect) { alert_empr_resa($affect); } // print "<script type='text/javascript'>window.open('./pdf.php?pdfdoc=lettre_resa&id_resa=$affect', 'lettre_confirm_resa', 'toolbar=no, dependent=yes, width=600, height=500, resizable=yes, scrollbars=yes');</script>"; } } } }
// dans à traité pour effectuer le transfert $sql = "UPDATE exemplaires set expl_retloc='" . $obj->expl_location . "' where expl_cb='" . $obj->expl_cb . "' limit 1"; pmb_mysql_query($sql); } $req = " update transferts,transferts_demande\r\n\t\t\t\tset etat_transfert=1,\n\t\t\t\tmotif=CONCAT(motif,'. Cloture, car reservation supprimee (gestion {$PMBuserid})') \r\n\t\t\t\twhere\r\n\t\t\t\tnum_transfert=id_transfert and etat_demande=0 and \r\n\t\t\t\tresa_trans='" . $suppr_id_resa[$i] . "'\r\n\t\t\t\t"; pmb_mysql_query($req, $dbh); } // archivage resa $rqt_arch = "UPDATE resa_archive, resa SET resarc_anulee = 1 WHERE id_resa = '" . $suppr_id_resa[$i] . "' AND resa_arc = resarc_id "; pmb_mysql_query($rqt_arch, $dbh); // suppression $rqt = "delete from resa where id_resa='" . $suppr_id_resa[$i] . "' "; $res = pmb_mysql_query($rqt, $dbh); // réaffectation du doc éventuellement if ($cb_recup) { if (!verif_cb_utilise($cb_recup)) { if (!($id_resa_validee = affecte_cb($cb_recup))) { if ($pmb_transferts_actif) { $rqt = "SELECT id_transfert, sens_transfert, num_location_source, num_location_dest\n\t\t\t\t\t\t\t\tFROM transferts, transferts_demande, exemplaires\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tWHERE id_transfert=num_transfert and num_expl=expl_id and expl_cb='" . $cb_recup . "' AND etat_transfert=0"; $res = pmb_mysql_query($rqt); if (pmb_mysql_num_rows($res)) { // Document à traiter au lieu de à ranger, car transfert en cours? $sql = "UPDATE exemplaires set expl_retloc='" . $deflt_docs_location . "' where expl_cb='" . $cb_recup . "' limit 1"; pmb_mysql_query($sql); $pas_ranger = 1; $msg_a_pointer .= "<div class='row'>"; $msg_a_pointer .= "<div class='erreur'>" . $msg["circ_pret_piege_expl_todo"] . "</div>"; } } if (!$pas_ranger) { //on vérifie que l'exemplaire existe toujours...
function do_retour_doc() { global $dbh; global $msg; global $pmb_gestion_amende, $pmb_gestion_financiere, $pmb_blocage_retard, $pmb_blocage_max, $pmb_blocage_delai, $pmb_blocage_coef; // 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=" . $this->expl_typdoc; $query .= " and l.idlocation=" . $this->expl_location; $query .= " and s.idsection=" . $this->expl_section; $query .= " limit 1"; $result = pmb_mysql_query($query, $dbh); $info_doc = pmb_mysql_fetch_object($result); $this->type_doc = $info_doc->type_doc; if ($this->nbparts > 1) { $this->type_doc .= " (" . $this->nbparts . ")"; } $this->location = $info_doc->location; $this->section = $info_doc->section; if ($this->expl_note) { $this->error_message = $msg[377]; } if ($this->pret_idempr) { // calcul du retard éventuel $rqt_date = "select ((TO_DAYS(CURDATE()) - TO_DAYS('{$this->pret_retour}'))) as retard "; $resultatdate = pmb_mysql_query($rqt_date); $resdate = pmb_mysql_fetch_object($resultatdate); $retard = $resdate->retard; if ($retard > 0) { //Calcul du vrai nombre de jours $date_debut = explode("-", $this->pret_retour); $ndays = calendar::get_open_days($date_debut[2], $date_debut[1], $date_debut[0], date("d"), date("m"), date("Y")); if ($ndays > 0) { $retard = (int) $ndays; $this->error_message = $msg[369] . " : " . $retard . " " . $msg[370]; } else { $this->error_message = $msg["calendrier_active_aucun_retard"]; } } //Calcul du blocage if ($pmb_blocage_retard) { $date_debut = explode("-", $this->pret_retour); $ndays = calendar::get_open_days($date_debut[2], $date_debut[1], $date_debut[0], date("d"), date("m"), date("Y")); if ($ndays > $pmb_blocage_delai) { $ndays = $ndays * $pmb_blocage_coef; if ($ndays > $pmb_blocage_max && $pmb_blocage_max != 0) { $ndays = $pmb_blocage_max; } } else { $ndays = 0; } if ($ndays > 0) { //Le lecteur est-il déjà bloqué ? $date_fin_blocage_empr = pmb_mysql_result(pmb_mysql_query("select date_fin_blocage from empr where id_empr='" . $this->pret_idempr . "'"), 0, 0); //Calcul de la date de fin $date_fin = calendar::add_days(date("d"), date("m"), date("Y"), $ndays); if ($date_fin > $date_fin_blocage_empr) { //Mise à jour pmb_mysql_query("update empr set date_fin_blocage='" . $date_fin . "' where id_empr='" . $this->pret_idempr . "'"); $this->error_message = sprintf($msg["blocage_retard_pret"], formatdate($date_fin)); } else { $this->error_message = sprintf($msg["blocage_already_retard_pret"], formatdate($date_fin_blocage_empr)); } } } //Vérification des amendes if ($pmb_gestion_financiere && $pmb_gestion_amende) { $amende = new amende($this->pret_idempr); $amende_t = $amende->get_amende($this->pret_idexpl); //Si il y a une amende, je la débite if ($amende_t["valeur"]) { $this->error_message = $msg["finance_retour_amende"] . " : " . comptes::format($amende_t["valeur"]); $compte_id = comptes::get_compte_id_from_empr($this->pret_idempr, 2); if ($compte_id) { $cpte = new comptes($compte_id); if ($cpte->id_compte) { $cpte->record_transaction("", $amende_t["valeur"], -1, sprintf($msg["finance_retour_amende_expl"], $this->pret_idexpl), 0); $this->error_message .= " " . $msg["finance_retour_amende_recorded"]; } } } } // Suppression prêt et la mise en table de stat $query = "delete from pret where pret_idexpl = '" . $this->pret_idexpl . "' "; $result = pmb_mysql_query($query, $dbh); if ($result) { $this->retour_message = $msg["retour_ok"]; if (!$this->maj_stat_pret()) { // impossible de maj en table stat $this->error_message = $msg[371]; } } else { // impossible de supprimer en table pret $this->error_message = $msg[372]; } // traitement de l'éventuelle réservation if ($this->resa_idempr) { // le doc en retour peut servir à valider une résa suivante if (!verif_cb_utilise($this->cb_expl)) { $affect = affecte_cb($this->cb_expl); // affichage message de réservation if ($affect) { $this->error_message = $msg["rfid_retour_document_reserve_message"]; $this->url_reservation = "./circ.php?categ=pret&form_cb=" . rawurlencode($this->cb_reservataire); } // fin if affect } // fin if !verif_cb_utilise } // fin if resa } else { $this->error_message = $msg[605]; } }
function print_info($expl, $mode_affichage = 0, $affichage_emprunteurs = 1, $affichage_zone_notes = 1) { global $msg; global $pmb_sur_location_activate; global $pmb_location_resa_planning; global $pmb_expl_show_lastempr; global $pmb_droits_explr_localises, $explr_visible_mod; // $expl est l'objet exemplaire rempli avec ce qu'il faut // $mode_affichage : // 0 en liste dépliable : le contenu est affiché dans le div // 1 : le contenu est affiché APRES l'isbd, sans liste dépliable // 2 : le contenu n'est pas affiché du tout if (!is_object($expl)) { die("serious application error occured in ./circ/visu_ex.inc [print_info()]. Please contact developpment team"); } switch ($mode_affichage) { case '0': $temp = "\n\t\t\t\t<div id='el!!id!!Parent' class='notice-parent'>\n\t \t\t\t<img src='./images/plus.gif' class='img_plus' name='imEx' id='el!!id!!Img' title='" . $msg['admin_param_detail'] . "' border='0' onClick=\"expandBase('el!!id!!', true); return false;\" hspace='3'>\n\t \t\t\t<span class='notice-heada'>!!heada!!</span>\n\t \t\t\t<br />\n\t\t\t\t</div>\n\t\t\t\t<div id='el!!id!!Child' class='notice-child' style='margin-bottom:6px;display:none;'>\n\t \t \t!!contenu!!\n\t \t\t\t</div>\n\t\t\t\t"; $temp = str_replace('!!id!!', $expl->expl_id, $temp); if ($expl->expl_bulletin) { if (SESSrights & CATALOGAGE_AUTH) { $heada = "<a href='./catalog.php?categ=serials&sub=bulletinage&action=expl_form&bul_id=" . $expl->expl_bulletin . "&expl_id=" . $expl->expl_id . "'>" . $msg[376] . " " . $expl->expl_cb . "</a> / " . $expl->aff_reduit; } else { $heada = "<a href='./circ.php?categ=visu_ex&form_cb_expl=" . rawurlencode($expl->expl_cb) . "'>" . $msg[376] . " " . $expl->expl_cb . "</a> / " . $expl->aff_reduit; } } else { if (SESSrights & CATALOGAGE_AUTH) { $heada = "<a href='./catalog.php?categ=edit_expl&id=" . $expl->expl_notice . "&expl_id=" . $expl->expl_id . "'>" . $msg[376] . " " . $expl->expl_cb . "</a> / " . $expl->aff_reduit; } else { $heada = "<a href='./circ.php?categ=visu_ex&form_cb_expl=" . rawurlencode($expl->expl_cb) . "'>" . $msg[376] . " " . $expl->expl_cb . "</a> / " . $expl->aff_reduit; } } $temp = str_replace('!!heada!!', $expl->lien_suppr_cart . $heada, $temp); break; case '1': $selector_prop = "toolbar=no, dependent=yes, resizable=yes, scrollbars=yes"; $cart_click_expl = "onClick=\"openPopUp('./cart.php?object_type=EXPL&item=" . $expl->expl_id . "', 'cart', 600, 700, -2, -2, '{$selector_prop}')\""; $cart_click_expl = "<img src='./images/basket_small_20x20.gif' align='middle' alt='basket' title=\"{$msg[400]}\" {$cart_click_expl}>"; if ($expl->expl_notice) { $cart_click_isbd = "onClick=\"openPopUp('./cart.php?object_type=NOTI&item={$expl->expl_notice}', 'cart', 600, 700, -2, -2, '{$selector_prop}')\""; } elseif ($expl->expl_bulletin) { $cart_click_isbd = "onClick=\"openPopUp('./cart.php?object_type=BULL&item=" . $expl->expl_bulletin . "', 'cart', 600, 700, -2, -2, '{$selector_prop}')\""; } $cart_click_isbd = "<img src='./images/basket_small_20x20.gif' align='middle' alt='basket' title=\"{$msg[400]}\" {$cart_click_isbd}>"; if (SESSrights & CATALOGAGE_AUTH) { $link_cb_not = "<a href='./catalog.php?categ=edit_expl&id=" . $expl->expl_notice . "&expl_id=" . $expl->expl_id . "'>"; $link_cb_bull = "<a href='./catalog.php?categ=serials&sub=bulletinage&action=expl_form&bul_id=" . $expl->expl_bulletin . "&expl_id=" . $expl->expl_id . "'>"; $link_cb_end = "</a>"; if ($pmb_droits_explr_localises) { $explr_tab_modif = explode(",", $explr_visible_mod); if (array_search($expl->expl_location, $explr_tab_modif) === false) { $link_cb_not = ""; $link_cb_bull = ""; $link_cb_end = ""; } } if ($expl->expl_bulletin) { $temp = "<div class='row'><h1>{$cart_click_expl} {$link_cb_bull}{$msg[376]} " . $expl->expl_cb . "{$link_cb_end} : {$cart_click_isbd} " . $expl->aff_reduit . "</h1></div><div class='row'><b>" . $expl->isbd . "</b></div>"; } else { $temp = "<div class='row'><h1>{$cart_click_expl} {$link_cb_not}{$msg[376]} " . $expl->expl_cb . "{$link_cb_end} : {$cart_click_isbd} " . $expl->aff_reduit . "</h1></div><div class='row'><b>" . $expl->isbd . "</b></div>"; } } else { $temp = "<div class='row'><h1>{$cart_click_expl} {$msg[376]} " . $expl->expl_cb . " : {$cart_click_isbd} " . $expl->aff_reduit . "</h1></div><div class='row'><b>" . $expl->isbd . "</b></div>"; } break; } // isbd complet $__isbd .= "<div class=\"row\">"; $__isbd .= $expl->aff_reduit; $__isbd .= "</div>"; // informations de localisation $__local .= "<hr /><div class=\"row\">"; if ($pmb_sur_location_activate) { $__local .= $msg["sur_location_expl"] . ": <b>" . $expl->sur_loc_libelle . "</b> "; } $__local .= "{$msg['298']}: <b>" . $expl->location_libelle . "</b> \n\t\t\t{$msg['295']}: <b>" . $expl->section_libelle . "</b> \n\t\t\t{$msg['296']}: <b>" . $expl->expl_cote . "</b><br />"; $__local .= "{$msg['297']}: " . $expl->statut_libelle; // tester si réservé $sql = "SELECT resa_cb from resa_ranger where resa_cb='" . addslashes($expl->expl_cb) . "'"; $execute_query = pmb_mysql_query($sql); if (pmb_mysql_num_rows($execute_query)) { $situation = $msg['resa_menu_a_ranger']; } elseif ($expl->expl_retloc) { $situation = $msg['resa_menu_a_traiter']; } elseif (verif_cb_utilise($expl->expl_cb)) { $situation = $msg['expl_reserve']; } elseif ($expl->pret_flag && !$expl->pret_idempr) { $situation = "{$msg[359]}"; } else { $situation = ""; } $__local .= " <b>" . $situation . "</b><br />"; $__local .= $msg[299] . ": <b>" . $expl->codestat_libelle . "</b><br />"; $__local .= "</div>"; if ($affichage_emprunteurs) { // zone de l'emprunteur if ($expl->pret_idempr) { $__empr .= "<hr /><div class='row'><b>{$msg['380']}</b><br /> "; $link = "<a href='./circ.php?categ=pret&form_cb=" . rawurlencode($expl->empr_cb) . "'>"; $__empr .= $link . $expl->empr_prenom . " " . $expl->empr_nom . " (" . $expl->empr_cb . ")</a>"; $__empr .= " {$msg[381]} " . $expl->aff_pret_date; $__empr .= ". {$msg[358]} " . $expl->aff_pret_retour . "."; $__empr .= "</div>"; } // zone du dernier emrunteur if ($pmb_expl_show_lastempr && $expl->expl_lastempr) { $__empr .= "<hr /><div class='row'><b>{$msg['expl_lastempr']}</b><br /> "; $link = "<a href='./circ.php?categ=pret&form_cb=" . rawurlencode($expl->lastempr_cb) . "'>"; $__empr .= $link . $expl->lastempr_prenom . ' ' . $expl->lastempr_nom . ' (' . $expl->lastempr_cb . ')</a>'; $__empr .= "</div>"; } } if ($affichage_zone_notes) { // zone du message exemplaire $__note = "<hr /><div class='row'>"; $__note .= "<b>{$msg[377]}</b><br />"; if ($expl->expl_note) { $__note .= "<div class='message_important'>" . $expl->expl_note . "</div>"; } if ($expl->expl_comment) { $__note .= "<b>{$msg[expl_zone_comment]}</b><br />"; $__note .= "<div class='expl_comment'>" . $expl->expl_comment . "</div>"; } $__note .= "<br /><input type='button' class='bouton' value='{$msg['378']}' onclick=\"document.location='./circ.php?categ=note_ex&cb=" . rawurlencode($expl->expl_cb) . "&id=" . $expl->expl_id . "'\" />"; $__note .= "</div><hr />"; } // zone des réservations $__resa = check_resa_liste($expl); if ($__resa) { $__resa = "<div class=\"row\"><b>" . $msg["reserv_en_cours_doc"] . "</b><br />" . $__resa; $__resa .= "</div>"; } // zone des réservations prévisionnelles if ($pmb_location_resa_planning) { $__resa_planning = check_resa_planning_liste($expl); if ($__resa_planning) { $__resa_planning = "<div class=\"row\"><b>" . $msg["previsions_en_cours_doc"] . "</b><br />" . $__resa_planning; $__resa_planning .= "</div>"; } } else { $__resa_planning = ""; } switch ($mode_affichage) { case '0': $temp = str_replace('!!contenu!!', $__isbd . $__local . $__empr . $__note . $__resa . $__resa_planning, $temp); break; case '1': $temp = str_replace('!!contenu!!', "", $temp); $temp .= $__local . $__empr . $__note . $__resa . $__resa_planning; break; case '2': $temp = str_replace('!!contenu!!', "", $temp); break; } return $temp; }
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, resa_planning_id_resa from resa where resa_idnotice='" . $id_notice . "' and resa_idbulletin='" . $id_bulletin . "' and resa_idempr='" . $id_empr . "' "; $res = pmb_mysql_query($rqt, $dbh); $obj = pmb_mysql_fetch_object($res); $cb_recup = $obj->resa_cb; $id_resa = $obj->id_resa; // suppression resa $rqt = "delete from resa where id_resa='" . $id_resa . "' "; $res = pmb_mysql_query($rqt, $dbh); // suppression de la prévision associée à la resa resa_planning::delete($obj->resa_planning_id_resa); // 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, $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 = pmb_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 = pmb_mysql_query($rqt_invalide_resa, $dbh); return TRUE; }
function expl_dispo($no_notice = 0, $no_bulletin = 0) { global $dbh; // 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 "; $requete .= " FROM exemplaires, docs_location, docs_section, docs_statut"; $requete .= " LEFT JOIN pret ON exemplaires.expl_id=pret.pret_idexpl"; $requete .= " WHERE expl_notice='{$no_notice}' and expl_bulletin='{$no_bulletin}' "; $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 .= " order by 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)) { $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); } } return $tableau; }