<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\DealRepository;
use App\Repository\SoustraitantRepository;
use App\Repository\ContratRepository;
use App\Repository\InstallateurRepository;
use App\Repository\ObligesRepository;
use App\Repository\DepotDossierRepository;
use App\Repository\UserRepository;
use App\Repository\NotificationsRepository;
use App\Repository\EquipeRepository;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\HttpFoundation\JsonResponse;
use DateTime;
use App\Entity\Notifications;
class HomeController extends AbstractController
{
/**
* @Route("/", name="app_home")
*/
public function index(DealRepository $dealRepository, ContratRepository $contratRepository, InstallateurRepository $installateurRepository, SoustraitantRepository $soustraitantRepository, DepotDossierRepository $depotDossierRepository,
NotificationsRepository $notificationsRepository,EquipeRepository $equipeRepository,ObligesRepository $obligesRepository): Response
{
if (!$this->getUser()) {
return $this->redirectToRoute('app_login');
}
$isCompleted = "oui";
$champsinstallateurexpire=[];
$champsdealexpire=[];
$cumacaafcour=0;
$cumacEnAttente=0;
$cumacnonvalide=0;
$cumacnouveau=0;
$cumacurgent=0;
$cumacvalide=0;
$cumacpayeraaf=0;
$cumacpretdepot=0;
$equipes=[];
$dossiercontroler=[];
$obligedeal=[];
$oblige = $obligesRepository->findAll();
foreach ($obligesRepository->findAll() as $key => $value) {
$dealcal=[];
foreach ($dealRepository->findAll() as $key => $deal) {
if ($deal->getDealoblige()->getOblige()->getId() == $value->getId()) {
$dealcal[]=$deal->getDealoblige()->getOblige()->getSociete();
}
}
// $uniqueElements = array_unique($dealcal);
$lengthWithoutDuplicates = count($dealcal);
$obligedeal[]=$value->getSociete().'-'.$lengthWithoutDuplicates;
}
foreach ($equipeRepository->findBy(["role"=>"ROLE_CONTROLER"]) as $key => $value) {
$equipes[]=$value;
$dossiercal=[];
foreach ($value->getCommentairesControlles() as $key => $control) {
$dossiercal[]=$control->getDossier()->getId();
}
// if (count($dossiercal)>1) {
// dd($dossiercal);
// }
$uniqueElements = array_unique($dossiercal);
$lengthWithoutDuplicates = count($uniqueElements);
$dossiercontroler[]=$value->getPrenom().'-'.$lengthWithoutDuplicates;
}
//dd($dossiercontroler);
if ($this->isGranted('ROLE_INSTALLATEUR')){
foreach ($this->getUser()->getInstallateur()->getChampsinstallateur() as $key => $champsinstallateur) {
if ($champsinstallateur->getDurevalidite() != null and $champsinstallateur->getType() == "file" and $champsinstallateur->getDate() != null ) {
$date = $champsinstallateur->getDate(); // Date de départ
$nombreDeMois = $champsinstallateur->getDurevalidite(); // Nombre de mois à ajouter
$date->modify("+$nombreDeMois month"); // Ajoute le nombre de mois spécifié
$nouvelleDate = $date->format('Y-m-d');
$dateday = new DateTime();
$dateday = $dateday->format('Y-m-d');
if ( $dateday > $nouvelleDate ) {
// dd($nouvelleDate);
$champsinstallateurexpire[]=$champsinstallateur;
$inst=$this->getUser()->getInstallateur();
$inst->setStatus("En Attente");
foreach ($inst->getDeals() as $key => $dl) {
if ($dl->getStatus() == "Validé") {
$dl->setStatus("En Attente");
$dealRepository->add($dl, true);
}
}
$installateurRepository->add($inst, true);
}
}
}
$dossierAll=[];
$j=1;
foreach ($this->getUser()->getInstallateur()->getDeals() as $deal) {
foreach ($deal->getChampsdeal() as $key => $champsdeal) {
if ($champsdeal->getDurevalidite() != null and $champsdeal->getType() == "file" and $champsdeal->getDate() != null ) {
$date = $champsdeal->getDate(); // Date de départ
$nombreDeMois = $champsdeal->getDurevalidite(); // Nombre de mois à ajouter
$date->modify("+$nombreDeMois month"); // Ajoute le nombre de mois spécifié
$nouvelleDate = $date->format('Y-m-d');
$dateday = new DateTime();
$dateday = $dateday->format('Y-m-d');
if ( $dateday > $nouvelleDate ) {
// dd($nouvelleDate);
$champsdealexpire[]=$champsdealexpire;
$deal->setStatus("En Attente");
$dealRepository->add($deal, true);
}
}
}
foreach ($depotDossierRepository->findBy(["deal"=>$deal]) as $dls) {
foreach ($depotDossierRepository->findAll() as $value) {
if ($value->getId() == $dls->getId()) {
if ($j<10) {
$dossierAll[]=$value;
}
$j = $j + 1;
}
}
}
}
$dealAll = $dealRepository->findBy(['installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 10);
$dealAllten =$dealRepository->findBy(['installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 8);
$installateur = $installateurRepository->findOneBy(["id" => $this->getUser()->getInstallateur()->getId()]);
$dealsNew = $dealRepository->findBy(['status' => 'Nouveau', 'installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 10);
$dealsValide = $dealRepository->findBy(['status' => 'Validé', 'installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 10);
$dealsVerification = $dealRepository->findBy(['status' => "En Attente", 'installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 10);
$dealsBloquer = $dealRepository->findBy(['status' => "Bloqué", 'installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 10);
$dealscontratgenere = $dealRepository->findBy(['status' => "Contrat généré", 'installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 10);
$dealscontratsigne = $dealRepository->findBy(['status' => "Contrat Signé", 'installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 10);
if($installateur->getNom() == null || $installateur->getPrenom() == null || $installateur->getSociete() == null ||
$installateur->getPhone() == null || $installateur->getEmail() == null || $installateur->getAdresse() == null ){
$isCompleted = "non";
}
foreach($installateur->getChampsinstallateur() as $key => $value){
if($value->getType() !="file" && $value->getValeur() == null){
$isCompleted = "non";
}
if($value->getType() =="file" && $value->getStatus() == "Non Transmis"){
$isCompleted = "non";
}
}
if(count($installateur->getOperationStandards()) < 1){
$isCompleted = "non";
}
$expirechampsinstallateur=0;
$btexpirechampsinstallateur=0;
foreach ($installateur->getChampsinstallateur() as $key => $champsinstallateur) {
if ($champsinstallateur->getStatus()=="Validé") {
if ($champsinstallateur->getDurevalidite() > 0) {
$dateday = new DateTime();
$dateday15 = new DateTime("+15 days");
if ($dateday > $champsinstallateur->getDate()) {
$expirechampsinstallateur= $expirechampsinstallateur + 1;
}else{
if ($dateday15 > $champsinstallateur->getDate()) {
$btexpirechampsinstallateur= $btexpirechampsinstallateur + 1;
}
}
}
}
}
// if($expirechampsinstallateur > 0){
// $notifications = new Notifications();
// $notifications->setUserId($this->getUser());
// $notifications->setMessage("Vous avez ".$expirechampsinstallateur." document(s) expiré.");
// $notifications->setAction("app_installateur_edit");
// $notifications->setActionId($installateur->getId());
// $notifications->setSender($this->getUser());
// $notifications->setStatuts("non lu");
// $notifications->setDate(new DateTime());
// $notificationsRepository->add($notifications, true);
// }
// if($btexpirechampsinstallateur > 0){
// $notifications = new Notifications();
// $notifications->setUserId($this->getUser());
// $notifications->setMessage("Vous avez ".$btexpirechampsinstallateur." document(s) sur le point d'expirer.");
// $notifications->setAction("app_installateur_edit");
// $notifications->setActionId($installateur->getId());
// $notifications->setSender($this->getUser());
// $notifications->setStatuts("non lu");
// $notifications->setDate(new DateTime());
// $notificationsRepository->add($notifications, true);
// }
} else {
if ($this->isGranted('ROLE_CONTROLER') ) {
$dossierAll=[];
foreach ($depotDossierRepository->findBy(["controler1"=>$this->getUser()->getEquipe()],['id' => 'DESC'], 10) as $key => $value) {
$dossierAll[]=$value;
}
foreach ($depotDossierRepository->findBy(["controler2"=>$this->getUser()->getEquipe()],['id' => 'DESC'], 10) as $key => $value) {
$dossierAll[]=$value;
}
}elseif($this->isGranted('ROLE_CONTROLER')){
$dossierAll=[];
foreach ($depotDossierRepository->findBy(["controler1"=>$this->getUser()->getEquipe()],['id' => 'DESC'], 10) as $key => $value) {
$dossierAll[]=$value;
}
foreach ($depotDossierRepository->findBy(["controler2"=>$this->getUser()->getEquipe()],['id' => 'DESC'], 10) as $key => $value) {
$dossierAll[]=$value;
}
//dd($dossier);
}elseif($this->isGranted('ROLE_OBLIGE')){
$dossierAll=[];
foreach ($this->getUser()->getObliges()->getDeals() as $deal) {
foreach ($deal->getDepotDossiers() as $value) {
$dossierAll[]=$value;
}
}
}
else{
$dossierAll=$depotDossierRepository->findBy([], ['id' => 'DESC'], 10);
foreach ($depotDossierRepository->findBy(['status' => 'Déposé / AAF en cours'], ['id' => 'DESC']) as $key => $value) {
$cumacaafcour = $cumacaafcour + $value->getCumac();
}
foreach ($depotDossierRepository->findBy(['status' => 'En Attente'], ['id' => 'DESC']) as $key => $value) {
$cumacEnAttente = $cumacEnAttente + $value->getCumac();
}
foreach ($depotDossierRepository->findBy(['status' => 'Non validé'], ['id' => 'DESC']) as $key => $value) {
$cumacnonvalide = $cumacnonvalide + $value->getCumac();
}
foreach ($depotDossierRepository->findBy(['status' => 'Nouveau'], ['id' => 'DESC']) as $key => $value) {
$cumacnouveau = $cumacnouveau + $value->getCumac();
}
foreach ($depotDossierRepository->findBy(['status' => 'Urgent'], ['id' => 'DESC']) as $key => $value) {
$cumacurgent = $cumacurgent + $value->getCumac();
}
foreach ($depotDossierRepository->findBy(['status' => 'Validé'], ['id' => 'DESC']) as $key => $value) {
$cumacvalide = $cumacvalide + $value->getCumac();
}
foreach ($depotDossierRepository->findBy(['status' => 'Payé sur AAF'], ['id' => 'DESC']) as $key => $value) {
$cumacpayeraaf = $cumacpayeraaf + $value->getCumac();
}
foreach ($depotDossierRepository->findBy(['status' => 'Prêt pour dépôt'], ['id' => 'DESC']) as $key => $value) {
$cumacpretdepot = $cumacpretdepot + $value->getCumac();
}
}
if($this->isGranted('ROLE_OBLIGE')){
$dealAll = $dealRepository->findBy(['oblige' => $this->getUser()->getObliges()->getId()], ['id' => 'DESC']);
$dealAllten = $dealRepository->findBy(['oblige' => $this->getUser()->getObliges()->getId()], ['id' => 'DESC'],8);
$dealsNew=[];
$dealsValide=[];
$dealsVerification=[];
$dealsBloquer=[];
$dealscontratgenere=[];
$dealscontratsigne=[];
foreach ($dealAll as $value) {
if ($value->getStatus() == "Nouveau") {
$dealsNew[]=$value;
}elseif($value->getStatus() == "Validé"){
$dealsValide[]=$value;
}elseif($value->getStatus() == "En Attente"){
$dealsVerification[]=$value;
}
elseif($value->getStatus() == "Bloqué"){
$dealsBloquer[]=$value;
}
elseif($value->getStatus() == "Contrat généré"){
$dealscontratgenere[]=$value;
}
elseif($value->getStatus() == "Contrat Signé"){
$dealscontratsigne[]=$value;
}
}
}
else{
$dealAll = $dealRepository->findBy([], ['id' => 'DESC']);
$dealAllten = $dealRepository->findBy([], ['id' => 'DESC'], 8);
$dealsNew = $dealRepository->findBy(['status' => 'Nouveau'], ['id' => 'DESC']);
$dealsValide = $dealRepository->findBy(['status' => 'Validé'], ['id' => 'DESC']);
$dealsVerification = $dealRepository->findBy(['status' => "En Attente"], ['id' => 'DESC']);
$dealsBloquer = $dealRepository->findBy(['status' => "Bloqué"], ['id' => 'DESC']);
$dealscontratgenere = $dealRepository->findBy(['status' => "Contrat généré"], ['id' => 'DESC']);
$dealscontratsigne = $dealRepository->findBy(['status' => "Contrat Signé"], ['id' => 'DESC']);
}
$installateur = [];
}
$installateursAll=[];
foreach ($installateurRepository->findAll() as $key => $inst) {
if ($inst->getStatus() != "archive") {
$installateursAll[]=$inst;
}
}
$depotAll=[];
// foreach ($installateurRepository->findAll() as $key => $inst) {
// if ($inst->getStatus() != "archive") {
// $installateursAll[]=$inst;
// }
// }
if($this->isGranted('ROLE_OBLIGE')){
$contratAll=[];
$contrats=[];
foreach ($this->getUser()->getObliges()->getDeals() as $deal) {
foreach ($deal->getDepotDossiers() as $value) {
$depotAll[]=$value;
}
$contratAll[]=$deal->getContrat();
if ($deal->getContrat()) {
if ($deal->getContrat()->getStatus()=="Contrat Signé") {
$contrats[]=$deal->getContrat();
}
}
}
}else{
foreach ($depotDossierRepository->findAll() as $key => $dossier) {
if ($dossier->getStatus() != "archive") {
$depotAll[]=$dossier;
}
}
$contratAll = $contratRepository->findAll();
$contrats = $contratRepository->findBy(['status' => 'Contrat Signé'], ['id' => 'DESC'], 10);
}
return $this->render('home/index.html.twig', [
'dashboard' => 'dashboard',
'dealsAll' => $dealAll,
'dossierAll'=>$dossierAll,
'depotAll' => $depotAll,
'dealAllten' => $dealAllten,
'contratAll' => $contratAll,
'installateursAll' => $installateursAll,
'dealsNew' => $dealsNew,
'dealsValide' => $dealsValide,
'dealsVerification' => $dealsVerification,
'dealscontratgenere' => $dealscontratgenere,
'dealscontratsigne' => $dealscontratsigne,
'dealsBloquer' => $dealsBloquer,
'installateurs' => $installateurRepository->findBy([], ['id' => 'DESC'], 10),
'contrats' => $contrats,
'installateur' => $installateur,
'isCompleted' => $isCompleted,
"champsinstallateurexpire" => $champsinstallateurexpire,
"champsdealexpire" => $champsdealexpire,
"cumacaafcour" => $cumacaafcour,
"cumacEnAttente" => $cumacEnAttente,
"cumacnonvalide" => $cumacnonvalide,
"cumacnouveau" => $cumacnouveau,
"cumacurgent" => $cumacurgent,
"cumacvalide" => $cumacvalide,
"cumacpayeraaf" => $cumacpayeraaf,
"cumacpretdepot" => $cumacpretdepot,
"equipes" => $equipes,
"dossiercontroler" => $dossiercontroler,
"oblige" =>$oblige,
"obligedeal" =>$obligedeal,
"dealtotal" =>count($dealRepository->findAll())
]);
}
/**
* @Route("/user/email", methods={"GET"})
*/
public function user(UserRepository $userRepository): Response
{
$donnees = $userRepository->findAll();
$response = $this->CollectionToArray($donnees);
return new JsonResponse($response, 200);
// return $this->render('champs_installateur/index.html.twig', [
// 'champs_installateurs' => $champsInstallateurRepository->findAll(),
// ]);
}
/**
* This function convert a champs Collection to an array
*/
private function CollectionToArray($collection): array
{
$response = [];
foreach ($collection as $champ) {
$response[] = [
'id' => $champ->getId(),
'email' => $champ->getEmail()
];
}
return $response;
}
public function search(InstallateurRepository $installateurRepository, ObligesRepository $obligesRepository, DealRepository $dealRepository): Response
{
if($this->isGranted('ROLE_INSTALLATEUR')){
$deals = $dealRepository->findBy(['installateur' => $this->getUser()->getInstallateur()->getId()], ['id' => 'DESC'], 10);
$installateurs = "";
$obliges = "";
} else {
$installateurs = $installateurRepository->findAll();
$obliges = $obligesRepository->findAll();
$deals = $dealsRepository->findAll();
}
return $this->render('home/search.html.twig', [
'installateurs' => $installateurs,
'obliges' => $obliges,
"deals" => $deals
]);
}
}