function emprunteur($id=0, $message='', $niveau_message=FALSE) {
// initialisation des propriétés si l'id est défini
if($id) {
$this->id = $id;
$this->serious_message = $niveau_message;
$this->prets = array();
$this->reservations = array();
$this->fetch_info();
$this->message = $message;
$this->do_fiche();
}
}
// renseignement des propriétés avec requête MySQL
function fetch_info() {
global $msg ;
global $dbh;
if(!$this->id || !$dbh)
return FALSE;
$requete = "SELECT e.*, c.libelle AS code1, s.libelle AS code2, date_format(empr_date_adhesion, '".$msg["format_date_sql"]."') as aff_empr_date_adhesion, date_format(empr_date_expiration, '".$msg["format_date_sql"]."') as aff_empr_date_expiration FROM empr e, empr_categ c, empr_codestat s";
$requete .= " WHERE e.id_empr='".addslashes($this->id);
$requete .= "' AND c.id_categ_empr=e.empr_categ";
$requete .= " AND s.idcode=e.empr_codestat";
$requete .= " LIMIT 1";
$result = mysql_query($requete, $dbh);
$empr = mysql_fetch_object($result);
// affectation des propriétés
$this->cb = $empr->empr_cb ; // code barre emprunteur
$this->nom = $empr->empr_nom ; // nom emprunteur
print pmb_bidi($this->nom);
$this->prenom = $empr->empr_prenom ; // prénom emprunteur
$this->adr1 = $empr->empr_adr1 ; // adresse ligne 1
$this->adr2 = $empr->empr_adr2 ; // adresse ligne 2
$this->cp = $empr->empr_cp ; // code postal
$this->ville = $empr->empr_ville ; // ville
$this->mail = $empr->empr_mail ; // adresse email
$this->tel1 = $empr->empr_tel1 ; // téléphone 1
$this->tel2 = $empr->empr_tel2 ; // téléphone 2
$this->prof = $empr->empr_prof ; // profession
$this->birth = $empr->empr_year ; // année de naissance
$this->categ = $empr->empr_categ ; // catégorie emprunteur
$this->cstat = $empr->empr_codestat ; // code statistique
$this->cdate = $empr->empr_creation ; // date de création
$this->mdate = $empr->empr_modif ; // date de modification
$this->sexe = $empr->empr_sexe ; // sexe de l'emprunteur
$this->login = $empr->empr_login ; // login pour services OPAC
$this->pwd = $empr->empr_password ; // mot de passe OPAC
$this->date_adhesion = $empr->empr_date_adhesion ; // début adhésion
$this->date_expiration = $empr->empr_date_expiration ; // fin adhésion
$this->aff_date_adhesion = $empr->aff_empr_date_adhesion ; // début adhésion
$this->aff_date_expiration = $empr->aff_empr_date_expiration ; // fin adhésion
$this->cat_l = $empr->code1 ; // libellé catégorie emprunteur
$this->cstat_l = $empr->code2 ; // libellé code statistique. voir ce bug avec Eric
// ces propriétés sont absentes de la table emprunteurs pour le moment
// $this->message = $empr->empr_??? ; // chaîne contenant les messages emprunteurs
// $this->adate = $empr->empr_??? ; // date d'abonnement
// $this->rdate = $empr->empr_??? ; // date de réabonnement
if($this->message)
$this->message = $empr->message.'
'.$this->message;
else
$this->message = $empr->message;
// récupération du tableau des exemplaires empruntés
// il nous faut : code barre exemplaire, titre/auteur, type doc, date de prêt, date de retour
$requete = "select e.expl_cb, e.expl_notice, p.pret_date, p.pret_retour, t.tdoc_libelle, date_format(pret_date, '".$msg["format_date_sql"]."') as aff_pret_date, date_format(pret_retour, '".$msg["format_date_sql"]."') as aff_pret_retour, if (pret_retour< CURDATE(),1 ,0 ) as retard ";
$requete .= " from pret p, exemplaires e, docs_type t";
$requete .= " where p.pret_idempr=".$this->id;
$requete .= " and p.pret_idexpl=e.expl_id";
$requete .= " and t.idtyp_doc=e.expl_typdoc";
$requete .= " order by p.pret_date";
$result = mysql_query($requete, $dbh);
while($pret = mysql_fetch_object($result)) {
$notice = new notice_affichage($pret->expl_notice,0,0,0);
$notice->do_header();
$this->prets[] = array(
cb => $pret->expl_cb,
libelle => $notice->notice_header,
typdoc => $pret->tdoc_libelle,
date_pret => $pret->aff_pret_date,
date_retour => $pret->aff_pret_retour,
org_ret_date => str_replace('-', '', $pret->pret_retour)
);
}
return TRUE;
}
// fabrication de la fiche lecteur
function do_fiche() {
global $empr_tmpl;
global $msg;
$this->fiche = $empr_tmpl;
$this->fiche = str_replace('!!cb!!' , $this->cb , $this->fiche);
$this->fiche = str_replace('!!nom!!' , pmb_strtoupper($this->nom) , $this->fiche);
$this->fiche = str_replace('!!prenom!!' , $this->prenom , $this->fiche);
$this->fiche = str_replace('!!id!!' , $this->id , $this->fiche);
$this->fiche = str_replace('!!adr1!!' , $this->adr1 , $this->fiche);
$this->fiche = str_replace('!!adr2!!' , $this->adr2 , $this->fiche);
$this->fiche = str_replace('!!tel1!!' , $this->tel1 , $this->fiche);
$this->fiche = str_replace('!!tel2!!' , $this->tel2 , $this->fiche);
$this->fiche = str_replace('!!cp!!' , $this->cp , $this->fiche);
$this->fiche = str_replace('!!ville!!' , $this->ville , $this->fiche);
$emails=array();
$email_final=array();
$emails = explode(';',$this->mail);
for ($i=0;$i".$emails[$i]."";
$this->fiche = str_replace('!!mail_all!!' , $this->mail , $this->fiche);
$this->fiche = str_replace('!!prof!!' , $this->prof , $this->fiche);
$this->fiche = str_replace('!!date!!' , $this->birth , $this->fiche);
$this->fiche = str_replace('!!categ!!' , $this->categ.'-'.$this->cat_l , $this->fiche);
$this->fiche = str_replace('!!codestat!!' , $this->cstat.'-'.$this->cstat_l , $this->fiche);
$this->fiche = str_replace('!!adhesion!!' , $this->aff_date_adhesion, $this->fiche);
$this->fiche = str_replace('!!expiration!!' , $this->aff_date_expiration, $this->fiche);
if($this->serious_message) $this->fiche = str_replace('!!class_msg!!' , 'empr-serious-msg', $this->fiche);
else $this->fiche = str_replace('!!class_msg!!' , 'empr-msg', $this->fiche);
if(!$this->message) $this->message = $msg["empr_no_message_for"];
$this->fiche = str_replace('!!empr_msg!!' , $this->message , $this->fiche);
$fsexe[0] = $msg[128];
$fsexe[1] = $msg[126];
$fsexe[2] = $msg[127];
$this->fiche = str_replace('!!sexe!!' , $fsexe[$this->sexe], $this->fiche);
// valeur pour les champ hidden du prêt. L'id empr est pris en charge plus haut (voir Eric)
$this->fiche = str_replace('!!cb!!' , $this->cb , $this->fiche);
// traitement liste exemplaires en prêt
if(!sizeof($this->prets))
// dans ce cas, le lecteur n'a rien en prêt
$prets_list = "".$msg["empr_no_expl"]." |
";
// voir la localisation retenue par Eric
else {
// constitution du code HTML
while(list($cle, $valeur) = each($this->prets)) {
$prets_list .= "
";
// ouf, c'est fini ;-)
}
}
$this->fiche = str_replace('!!pret_list!!' , $prets_list , $this->fiche);
// mise à jour de la liste des réservations
$this->fiche = str_replace('!!resa_list!!', $this->fetch_resa(), $this->fiche);
}
// récupération de la liste des réservations pour l'emprunteur
function fetch_resa() {
global $dbh;
global $msg ;
// on commence par vérifier si l'emprunteur a des réservations
$query = "select count(1) from resa where resa_idempr=".$this->id;
$result = mysql_query($query, $dbh);
if(!@mysql_result($result, 0, 0))
return $msg["empr_no_resa"];
// si le lecteur a réservé un ou des documents, on récupère tout
$query = "select * from resa ";
$query .= " where resa.resa_idempr=".$this->id;
$result = mysql_query($query, $dbh);
while($resa = mysql_fetch_object($result)) {
// constitution du tableau des réservations
// on récupère le rang du réservataire
$rang = $this->get_rank($this->id, $resa->resa_idnotice);
// maintenant, on s'accroche : détermination de la date à afficher dans la case retour :
// disponible, réservé ou date de retour du premier exemplaire
// on compte le nombre total d'exemplaires pour la notice
$query = "select count(1) from exemplaires, docs_statut where expl_notice=".$resa->resa_idnotice;
$query .= " and expl_statut=idstatut and pret_flag=1";
$tresult = @mysql_query($query, $dbh);
$total_ex = @mysql_result($tresult, 0, 0);
// on compte le nombre total de réservations sur la notice
$query = "select count(1) from resa where resa_idnotice=".$resa->resa_idnotice;
$tresult = @mysql_query($query, $dbh);
$total_resa = @mysql_result($tresult, 0, 0);
// on compte le nombre d'exemplaires sortis
$query = "select count(1) from exemplaires e, pret p";
$query .= " where e.expl_notice=".$resa->resa_idnotice;
$query .= " and p.pret_idexpl=e.expl_id";
$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;
if($rang <= $total_dispo) {
// un exemplaire est disponible pour le réservataire (affichage : disponible)
$situation = "".$msg["available"]."";
} else {
if($total_dispo) {
// un ou des exemplaires sont disponibles, mais pas pour ce réservataire (affichage : reservé)
$situation = $msg["expl_reserve"];
} else {
// rien n'est disponible, on trouve la date du premier retour
$query = 'select (pret_retour) from pret p, exemplaires e';
$query .= ' where e.expl_notice='.$resa->resa_idnotice;
$query .= ' and e.expl_id=p.pret_idexpl';
$query .= ' order by p.pret_retour limit 1';
$tresult = mysql_query($query, $dbh);
$first_ret = mysql_fetch_object($tresult);
$situation = formatdate($first_ret->pret_retour);
}
}
$notice = new notice_affichage($resa->resa_idnotice,0,0,0);
$notice->do_header();
$affiche .= "".$notice->notice_header;
$affiche .= " | $rang/$total_resa | ";
$affiche .= "$situation | ";
$del_link = "resa_idnotice."&delete=1'>";
$affiche .= "$del_link |
";
}
return $affiche;
}
// <----------------- get_rank() ------------------>
// calcul du rang d'un emprunteur sur une réservation
function get_rank($id_empr, $id_notice) {
global $dbh;
$rank = 1;
$query = "select * from resa where resa_idnotice=".$id_notice." 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;
}
} # fin de déclaration classe emprunteur
} # fin de définition
?>