Ejemplo n.º 1
0
/**
 * Récupère les données d'un élève à afficher
 * @param objet $eleve Un élève issu de getEleves()
 * @param date $date_debut
 * @param date $date_fin
 * @param objet $justifie_col Collection Propel avec les justifications
 * @param bool $donneeBrut
 * @return array Une ligne du tableau à afficher
 * @see getEleves()
 */
function traiteEleve($eleve,$date_debut, $date_fin, $justifie_col, $donneeBrut, $erreur=FALSE) {
  $eleve_id = $eleve->getId();
  $donnees= array();
  $donnees[$eleve_id] = array();
  
  $propel_eleve = EleveQuery::create()->filterById($eleve_id)->findOne();
  $eleveNbAbs['demi_journees'] = $propel_eleve->getDemiJourneesAbsence($date_debut, $date_fin)->count();
  $eleveNbAbs['retards'] = $propel_eleve->getRetards($date_debut, $date_fin)->count();
	
	if ($eleveNbAbs['demi_journees'] > 0 || $eleveNbAbs['retards'] > 0 ) {
	  $eleveNbAbs['non_justifiees'] = $propel_eleve->getDemiJourneesNonJustifieesAbsence($date_debut, $date_fin)->count();
	  $eleveNbAbs['justifiees'] = $eleveNbAbs['demi_journees'] - $eleveNbAbs['non_justifiees']; 
	  $donnees[$eleve_id]['nom'] = $eleve->getNom();
	  $donnees[$eleve_id]['prenom'] = $eleve->getPrenom();
	  $donnees[$eleve_id]['classe'] = $eleve->getClasse();
	  $donnees[$eleve_id]['classe'] = $eleve->getClasseNom();        
	  $donnees[$eleve_id]['nbre_lignes_total'] = 0;
	  $donnees[$eleve_id]['demi_journees'] = $eleveNbAbs['demi_journees'];
	  $donnees[$eleve_id]['justifiees'] = $eleveNbAbs['justifiees'];
	  $donnees[$eleve_id]['non_justifiees'] = $eleveNbAbs['non_justifiees'];
	  $donnees[$eleve_id]['retards'] = $eleveNbAbs['retards'];
	  //Récupérer le décompte des traitements pour chaque élève	  
	  $totalDemi=0;
	foreach ($justifie_col as $justifie) {
	  // Décompte en données brutes 
		if ($donneeBrut == TRUE) {
		  $propel_traitEleve = AbsenceEleveTraitementQuery::create()->filterByAJustificationId($justifie->getid())
			->useJTraitementSaisieEleveQuery()
			  ->useAbsenceEleveSaisieQuery()
				->filterByEleveId($eleve_id)
				->filterByPlageTemps($date_debut,$date_fin )
			  ->endUse()
			->endUse() ;
		  $traiteEleve_col = $propel_traitEleve;
		  $donnees[$eleve_id]['traitement'][] = $traiteEleve_col->distinct()->count();
		} else {
		  // Décompte en 1/2 journées
                    $abs_saisie_col_filtrees = $eleve->getAbsenceEleveSaisiesDecompteDemiJournees($date_debut, $date_fin);
                    $justif_collection = new PropelCollection();
                    foreach ($abs_saisie_col_filtrees as $saisie) {
                        foreach ($saisie->getAbsenceEleveTraitements() as $traitement) {
                            if ($traitement->getAJustificationId() == $justifie->getid()) {
                                $justif_collection->add($saisie);
                            }
                        }
                    }

                    require_once(dirname(__FILE__)."/../orm//helpers/AbsencesEleveSaisieHelper.php");
                    $dm = AbsencesEleveSaisieHelper::compte_demi_journee($justif_collection, $date_debut, $date_fin);
                    $donnees[$eleve_id]['traitement'][] = $dm->count();
                    $totalDemi += $dm->count();
		}
	  }
	  $donnees[$eleve_id]['totalDemi']=$totalDemi;
	}
	unset ($eleveNbAbs, $traiteEleve_col, $propel_eleve, $propel_traitEleveDemi, $traiteEleveDemi, $traiteEleveDemi_col, $propel_traitEleve);
	if ($erreur && isset ($donnees[$eleve_id]['justifiees']) && ($donnees[$eleve_id]['justifiees']==$donnees[$eleve_id]['totalDemi'])) {
	  $donnees[$eleve_id] = array();
	}
	
	return $donnees;
}
Ejemplo n.º 2
0
   /**
   * Merge une notification avec son modele
   *
   * @param AbsenceEleveNotification $notification
   * @param String $modele chemin du modele tbs
   * @return clsTinyButStrong $TBS deroulante des types d'absences
   */
  public static function MergeNotification($notification, $modele){
    //on charge le modele et on merge les données de l'établissement
    $TBS=self::MergeInfosEtab($modele);
    $TBS->MergeField('notif_id',$notification->getId());
    //on récupère la liste des noms d'eleves
    $eleve_col = new PropelCollection();
    if ($notification->getAbsenceEleveTraitement() != null) {
	foreach ($notification->getAbsenceEleveTraitement()->getAbsenceEleveSaisies() as $saisie) {
	    $eleve_col->add($saisie->getEleve());
	}
    }
    //merge des saisies pour modèles du type 1.5.3
    $TBS->MergeBlock('el_col',$eleve_col);

    foreach ($eleve_col as $eleve) {
            $saisies_string_col = new PropelCollection();
            $saisies_col = AbsenceEleveSaisieQuery::create()->filterByEleveId($eleve->getId())
                    ->useJTraitementSaisieEleveQuery()
                    ->filterByATraitementId($notification->getAbsenceEleveTraitement()->getId())->endUse()
                    ->orderBy("DebutAbs", Criteria::ASC)
                    ->find();
            foreach ($saisies_col as $saisie) {

                $str = $saisie->getDateDescription();
                if($saisie->getGroupeNameAvecClasses()!=''){
                    $str.= ', cours de '.$saisie->getGroupeNameAvecClasses();
                }                
                $saisies_string_col->append($str);
                
            }
            $TBS->MergeBlock('saisies_string_eleve_id_'.$eleve->getId(), $saisies_string_col);
    }

    $heure_demi_journee = 11;
    $minute_demi_journee = 50;
    if (getSettingValue("abs2_heure_demi_journee") != null) {
        try {
    	$dt_demi_journee = new DateTime(getSettingValue("abs2_heure_demi_journee"));
    	$heure_demi_journee = $dt_demi_journee->format('H');
    	$minute_demi_journee = $dt_demi_journee->format('i');
        } catch (Exception $x) {
        }
    }
    $temps_demi_journee = $heure_demi_journee.$minute_demi_journee;

    foreach($eleve_col as $eleve) {
	$demi_journee_string_col = new PropelCollection();array ();
        $abs_col = AbsenceEleveSaisieQuery::create()->filterByEleve($eleve)
		->useJTraitementSaisieEleveQuery()
		->filterByATraitementId($notification->getAbsenceEleveTraitement()->getId())->endUse()
		->orderBy("DebutAbs", Criteria::ASC)
		->find();
	require_once("helpers/AbsencesEleveSaisieHelper.php");
	$demi_j = AbsencesEleveSaisieHelper::compte_demi_journee($abs_col);
	foreach($demi_j as $date) {
	    $str = 'Le ';
	    $str .= (strftime("%a %d/%m/%Y", $date->format('U')));
	    if ($date->format('H') < 12) {
		$next_date = $demi_j->getNext();
		if ($next_date != null && $next_date->format('Y-m-d') == $date->format('Y-m-d')) {
		    $str .= ' la journée';
		} else {
		    $str .= ' le matin';
		    //on recule le pointeur car on l'a avancé avec $demi_j->getNext()
		    $demi_j->getPrevious();
		}
	    } else {
		$str .= ' l\'après midi';
	    }
	    $demi_journee_string_col->append($str);
	}
	//var_dump($demi_journee_string_col);die;
	//if (count($demi_journee_string_col) == 0) die;
	$TBS->MergeBlock('demi_j_string_eleve_id_'.$eleve->getId(), $demi_journee_string_col);
    }

    if ($notification->getTypeNotification() == AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_COURRIER) {
	//on va mettre les champs dans des variables simple
	//on fait un petit traitement pour bien formatter ça si on a un ou deux responsables, avec le même nom de famille ou pas.
	if ($notification->getAdresse() != null && $notification->getResponsableEleves()->count() == 1) {
	    $responsable = $notification->getResponsableEleves()->getFirst();
	    $destinataire = $responsable->getCivilite().' '.strtoupper($responsable->getNom()).' '.strtoupper($responsable->getPrenom());
	} elseif ($notification->getAdresse() != null&& $notification->getResponsableEleves()->count() == 2) {
	    $responsable1 = $notification->getResponsableEleves()->getFirst();
	    $responsable2 = $notification->getResponsableEleves()->getNext();
	    if (strtoupper($responsable1->getNom()) == strtoupper($responsable2->getNom())) {
		$destinataire = $responsable1->getCivilite().' et '.$responsable2->getCivilite().' '.strtoupper($responsable1->getNom());
	    } else {
		$destinataire = $responsable1->getCivilite().' '.strtoupper($responsable1->getNom());
		$destinataire .= ' et '.$responsable2->getCivilite().' '.strtoupper($responsable2->getNom());
	    }
	} else {
	    $destinataire = '';
	}
	$TBS->MergeField('destinataire',$destinataire);

	$adr = $notification->getAdresse();
	if ($adr == null) {
	    $adr = new Adresse();
	}
	$TBS->MergeField('adr',$adr);	

    } else if ($notification->getTypeNotification() == AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_EMAIL) {
	$destinataire = '';
	foreach ($notification->getResponsableEleves() as $responsable) {
	    $destinataire .= $responsable->getCivilite().' '.strtoupper($responsable->getNom()).' '.strtoupper($responsable->getPrenom()).' ';
	}
	$TBS->MergeField('destinataire',$destinataire);
    } else if ($notification->getTypeNotification() == AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_SMS) {
	$destinataire = '';
	foreach ($notification->getResponsableEleves() as $responsable) {
	    $destinataire .= $responsable->getCivilite().' '.strtoupper($responsable->getNom()).' '.strtoupper($responsable->getPrenom()).' ';
	}
	$TBS->MergeField('destinataire',$destinataire);
    }

    // $TBS->Show(TBS_NOTHING);
    return $TBS;
  }
