source: pmb4.2/trunk/fuentes/pmb/classes/amende.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 10.3 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: amende.class.php,v 1.21 2015-04-03 11:16:19 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($class_path."/calendar.class.php");
10require_once($class_path."/quotas.class.php");
11
12class amende {
13
14        var $id_empr;   //Id de l'emprunteur
15        var     $t_id_expl; //Tableau des exemplaires en retard
16        var $nb_amendes=0;      //Nombre d'exemplaires ayant une amende
17       
18    function amende($id_empr, $noreadcache=false) {
19        global $progress_bar;
20        $this->id_empr=$id_empr;
21        if (!$noreadcache) {
22                // lire en cache
23                $req="select data_amendes from cache_amendes where id_empr=$id_empr and cache_date=CURDATE()";
24                $resultat=pmb_mysql_query($req);
25                if (pmb_mysql_num_rows($resultat)) {
26                        $r=pmb_mysql_fetch_object($resultat); 
27                        $this->t_id_expl=unserialize($r->data_amendes); 
28                } else {
29                        $this->t_id_expl=$this->get_list_of_id_expl();
30               
31                        // on fait le ménage des anciens caches
32                        $req="delete from cache_amendes where cache_date<CURDATE() ";
33                        pmb_mysql_query($req);
34                        $req="insert into cache_amendes set id_empr=$id_empr, cache_date=CURDATE(), data_amendes='".addslashes( serialize($this->t_id_expl))."'";
35                        pmb_mysql_query($req);
36                }
37        } else {
38                $this->t_id_expl=$this->get_list_of_id_expl();
39               
40                // on fait le ménage du cache de l'emprunteur
41                $req="delete from cache_amendes where cache_date<=CURDATE() and id_empr=$id_empr ";
42                pmb_mysql_query($req);
43                $req="insert into cache_amendes set id_empr=$id_empr, cache_date=CURDATE(), data_amendes='".addslashes( serialize($this->t_id_expl))."'";
44                pmb_mysql_query($req);
45        }
46        //progress bar utilisé pour le long calcul des relances (relance.inc.php)
47        if($progress_bar)$progress_bar->progress();     
48    }
49   
50    function get_parameters($id_expl) {
51        global $pmb_gestion_financiere,$pmb_gestion_amende,$lang,$include_path;
52        global $finance_amende_jour,$finance_delai_avant_amende,$finance_delai_recouvrement,$finance_amende_maximum,$finance_delai_1_2,$finance_delai_2_3;
53        global $tbclasses;
54        global $_quotas_elements_;
55                global $_quotas_types_;
56                global $_quotas_table_;
57       
58                $param=array();
59       
60        if ($pmb_gestion_amende==1) {
61                //Gestion simple des amendes
62                $param["delai_avant_amende"]=$finance_delai_avant_amende;
63                $param["amende_jour"]=$finance_amende_jour;
64                $param["delai_recouvrement"]=$finance_delai_recouvrement;
65                $param["amende_maximum"]=$finance_amende_maximum;
66                $param["delai_1_2"]=$finance_delai_1_2;
67                $param["delai_2_3"]=$finance_delai_2_3;
68        } else {
69                //Gestion des quotas
70                global $_parsed_quotas_;
71                if (!$tbclasses["QUOTAS_ELEMENTS"]) $_parsed_quotas_=false; else {
72                        $_quotas_elements_=$tbclasses["QUOTAS_ELEMENTS"];
73                        $_quotas_types_=$tbclasses["QUOTAS_TYPES"];
74                        $_quotas_table_=$tbclasses["QUOTAS_TABLE"];
75                        $_parsed_quotas_=array("$include_path/quotas/own/$lang/finances.xml"=>true);
76                }
77                        $struct["READER"]=$this->id_empr;
78                        $struct["EXPL"]=$id_expl;
79                       
80                        $qt_delai_avant_amende=new quota("AMENDE_DELAI","$include_path/quotas/own/$lang/finances.xml");
81                        $param["delai_avant_amende"]=$qt_delai_avant_amende->get_quota_value($struct);
82                       
83                        if (!$tbclasses["QUOTAS_ELEMENTS"]) {
84                                $tbclasses["QUOTAS_ELEMENTS"]=$_quotas_elements_;
85                        $tbclasses["QUOTAS_TYPES"]=$_quotas_types_;
86                        $tbclasses["QUOTAS_TABLE"]=$_quotas_table_;
87                        }
88                       
89                        $_parsed_quotas_=array("$include_path/quotas/own/$lang/finances.xml"=>true);
90                        $qt_amende_jour=new quota("AMENDE_BY_DAY","$include_path/quotas/own/$lang/finances.xml");
91                        $param["amende_jour"]=$qt_amende_jour->get_quota_value($struct);
92                        if ($param["amende_jour"]==-1) $param["amende_jour"]=0;
93                       
94                        $_parsed_quotas_=array("$include_path/quotas/own/$lang/finances.xml"=>true);
95                        $qt_delai_recouvrement=new quota("AMENDE_DELAI_RECOUVREMENT","$include_path/quotas/own/$lang/finances.xml");
96                        $param["delai_recouvrement"]=$qt_delai_recouvrement->get_quota_value($struct);
97                       
98                        $_parsed_quotas_=array("$include_path/quotas/own/$lang/finances.xml"=>true);
99                        $qt_amende_maximum=new quota("AMENDE_MAXIMUM","$include_path/quotas/own/$lang/finances.xml");
100                        $param["amende_maximum"]=$qt_amende_maximum->get_quota_value($struct);
101                       
102                        $_parsed_quotas_=array("$include_path/quotas/own/$lang/finances.xml"=>true);
103                        $qt_amende_maximum=new quota("AMENDE_1_2","$include_path/quotas/own/$lang/finances.xml");
104                        $param["delai_1_2"]=$qt_amende_maximum->get_quota_value($struct);
105                       
106                        $_parsed_quotas_=array("$include_path/quotas/own/$lang/finances.xml"=>true);
107                        $qt_amende_maximum=new quota("AMENDE_2_3","$include_path/quotas/own/$lang/finances.xml");
108                        $param["delai_2_3"]=$qt_amende_maximum->get_quota_value($struct);
109                       
110                        $_parsed_quotas_=false;
111        }
112       
113        return $param;
114    }
115   
116    function get_list_of_id_expl() {
117        //Recherche des livres en retard
118        $t_id_expl=array();
119       
120        $requete="select pret_idexpl, printed from pret where pret_idempr=".$this->id_empr." and CURDATE()>pret_retour";
121        $resultat=pmb_mysql_query($requete);
122        if (@pmb_mysql_num_rows($resultat)) {
123                while ($r=pmb_mysql_fetch_object($resultat)) {
124                        $t=array();
125                        $t["id_expl"]=$r->pret_idexpl;
126                        $t["printed"]=$r->printed;
127                        //Calcul de l'amende
128                        $amende=$this->get_amende($r->pret_idexpl);
129                       
130                        $t["amende"]=$amende;
131                        if ($amende["njours"]) $t_id_expl[]=$t;
132                }
133        }
134        return $t_id_expl;
135    }
136   
137    function make_lost($id_expl) {
138    }
139   
140    function get_list_of_expl() {
141    }
142   
143    function get_total_amendes() {
144        $total=0;
145        $ta=$this->t_id_expl;
146        for ($i=0; $i<count($ta); $i++) {
147                $t=$ta[$i];
148                $total+=$t["amende"]["valeur"];
149                if ($t["amende"]["valeur"]*1) $this->nb_amendes++;
150        }
151        return $total;
152    }
153   
154    function get_amende($id_expl) {
155        global $pmb_amende_comptabilisation;
156       
157        $requete="select pret_date, pret_retour, niveau_relance, date_relance from pret where pret_idexpl=$id_expl";
158        $resultat=pmb_mysql_query($requete);
159        $amende=array();
160       
161        $amende["valeur"]=0;
162        $amende["recouvrement"]=false;
163       
164        if (@pmb_mysql_num_rows($resultat)) {
165                $r=pmb_mysql_fetch_object($resultat);
166                $dr=explode("-",$r->pret_retour);
167                //$calendar=new calendar();     
168                        $njours=calendar::get_open_days($dr[2],$dr[1],$dr[0],date("d"),date("m"),date("Y"));
169                        $amende_param=$this->get_parameters($id_expl);
170                        if ($njours>0) {
171                                $amende["njours"]=$njours;
172                                if ($njours>$amende_param["delai_avant_amende"]) {
173                                        //En recouvrement ?
174                                        if ($r->niveau_relance==3){
175                                                $drel=explode("-",$r->date_relance);
176                                                $njours_recouvrement=calendar::get_open_days($drel[2],$drel[1],$drel[0],date("d"),date("m"),date("Y"));
177                                                if ($njours_recouvrement>$amende_param["delai_recouvrement"]) {
178                                                        $amende["recouvrement"]=true;
179                                                        $njours=calendar::get_open_days($dr[2],$dr[1],$dr[0],$drel[2],$drel[1],$drel[0]);
180                                                }
181                                        }
182                                        //Calcul de l'amende à partir du délai de grâce ?
183                                        if ($pmb_amende_comptabilisation) {
184                                                $amende["njours"] = $njours - $amende_param["delai_avant_amende"];
185                                        }
186                                        //Montant maximum dépassé ?
187                                        $amende["valeur"]=$amende["njours"]*$amende_param["amende_jour"];
188                                        if (($amende["valeur"]>$amende_param["amende_maximum"])&&($amende_param["amende_maximum"]>0)) {
189                                                $amende["valeur"]=$amende_param["amende_maximum"];
190                                        }
191                                }
192                }
193       
194                //Calcul du niveau théorique de l'exemplaire
195                //calcul de Date retour+delai_avant_amende
196                $date_1=calendar::add_days($dr[2],$dr[1],$dr[0],$amende_param["delai_avant_amende"]);
197                //calcul de Date retour+delai_avant_amende+delai_1_2
198                $dr1=explode("-",$date_1);
199                $date_2=calendar::add_days($dr1[2],$dr1[1],$dr1[0],$amende_param["delai_1_2"]);
200                //calcul de Date retour+delai_avant_amende+delai_1_2+delai_2_3
201                $dr2=explode("-",$date_2);
202                $date_3=calendar::add_days($dr2[2],$dr2[1],$dr2[0],$amende_param["delai_2_3"]);
203                //calcul de Date retour+delai_avant_amende+delai_1_2+delai_2_3+delai_recouvrement
204                $dr3=explode("-",$date_3);
205                $date_recouvrement=calendar::add_days($dr3[2],$dr3[1],$dr3[0],$amende_param["delai_recouvrement"]);
206                $time=mktime(0,0,0,date("m"),date("d"),date("Y"));
207                $niveau=0;
208                if (($time>calendar::maketime($date_1))&&($time<=calendar::maketime($date_2))) 
209                        $niveau=1;
210                else if (($time>calendar::maketime($date_2))&&($time<=calendar::maketime($date_3)))
211                                $niveau=2;
212                        else if (($time>calendar::maketime($date_3))&&($time<=calendar::maketime($date_recouvrement)))
213                                $niveau=3;
214                        else if ($time>calendar::maketime($date_recouvrement)) $niveau=4;
215                       
216                        $amende["niveau"]=$niveau;                             
217                        $amende["date_pret"]=$r->pret_date;
218                        $amende["date_retour"]=$r->pret_retour;
219                        $amende["niveau_relance"]=$r->niveau_relance;
220                        $amende["date_relance"]=$r->date_relance;
221        }       
222        return $amende;
223    }
224   
225    function get_max_level() {
226        $level=0;
227        $level_normal=0;
228        $level_min=0;
229        $printed=0;
230        $level_min_id_expl=0;
231        $t=array("level"=>0, "level_normal"=>0);
232        $max=-1;
233        $min=-1;
234        for ($i=0; $i<count($this->t_id_expl); $i++) {
235                if ($this->t_id_expl[$i]["amende"]["niveau"]>$level_normal) { 
236                        $level_normal=$this->t_id_expl[$i]["amende"]["niveau"]; 
237                        $max=$i; 
238                }
239                if ($this->t_id_expl[$i]["amende"]["niveau_relance"]>$level_min) {
240                        $level_min=$this->t_id_expl[$i]["amende"]["niveau_relance"];
241                        $min=$i;
242                }
243        }
244        if ($max>=0) {
245                $level=$this->t_id_expl[$max]["amende"]["niveau_relance"];
246        }
247        if ($min>=0) {
248                $printed=$this->t_id_expl[$min]["printed"];
249                $level_min_id_expl=$this->t_id_expl[$min]["id_expl"];
250                $date_relance=$this->t_id_expl[$min]["amende"]["date_relance"];
251        }
252       
253        $t["level"]=$level;
254        $t["level_normal"]=$level_normal;
255        $t["level_min"]=$level_min;
256        $t["printed"]=$printed;
257        $t["level_min_id_expl"]=$level_min_id_expl;
258        $t["level_min_date_relance"]=$date_relance;
259        return $t;
260    }
261}
262?>
Note: See TracBrowser for help on using the repository browser.