<?php
namespace App\Controller;
use App\Entity\Operateur;
use App\Entity\Pay;
use App\Entity\Bilan;
use App\Entity\User;
use App\Entity\PhotoRegulateur;
use App\Entity\Regulateur;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Service\ManageHome;
use App\Service\ManageConge;
use App\Entity\DemandeConge;
class HomeController extends AbstractController
{
public function __construct(EntityManagerInterface $em, ManageHome $manageHome,ManageConge $manageConge, TranslatorInterface $translator)
{
$this->em = $em;
$this->manageHome = $manageHome;
$this->manageConge = $manageConge;
$this->translator = $translator;
}
/**
* @Route("/accueil", name="home_page")
*/
public function index(Request $request){
$user_logged = $this->getUser();
if(empty($user_logged) || empty($user_logged->getId())) {
return $this->redirectToRoute('app_login');
}
$ListeNbrHome = $this->manageHome->getNbrTotalDuJour($user_logged);
$ListeReunions = $this->manageHome->getListeReunionDuJour($user_logged);
$ListePersonnesEnConge = $this->manageHome->getListePersonneEnConge();
$ListePersonnesNonDispo = $this->manageHome->getListePersonnesNonDispo();
$ListeAnnifs = $this->manageHome->getListeAnnifDuJour();
$result_bilan = array();
$date = new \DateTime();
$day = $date->format('d');
$month = $date->format('Y-m');
$query4 = $this->em->getRepository(User::class)->createQueryBuilder('u')
->select('u')
->where('u.enabled =:enabled ')
->setParameter('enabled', 1);
$users = $query4->getQuery()->getResult();
foreach($users as $user ){
$nbrJpourPlus = 0;
$nbrJpourMoin = 0;
$totalJ = 0;
$cumulheures = 0;
for ($i = 1; $i < intval($day); $i++) {
$dateJ = new \DateTime($month.'-'.$i);
$date = $dateJ->format('Y-m-d');
$is_ferier = $this->manageConge->checkJourFerier($date);
$type= "start";
$result = $this->manageConge->getArrayHeure($type, $date);
$is_travaille = false;
$enconge = array();
if($result['isParQuinzaine']) { // Journée par quinzaine
$is_travaille = $this->manageConge->checkDayParQuanzineTravaillle($date);
}
if(!$is_ferier && $result['status_journey'] != "S03" && !$is_travaille){
$query3 = $this->em->getRepository(demandeConge::class)->createQueryBuilder('d');
$query3->select('d')
->where("(DATE_FORMAT(d.dateDebut,'%Y-%m-%d') <=:date and DATE_FORMAT(d.dateFin,'%Y-%m-%d') >=:date )")
->orWhere("(DATE_FORMAT(d.dateDebut,'%Y-%m-%d') >:date and DATE_FORMAT(d.dateDebut,'%Y-%m-%d') <:date and DATE_FORMAT(d.dateFin,'%Y-%m-%d') >=:date )")
->orWhere("(DATE_FORMAT(d.dateDebut,'%Y-%m-%d') <:date and DATE_FORMAT(d.dateFin,'%Y-%m-%d') >:date and DATE_FORMAT(d.dateFin,'%Y-%m-%d') <=:date )")
->orWhere("(DATE_FORMAT(d.dateDebut,'%Y-%m-%d') >=:date and DATE_FORMAT(d.dateFin,'%Y-%m-%d') <=:date )")
->andWhere('d.statut IN (:statuts)')
->setParameters(array('date' => $date, 'statuts' => ['S03','S05']));
$demandeConges = $query3->getQuery()->getResult();
//Get users on leave
foreach($demandeConges as $conge){
array_push($enconge, $conge->getUserConge()->getId());
}
if(!(in_array($user->getId(), $enconge))){
$totalJ = $totalJ + 1 ;
$testBilan = $this->em->getRepository(Bilan::class)->createQueryBuilder('b')
->leftJoin('b.User','u');
$testBilan->select('b')
->where("(DATE_FORMAT(b.datePlanif,'%Y-%m-%d')) =:date")
->andWhere('u.id =:idUser')
->andWhere('b.validation =:validation')
->setParameters(array('date' => $date, 'idUser' => $user->getId(), 'validation' => 1 ));
$testBilan = $testBilan->getQuery()->getResult();
if(sizeof($testBilan) == 0 ){
$nbrJpourMoin = $nbrJpourMoin + 1;
}else{
$nbrJpourPlus = $nbrJpourPlus + 1;
foreach($testBilan as $bilan ){
$cumulheures = $cumulheures + intval($bilan->getDuree());
}
}
}
}
}
if ($totalJ > 0) {
$tauxJ = ($nbrJpourPlus / $totalJ) * 100;
} else {
$tauxJ = 0;
}
$totalheures = (8.5 * $totalJ);
if ($totalheures > 0) {
$tauxH = ($cumulheures / $totalheures) * 100;
} else {
$tauxH = 0;
}
$tmp_bilan = array(
'user' => $user,
'nbrJPlus'=> $nbrJpourPlus,
'nbrJMoin'=> $nbrJpourMoin,
'tauxJ'=> number_format($tauxJ, 2, ',', ' ' ),
'tauxH'=> number_format($tauxH, 2, ',', ' ' )
);
array_push($result_bilan, $tmp_bilan);
}
return $this->render('home/index.html.twig',[
'current_menu'=>'accueil',
'ListeNbrHome'=> $ListeNbrHome,
'ListeReunions'=>$ListeReunions,
'ListePersonnesEnConge'=>$ListePersonnesEnConge,
'ListePersonnesNonDispo'=>$ListePersonnesNonDispo,
'ListeAnnifs'=>$ListeAnnifs,
'StatBilan'=>$result_bilan
]);
}
private function searchElementId($element, $arraySearch){
foreach($arraySearch as $key =>$val){
if($val['id'] == $element){
return $key;
}
}
return null;
}
private function searchdate($element, $arraySearch){
foreach($arraySearch as $key =>$val){
if($val['date'] == $element){
return $key;
}
}
return null;
}
} // end HomeController