Subversion Repositories Applications.gtt

Rev

Rev 5 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 jpm 1
<?php
2
 
3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 4.1                                                                                      |
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
7
// +------------------------------------------------------------------------------------------------------+
8
// | This library is free software; you can redistribute it and/or                                        |
9
// | modify it under the terms of the GNU Lesser General Public                                           |
10
// | License as published by the Free Software Foundation; either                                         |
11
// | version 2.1 of the License, or (at your option) any later version.                                   |
12
// |                                                                                                      |
13
// | This library is distributed in the hope that it will be useful,                                      |
14
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
15
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
16
// | Lesser General Public License for more details.                                                      |
17
// |                                                                                                      |
18
// | You should have received a copy of the GNU Lesser General Public                                     |
19
// | License along with this library; if not, write to the Free Software                                  |
20
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
21
// +------------------------------------------------------------------------------------------------------+
22
// |@author ABDOOL RAHEEM shaheen   shaheenar50@hotmail.com                                                 |
23
// |@version 3                                                                                            |
24
 
25
// +------------------------------------------------------------------------------------------------------+
26
/*
27
*fichier contenant le menu principal de l'application de gestion du temps de travail
28
*@package gtt_general
29
//Auteur original :
30
*@author        Dorian Bannier <dbannier@aol.com>
31
//Autres auteurs :
32
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
33
*@copyright     Copyright (C) 2003 Tela-Botanica
34
*/
35
// +------------------------------------------------------------------------------------------------------+
36
include_once CHEMIN_MENU.'gtt_menu_travail.php';
37
include_once CHEMIN_CLASSES_METIER.'gtt_travail.class.php';
38
include_once CHEMIN_CLASSES_METIER.'gtt_taches.class.php';
39
include_once CHEMIN_CLASSES_METIER.'gtt_prevision_tache.class.php';
40
/**
41
*fonction verifiant si les heures rentrees sont bien valides
42
*verification si heure rentree dans une case <24 ou >0
43
*verifiaction si somme heure d'une journee<24
44
*/
45
 
46
 
47
function verifTempsTravail()
48
{
5 jpm 49
	$nb = $_POST['champ_nb_projet'];
50
	$res  = true;
51
	// Iniatilisation des variables
52
	$somme1 = $somme2 = $somme3 = $somme4 = $somme5 = $somme6 = $somme7 = 0;
53
    $verif_a_faire = false;
54
    // Tableau jour
55
    $tabJour = array(0 => "champ_lundi", 1 => "champ_mardi", "champ_mercredi", "champ_jeudi", "champ_vendredi", "champ_samedi", "champ_dimanche");
2 jpm 56
 
5 jpm 57
    for ($i = 0; $i < $nb; $i++) {
58
		for ($j = 0; $j < count($tabJour); $j++) {
59
		    // On ne fait les tests que si des jours de travail ou de recuperation partielle
60
		    if ((isset($_POST[$tabJour[$j].$i]))and (($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_TRAVAIL) or
61
		    ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]=="Récup part:1/2j"))) {
62
				$verif_a_faire = true;
63
				//attribution de la limite selon le type de jour
64
				if ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_TRAVAIL) {
65
					$limite = 24;
66
				} elseif ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]=="Récup part:1/2j") {
67
					$limite = 12;
68
				}
69
 