Ejemplo n.º 3
0
	public function testCompte_demi_journee()
	{
		$florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu');
		$saisie_col = AbsenceEleveSaisieQuery::create()->orderByDebutAbs(Criteria::DESC);
        try {
            AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col);
            $this->fail('Une exception doit être soulevée lors de cette sauvegarde');
        } catch (Exception $e) {
            $this->assertTrue(true);
        }
        
        $this->assertTrue(AbsencesEleveSaisieHelper::compte_demi_journee(new PropelCollection())->isEmpty());
        
        $saisie_col = new PropelCollection();
        
		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-01 08:00:00');
        $saisie->setFinAbs('2010-11-01 13:00:00');
        $saisie_col->append($saisie);
		saveSetting('abs2_heure_demi_journee','11:50');
        $this->assertEquals(1,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());
        
		saveSetting('abs2_heure_demi_journee','11:10');
        $this->assertEquals(2,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());
		saveSetting('abs2_heure_demi_journee','11:50');
        
        $saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-01 09:00:00');
        $saisie->setFinAbs('2010-11-01 17:00:00');
        $saisie_col->append($saisie);
        $this->assertEquals(2,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());

		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-01 09:00:00');
        $saisie->setFinAbs('2010-11-01 17:00:00');
        $saisie_col->append($saisie);
        $this->assertEquals(2,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());

		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-02 10:00:00');
        $saisie->setFinAbs('2010-11-02 10:50:00');
        $saisie_col->append($saisie);
        $this->assertEquals(3,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());

		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-02 11:00:00');
        $saisie->setFinAbs('2010-11-02 13:30:00');
        $saisie_col->append($saisie);
        $this->assertEquals(3,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());
        
		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-02 11:00:00');
        $saisie->setFinAbs('2010-11-02 17:30:00');
        $saisie_col->append($saisie);
        $this->assertEquals(4,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());

		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-02 11:00:00');
        $saisie->setFinAbs('2010-11-03 10:30:00');
        $saisie_col->append($saisie);
        $this->assertEquals(5,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());

		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-02 11:00:00');
        $saisie->setFinAbs('2010-11-03 17:30:00');//c'est un mercredi am donc on le compte pas, le total resta à 5
        $saisie_col->append($saisie);
        $this->assertEquals(5,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());
        
		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-03 16:00:00');
        $saisie->setFinAbs('2010-11-03 17:30:00');
        $saisie_col->append($saisie);
        $this->assertEquals(5,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());
        
		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-03 16:00:00');
        $saisie->setFinAbs('2010-11-04 02:00:00');
        $saisie_col->append($saisie);
        $this->assertEquals(5,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());
        
		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-03 16:00:00');
        $saisie->setFinAbs('2010-11-04 09:00:00');
        $saisie_col->append($saisie);
        $this->assertEquals(6,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());
        
		$saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-04 15:00:00');
        $saisie->setFinAbs('2010-11-04 16:00:00');
        $saisie_col->append($saisie);
        $this->assertEquals(7,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());
        
        $saisie_col = new PropelCollection();
        $saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-05 14:00:00');
        $saisie->setFinAbs('2010-11-05 15:00:00');
        $saisie_col->append($saisie);
            saveSetting('abs2_heure_demi_journee','12:50');
        $this->assertEquals('12:00',AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->getFirst()->format('H:i'));
            saveSetting('abs2_heure_demi_journee','11:50'); 

		$florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu');
		$lebesgue_prof = UtilisateurProfessionnelQuery::create()->findOneByLogin('Lebesgue');
        $saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-10-19 08:00:00');
        $saisie->setFinAbs('2010-10-19 16:30:00');
        $saisie->setEleve($florence_eleve);
        $saisie->setUtilisateurProfessionnel($lebesgue_prof);
        $saisie->save();
        $saisie_col = new PropelCollection();
        $saisie_col->append($saisie);
        $this->assertEquals(2,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count());

        //on va tester les effets de borne d'intervalle pour la bascule de midi
        saveSetting('abs2_heure_demi_journee','11:55');
        $saisie_col = new PropelCollection();
        $saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-05 11:55:00');//cette saisie va compter pour une après midi
        $saisie->setFinAbs('2010-11-05 12:25:00');
        $saisie_col->append($saisie);
        $this->assertEquals('12:00',AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->getFirst()->format('H:i'));
        $saisie_col = new PropelCollection();
        $saisie = new AbsenceEleveSaisie();
        $saisie->setDebutAbs('2010-11-05 11:50:00');
        $saisie->setFinAbs('2010-11-05 12:25:00');
        $saisie_col->append($saisie);
        $this->assertEquals('00:00',AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->getFirst()->format('H:i'));
	}
