ajouterEspace('Gestion', 'gestion'); $Registre->ajouterEspace('ZoneCalendrier', 'zone_calendrier'); $Registre->ajouterSquelette('zone_calendrier', 'calendrier_mini'); } public function executer() { $aso_gestion = array(); $this->getRegistre()->setTitre('Gérer son temps'); //+-------------------------------------------------------------------------------------------------+ // GESTION DES CALENDRIERS //+-------------------------------------------------------------------------------------------------+ // Initialisation des variables pour le calendrier if (!isset($_GET['annee'])) { $_GET['annee'] = date('Y'); } if (!isset($_GET['mois'])) { $_GET['mois'] = date('m'); } if (!isset($_GET['semaine'])) { $_GET['semaine'] = date('W'); } if (!isset($_GET['jour'])) { $_GET['jour'] = date('d'); } // Instanciation de la classe Calendrier France $Calendrier = new Calendrier($_GET['jour'], $_GET['semaine'], $_GET['mois'], $_GET['annee']); $tab_jours_feries = $Calendrier->getListeFeries(); // Create an array of days which are "selected" // Used for Week::build() below $CalendrierJourCourrant = new Calendar_Week(date('Y'), date('m'), date('d')); $aso_gestion['jc']['jour'] = $CalendrierJourCourrant->thisDay(); $aso_gestion['jc']['semaine'] = $CalendrierJourCourrant->thisWeek('n_in_year'); $aso_gestion['jc']['mois'] = $CalendrierJourCourrant->thisMonth(); $aso_gestion['jc']['mois_nom'] = $Calendrier->getNomMois($CalendrierJourCourrant->thisMonth()); $aso_gestion['jc']['annee'] = $CalendrierJourCourrant->thisYear(); $aso_gestion['jc_url'] = 'index.php?action='.GTT_ACTION_GESTION.'&annee='.$aso_gestion['jc']['annee'].'&mois='.$aso_gestion['jc']['mois'].'&semaine='.$aso_gestion['jc']['semaine'].'&jour='.$aso_gestion['jc']['jour']; $CalendrierJourCourrant->build(); $CalendrierSemaineCourrante = $CalendrierJourCourrant->thisWeek('object'); $CalendrierSemaineCourrante->build(); $tab_jours = $CalendrierSemaineCourrante->fetchAll(); $aso_gestion['sjc_1']['jour'] = $tab_jours[1]->thisDay(); $aso_gestion['sjc_1']['mois'] = $Calendrier->getNomMois($tab_jours[1]->thisMonth()); $aso_gestion['sjc_1']['annee'] = $tab_jours[1]->thisYear(); $aso_gestion['sjc_7']['jour'] = $tab_jours[7]->thisDay(); $aso_gestion['sjc_7']['mois'] = $Calendrier->getNomMois($tab_jours[7]->thisMonth()); $aso_gestion['sjc_7']['annee'] = $tab_jours[7]->thisYear(); $aso_gestion['selectedDays'] = array ($CalendrierJourCourrant); // Instruct month to build Week objects // Construction de l'objet mois $Month = new Calendar_Month_Weeks($_GET['annee'], $_GET['mois']); $Month->build(); while ($Week = $Month->fetch()) { $Week->build($aso_gestion['selectedDays']); //echo '
'.print_r($Month, true).''; $tab_semaine_jours = $Week->fetchAll(); foreach ($tab_semaine_jours as $num => $Day) { $element = array(); $element['annee'] = $Day->thisYear(); $element['mois'] = $Day->thisMonth(); $element['jour'] = $Day->thisDay(); $element['jour_nom'] = $Calendrier->getNomJours($num); $element['url'] = 'index.php?action='.GTT_ACTION_GESTION.'&annee='.$Day->thisYear().'&mois='.$Day->thisMonth().'&jour='.$Day->thisDay(); // Check to see if day is selected if ($Day->isSelected()) { $element['class'] = 'jour_courrant'; } else if ($Day->isEmpty()) { $element['class'] = 'jour_vide'; } else { $element['class'] = 'jour'; } foreach ($tab_jours_feries as $jour_ferie) { if ($Day->thisDay(true) == $jour_ferie) { $element['class'] = 'jour_ferie'; } } $aso_gestion['elements'][$Week->thisWeek('n_in_year')][$num] = $element; } } // Construction de l'url pour les mois précédent/suivant $PMonth = $Month->prevMonth('object'); $aso_gestion['url_mois_precedent'] = 'index.php?action='.GTT_ACTION_GESTION.'&annee='.$PMonth->thisYear().'&mois='.$PMonth->thisMonth().'&jour='.$PMonth->thisDay(); $NMonth = $Month->nextMonth('object'); $aso_gestion['url_mois_suivant'] = 'index.php?action='.GTT_ACTION_GESTION.'&annee='.$NMonth->thisYear().'&mois='.$NMonth->thisMonth().'&jour='.$NMonth->thisDay(); $aso_gestion['mois']['mois'] = $Calendrier->getNomMois($Month->thisMonth()); $aso_gestion['mois']['annee'] = $Month->thisYear(); // Construction de l'url pour les semaines précédente/suivante $Week = new Calendar_Week($_GET['annee'], $_GET['mois'], $_GET['jour']); $aso_gestion['s'] = $Week->thisWeek('n_in_year'); $PWeek = $Week->prevWeek('object'); $aso_gestion['url_semaine_precedente'] = 'index.php?action='.GTT_ACTION_GESTION.'&annee='.$PWeek->thisYear().'&mois='.$PWeek->thisMonth().'&jour='.$PWeek->thisDay(); $url_sc_param_date = '&annee='.$Week->thisYear().'&mois='.$Week->thisMonth().'&jour='.$Week->thisDay(); $aso_gestion['url_semaine_courante'] = 'index.php?action='.GTT_ACTION_GESTION.$url_sc_param_date; $NWeek = $Week->nextWeek('object'); $aso_gestion['url_semaine_suivante'] = 'index.php?action='.GTT_ACTION_GESTION.'&annee='.$NWeek->thisYear().'&mois='.$NWeek->thisMonth().'&jour='.$NWeek->thisDay(); $Week->build(); $aso_jours = array(); foreach($Week->fetchAll() as $num => $j) { $aso_gestion['sj_'.$num]['jour'] = $j->thisDay(); $aso_gestion['sj_'.$num]['mois'] = $Calendrier->getNomMois($j->thisMonth()); $aso_gestion['sj_'.$num]['annee'] = $j->thisYear(); $aso_gestion['sj_'.$num]['mysql'] = $aso_gestion['sj_'.$num]['annee'].'-'.sprintf("%02s", $j->thisMonth()).'-'.sprintf("%02s", $aso_gestion['sj_'.$num]['jour']); $aso_jours[$aso_gestion['sj_'.$num]['mysql']] = $num; $aso_tps_w_vide[$num] = ''; $aso_abscence_initial[$num] = array( 'duree' => '', 'duree_defaut' => $GLOBALS['_GTT_']['Utilisateur']->getTdtParNumJour($num)); } //+-------------------------------------------------------------------------------------------------+ // GESTION DES PROJETS //+-------------------------------------------------------------------------------------------------+ // Récupération des projets sur lesquels l'utilisateur travaille $UtilsateurAProjet = new UtilisateurAProjet(); $tab_uap = $UtilsateurAProjet->consulter(UtilisateurAProjet::GUAP_UTILISATEUR, $GLOBALS['_GTT_']['Utilisateur']->getIdUtilisateur()); // Si nous avons des données... $aso_gestion['bool_projets'] = false; if ($tab_uap && count($tab_uap) >= 1) { $aso_gestion['bool_projets'] = true; $tab_projet_id = array(); foreach ($tab_uap as $uap) { $tab_projet_id[] = $uap->getIdProjet(); } // Récupération du temps de travail pour un utilisateur à une date donnée $TravailProjet = new TravailProjet(); $cmd = TravailProjet::GTP_ID_UTILISATEUR_DATE_DEB_FIN; $param = array($GLOBALS['_GTT_']['Utilisateur']->getIdUtilisateur(), $aso_gestion['sj_1']['mysql'], $aso_gestion['sj_7']['mysql']); $tab_tp = $TravailProjet->consulter($cmd, $param); // Récupération des infos sur les projets de l'utilisateur $aso_gestion['totaux'] = $aso_tps_w_vide; $Projet = new Projet(); $tab_p = $Projet->consulter(Projet::GP_ID_LIST, array(implode(',', $tab_projet_id))); foreach ($tab_p as $Projet) { // Récupération de la catégorie du projet $ProjetCategorie = new ProjetCategorie(); $Categorie = current($ProjetCategorie->consulter(ProjetCategorie::GPC_ID, $Projet->getCeCategorie())); // Nous vérifions le temps de travail pour ce projet pour la semaine courrante $aso_tps_w = $aso_tps_w_vide; if (!isset($aso_gestion['categorie_totaux'][$Categorie->getLibelle()])) { $aso_gestion['categorie_totaux'][$Categorie->getLibelle()] = $aso_tps_w_vide; } if ($tab_tp) { foreach ($tab_tp as $TP) { if ($TP->getIdProjet() == $Projet->getIdProjet()) { $num = $aso_jours[$TP->getIdDateTravail()]; $aso_tps_w[$num] = $TP->getDuree(); $aso_gestion['categorie_totaux'][$Categorie->getLibelle()][$num] += $TP->getDuree(); $aso_gestion['totaux'][$num] += $TP->getDuree(); } } } // Stockage des infos nécessaire pour l'affichage $aso_gestion['preferences'][$Categorie->getLibelle()][] = array( 'id' => $Projet->getIdProjet(), 'valeur' => $Projet->getIdProjet(), 'nom' => $Projet->getNom(), 'desc' => $Projet->getDescription(), 'date' => $aso_tps_w); } } // Trie par odre alphabétique des catégories... ksort($aso_gestion['preferences']); //+-------------------------------------------------------------------------------------------------+ // GESTION DES ABSENCES //+-------------------------------------------------------------------------------------------------+ // Récupération des motifs d'absence $AbsenceMotif = new AbsenceMotif(); $cmd = AbsenceMotif::GAM_TOUS; $tab_am = $AbsenceMotif->consulter($cmd); // Récupération des absences pour un utilisateur à une date donnée $Absence = new Absence(); $cmd = Absence::GA_ID_UTILISATEUR_DATE_DEB_FIN; $param = array($GLOBALS['_GTT_']['Utilisateur']->getIdUtilisateur(), $aso_gestion['sj_1']['mysql'], $aso_gestion['sj_7']['mysql']); $tab_a = $Absence->consulter($cmd, $param); // Si nous avons des absences... $aso_gestion['ab_total'] = $aso_tps_w_vide; if ($tab_am) { foreach ($tab_am as $AM) { $aso_gestion['ab_libelle'][$AM->getIdAbsenceMotif()] = $AM->getLibelle(); $aso_gestion['ab'][$AM->getIdAbsenceMotif()] = $aso_abscence_initial; if ($tab_a) { foreach ($tab_a as $A) { if ($A->getIdAbsenceMotif() == $AM->getIdAbsenceMotif()) { $num = $aso_jours[$A->getIdDateAbsence()]; if ($A->getDuree() < 0) { $A->setDuree(0); } $aso_gestion['ab'][$AM->getIdAbsenceMotif()][$num]['duree'] = $A->getDuree(); $aso_gestion['ab_total'][$num] += $A->getDuree(); $aso_gestion['totaux'][$num] += $A->getDuree(); } } } } } // Création de l'url de réponse du formulaire $aso_gestion['url_gestion_valider'] = 'index.php?action='.GTT_ACTION_GESTION_VALIDER.$url_sc_param_date; //echo '
ici '.print_r($aso_gestion['ab'], true).'la'; $this->getRegistre()->ajouterDonnee('gestion', $aso_gestion); $this->getRegistre()->ajouterDonnee('zone_calendrier', $aso_gestion); } public function verifierValider() { } public function executerValider() { // Création du Calendrier $Calendrier = new Calendrier($_GET['jour'], null, $_GET['mois'], $_GET['annee']); // Récupération des info sur la semaine courrante $Week = new Calendar_Week($_GET['annee'], $_GET['mois'], $_GET['jour']); $Week->build(); $aso_jours = array(); $aso_semaine = array(); $jours_w_semaine = array(); foreach($Week->fetchAll() as $num => $j) { $aso_semaine[$num]['mysql'] = $j->thisYear().'-'.sprintf("%02s", $j->thisMonth()).'-'.sprintf("%02s", $j->thisDay()); $aso_jours[$aso_semaine[$num]['mysql']] = $num; // Initialisation de la variable pour la gestion des heures sup $methode = 'getTdt'.$Calendrier->getNomJoursLong($num); $jours_w_semaine[$num] = array( 'act' => 0, 'pre' => 0, 'act_a' => 0, 'pre_a' => 0, 'mod' => false, 'tdt' => $GLOBALS['_GTT_']['Utilisateur']->$methode()); // Vérification des jours fériés pour modification du temps de travail automatique if ($Calendrier->etreFerie($j->getTimestamp())) { // Nous passons automatiquement le temps de travail à 0 $jours_w_semaine[$num]['tdt'] = 0; } } // Récupération du temps de travail pour un utilisateur à une date donnée $TravailProjet = new TravailProjet(); $cmd = TravailProjet::GTP_ID_UTILISATEUR_DATE_DEB_FIN; $param = array($GLOBALS['_GTT_']['Utilisateur']->getIdUtilisateur(), $aso_semaine[1]['mysql'], $aso_semaine[7]['mysql']); $tab_tp = $TravailProjet->consulter($cmd, $param); // Création d'un utilisateur pour les mises à jour des CP et RTT $Utilisateur = new Utilisateur(); $Utilisateur->initialiser(); $Utilisateur->setIdUtilisateur($GLOBALS['_GTT_']['Utilisateur']->getIdUtilisateur()); $Utilisateur->setQuotaHeuresSupp($GLOBALS['_GTT_']['Utilisateur']->getQuotaHeuresSupp()); $Utilisateur->setCongesPayes($GLOBALS['_GTT_']['Utilisateur']->getCongesPayes()); // Ajout ou Mise à jour des durées de travail if (isset($_POST['pr'])) { foreach($_POST['pr'] as $projet_id => $jours) { foreach($jours as $jour_num => $nbr_heure) { if (isset($jours_w_semaine[$jour_num])) { $jours_w_semaine[$jour_num]['act'] += $nbr_heure; } $bool_ajouter = true; if (!empty($tab_tp)) { foreach ($tab_tp as $TP) { if ($TP->getIdDateTravail() == $aso_semaine[$jour_num]['mysql']) { if ($TP->getIdProjet() == $projet_id) { $bool_ajouter = false; $jours_w_semaine[$jour_num]['pre'] += $TP->getDuree(); $jours_w_semaine[$jour_num]['mod'] = true; if ($TP->getDuree() != $nbr_heure) { if (empty($nbr_heure)) { // Si un temps de travail est mis à 0, on le supprime. // Les heures sup sont réinitialisés ci-dessous. $TP->supprimer(); } else { $TP->setDuree($nbr_heure); $TP->modifier(); } } } } } } if ($bool_ajouter && !empty($nbr_heure)) { $TP = new TravailProjet(); $TP->setDuree((float)$nbr_heure); $TP->setIdUtilisateur($GLOBALS['_GTT_']['Utilisateur']->getIdUtilisateur()); $TP->setIdProjet($projet_id); $TP->setIdDateTravail((string)$aso_semaine[$jour_num]['mysql']); $TP->ajouter(); } } } } // Récupération des absences pour un utilisateur à une date donnée $Absence = new Absence(); $cmd = Absence::GA_ID_UTILISATEUR_DATE_DEB_FIN; $param = array($GLOBALS['_GTT_']['Utilisateur']->getIdUtilisateur(), $aso_semaine[1]['mysql'], $aso_semaine[7]['mysql']); $tab_a = $Absence->consulter($cmd, $param); //echo '
'.print_r($tab_a, true).''; // Ajout ou Mise à jour des durées d'absences pour congés payés $cp_h_modif = 0; $hs_h_modif = 0; $abscences_a_supprimer = $tab_a; //echo '
'.print_r($_POST['ab'], true).''; if (isset($_POST['ab'])) { //echo '
'.print_r($_POST['ab'], true).''; foreach($_POST['ab'] as $num_j => $tab_ab_id_duree) { if (isset($tab_ab_id_duree)) { list($ab_id, $ab_duree) = explode(':', $tab_ab_id_duree); // Création du motif d'absence pour voir si on doit diminuer les congés payés $AbsenceMotif = new AbsenceMotif(); $AbsenceMotif->consulter(AbsenceMotif::GAM_ID, $ab_id, true); // Gestion des heures sup en fonction du type d'absence if (isset($jours_w_semaine[$num_j])) { if ($AbsenceMotif->getMarkHsDiminuer()) { $jours_w_semaine[$num_j]['act_a'] += $ab_duree; } else { $jours_w_semaine[$num_j]['act'] += $ab_duree; } } $bool_ajouter = true; if (!empty($tab_a)) { foreach ($tab_a as $id => $A) { if ($A->getIdDateAbsence() == $aso_semaine[$num_j]['mysql']) { if ($A->getIdAbsenceMotif() == $ab_id) { unset($abscences_a_supprimer[$id]); $bool_ajouter = false; $jours_w_semaine[$num_j]['mod'] = true; // Gestion des heures sup en fonction du type d'absence if ($AbsenceMotif->getMarkHsDiminuer()) { $jours_w_semaine[$num_j]['pre_a'] += $A->getDuree(); } else { $jours_w_semaine[$num_j]['pre'] += $A->getDuree(); } if ($A->getDuree() != $ab_duree) { if (empty($ab_duree)) { if ($AbsenceMotif->getMarkCpDiminuer()) { $Utilisateur->augmenterCongesPayes($A->getDuree()); } // Une fois des données saisie dans un jour, on ne supprime pas la ligne mais // on met la durée 0 $A->setDuree(0); $A->modifier(); } else { $ab_duree_tmp = $A->getDuree(); $A->setDuree($ab_duree); $A->modifier(); if ($AbsenceMotif->getMarkCpDiminuer()) { $Utilisateur->augmenterCongesPayes(($ab_duree_tmp - $ab_duree)); } } } } } } } // Ajout de nouvelle abscences if ($bool_ajouter && !empty($ab_duree)) { $A = new Absence(); $A->setDuree((float)$ab_duree); $A->setIdUtilisateur($GLOBALS['_GTT_']['Utilisateur']->getIdUtilisateur()); $A->setIdAbsenceMotif($ab_id); $A->setIdDateAbsence((string)$aso_semaine[$num_j]['mysql']); $A->ajouter(); if ($AbsenceMotif->getMarkCpDiminuer()) { $Utilisateur->diminuerCongesPayes($ab_duree); } } } } } // Suppression des abscences décochées //echo '
'.print_r($abscences_a_supprimer, true).''; if (count($abscences_a_supprimer) > 0) { foreach ($abscences_a_supprimer as $A) { $num_jour_ab = $aso_jours[$A->getIdDateAbsence()]; $AbsenceMotif = new AbsenceMotif(); $AbsenceMotif->consulter(AbsenceMotif::GAM_ID, $A->getIdAbsenceMotif(), true); if ($AbsenceMotif->getMarkHsDiminuer()) { $jours_w_semaine[$num_jour_ab]['pre_a'] = $A->getDuree(); $jours_w_semaine[$num_jour_ab]['act_a'] = 0; $jours_w_semaine[$num_jour_ab]['mod'] = true; } $A->supprimer(); } } // Gestion de la mise à jour des heures sup //echo '
'.print_r($jours_w_semaine, true).''; foreach ($jours_w_semaine as $c => $j) { // Modifications existantes pour le jour courant if (($j['pre'] != 0 || $j['act'] != 0) || ($j['act_a'] != 0 || $j['pre_a'] != 0)) { if ($j['mod'] == false) {// Première fois que l'on modifie le jour if ($j['act_a'] == 0 && $j['act'] != 0) {// Journée de travail $heure_sup_act = $j['act'] - $j['tdt']; if ($heure_sup_act > 0) { $Utilisateur->augmenterQuotaHeuresSup($heure_sup_act); } if ($heure_sup_act < 0) { $Utilisateur->diminuerQuotaHeuresSup($heure_sup_act); } } else {// Journée d'abscence $Utilisateur->diminuerQuotaHeuresSup($j['act_a']); } } else {// Les heures sup ont déjà été comptabilisées, réinitialisation nécessaire // Nous restaurons les heures sup précédement ajoutées ou décomptées if ($j['pre_a'] == 0 && $j['pre'] != 0) {// Journée de travail $heure_sup_pre = $j['pre'] - $j['tdt']; if ($heure_sup_pre > 0) { $Utilisateur->diminuerQuotaHeuresSup($heure_sup_pre); } else if ($heure_sup_pre < 0) { $Utilisateur->augmenterQuotaHeuresSup($heure_sup_pre); } } else {// Journée d'abscence $Utilisateur->augmenterQuotaHeuresSup($j['pre_a']); } // Nous ajoutons ou décomptons les heures sup actuelles if ($j['act_a'] == 0 && $j['act'] != 0) {// Journée de travail $heure_sup_act = $j['act'] - $j['tdt']; if ($heure_sup_act > 0) { $Utilisateur->augmenterQuotaHeuresSup($heure_sup_act); } if ($heure_sup_act < 0) { $Utilisateur->diminuerQuotaHeuresSup($heure_sup_act); } } else {// Journée d'abscence $Utilisateur->diminuerQuotaHeuresSup($j['act_a']); } } } } $Utilisateur->modifier(); // Mise à jour de la vue Identité pour les congés payés et RTT $GttCtrlActionIdentification = new GttCtrlActionIdentification($this->getRegistre()); $GttCtrlActionIdentification->setSuivant('__defaut__'); $this->setSuivant($GttCtrlActionIdentification); // Action suivante $this->setSuivant('__defaut__'); } } ?>