70
				if ((!(($_POST[$tabJour[$j].$i]<$limite)and ($_POST[$tabJour[$j].$i]>=0))) or
71
				(empty($_POST[$tabJour[$j].$i])!=1 and is_numeric($_POST[$tabJour[$j].$i]) != 1)) {
72
				    $res = false;
73
				} else {
74
				    switch ($j) {
75
					//cas lundi
76
					case 1:
77
					$somme1 += $_POST[$tabJour[$j].$i];
78
					break;
79
					//cas  mardi
80
					case 2 :
81
 
82
					$somme2 += $_POST[$tabJour[$j].$i];
83
					break;
84
 
85
					//cas mercredi
86
					case 3 :
87
					$somme3 += $_POST[$tabJour[$j].$i];
88
					break;
89
 
90
					//cas jeudi
91
					case 4 :
92
					$somme4 += $_POST[$tabJour[$j].$i];
93
					break;
94
					//cas vendredi
95
					case 5 :
96
					$somme5 += $_POST[$tabJour[$j].$i];
97
					break;
98
 
99
					//cas samedi
100
					case 6 :
101
					$somme6 += $_POST[$tabJour[$j].$i];
102
					break;
103
					//cas dimanche
104
 
105
					case 7 :
106
					$somme7 += $_POST[$tabJour[$j].$i];
107
					break;
108
				    }
109
				}
110
		    }
2 jpm 111
		}
112
    }
113
 
114
    //test si une des valeurs >24
5 jpm 115
    if(  $verif_a_faire == true) {
116
    	$resultat=(($somme1<$limite)and ($somme2<$limite)and ($somme3<$limite)and ($somme4<$limite)and ($somme5<$limite)
117
    	and ($somme6<$limite)and ($somme7<$limite)and ($res==true));
118
    } else {
119
    	$resultat = true;
120
    }
121
 
122
	return $resultat;
2 jpm 123
}
5 jpm 124
 
