id_resa = intval($id_resa);
}
public function initialize_no_aff() {
global $pmb_transferts_actif, $transferts_choix_lieu_opac;
// on compte le nombre total d'exemplaires prêtables pour la notice
$total_ex = $this->resa->get_number_expl_lendable();
if($this->resa->get_restrict_expl_location_query() && !$total_ex) $this->no_aff=1;
// on compte le nombre d'exemplaires sortis
$total_sortis = $this->resa->get_number_expl_out();
// on compte le nombre d'exemplaires en circulation
$total_in_circ = $this->resa->get_number_expl_in_circ();
// on en déduit le nombre d'exemplaires disponibles
$total_dispo = $total_ex - $total_sortis - $total_in_circ;
if(!$total_dispo) {
if ( ($pmb_transferts_actif=="1") && $transferts_choix_lieu_opac!=3) {// && ($f_loc!=0) ?
$this->no_aff=0;
}
}
}
/**
* Calcul de la colonne situation
* @param reservation $resa
* @param integer $precedenteresa_idnotice
* @param integer $precedenteresa_idbulletin
* @param integer $info_gestion
*/
public function get_display($info_gestion=NO_INFO_GESTION) {
global $msg;
global $pmb_transferts_actif, $f_loc, $transferts_choix_lieu_opac;
global $has_resa_available; // utilisé au niveau de la fiche lecteur
if(!empty($this->display)) {
return $this->display;
}
if (($this->resa->id_notice != $this->precedenteresa_idnotice) || ($this->resa->id_bulletin != $this->precedenteresa_idbulletin)) {
$this->precedenteresa_idnotice=$this->resa->id_notice;
$this->precedenteresa_idbulletin=$this->resa->id_bulletin;
$this->lien_deja_affiche = false;
// 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
$total_ex = $this->resa->get_number_expl_lendable();
if($this->resa->get_restrict_expl_location_query() && !$total_ex) $this->no_aff=1;
// on compte le nombre d'exemplaires sortis
$total_sortis = $this->resa->get_number_expl_out();
// on compte le nombre d'exemplaires en circulation
$total_in_circ = $this->resa->get_number_expl_in_circ();
// on en déduit le nombre d'exemplaires disponibles
$total_dispo = $total_ex - $total_sortis - $total_in_circ;
$this->lien_transfert = false;
if($total_dispo>0) {
$has_resa_available = true;
// un exemplaire est disponible pour le réservataire (affichage : disponible)
$this->display = "".$msg['expl_resa_available']."";
//est-il en rayon dans une autre localisation ?
$expl_locations = $this->resa->get_expl_locations_lendable(0, true);
if($this->idlocation && count($expl_locations) == 1 && !in_array($this->idlocation, $expl_locations)) {
$rqt = "SELECT location_libelle FROM docs_location WHERE idlocation='".$expl_locations[0]."'";
$this->display .= "
(".pmb_mysql_result(pmb_mysql_query($rqt),0).")";
}
if($this->resa_cb && $this->resa->formatted_date_fin) $this->display = "".$msg['expl_reserve']."";
elseif($this->rank>$total_dispo) $this->display = "".$msg['expl_resa_already_reserved']."";
if ( ($pmb_transferts_actif=="1") && ($info_gestion==GESTION_INFO_GESTION) ) {
$dest_loc = resa_loc_retrait($this->resa->id);
if ($dest_loc!=0) {
$total_ex = $this->resa->get_number_expl_lendable($dest_loc);
if ($total_ex==0) {
//on a pas d'exemplaires sur le site de retrait
//on regarde si on en ailleurs
$total_ex = $this->resa->get_number_expl_lendable($dest_loc, true);
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 id_transfert FROM transferts, transferts_demande WHERE num_transfert=id_transfert AND etat_transfert=0 AND origine=4 AND origine_comp=".$this->resa->id;
$tresult = pmb_mysql_query($query);
if (pmb_mysql_num_rows($tresult)) {
//on a un transfert en cours
$this->display = "" . $msg["transferts_circ_resa_lib_en_transfert"] . "";
} elseif($total_ex>=$this->rank) {
$this->lien_transfert = true;
if($this->resa->transfert_resa_dispo($dest_loc)){
$this->display = $msg["resa_expl_dispo_other_location"];
$expl_locations = $this->resa->get_expl_locations_lendable($dest_loc, true);
if(count($expl_locations) == 1) {
$rqt = "SELECT location_libelle FROM docs_location WHERE idlocation='".$expl_locations[0]."'";
$this->display .= "
(".pmb_mysql_result(pmb_mysql_query($rqt),0).")";
}
}
}
}
} //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é)
$this->display = $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 ($this->resa->id_notice) $query .= " WHERE e.expl_notice=".$this->resa->id_notice;
elseif ($this->resa->id_bulletin) $query .= " WHERE e.expl_bulletin=".$this->resa->id_bulletin;
else $query .= " WHERE 0"; // ni bulletin ni notice
$query .= " AND e.expl_id=p.pret_idexpl";
$query .= " ORDER BY p.pret_retour LIMIT 1";
$tresult = pmb_mysql_query($query);
if (pmb_mysql_num_rows($tresult)) {
$this->display = pmb_mysql_result($tresult, 0, 0);
$info_retour_prevu=$this->display;
}else {
if($total_in_circ) {
$this->display = $msg['transferts_circ_retour_filtre_circ'];
} else {
$this->display = $msg["resa_no_expl"];
}
$info_retour_prevu='';
}
if ( ($pmb_transferts_actif=="1") && $transferts_choix_lieu_opac!=3) {// && ($f_loc!=0) ?
//on regarde si un des exemplaires n'est pas en transfert pour cette resa !
$query = "SELECT id_transfert FROM transferts, transferts_demande WHERE num_transfert=id_transfert AND etat_transfert=0 AND origine=4 AND origine_comp=".$this->resa->id;
$this->no_aff=0;
$tresult = pmb_mysql_query($query);
if (pmb_mysql_num_rows($tresult)) {
//on a un transfert en cours
$this->display = "" . $msg["transferts_circ_resa_lib_en_transfert"] . "";
} else {
if($f_loc) {
$total_ex = $this->resa->get_number_expl_transferts_lendable($f_loc, true);
} else {
$dest_loc = resa_loc_retrait($this->resa->id);
$total_ex = $this->resa->get_number_expl_transferts_lendable($dest_loc, true);
}
if($total_ex>=$this->rank) {
$this->lien_transfert = true;
if($this->resa->transfert_resa_dispo($f_loc)){
$this->display = $msg["resa_expl_dispo_other_location"];
if($info_retour_prevu)$this->display = $msg["resa_condition"]." : ".$info_retour_prevu."
".$this->display;
$expl_locations = $this->resa->get_expl_locations_lendable($f_loc, true);
if(count($expl_locations) == 1) {
$rqt = "SELECT location_libelle FROM docs_location WHERE idlocation='".$expl_locations[0]."'";
$this->display .= "
(".pmb_mysql_result(pmb_mysql_query($rqt),0).")";
}
}
}
}
}
}
}
} else {
$this->display='';
if($this->resa_cb && $this->resa->formatted_date_fin) $this->display = "".$msg['expl_reserve']."";
if ($this->lien_deja_affiche) {
$this->lien_transfert = false;
}
if ((!$this->lien_transfert)&&($pmb_transferts_actif=="1")&&($info_gestion==GESTION_INFO_GESTION)&&(!$this->lien_deja_affiche)) {
//on est sur la même notice que la ligne précédente, donc sur une résa de rang 2 ou plus
// on compte le nombre total d'exemplaires prêtables pour la notice
$total_ex = $this->resa->get_number_expl_lendable();
// on compte le nombre d'exemplaires sortis
$total_sortis = $this->resa->get_number_expl_out();
// on en déduit le nombre d'exemplaires disponibles
$total_dispo = $total_ex - $total_sortis;
//S'il n'y a aucun exemplaire dispo pour le rang en cours, on va regarder ailleurs...
if ($total_dispo < $this->rank) {
$dest_loc = resa_loc_retrait($this->resa->id);
if ($dest_loc!=0) {
$total_ex = $this->resa->get_number_expl_lendable($dest_loc, true);
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 id_transfert FROM transferts, transferts_demande WHERE num_transfert=id_transfert AND etat_transfert=0 AND origine=4 AND origine_comp=".$this->resa->id;
$tresult = pmb_mysql_query($query);
if (!pmb_mysql_num_rows($tresult)) {
$this->lien_transfert = true;
$this->lien_deja_affiche = true;
}
}
}
}
}
}
return $this->display;
}
public static function get_conditions() {
global $msg;
global $pmb_transferts_actif;
$conditions = array(
'expl_resa_available' => $msg['expl_resa_available'],
'resa_expl_reserve' => $msg['resa_expl_reserve']
);
if($pmb_transferts_actif) {
$conditions['transferts_circ_resa_lib_en_transfert'] = $msg['transferts_circ_resa_lib_en_transfert'];
}
return $conditions;
}
public function get_id_resa() {
return $this->id_resa;
}
public function get_precedenteresa_idnotice() {
return $this->precedenteresa_idnotice;
}
public function get_precedenteresa_idbulletin() {
return $this->precedenteresa_idbulletin;
}
public function get_no_aff() {
return $this->no_aff;
}
public function get_lien_deja_affiche() {
return $this->lien_deja_affiche;
}
public function set_resa($resa) {
$this->resa = $resa;
return $this;
}
public function set_precedenteresa_idnotice($precedenteresa_idnotice) {
$this->precedenteresa_idnotice = $precedenteresa_idnotice;
return $this;
}
public function set_precedenteresa_idbulletin($precedenteresa_idbulletin) {
$this->precedenteresa_idbulletin = $precedenteresa_idbulletin;
return $this;
}
public function set_resa_cb($resa_cb) {
$this->resa_cb = $resa_cb;
return $this;
}
public function set_idlocation($idlocation) {
$this->idlocation = $idlocation;
return $this;
}
public function set_rank($rank) {
$this->rank = $rank;
return $this;
}
public function set_no_aff($no_aff) {
$this->no_aff = $no_aff;
return $this;
}
public function set_lien_deja_affiche($lien_deja_affiche) {
$this->lien_deja_affiche = $lien_deja_affiche;
return $this;
}
}