Ejemplo n.º 4
0
	
	foreach ($toutesSaisies as $saisie) {
		$str = $saisie->getDateDescription();
		if($saisie->getGroupeNameAvecClasses()!=''){
			$str.= ', cours de '.$saisie->getGroupeNameAvecClasses();
		}   
		$tableSaisie[] = $str;
		$notification['saisies']->add($saisie);
	}
	$notification['saisies_eleve'] = $tableSaisie;
	
	
	$demi_journee_string_col = new PropelCollection();array ();
	$abs_col = $notification['saisies'];
	require_once("helpers/AbsencesEleveSaisieHelper.php");
	$demi_j = AbsencesEleveSaisieHelper::compte_demi_journee($abs_col);
	
	foreach($demi_j as $date) {
		$str = 'Le ';
		$str .= (strftime("%a %d/%m/%Y", $date->format('U')));
		if ($date->format('H') < 12) {
		$next_date = $demi_j->getNext();
		if ($next_date != null && $next_date->format('Y-m-d') == $date->format('Y-m-d')) {
			$str .= ' la journée';
		} else {
			$str .= ' le matin';
			//on recule le pointeur car on l'a avancé avec $demi_j->getNext()
			$demi_j->getPrevious();
		}
		} else {
		$str .= ' l\'après midi';
Ejemplo n.º 5
0
  	/**
	 *
	 * Retourne une collection contenant sous forme de DateTime les demi journees d'absence non justifiees
	 * Un DateTime le 23/05/2010 à 00:00 signifie que l'eleve a ete saisie absent le 23/05/2010 au matin
	 * Pour l'apres midi la date est 23/05/2010 à 12:30
	 *
	 * @param      DateTime $date_debut
	 * @param      DateTime $date_fin
	 *
	 * @return PropelCollection DateTime[]
	 */
	public function getDemiJourneesNonJustifieesAbsence($date_debut = null, $date_fin = null) {
	    $abs_saisie_col_filtrees = $this->getAbsenceEleveSaisiesDecompteDemiJournees($date_debut, $date_fin, true);

	    if ($date_fin != null) {
		$date_fin_iteration = clone $date_fin;
	    } else {
		$date_fin_iteration = new DateTime('now');
		$date_fin_iteration->setTime(23,59);
	    }
            if ($this->getDateSortie() != null && $this->getDateSortie('U') < $date_fin_iteration->format('U')) {
                $date_fin_iteration = $this->getDateSortie(null);
				$date_fin_iteration->modify('-1 minute');
            }

	    require_once(dirname(__FILE__)."/../../../helpers/AbsencesEleveSaisieHelper.php");
	    return AbsencesEleveSaisieHelper::compte_demi_journee($abs_saisie_col_filtrees, $date_debut, $date_fin_iteration);
	}