2 jpm 125
/**
126
*fonction traitant l'ajout d'un champ travail dans la base
127
*@param : utilisateur
128
*/
129
function traiterSemaine($utilisateur)
130
{
5 jpm 131
	if (isset($_POST['champ_valider_travail']))	{
132
		// Récuperation de l'utilisateur
133
		$user1 = Utilisateur::recupererUtilisateur($utilisateur);
134
		// Parcours du tableau de jours
135
		$tabListeJour = array(0 =>'champ_lundi',1 =>'champ_mardi','champ_mercredi','champ_jeudi','champ_vendredi','champ_samedi','champ_dimanche');
136
		// Parcourt du tableau de jour
137
		for ($nb = 0; $nb < $_POST["champ_nb_projet"]; $nb++) {
138
		    for($j = 0; $j < count($tabListeJour); $j++) {
139
			// Test du type de jour
140
			if (isset($_POST["champ_type_jour".$j])) {
141
			    //cas  jour de travail ou recuperation partielle(recuperation partielle ne reduit pas le temps de travail
142
			    if (($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]] == GTT_NOM_TRAVAIL)
143
			    	or (($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]] == GTT_NOM_RECUP_PART)
144
			    	and ($_POST["champ_rtt_type_jour".$_POST["champ_type_jour".$j]] == 0))) {
145
 
146
					//test si aucun conges prealablement rentre ne chevauche la date voulue
147
					//construction d'un objet absence equivalent a la date de travail
148
					$testAbs = new Absence($utilisateur,0,date('Y-m-d', $_POST["champ_date_j".$j]));
149
					$testAbs->setDateFin(date('Y-m-d', $_POST["champ_date_j".$j]));
150
					$tabAbsence = $testAbs->existeAbsence();
151
					// Booleen pour indiquer si on peut ajouter
152
					$possibleAjout = true;
153
					// Si chevauchement: verification si tous validee
154
					if (count($tabAbsence) > 0) {
155
					    if ($testAbs->existeAbsenceValidee() == true) {
156
							$possibleAjout = false;
157
							$_POST[$tabListeJour[$j].$nb] = '';
158
							$codeErreur = 2;
159
					    } else {
160
							//supression des absences non validees
161
							for ($p = 0; $p < count($tabAbsence); $p++) {
162
							    $l = $tabAbsence[$p];
163
							    $absTemp2 = $testAbs;
164
							    $absTemp2->construireAbsence($l);
165
							    $nbJour2 = $absTemp2->getDureeAbsence();
166
							    // Mise a jour des quota heures sup et des conges payes de l'utilisateur
167
							    if ($_POST["champ_libelle_type_jour".$l[GEST_CHAMPS_ID_MOTIF]]==GTT_NOM_RECUPERATION) {
168
									$quotaTemp=$user1->getQuota();
169
									$user1->setQuota($quotaTemp+(($user1->getTempsTravail())*$nbJour2));
170
							    } elseif ($_POST["champ_libelle_type_jour".$l[GEST_CHAMPS_ID_MOTIF]]==GTT_NOM_RECUP_PART) {
171
									$quotaTemp=$user1->getQuota();
172
									$user1->setQuota($quotaTemp+((($user1->getTempsTravail())/2)*$nbJour2));
173
							    } else {
174
									if ($_POST["champ_libelle_type_jour".$l[GEST_CHAMPS_ID_MOTIF]]==GTT_NOM_CONGES_PAYES) {
175
										$congesTemp=$user1->getConges();
176
										$user1->setConges($congesTemp+($nbJour2*1));
177
									}
178
							    }
179
							    $f = $testAbs->supprimerAbsence($utilisateur,$l[GEST_CHAMPS_DATE_DEBUT_ABSENCE]);
180
							    if ($f != 1) {
181
							    	$codeErreur = 3;
182
							    }
183
							}
184
					    }
185
					}
2 jpm 186
 
187
 
5 jpm 188
					//determination des limites de travail en fonction du type de jour
189
					if ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_TRAVAIL) {
190
						$limiteHeureTravail = $GLOBALS['limiteJourTravail'];
191
					} else {
192
					    $limiteHeureTravail=$GLOBALS['limiteJourRecupPart'];
193
					    //construction de l'absence
194
					    $absenceRecupPart=new Absence($utilisateur,$_POST["champ_type_jour".$j],date('Y-m-d',$_POST["champ_date_j".$j]));
195
					    $absenceRecupPart->setDateFin(date('Y-m-d',$_POST["champ_date_j".$j]));
196
 
197
					    //traitement de l'enregistrement de la recuperation partielle
198
					    if ($possibleAjout == true) {
199
							$q = $absenceRecupPart->enregistrerNewAbsence();
200
							//mise a jour des quotas
201
							$val=$user1->getQuota();
202
							$duree=$user1->getTempsTravail();
203
							$user1->setQuota($val-(($user1->getTempsTravail())/2));
204
 
205
							if ($q != 1 ) {
206
							    //attribution d'un code erreur
207
							    $codeErreur=1;
208
							}
209
					    }
210
					}
211
					//test si le champ n'est pas vide et le champ est different de 0
212
 
213
					if (empty($_POST[$tabListeJour[$j].$nb])!=1 and ($_POST[$tabListeJour[$j].$nb])!=0)
2 jpm 214
					{
215
 
5 jpm 216
					    //test si date <=date d'aujourd'hui
217
					    if ($_POST["champ_date_j".$j]<=time() and ($possibleAjout==true))
218
					    {
219
						//impossible de modifier des donnees une fosi que l'absence
220
						//est enregistree
221
						//construction de l'objet travail
222
 
223
						$travail= new Travail($utilisateur,$_POST["champ_tache".$nb]);
224
						$travail->setDateTravail(date('Y-m-d',$_POST["champ_date_j".$j]));
225
						$travail->setDureeTravail($_POST[$tabListeJour[$j].$nb]);
226
 
227
						//traitement de l'objet travail
228
						$t=traiterTravail($travail,$limiteHeureTravail);
229
						$_POST[$tabListeJour[$j].$nb]='';
230
						if($t!=1)$codeErreur=$t;
231
 
232
					    }else{
233
 
234
						if($possibleAjout==true)
235
						{
236
						    //cas ou la date est superieure a la date d'aujourd'hui
237
						    //construction de l'objet prevision
238
						    $prevision=new Prevision(1000,1000);
239
						    $tableau=array(GEST_CHAMPS_ID_UTILISATEUR=>$utilisateur,
240
						    GEST_CHAMPS_ID_TACHE=>$_POST["champ_tache".$nb],
241
						    GEST_CHAMPS_DATE_PREVISION=>date('Y-m-d',$_POST["champ_date_j".$j]),
242
						    GEST_CHAMPS_DUREE_PREVISION=> $_POST["$tabListeJour[$j]".$nb]);
243
 
244
						    $prevision->construirePrevision($tableau);
245
 
246
						    $o=traiterPrevision($prevision, $limiteHeureTravail);
247
						    $_POST[$tabListeJour[$j].$nb]='';
248
						    if($o!=1)$codeErreur=$o;
249
 
250
						}
251
					    }
252
					}//fin traitement travail et prevision
2 jpm 253
			    }else{
5 jpm 254
				//cas des conges
255
				//cas : conges paye,recup,maladie,greve,ferie
256
				if(($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_CONGES_PAYES)
257
				or ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_RECUPERATION)
258
				or ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_MALADIE)
