New file |
0,0 → 1,429 |
<?php |
class GttCtrlActionGestion extends aControlleurAction { |
|
public function __construct(Registre $Registre) |
{ |
$Registre->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 '<pre>'.print_r($Month, true).'</pre>'; |
$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] = ''; |
} |
|
//+-------------------------------------------------------------------------------------------------+ |
// 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_tps_w_vide; |
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] = $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 '<pre>ici '.print_r($aso_gestion['ab'], true).'la</pre>'; |
$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)) { |
// Une fois des données saisie dans un jour, on ne supprime pas la ligne mais |
// on met la durée 0 |
$TP->setDuree(0); |
$TP->modifier(); |
} 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); |
|
// Ajout ou Mise à jour des durées d'absences pour congés payés |
$cp_h_modif = 0; |
$hs_h_modif = 0; |
if (isset($_POST['ab'])) { |
//echo '<pre>'.print_r($_POST['ab'], true).'</pre>'; |
foreach($_POST['ab'] as $ab_id => $tab_num_j) { |
// 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); |
|
foreach($tab_num_j as $num_j => $ab_duree) { |
// 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 $A) { |
if ($A->getIdDateAbsence() == $aso_semaine[$num_j]['mysql']) { |
if ($A->getIdAbsenceMotif() == $ab_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)); |
} |
} |
} |
} |
} |
} |
} |
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); |
} |
} |
} |
} |
} |
|
// Gestion de la mise à jour des heures sup |
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)) { |
$heure_sup_pre = ($j['tdt'] - ($j['pre_a'] + $j['pre'])) + $j['pre_a']; |
$heure_sup_act = ($j['tdt'] - ($j['act_a'] + $j['act'])) + $j['act_a']; |
$heure_sup_dif = $heure_sup_act - $heure_sup_pre ; |
if ($j['mod'] == false) {// Première fois que l'on modifie le jour |
if ($heure_sup_act > 0) { |
$Utilisateur->diminuerQuotaHeuresSup($heure_sup_act); |
} |
if ($heure_sup_act < 0) { |
$Utilisateur->augmenterQuotaHeuresSup($heure_sup_act); |
} |
} else {// Les heures sup ont déjà été comptabilisées |
if ($heure_sup_dif > 0) { |
$Utilisateur->diminuerQuotaHeuresSup($heure_sup_dif); |
} |
if ($heure_sup_dif < 0) { |
$Utilisateur->augmenterQuotaHeuresSup($heure_sup_dif); |
} |
} |
} |
} |
$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__'); |
} |
} |
?> |