expl_notice." and
num_bulletin=".$expl->expl_bulletin." and
type_transfert=$t_trans and
etat_transfert=0 and
origine=$origine and
origine_comp ='".addslashes($ori_comp)."' and
source=$src and
destinations =$dest ";
$res=mysql_query ( $rqt );
if (mysql_num_rows($res)) {
$obj_data = mysql_fetch_object($res);
$num=$obj_data->id_transfert;
} else {
//on cree l'enregistrement dans la table transferts
$rqt = "INSERT INTO transferts (
num_notice, num_bulletin, date_creation,
type_transfert, etat_transfert,
origine, origine_comp,
source, destinations,
date_retour, motif ) VALUES (".
$expl->expl_notice . ", " . $expl->expl_bulletin . ", NOW(),".
$t_trans . ", 0, ".
$origine . ", '" . addslashes($ori_comp) . "',".
$src . ", '" . $dest . "',
'" . $date_ret . "', '" . addslashes($motif) . "' )";
mysql_query ( $rqt );
//on recupere l'id du transfert crée
$num = mysql_insert_id ();
}
$rqt = "Select * from transferts_demande where
num_transfert=$num and
sens_transfert=$sens and
num_location_source=$src and
num_location_dest=$dest and
num_expl=$id_expl
";
$res=mysql_query ( $rqt );
if (!mysql_num_rows($res)) {
//la table transferts_demande
$rqt = "INSERT INTO transferts_demande (
num_transfert, date_creation,
sens_transfert, num_location_source,
num_location_dest, num_expl,
statut_origine, section_origine,
etat_demande ) VALUES (".
$num . ", NOW(), ".
$sens . ", " . $src . ", ".
$dest . ", " . $id_expl . ", ".
$expl->expl_statut . ", " . $expl->expl_section . ", ".
$etat .")";
mysql_query ( $rqt );
}
return $num;
}
//change le statut d'un exemplaire
function _change_statut_exemplaire( $id_expl, $id_statut ) {
$rqt = "UPDATE exemplaires SET transfert_statut_origine = expl_statut WHERE expl_id=".$id_expl;
mysql_query ( $rqt );
//changement du statut
$rqt = "UPDATE exemplaires SET expl_statut=".$id_statut." WHERE expl_id=".$id_expl;
mysql_query ( $rqt );
}
//change la localisation d'un exemplaire
function _change_localisation_exemplaire( $id_expl, $id_localisation, $sauve_loc = false ) {
//sauvegarde de la localisation
if ($sauve_loc) {
$rqt = "UPDATE exemplaires SET transfert_location_origine = expl_location WHERE expl_id=".$id_expl;
mysql_query ( $rqt );
}
//changement de la localisation
$rqt = "UPDATE exemplaires SET expl_location=".$id_localisation." WHERE expl_id=".$id_expl;
mysql_query ( $rqt );
}
//retourne le no de transfert à partir de son no d'exemplaire
function _explcb_2_transid($cbEx, $etat, $sens) {
global $deflt_docs_location;
//on recupere l'id de l'exemplaire*
if($sens) {
$loc_req= " AND num_location_dest=".$deflt_docs_location ;
} else {
$loc_req= " AND num_location_source=".$deflt_docs_location ;
}
$rqt = "SELECT id_transfert
FROM transferts
INNER JOIN transferts_demande ON id_transfert=num_transfert
INNER JOIN exemplaires ON num_expl=expl_id
WHERE etat_transfert=0 AND expl_cb='".$cbEx."' AND etat_demande=".$etat. " $loc_req " ;
$res = mysql_query ( $rqt );
if (mysql_num_rows($res))
return mysql_result ( $res, 0 );
else
return 0;
}
//retourne le no de transfert à partir de son no d'exemplaire
function _transid_2_explcb($transId, $etat) {
//on recupere l'id de l'exemplaire
$rqt = "SELECT expl_cb
FROM transferts
INNER JOIN transferts_demande ON id_transfert=num_transfert
INNER JOIN exemplaires ON num_expl=expl_id
WHERE id_transfert=".$transId." AND etat_demande=".$etat;
$res = mysql_query ( $rqt );
if (mysql_num_rows($res))
return mysql_result ( $res, 0 );
else
return 0;
}
//retourne le no de transfert à partir de son no d'exemplaire
function _transid_2_explid($transId, $etat) {
//on recupere l'id de l'exemplaire
$rqt = "SELECT num_expl
FROM transferts
INNER JOIN transferts_demande ON id_transfert=num_transfert
WHERE id_transfert=".$transId." AND etat_demande=".$etat;
$res = mysql_query ( $rqt );
if (mysql_num_rows($res))
return mysql_result ( $res, 0 );
else
return 0;
}
//sauvegarde la localisation de l'exemplaire
function _sauve_localisation_exemplaire($idExpl) {
$rqt = "UPDATE exemplaires SET transfert_location_origine=expl_location WHERE expl_id=".$idExpl;
mysql_query ( $rqt );
}
//restaure le statut de l'exemplaire
function _restaure_statut($idTrans) {
//Récupération des informations d'origine
$rqt = "SELECT statut_origine, num_expl FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
WHERE id_transfert=".$idTrans." AND sens_transfert=0";
$res = mysql_query($rqt);
$obj_data = mysql_fetch_object($res);
//on met à jour
$rqt = "UPDATE exemplaires SET expl_statut=".$obj_data->statut_origine." WHERE expl_id=".$obj_data->num_expl;
mysql_query ( $rqt );
}
//restaure la section de l'exemplaire
function _restaure_section($idTrans) {
//Récupération des informations d'origine
$rqt = "SELECT section_origine, num_expl FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
WHERE id_transfert=".$idTrans." AND sens_transfert=0";
$res = mysql_query($rqt);
$obj_data = mysql_fetch_object($res);
//on met à jour
$rqt = "UPDATE exemplaires SET expl_section=".$obj_data->section_origine." WHERE expl_id=".$obj_data->num_expl;
mysql_query ( $rqt );
}
//restaure la localisation de l'exemplaire
function _restaure_localisation($idTrans) {
//Récupération des informations d'origine
$rqt = "SELECT source, num_expl FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
WHERE id_transfert=".$idTrans." AND sens_transfert=0";
$res = mysql_query($rqt);
$obj_data = mysql_fetch_object($res);
//on met à jour
$rqt = "UPDATE exemplaires SET expl_location=".$obj_data->source." WHERE expl_id=".$obj_data->num_expl;
mysql_query ( $rqt );
/*
$rqt = "UPDATE exemplaires " .
"SET expl_location = transfert_location_origine " .
"WHERE expl_id = " . $idExpl;
mysql_query ( $rqt );
*/
}
//********************************************************************************************
// pour le retour de pret d'exemplaires
//********************************************************************************************
//sur un retour d'exemplaire on change la localisation
function retour_exemplaire_change_localisation($expl_id) {
global $transferts_retour_change_localisation;
global $deflt_docs_location;
$rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
$res = mysql_query ( $rqt );
$locOri = mysql_result ( $res, 0 );
$this->_change_localisation_exemplaire($expl_id, $deflt_docs_location, ($transferts_retour_change_localisation == "1"));
$rqt = "SELECT idsection FROM exemplaires INNER JOIN docs_section ON expl_section=idsection INNER JOIN docsloc_section ON idsection=num_section
WHERE expl_id=".$expl_id." AND num_location=".$deflt_docs_location;
$res = mysql_query($rqt);
if (mysql_num_rows($res)==0) {
//la section n'existe pas pour cette localisation !
//on cherche la premiere section dispo
$rqt = "SELECT idsection FROM docs_section INNER JOIN docsloc_section ON idsection=num_section WHERE num_location=".$deflt_docs_location." LIMIT 1";
$res = mysql_query($rqt);
$id_section = mysql_result($res,0);
} else
$id_section = mysql_result($res,0);
//changement de la localisation
$rqt = "UPDATE exemplaires SET expl_section=".$id_section." WHERE expl_id=" . $expl_id;
mysql_query ($rqt);
return $locOri;
}
static function is_retour_exemplaire_loc_origine($expl_id) {
$rqt = "SELECT expl_location,expl_cb, transfert_location_origine,transfert_statut_origine, expl_section FROM exemplaires WHERE expl_id=".$expl_id;
$res = mysql_query ( $rqt );
$expl = mysql_fetch_object ( $res );
//$num = $this->enregistre_retour_cb($expl->expl_cb);
global $deflt_docs_location;
//on recupere l'id de l'exemplaire*
$rqt = "SELECT id_transfert
FROM transferts
INNER JOIN transferts_demande ON id_transfert=num_transfert
INNER JOIN exemplaires ON num_expl=expl_id
WHERE etat_transfert=0 AND expl_cb='".$expl->expl_cb."' AND etat_demande=3 AND num_location_source=".$deflt_docs_location ;
$res = mysql_query ( $rqt );
if (mysql_num_rows($res))
return mysql_result ( $res, 0 );
else
return 0;
}
//sur un retour d'exemplaire sur sa localisation d'origine alors qu'il était localisé ailleur (par un transfert)
// il faut donc cloturer le retour programmé et rétablir la localisation, section cet exemplaire
function retour_exemplaire_loc_origine($expl_id) {
$rqt = "SELECT expl_location,expl_cb, transfert_location_origine,transfert_statut_origine, expl_section FROM exemplaires WHERE expl_id=".$expl_id;
$res = mysql_query ( $rqt );
$expl = mysql_fetch_object ( $res );
//$num = $this->enregistre_retour_cb($expl->expl_cb);
global $deflt_docs_location;
//on recupere l'id de l'exemplaire*
$loc_req= " AND num_location_source=".$deflt_docs_location ;
$rqt = "SELECT id_transfert
FROM transferts
INNER JOIN transferts_demande ON id_transfert=num_transfert
INNER JOIN exemplaires ON num_expl=expl_id
WHERE etat_transfert=0 AND expl_cb='".$expl->expl_cb."' AND etat_demande=3 AND num_location_source=".$deflt_docs_location ;
$res = mysql_query ( $rqt );
if (mysql_num_rows($res))
$idTrans= mysql_result ( $res, 0 );
else
return 0;
$this->enregistre_retour ( $idTrans );
$rqt = "SELECT location_libelle
FROM transferts_demande,docs_location
WHERE num_location_source=idlocation and num_transfert=".$idTrans." AND etat_demande=5";
$res = mysql_query ( $rqt );
$value = mysql_fetch_array ( $res );
$this->new_location_libelle=$value[0];
$num = $this->enregistre_reception_cb($expl->expl_cb, 0,0);
//purge les restes de transfert intermédiaire...
$rqt = "update transferts,transferts_demande, exemplaires set etat_transfert=1
WHERE id_transfert=num_transfert and num_expl=expl_id and etat_transfert=0 AND expl_cb='".$expl->expl_cb."' " ;
mysql_query ( $rqt );
return $num;
}
//sur un retour d'exemplaire on genere un transfert de retour
function retour_exemplaire_genere_transfert_retour($expl_id) {
global $transferts_retour_etat_transfert;
global $transferts_retour_motif_transfert;
global $deflt_docs_location;
//on recupere la localisation de l'exemplaire
//elle va servir pour la destination du transfert
$rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
$res = mysql_query ( $rqt );
$dest_id = mysql_result ( $res, 0 );
//création du transfert
$num = $this->_creer_transfert( $expl_id, $deflt_docs_location, $dest_id, 0, '', 3, '', $transferts_retour_motif_transfert, 1, 0);
$this->enregistre_validation($num);
$rqt = "update exemplaires set expl_location= $deflt_docs_location WHERE expl_id=".$expl_id;
mysql_query ( $rqt );
if ($transferts_retour_etat_transfert == "1")
$this->enregistre_envoi($num);
return $num;
}
function retour_exemplaire_genere_transfert_retour_origine($expl_id) {
global $transferts_retour_etat_transfert;
global $transferts_retour_motif_transfert;
global $deflt_docs_location;
$dest_id=$this->get_origine($expl_id);
if(!$dest_id){
//on recupere la localisation de l'exemplaire
//elle va servir pour la destination du transfert
/*
$rqt = "SELECT resa_trans FROM transferts,transferts_demande WHERE id_transfert= num_transfert and etat_transfert=0 and num_expl=$expl_id order by id_transfert desc limit 1";
$res = mysql_query ( $rqt );
if (!mysql_num_rows($res)) return 0;
$resa_tran = mysql_result ( $res, 0 );
if(!$resa_tran) return 0;
*/
$rqt = "SELECT source FROM transferts,transferts_demande WHERE id_transfert= num_transfert and etat_transfert=0 and num_expl=$expl_id order by id_transfert limit 1";
$res = mysql_query ( $rqt );
if (mysql_num_rows($res)){
$dest_id = mysql_result ( $res, 0 );
}else{
$rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
$res = mysql_query ( $rqt );
$dest_id = mysql_result($res,0);
}
}
$rqt_loc = "SELECT location_libelle FROM docs_location WHERE idlocation=".$dest_id ;
$res_loc = mysql_query ( $rqt_loc );
$obj_loc = mysql_fetch_object($res_loc);
$this->location_libelle_origine=$obj_loc->location_libelle;
// on nettoie l'empilement de transfert
$rqt = "update transferts,transferts_demande set etat_transfert =1 WHERE id_transfert= num_transfert and etat_transfert=0 and num_expl=$expl_id";
mysql_query ( $rqt );
//création du transfert
$num = $this->_creer_transfert( $expl_id, $deflt_docs_location, $dest_id, 0, '', 3, '', $transferts_retour_motif_transfert, 1, 0);
$this->enregistre_validation($num);
if ($transferts_retour_etat_transfert == "1")
$this->enregistre_envoi($num);
return $num;
}
// memorise la loc d'origine de l'exemplaire
function memo_origine($expl_id) {
//on recupere la localisation de l'exemplaire
$rqt = "SELECT trans_source_numloc FROM transferts_source WHERE trans_source_numexpl=$expl_id ";
$res = mysql_query ( $rqt );
if (mysql_num_rows($res)) {
$origine_id = mysql_result ( $res, 0 );
if($origine_id) return $origine_id;
}
//on recupere la localisation de l'exemplaire du premier transfert ouvert de cet exemplaire
$rqt = "SELECT source FROM transferts,transferts_demande WHERE id_transfert= num_transfert and etat_transfert=0 and num_expl=$expl_id order by id_transfert limit 1";
$res = mysql_query ( $rqt );
if (mysql_num_rows($res)) {
$origine_id = mysql_result ( $res, 0 );
if($origine_id){
$rqt = "insert transferts_source SET trans_source_numloc=".$origine_id." , trans_source_numexpl=".$expl_id;
mysql_query ( $rqt );
return $origine_id;
}
}
if(!$origine_id){
$rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
$res = mysql_query ( $rqt );
$origine_id = mysql_result($res,0);
}
// delete au cas ou trans_source_numloc=0
$rqt = "DELETE FROM transferts_source WHERE trans_source_numexpl=".$expl_id ;
mysql_query ( $rqt );
$rqt = "insert transferts_source SET trans_source_numloc=".$origine_id." , trans_source_numexpl=".$expl_id;
mysql_query ( $rqt );
return $origine_id;
}
// reset la loc d'origine de l'exemplaire par $deflt_docs_location
function reset_origine($expl_id) {
global $deflt_docs_location;
$rqt = "DELETE FROM transferts_source WHERE trans_source_numexpl=".$expl_id ;
mysql_query ( $rqt );
$rqt = "insert transferts_source SET trans_source_numloc=".$deflt_docs_location." , trans_source_numexpl=".$expl_id;
mysql_query ( $rqt );
}
// retourne la loc d'origine de l'exemplaire
function get_origine($expl_id) {
//on recupere la localisation de l'exemplaire
$rqt = "SELECT trans_source_numloc FROM transferts_source WHERE trans_source_numexpl=$expl_id ";
$res = mysql_query ( $rqt );
if (mysql_num_rows($res)) {
$origine_id = mysql_result ( $res, 0 );
if($origine_id) return $origine_id;
}
}
//restaure la localisation apres une sauvegarde
function retour_exemplaire_restaure_localisation($expl_id, $loc_id) {
$rqt = "UPDATE exemplaires SET expl_location=".$loc_id." WHERE expl_id=".$expl_id;
mysql_query ( $rqt );
}
//on supprime le transfert généré
function retour_exemplaire_supprime_transfert($expl_id, $idTrans) {
$this->_restaure_statut($idTrans);
$rqt = "DELETE FROM transferts WHERE id_transfert=" . $idTrans;
mysql_query ( $rqt );
$rqt = "DELETE FROM transferts_demande WHERE num_transfert=" . $idTrans;
mysql_query ( $rqt );
}
//********************************************************************************************
// pour la circulation
//********************************************************************************************
//enregistre la validation d'un exemplaire à partir de son cb
function enregistre_validation_cb($cbEx) {
$idTrans = $this->_explcb_2_transid ( $cbEx, 0,0 );
if ($idTrans != 0) {
$this->enregistre_validation ( $idTrans );
$rqt = "SELECT location_libelle
FROM transferts_demande,docs_location
WHERE num_location_dest=idlocation and num_transfert=".$idTrans." AND etat_demande=1";
$res = mysql_query ( $rqt );
$value = mysql_fetch_array ( $res );
$this->new_location_libelle=$value[0];
return $cbEx;
} else
return false;
}
//enregistre la validation d'une liste de transferts
function enregistre_validation($listeTransferts) {
global $transferts_statut_validation;
$tabTrans = explode ( ",", $listeTransferts );
foreach ( $tabTrans as $transId ) {
//pour chacun des transferts sélectionnés
//on met a jour l'etat de la demande => on passe en validé
$rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
SET etat_demande=1, date_visualisee = NOW()
WHERE id_transfert=".$transId." AND etat_demande=0 ";
mysql_query ( $rqt );
//on recupere l'id de l'exemplaire
$idExpl = $this->_transid_2_explid ( $transId, 1 );
//on change le statut de l'exemplaire
$this->_change_statut_exemplaire( $idExpl, $transferts_statut_validation);
} // foreach
}
//enregistre le refus sur une liste de transfert
function enregistre_refus($listeTransferts, $motif) {
$tabTrans = explode ( ",", $listeTransferts );
foreach ( $tabTrans as $transId ) {
//pour chacun des transferts sélectionnés
//on met a jour l'etat de la demande => on passe en validé
$rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
SET etat_demande = 4, date_visualisee = NOW(), motif_refus = '".$motif."'
WHERE id_transfert=".$transId." AND etat_demande<2 ";
mysql_query ( $rqt );
//on restaure le statut au cas ou il aurais été modifié...
$this->_restaure_statut($transId);
}
}
//valide l'envoi d'un exemplaire
function enregistre_envoi_cb($cbEx) {
$idTrans = $this->_explcb_2_transid ( $cbEx, 1 ,0);
if ($idTrans != 0) {
$this->enregistre_envoi ( $idTrans );
$rqt = "SELECT location_libelle
FROM transferts_demande,docs_location
WHERE num_location_dest=idlocation and num_transfert=".$idTrans." AND etat_demande=2";
$res = mysql_query ( $rqt );
$value = mysql_fetch_array ( $res );
$this->new_location_libelle=$value[0];
return $cbEx;
} else
return false;
}
//valide l'envoi d'une liste de transferts
function enregistre_envoi($listeTransferts) {
global $transferts_statut_transferts;
global $transferts_validation_actif;
global $transferts_statut_validation;
$tabTrans = explode ( ",", $listeTransferts );
foreach ( $tabTrans as $transId ) {
//pour chacun des transferts sélectionnés
$idExpl = $this->_transid_2_explid ( $transId, 1 ,0);
if ( ($transferts_validation_actif == "1") && ($transferts_statut_validation != "0") )
//si la validation est active et le changement de statut activé
//on restaure le statut sauvegardé
$this->_restaure_statut($transId);
//on change le statut et on le sauvegarde
$this->_change_statut_exemplaire($idExpl, $transferts_statut_transferts, true ,$transId);
//on met a jour l'etat de la demande => on passe en envoyé
$rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
SET etat_demande=2, date_envoyee=NOW()
WHERE id_transfert=".$transId." AND etat_demande = 1";
mysql_query ( $rqt );
}
}
//effectue la reception d'un exemplaire
function enregistre_reception_cb($cbEx, $idStatut, $idSection,&$info=array()) {
$idTrans = $this->_explcb_2_transid ( $cbEx, 2 ,1);
if ($idTrans != 0) {
$this->enregistre_reception ( $idTrans, $idStatut, $idSection,$info );
return $idTrans;
} else
return false;
}
function get_motif($idTrans) {
$rqt = "SELECT motif FROM transferts WHERE id_transfert=".$idTrans." ";
$res = mysql_query ( $rqt );
if (mysql_num_rows($res)){
$obj_data = mysql_fetch_object($res);
return $obj_data->motif;
}
return "";
}
/*Autorise ou pas le prêt, et si transfert, on valide la reception
retourne:
1: Prêt interdit
2: prêt forcable
0: prêt ok
*/
function check_pret($cbEx,$force=0) {
global $transferts_pret_statut_transfert,$msg;
global $deflt_docs_location;
$this->check_pret_error_message='';
//on recupere l'id de l'exemplaire
$rqt = "SELECT id_transfert, sens_transfert, num_location_source, num_location_dest
FROM transferts, transferts_demande, exemplaires
WHERE id_transfert=num_transfert and num_expl=expl_id and expl_cb='".$cbEx."' AND etat_demande=2" ;
$res = mysql_query ( $rqt );
if (mysql_num_rows($res)){
$obj_data = mysql_fetch_object($res);
$rqt_loc = "SELECT location_libelle FROM transferts_demande,docs_location WHERE num_location_source=idlocation and num_transfert=".$obj_data->id_transfert;
$res_loc = mysql_query ( $rqt_loc );
$value = mysql_fetch_array ( $res_loc );
$location_source_libelle=$value[0];
$rqt_loc = "SELECT location_libelle FROM transferts_demande,docs_location WHERE num_location_dest=idlocation and num_transfert=".$obj_data->id_transfert;
$res_loc = mysql_query ( $rqt_loc );
$value = mysql_fetch_array ( $res_loc );
$location_dest_libelle=$value[0];
if(!$obj_data->sens_transfert && ($deflt_docs_location == $obj_data->num_location_source)) {
// c'est un envoi, coté du propriétaire: l'exemplaire aurai dû partir...
if(!$transferts_pret_statut_transfert) {
// prêt interdit
$this->check_pret_error_message=str_replace("!!dest_location!!",$location_dest_libelle, $msg["transferts_check_pret_erreur_envoi"]);
return 1;
}
else {
// forçable en prêt, on le laisse en transfert ?
$this->check_pret_error_message=str_replace("!!dest_location!!",$location_dest_libelle, $msg["transferts_check_pret_erreur_envoi"]);
return 2;
}
}
if(!$obj_data->sens_transfert && ($deflt_docs_location == $obj_data->num_location_dest)) {
// c'est un envoi, coté destinataire: l'exemplaire aurai dû être réceptionné avant un prêt...
if($force) {
$res_rcp = $this->enregistre_reception_cb($cbEx, 0, 0);
$this->_restaure_statut($obj_data->id_transfert);
if ($res_rcp==false) return 1;
} else {
$this->check_pret_error_message=str_replace("!!source_location!!",$location_source_libelle, $msg["transferts_check_pret_erreur_reception"]);
return 2;
}
}
if($obj_data->sens_transfert && ($deflt_docs_location == $obj_data->num_location_source)) {
// c'est un retour, coté destinataire: l'exemplaire aurai du être retourné et non prêté...
if(!$transferts_pret_statut_transfert) {
// prêt interdit
$this->check_pret_error_message=str_replace("!!dest_location!!",$location_source_libelle, $msg["transferts_check_pret_erreur_envoi"]);
return 1;
}
else {
// forçable en prêt, on le laisse en transfert ?
$this->check_pret_error_message=str_replace("!!dest_location!!",$location_source_libelle, $msg["transferts_check_pret_erreur_envoi"]);
return 2;
}
}
if($obj_data->sens_transfert && ($deflt_docs_location == $obj_data->num_location_dest)) {
// c'est un retour, coté du propriétaire: l'exemplaire aurai dû être réceptionné avant un prêt...
if($force) {
$res_rcp = $this->enregistre_reception_cb($cbEx, 0, 0);
$this->_restaure_statut($obj_data->id_transfert);
if ($res_rcp==false) return 1;
} else {
$this->check_pret_error_message=str_replace("!!source_location!!",$location_dest_libelle, $msg["transferts_check_pret_erreur_reception"]);
return 2;
}
}
}
return 0;
}
//effectue la reception d'une liste de transferts
function enregistre_reception($listeTransferts, $idStatut, $listeSections,&$info=array()) {
global $deflt_docs_location;
$tabTrans = explode ( ",", $listeTransferts );
$tabSections = explode ( ",", $listeSections );
$idSection = current($tabSections);
$nb=0;
foreach ( $tabTrans as $transId ) {
//on recupere l'id de l'exemplaire
$noEx = $this->_transid_2_explid ( $transId, 2 );
$info[$nb]=array();
//le sens du transfert
$rqt = "SELECT sens_transfert, type_transfert, origine, origine_comp, motif
FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
WHERE id_transfert=".$transId." AND etat_demande = 2";
$res = mysql_query ( $rqt );
$value = mysql_fetch_array ( $res );
$sensTrans = $value[0];
$typeTrans = $value[1];
$origine = $value[2];
$origineComp = $value[3];
$info[$nb]["motif"] = $value[4];
if ($sensTrans == 1) {
//c'est un retour !
//on cloture le transfert
$rqt = "UPDATE transferts SET etat_transfert=1 WHERE id_transfert=".$transId;
mysql_query ( $rqt );
if ($typeTrans == 1) {
//si c'est un aller/retour
//on restaure la localisation sauvegardé de l'exemplaire
$this->_restaure_localisation($transId);
}
if($idSection){
$rqt = "UPDATE exemplaires INNER JOIN transferts_demande ON num_expl=expl_id INNER JOIN transferts ON id_transfert=num_transfert
SET expl_section=".$idSection."
WHERE id_transfert=".$transId." AND etat_demande = 2";
mysql_query ( $rqt );
} else {
//on restaure le section sauvegardé de l'exemplaire
$this->_restaure_section($transId);
}
if($idStatut) {
//on met à jour le statut et la localisation de l'exemplaire
$rqt = "UPDATE exemplaires INNER JOIN transferts_demande ON num_expl=expl_id INNER JOIN transferts ON id_transfert=num_transfert
SET expl_statut=".$idStatut.", expl_location = num_location_dest
WHERE id_transfert=".$transId." AND etat_demande = 2";
mysql_query ( $rqt );
} else {
//on restaure le statut sauvegardé de l'exemplaire
$this->_restaure_statut($transId);
}
} else {
//c'est un transfert
// aller simple ?
if ($typeTrans == 0) {
//on cloture le transfert => pas de gestion du retour
$rqt = "UPDATE transferts SET etat_transfert=1 WHERE id_transfert=".$transId;
mysql_query ( $rqt );
} else {
//c'est l'aller donc
if ($origine==4 ) {
//c'est un transfert suite a une resa donc
//on recupere le cb pour
$explcb = $this->_transid_2_explcb($transId,2);
}
$id_section = $idSection;
if ($idSection==0) {
//chercher la meme section dans le nouveau site
$rqt = "SELECT idsection
FROM exemplaires INNER JOIN docs_section ON expl_section=idsection INNER JOIN docsloc_section ON idsection=num_section
WHERE expl_id=".$noEx." AND num_location=".$deflt_docs_location;
$res = mysql_query($rqt);
if (mysql_num_rows($res)==0) {
//la section n'existe pas pour cette localisation !
//on cherche la premiere section dispo
$rqt = "SELECT idsection
FROM docs_section INNER JOIN docsloc_section ON idsection=num_section
WHERE num_location=".$deflt_docs_location." LIMIT 1";
$res = mysql_query($rqt);
$id_section = mysql_result($res,0);
} else
$id_section = mysql_result($res,0);
}
$rqt = "UPDATE exemplaires INNER JOIN transferts_demande ON num_expl=expl_id INNER JOIN transferts ON id_transfert=num_transfert
SET expl_section=".$id_section."
WHERE id_transfert=".$transId." AND etat_demande = 2";
mysql_query ( $rqt );
} //fin du else de if ($typeTrans == 0)
//on met à jour le statut et la localisation de l'exemplaire
if($idStatut) {
$rqt = "UPDATE exemplaires INNER JOIN transferts_demande ON num_expl=expl_id INNER JOIN transferts ON id_transfert=num_transfert
SET expl_statut=".$idStatut.", expl_location = num_location_dest
WHERE id_transfert=".$transId." AND etat_demande = 2";
mysql_query ( $rqt );
}else {
//on restaure le statut sauvegardé de l'exemplaire
$this->_restaure_statut($transId);
}
// Traitement de la résa
if ($origine==4 && $typeTrans) {
//c'est un transfert suite a une resa donc
//valider la resa
$id_resa_validee = affecte_cb($explcb,$origineComp);
//on genere la lettre de confirmation
alert_empr_resa($id_resa_validee);
}
} //fin du else de if ($sensTrans == 0)
//on met a jour l'etat de la demande => on passe en receptionné et terminer
$rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
SET etat_demande=3, date_reception=NOW()
WHERE id_transfert=".$transId." AND etat_demande = 2";
mysql_query ( $rqt );
//on passe à la section suivante
$idSection = next($tabSections);
$nb++;
} //fin du while
}
//lance le retour d'un exemplaire
function enregistre_retour_cb($cbEx) {
$idTrans = $this->_explcb_2_transid ( $cbEx, 3, 1 );
if ($idTrans != 0) {
$this->enregistre_retour ( $idTrans );
$rqt = "SELECT location_libelle
FROM transferts_demande,docs_location
WHERE num_location_source=idlocation and num_transfert=".$idTrans." AND etat_demande=5";
$res = mysql_query ( $rqt );
$value = mysql_fetch_array ( $res );
$this->new_location_libelle=$value[0];
return $cbEx;
} else
return false;
}
//effectue le retour d'une liste de transferts
function enregistre_retour($listeTransferts) {
global $transferts_statut_transferts;
$tabTrans = explode ( ",", $listeTransferts );
foreach ( $tabTrans as $transId ) {
//on met a jour l'etat de la demande => on passe en receptionné et terminer
$rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
SET etat_demande=5
WHERE id_transfert=".$transId." AND etat_demande=3";
mysql_query ( $rqt );
//on recupere les infos de la demande de l'aller
$rqt = "SELECT num_location_source, num_location_dest, num_expl
FROM transferts_demande
WHERE num_transfert=".$transId." AND etat_demande=5";
$res = mysql_query ( $rqt );
$value = mysql_fetch_array ( $res );
//on insert l'information d'envoi du retour
$rqt = "INSERT INTO transferts_demande (num_transfert, date_creation, sens_transfert, num_location_source,
num_location_dest, num_expl, etat_demande, date_visualisee, date_envoyee) VALUES (".
$transId.", NOW(), 1, $value[1], $value[0], $value[2], 2, NOW(), NOW())";
mysql_query ( $rqt );
//on met à jour le statut de l'exemplaire avec l'etat défini pour la validation
$rqt = "UPDATE exemplaires SET expl_statut=".$transferts_statut_transferts."
WHERE expl_id=".$value[2];
mysql_query ( $rqt );
}
}
//change la date de retour d'un transfert
static function change_date_retour($idTransfert,$date_retour) {
$rqt = "UPDATE transferts SET date_retour='".$date_retour."' WHERE id_transfert=".$idTransfert;
mysql_query ( $rqt );
}
//cloture un ou plusieurs transferts
function cloture_transferts($listeTransferts) {
global $transferts_statut_transferts;
$tabTrans = explode ( ",", $listeTransferts );
foreach ( $tabTrans as $transId ) {
//on cloture le transfert
$rqt = "UPDATE transferts SET etat_transfert=1 WHERE id_transfert=".$transId;
mysql_query ( $rqt );
}
}
/*
function ajoute_demande($transId, $source, $motif, $dateRetour) {
global $deflt_docs_location;
global $transferts_validation_actif;
//on met a jour l'etat de la demande => on passe en refus traité et la date de retour souhaitée
$rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
SET etat_demande=6, date_retour='".$dateRetour."', motif='$motif'
WHERE id_transfert=".$transId." AND etat_demande=4";
mysql_query ( $rqt );
//recuperation des informations pour déterminer le nouveau no d'exemplaire
$rqt = "SELECT num_notice, num_bulletin
FROM transferts
WHERE id_transfert=".$transId;
$res = mysql_query ( $rqt );
$value = mysql_fetch_array ( $res );
//on a besoin du no d'exemplaire pour la source donnée
$rqt = "SELECT expl_id
FROM exemplaires
WHERE expl_notice=".$value[0]." AND expl_bulletin=".$value[1]." AND expl_location=".$source;
$id_expl = mysql_result(mysql_query($rqt),0);
//la table transferts_demande
$rqt = "INSERT INTO transferts_demande (num_transfert, date_creation, sens_transfert, num_location_source, num_location_dest, num_expl, etat_demande)
VALUES (".$transId.", NOW(), 0, ".$source.", ".$deflt_docs_location.", ".$id_expl.", 0)";
mysql_query ( $rqt );
// $num pas initialisé ?????????????
if ($transferts_validation_actif == "0")
//pas d'étape de validation => etape d'envoi direct
$this->enregistre_validation($num);
}
*/
function ajoute_demande($transId, $id_expl, $motif, $dateRetour) {
global $deflt_docs_location;
global $transferts_validation_actif;
$rqt = "SELECT expl_location from exemplaires WHERE expl_id=".$id_expl;
$res=mysql_query ( $rqt );
$value = mysql_fetch_object ( $res );
$source=$value->expl_location;
//on met a jour l'etat de la demande => on passe en refus traité et la date de retour souhaitée
$rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
SET etat_demande=6, source= ".$source.", date_retour='".$dateRetour."', motif='$motif'
WHERE id_transfert=".$transId." AND etat_demande=4";
mysql_query ( $rqt );
//la table transferts_demande
$rqt = "INSERT INTO transferts_demande (num_transfert, date_creation, sens_transfert, num_location_source, num_location_dest, num_expl, etat_demande)
VALUES (".$transId.", NOW(), 0, ".$source.", ".$deflt_docs_location.", ".$id_expl.", 0)";
mysql_query ( $rqt );
}
//********************************************************************************************
// pour les réservations
//********************************************************************************************
function transfert_pour_resa($cb_expl,$dest,$resa_id) {
global $transferts_resa_etat_transfert;
global $transferts_resa_motif_transfert;
global $transferts_nb_jours_pret_defaut;
global $transferts_pret_demande_statut,$transferts_statut_validation;
//récuperation des infos de l'exemplaire
$rqt = "SELECT expl_id, expl_location FROM exemplaires WHERE expl_cb='".$cb_expl."'";
$res = mysql_query($rqt);
$obj_expl = mysql_fetch_object($res);
//generation de la date de retour par défaut
$date_retour = mktime(0, 0, 0, date("m"), date("d")+$transferts_nb_jours_pret_defaut, date("Y"));
$date_retour_mysql = date("Y-m-d", $date_retour);
//génération du transfert
$num = $this->_creer_transfert( $obj_expl->expl_id, $obj_expl->expl_location, $dest, 1, $date_retour_mysql, 4, $resa_id, $transferts_resa_motif_transfert);
if ($transferts_resa_etat_transfert == "1")
//on valide
$this->enregistre_validation($num);
elseif($transferts_pret_demande_statut){
$this->_change_statut_exemplaire( $obj_expl->expl_id, $transferts_statut_validation);
}
// lier la résa au transfert
$rqt = "UPDATE transferts_demande SET resa_trans=$resa_id WHERE num_transfert=$num and num_expl='".$obj_expl->expl_id."' and etat_demande=0 ";
mysql_query ( $rqt );
//mémo de resa archive
$rqt = "SELECT resa_arc FROM resa WHERE id_resa='".$resa_id."'";
$res = mysql_query($rqt);
$obj_resa = mysql_fetch_object($res);
$rqt = "UPDATE transferts_demande SET resa_arc_trans=".$obj_resa->resa_arc." WHERE num_transfert=$num and num_expl='".$obj_expl->expl_id."' and etat_demande=0 ";
mysql_query ( $rqt );
}
//********************************************************************************************
// pour l'affichage des exemplaires
//********************************************************************************************
// dit si un exemplaire est transférable.
static function est_transferable($expl) {
global $deflt_docs_location;
global $transferts_transfert_transfere_actif;
global $PMBuserid;
$rqt = "SELECT expl_location, transfert_location_origine, transfert_flag
FROM exemplaires INNER JOIN docs_statut ON expl_statut=idstatut
WHERE expl_id=".$expl;
$res = mysql_query ($rqt) or die (mysql_error()."
".$rqt);
$value = mysql_fetch_array ($res);
$loc_expl = $value[0];
$loc_expl_ori = $value[1];
$trans_aut = $value[2];
//on verifie que le pret est autorisé
if ($trans_aut==0) return false;
// si l'exemplaire est ici: pas transférable
if ($deflt_docs_location == $loc_expl) return false;
/*
//on verifie que l'exemplaire n'est pas déja sur le site de l'utilisateur
if ($deflt_docs_location != $loc_expl) {
//si les transferts d'exemplaires deja transféré ne sont pas autorisés
if ($transferts_transfert_transfere_actif == "0") {
//si ce n'est pas la localisation d'origine
if ($loc_expl != $loc_expl_ori) {
//si la localisation d'origine n'a pas la valeure par défaut(0)
if ($loc_expl_ori != 0)
return false;
}
}
} else
return false;
*/
$rqt = "SELECT COUNT(1) FROM pret WHERE pret_idexpl=".$expl;
$res = mysql_query ( $rqt );
if (mysql_result ( $res, 0 ) )return false;
//on verifie qu'un transfert n'est pas déja demande
$rqt = "SELECT COUNT(1)
FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
WHERE etat_transfert=0 AND num_expl=".$expl." AND etat_demande<4";
$res = mysql_query ( $rqt );
$nbTrans = mysql_result ( $res, 0 );
if ($nbTrans != 0)
return false;
return true;
}
// dit si un exemplaire est doit faire l'objet d'un retour
function est_retournable($expl) {
global $deflt_docs_location;
global $msg;
$dest_id=$this->get_origine($expl);
if(!$dest_id){
$rqt = "SELECT id_transfert, sens_transfert, num_location_source, num_location_dest,expl_location
FROM transferts, transferts_demande, exemplaires
WHERE id_transfert=num_transfert and num_expl=expl_id and num_expl='".$expl."' AND etat_demande=3 and etat_transfert=0" ;
$res = mysql_query ( $rqt );
if (mysql_num_rows($res)){
$obj_data = mysql_fetch_object($res);
$rqt_loc = "SELECT location_libelle FROM transferts_demande,docs_location WHERE num_location_source=idlocation and num_transfert=".$obj_data->id_transfert;
$res_loc = mysql_query ( $rqt_loc );
$obj_loc = mysql_fetch_object($res_loc);
$this->location_origine=$dest_id;
$this->location_libelle_source=$obj_loc->location_libelle;
return(true);
}else{
$rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl;
$res = mysql_query ( $rqt );
$dest_id = mysql_result($res,0);
$rqt_loc = "SELECT location_libelle FROM docs_location WHERE idlocation=".$dest_id ;
$res_loc = mysql_query ( $rqt_loc );
$obj_loc = mysql_fetch_object($res_loc);
$this->location_libelle_source=$obj_loc->location_libelle;
$this->location_origine=$dest_id;
if($deflt_docs_location != $dest_id)return(true);
}
}else{
$rqt_loc = "SELECT location_libelle FROM docs_location WHERE idlocation=".$dest_id ;
$res_loc = mysql_query ( $rqt_loc );
$obj_loc = mysql_fetch_object($res_loc);
$this->location_libelle_source=$obj_loc->location_libelle;
$this->location_origine=$dest_id;
if($deflt_docs_location != $dest_id)return(true);
}
}
//genere une demande de transfert
function creer_transfert_catalogue($expl_id, $dest_id, $date_ret, $motif) {
global $transferts_validation_actif;
//on recupere les informations manquantes sur l'exemplaire
$rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
$res = mysql_query ( $rqt );
$src_id = mysql_result($res,0);
//on creer le transfert
$num = $this->_creer_transfert( $expl_id, $src_id, $dest_id, 1, $date_ret, 3, '', $motif, 0, 0 );
if ($transferts_validation_actif == "0")
//pas d'étape de validation => etape d'envoi
$this->enregistre_validation($num);
}
//********************************************************************************************
// pour l'administration
//********************************************************************************************
//enregistre les parametres
static function admin_enregistre_params($tab_param) {
foreach ( $tab_param as $param ) {
$varGlobal = $param["prefix"]."_".$param["nom"];
global $$varGlobal;
global $$param["champ"];
$val_saisie = $$param["champ"];
//on enregistre dans la variable globale
$$varGlobal = stripslashes($val_saisie);
//puis dans la base
$rqt = "UPDATE parametres SET valeur_param='".$val_saisie."'
WHERE type_param='".$param["prefix"]."' AND sstype_param='".$param["nom"]."'";
mysql_query ( $rqt );
}
}
//change l'ordre de la localisation
static function admin_enregistre_ordre_localisation($sens, $id) {
//on recuper l'ordre
$rqt = "SELECT transfert_ordre FROM docs_location WHERE idlocation=".$id;
$ordreBase = mysql_fetch_array ( mysql_query ( $rqt ) );
//on recupere l'id de la 2eme localisation
$rqt = "SELECT idLocation FROM docs_location WHERE transfert_ordre=".($ordreBase[0] + $sens);
$idSecond = mysql_fetch_array ( mysql_query ( $rqt ) );
//on met a jour l'ordre
$rqt = "UPDATE docs_location SET transfert_ordre=".($ordreBase[0] + $sens)." WHERE idLocation=".$id;
mysql_query ( $rqt );
//puis celui du 2eme
$rqt = "UPDATE docs_location SET transfert_ordre=".$ordreBase[0]." WHERE idLocation=".$idSecond[0];
mysql_query ( $rqt );
}
//enregistre le nouveau statut par défaut d'un site
static function admin_enregistre_statuts_defaut($id, $statut) {
//on met à jour l'enregistrement
$rqt = "UPDATE docs_location SET transfert_statut_defaut=".$statut." WHERE idlocation=".$id;
mysql_query ( $rqt );
}
//purge l'historique des transferts
static function admin_purge_historique($datefin) {
$rqt = "DELETE transferts.*, transferts_demande.*
FROM transferts INNER JOIN transferts_demande
WHERE transferts.etat_transfert=1 AND transferts.date_creation<'".$datefin."' AND num_transfert=id_transfert";
mysql_query ( $rqt );
}
}
?>