259
				or ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_GREVE)
260
				or ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_WEEK_END)
261
				or ($_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]==GTT_NOM_FERIE))
2 jpm 262
				{
5 jpm 263
				    //construction du nouvel objet absence
264
				    $objetAbsence=new Absence($utilisateur,$_POST["champ_type_jour".$j],date('Y-m-d',$_POST["champ_date_j".$j]));
265
				    $objetAbsence->setDateFin(date('Y-m-d',$_POST["champ_date_j".$j]));
266
				    //traitement de l'objet absence
267
				    $g=traiterAbsence($objetAbsence,$user1,$_POST["champ_libelle_type_jour".$_POST["champ_type_jour".$j]]);
268
				    if ($g[0]!=1){
269
					$codeErreur=$g[0];
270
				    }else {
271
					$user1=$g[1];
272
 
273
				    }
2 jpm 274
 
275
				}
5 jpm 276
			    }//fin traitement type jour
277
			}//typr jour
278
 
279
		    }
280
		   // }
281
		}
282
		$h=$user1->mettreAJourUtilisateur();
283
		if ($h!=1) {
284
			$codeErreur = 25;
285
		}
2 jpm 286
    }
5 jpm 287
    $_POST['champ_valider_travail'] = 'dejaValider';
2 jpm 288
}
289
 
290
/**
291
fonction qui traite les travaux
292
*enregistre si nouveau travail
293
*met a jour si existe deja
294
*@param : $travail : objet travail
295
*@param :limiteHeuretravail=la limite des heure sde travail
296
*/
297
function traiterTravail($travail,$limiteHeureTravail)
298
{
299
    //verification si on ne depasse pas 24 heures
300
    $sommeTravail= $travail->sommeHeureTravail($travail->getIdUserTravail(),$travail->getDateTravail());
301
 
302
    if (is_null($sommeTravail))
303
    {
304
	$sommeTravail=0;
305
    }
306
 
307
    //verification si donnees precedemment rentrees
308
    if (($travail->existeTravail()!=0)and ($travail->existeTravail()!=-1))
309
    {
310
	if (($sommeTravail + ($travail->getDureeTravail())-($travail->existeTravail()))<$limiteHeureTravail)
311
	{
312
	    $q=$travail->mettreAjourTravail();
313
 
314
	    if ($q!=1) {
315
		$res=4;
316
	    }else $res=1;
317
	}
318
 
319
    }else
320
    //cas travail n'existe pas encore
321
    {
322
	if ($travail->existeTravail()==0)
323
	{
324
	    //test si on de depasse pas 24 heures pour une journee
325
	    if ($sommeTravail + ($travail->getDureeTravail())<$limiteHeureTravail)
326
	    {
327
		$w=$travail->enregistrerNewTravail();
328
		if ($w!=1){
329
		    $res=5;
330
		}else $res=1;
331
	    }
332
 
333
	}
334
    }
335
    return $res;
336
}
337
 
338
/**
339
*fonction qui traite les previsions
340
*@param $prevision: l'objet prevision
341
*@param : limite heure de travail
342
*@return 1 si aucun erreur
343
*@return 5 ou 6 si erreur
344
*/
345
function traiterPrevision($prevision, $limiteHeureTravail)
346
{
347
    //verification si on ne depasse pas 24 heures pour les donnees
348
    //rentrees a unedate donnee dans la base de donnees
349
    $sommePrev = $prevision->sommeHeurePrevision($prevision->getIdUserPrevision(),$prevision->getDatePrevision());
350
    //verification si une prevision a deja ete faite
351
 
352
    if (($prevision->existePrevision()!=0) and (($prevision->existePrevision()!=-1)))
353
    {
354
	if ($sommePrev+($prevision->getDureePrevision())-($prevision->existePrevision())<$limiteHeureTravail)
355
	{
356
	    $q=$prevision->mettreAJourPrevision();
357
	    if ($q!=1)
358
	    {
359
		$res=5;
360
		echo "echec enregistrement prevision dans base de donnees <br />";
361
	    }else $res=1;
362
	}
363
    }else{
364
	//cas ou aucuen prevsion n'a deja ete rentree
365
	if( $prevision->existePrevision()==0)
366
	{
367
	    //test si la somme des previsions de depasse pas 24 heures
368
	    if (($sommePrev+($prevision->getDureePrevision()))<<$limiteHeureTravail)
369
	    {
370
		$w =$prevision->enregistrerNewPrevision();
371
		if ($w!=1) {
372
		    $res=6;
373
		    echo "erreur enregistrement prevision";
374
		}else $res=1;
375
	    }
376
	}
377
    }
378
    return $res;
379
}
380
/**
381
*fonction qui traite les absences
382
*@param : $abs : objet absence
383
*@param : user: objet utilisateur
384
*@param $j : jour de la semaine : lundi =0
385
*supression d'eventuelle absences prealablement rentree
386
*supression et enregistrement effectif que si aucune lettre n'a prealablement ete
387
*renvoie 1 si enregistrement effectuee
388
*met a jour la det de fin si l'absence fait partie d'une periode
389
*renvoie code erreur si erreur
390
*/
391
function traiterAbsence($abs,$user,$libelle)
392
{
393
    $tabAbs=$abs->existeAbsence();
394
    $ok=true;//booleen indiquant si traitement a faire ou non
395
    $possible=true;//booleen indiquant que l'absence est possible
396
 
397
    //test si weekend =>on n'insere aucun enregistrement
398
    if($libelle==GTT_NOM_WEEK_END)
399
    {
400
	$ok=false;
401
    }
402
    //si chevauchement existe
403
 
404
    if(count($tabAbs)>0)
405
    {
406
	//on sait que $tabAbs contient au plus un enregistrement
407
	//car la periode ne tient que sur une journee
408
	$line=$tabAbs[0];
409
	//si pas meme identifiant
410
	if($line[GEST_CHAMPS_ID_MOTIF]!=$abs->getIdMotif())
411
	{
412
	    if($line[GEST_CHAMPS_DATE_ENVOI_LETTRE]!='0000-00-00')
413
	    {
414
		//si le jour d'absence a ete valide
415
		$ok=false;
416
	    }else{
417
		//si absence non encore validee
418
		//verifiaction pour un jour de conges payes ou recuperation
419
		if(($libelle==GTT_NOM_CONGES_PAYES)or ($libelle=GTT_NOM_RECUPERATION))
420
		{
421
 
422
		    //recuperation de la duree de l'absence qui chevauche le jour demande
423
		    $debut=explode('-',$line[GEST_CHAMPS_DATE_DEBUT_ABSENCE]);
424
		    $fin=explode('-',$line[GEST_CHAMPS_DATE_FIN_ABSENCE]);
425
		    $dateDeb=mktime(0,0,0,$debut[1],$debut[2],$debut[0]);
426
		    $dateFin=mktime(0,0,0,$fin[1],$fin[2],$fin[0]);
427
 
428
		    //verification si absence precedente est un conges payes
429
		    if($_POST["champ_libelle_type_jour".$line[GEST_CHAMPS_ID_MOTIF]]==GTT_NOM_CONGES_PAYES)
430
		    {
431
			$duree=intval((($dateFin-$dateDeb)/3600)/24);
432
		    }else $duree=0;
433
 
434
 
435
		    //verification si possible de prendre le conge paye
436
		    if($libelle==GTT_NOM_CONGES_PAYES)
437
		    {
438
			if (((($user->getConges())+($duree)-($abs->getDureeAbsence()))<0))
439
			{
440
			   $possible=false;
441
			}
442
		    }else
443
		    {
444
			//mise a jour de la quantite d'heure supp
445
			$heureSup=$user->getQuota();
446
			$user->setQuota($heureSup-($user->getTempsTravail()));
447
 
448
		    }
449
		}//fin test conges payes
450
 
451
 
452
 
453
		//supression des anciennes absence dans le cas d'une nouvelle absence
454
		if($possible==true)
455
		{
456
		    for ($p=0;$p<count($tabAbs);$p++)
457
		    {
458
			$line1=$tabAbs[$p];
459
			//duree de l'absence a supprimer
460
			$abs2=$abs;
461
			$abs2->construireAbsence($line1);
462
 
463
			$nbJour=$abs2->getDureeAbsence();
464
 
465
			//mise a jour des quota heures sup et des conges payes de l'utilisateur
466
			if($_POST["champ_libelle_type_jour".$line1[GEST_CHAMPS_ID_MOTIF]]==GTT_NOM_RECUPERATION)
467
			{
468
			    $quotaTemp=$user->getQuota();
469
			    $user->setQuota($quotaTemp+(($user->getTempsTravail())*$nbJour));
470
 
471
			}elseif($_POST["champ_libelle_type_jour".$line1[GEST_CHAMPS_ID_MOTIF]]==GTT_NOM_RECUP_PART)
472
			{
473
			    $quotaTemp=$user->getQuota();
474
			    $user->setQuota($quotaTemp+($nbJour*(($user->getTempsTravail())/2)));
475
 
476
			}else
477
			{
478
			    if ($_POST["champ_libelle_type_jour".$line1[GEST_CHAMPS_ID_MOTIF]]==GTT_NOM_CONGES_PAYES)
479
			    {
480
				$congesTemp=$user->getConges();
481
				$user->setConges($congesTemp+(1*$nbJour));
482
 
483
			    }
484
			}
485
			$z=$abs->supprimerAbsence($abs->getIdUserAbsence(),$line1[GEST_CHAMPS_DATE_DEBUT_ABSENCE]);
486
			if($z!=1)
487
			{
488
			    $res=7;
489
			}else $res=1;
490
		    }
491
		}
492
 
493
	    }
494
	}else
495
	{
496
	    //si meme motif on ne fait rien
497
	    $ok=false;
498
	}
499
 
500
    }else{
501
	//si pas de chevauchement
502
	$supprimTravail=true;
503
 
504
	//supression d'eventuelles travaux
505
	if ($supprimTravail==true)
506
	{
507
	    $res=&Travail::supprimerTachesUserDate($abs->getIdUserAbsence(),$abs->getDateDebAbsence());
508
	    if($res!=1)
509
	    {
510
		$res=8;
511
	    }
512
	}
513
 
514
	//mise a jour des conge spayes et heures sup
515
 
516
	if(($libelle==GTT_NOM_CONGES_PAYES)or ($libelle=GTT_NOM_RECUPERATION))
517
	{
518
 
519
	     //verification si possible de prendre le conge paye
520
	    if($libelle==GTT_NOM_CONGES_PAYES)
521
	    {
522
		if ((($user->getConges())-($abs->getDureeAbsence()))>=0)
523
		{
524
		    $temp=$user->getConges();
525
		    //mise a jour des conges payes
526
		    $user->setConges($temp-($abs->getDureeAbsence()));
527
 
528
		}else $ok=false;
529
	    }else
530
	    {
531
		//mise a jour de la quantite d'heure supp
532
		$heureSup=$user->getQuota();
533
		$user->setQuota($heureSup-($user->getTempsTravail()));
534
 
535
	    }
536
	}//fin test conges payes
537
    }
538
    //enregistrement de la nouvelle absence
539
    //si traitement a faire
540
    if($ok==true and $possible==true)
541
    {
542
	$nouveau=true; //booleen indiquant s'il faut enregistrer une nouvelle absence
543
	$absencePrec=$abs->getAbsencesPrec();
544
	$absenceSuiv=$abs->getAbsencesSuiv();
545
	//timestamp de la date de debut d'absence
546
	$dDeb=explode('-',$abs->getDateDebAbsence());
547
	$timeDeb=mktime(0,0,0,$dDeb[1],$dDeb[2],$dDeb[0]);
548
 
549
	//timestamp de la date de fin d'absence
550
	$dFin=explode('-',$abs->getDateFinAbsence());
551
	$timeFin=mktime(0,0,0, $dFin[1], $dFin[2], $dFin[0]);
552
 
553
	//creation des timestamp des absences precedentes et suivantes
554
	if($absencePrec!=-1)
555
	{
556
	    $finPrec=explode('-',$absencePrec->getDateFinAbsence());
557
	    $datePrec=mktime(0,0,0,$finPrec[1],$finPrec[2],$finPrec[0]);
558
	}
559
	//timestamp de l'absence suivant
560
	if($absenceSuiv!=-1)
561
	{
562
	    $debSuiv=explode('-',$absenceSuiv->getDateDebAbsence());
563
	    $dateSuiv=mktime(0,0,0,$debSuiv[1],$debSuiv[2],$debSuiv[0]);
564
	}
565
	//verification s'il existe des absences precedentes
566
	//non encore validees
567
	//si pas d'absence precedentes
568
	if($absencePrec==-1)
569
	{
570
	    if ($absenceSuiv!=-1)
571
	    {
572
		//si absence suivante est contigue
573
		if(isDateContigues($timeFin,$dateSuiv)==1)
574
		{
575
		    $absTemp=$absenceSuiv;
576
 
577
		    $absTemp->setDateDeb($abs->getDateDebAbsence());
578
 
579
		    $w=$absTemp->supprimerAbsence($absenceSuiv->getIdUserAbsence(),$absenceSuiv->getDateDebAbsence());
580
		    $resTemp=$absTemp->enregistrerNewAbsence();
581
		    $nouveau=false;
582
		    if ($resTemp!=1 or $w!=1)
583
		    {
584
			$res=9;
585
		    }
586
		}
587
	    }
588
	}else//s'il existe une absence precedentes
589
	{
590
	    //si absence precedente contigue
591
	    if(isDateContigues($datePrec,$timeDeb)==1)
592
	    {
593
		$absTemp=$absencePrec;
594
		$absTemp->setDateFin($abs->getDateFinAbsence());
595
		$nouveau=false;
596
		//test si  l'absence suivante est vide
597
		if($absenceSuiv==-1)
598
		{
599
 
600
		    $resTemp=$absTemp->mettreAJourAbsence();
601
 
602
		    if($resTemp!=1)
603
		    {
604
			$res=10;
605
		    }
606
		}else//si absence suivante existe
607
		{
608
		    //test si absence suivante contigue
609
		    if(isDateContigues($timeFin,$dateSuiv)==1)
610
		    {
611
			$absTemp->setDateFin($absenceSuiv->getDateFinAbsence());
612
			//supression de l'absence suivante
613
			$res=&Absence::supprimerAbsence($absenceSuiv->getIdUserAbsence(),$absenceSuiv->getDateDebAbsence());
614
			if($res!=1)
615
			{
616
			    $res=11;
617
			}
618
			//mise a jour de l'absence
619
 
620
			$resTemp=$absTemp->enregistrerNewAbsence();
621
 
622
			if($resTemp!=1)
623
			{
624
			    $res=12;
625
			}
626
 
627
		    }else
628
		    {
629
			//absence suivante non contigue
630
			//mise a jour de l'absence
631
			$resTemp=$absTemp->mettreAJourAbsence();
632
 
633
			if($resTemp!=1)
634
			{
635
			    $res=13;
636
			}
637
		    }
638
		}
639
 
640
 
641
	    }else
642
	    {
643
		//si l'absence precedente n'est pas contigue
644
		if($absenceSuiv!=-1)//verification si absence suivante non vide
645
		{
646
		    if(isDateContigues($timeFin,$dateSuiv)==1)
647
		    {
648
			//si contigue
649
			$absTemp=$absenceSuiv;
650
			$absTemp->setDateDeb($abs->getDateDebAbsence());
651
			//enregistrement de l'absence
652
			$w=$absTemp->supprimerAbsence($absTemp->getIdUserAbsence(),$absenceSuiv->getDateDebAbsence());
653
			$resTemp=$absTemp->enregistrerNewAbsence();
654
			if($resTemp!=1 or $w!=1)
655
			{
656
			    $res=14;
657
			}
658
			$nouveau=false;
659
		    }
660
		}
661
 
662
	    }
663
	}
664
	if($nouveau==true)
665
	{
666
	    $res=$abs->enregistrerNewAbsence();
667
	    if($res!=1)
668
	    {
669
		$res=15;
670
	    }
671
	}
672
 
673
 
674
	return array($res,$user);
675
    }
676
}
677
/**
678
*fonction qui verifie si deu dates sont contigues
679
*@param $dateVerif : timestamp unix
680
*@param $date : timestamp unix
681
*/
682
function isDateContigues($dateVerif,$date)
683
{
684
    if ($dateVerif<$date)
685
    {
686
	$dateDeb=$date;
687
	$dateFin=$dateVerif;
688
    }else{
689
	$dateDeb=$dateVerif;
690
	$dateFin=$date;
691
    }
692
    $r=-1;
693
 
694
 
695
    //verification si la date de debut est en semaine
696
    //ou lundi
697
    $jour=date('w',$dateDeb);
698
    //si c un lundi
699
    if ($jour==1)
700
    {
701
	if(($dateDeb-(3600*24*3))==$dateFin)
702
	{
703
	    $r=1;
704
	}
705
    }else//si c un jour de semaine
706
    {
707
	if(($dateDeb-(3600*24))==$dateFin)
708
	{
709
	    $r=1;
710
	}
711
    }
712
    return $r;
713
 
714
}
715
 
716
/**
717
*fonction traitant le menu travail
718
*/
5 jpm 719
function traiterAdminTravail($url, $semaine, $annee, $utilisateur)
2 jpm 720
{
5 jpm 721
	$text = creerEntetePage(GESTION_GESTIONDEPOSTE_L);
722
	$form = afficherTableauJour($url, $utilisateur, $semaine, $annee);
2 jpm 723
 
5 jpm 724
	if (isset($_POST['champ_valider_travail']) and $_POST['champ_valider_travail'] != 'dejaValider' and $form->validate()) {
725
		$form->process(traiterSemaine($utilisateur));
726
		$t = afficherTableauJour($url, $utilisateur, $semaine, $annee);
727
		$text .= $t->ToHTml();
728
	} else {
729
		$text .= $form->ToHtml();
730
	}
731
	return $text;
2 jpm 732
}
733
 
734
?>