<?php
namespace App\Controller;
use Doctrine\DBAL\Connection;
use App\Entity\Siege;
use App\Entity\User;
use App\Form\UserRegistrationType;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use App\Entity\Commerciale;
use App\Classes\ChallengeFunction;
use App\Repository\FactureRepository;
use App\Repository\FactureUserRepository;
use App\Repository\CommercialeRepository;
use App\Repository\UserRepository;
use App\Repository\SiegeRepository;
use App\Services\DataDeletionService;
use App\Services\CurrentPathService;
use App\Services\SiegeDeletionService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Validator\Constraints\DateTime;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Security\Core\Security;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="app_login")
*/
public function login(Request $request, AuthenticationUtils $authenticationUtils, TranslatorInterface $translator, CurrentPathService $currentPathService, Security $security, UserRepository $userRepository, TokenStorageInterface $tokenStorage): Response
{
$blShowId = $request->getSession()->get("bl_show");
$devisPreviewId = $request->getSession()->get("devis_preview");
// dd($security->getUser());
if ($security->getUser()) {
$user = $security->getUser();
if ($user instanceof User) {
$isSuperAdmin = $userRepository->isSuperAdmin($user);
if ($isSuperAdmin === true) {
$request->getSession()->set("trig", "");
$dateTime = new \DateTime();
$hourNow = date('H:i', strtotime((date('H') + 1) . ':' . date('i')));
$dateArray = [
$translator->trans($dateTime->format('l')),
$dateTime->format('d'),
$translator->trans($dateTime->format('F')),
$hourNow
];
if ($blShowId !== null) {
$request->getSession()->remove("bl_show");
return $this->redirectToRoute('app_bon_de_livraison_show', ['id' => $blShowId]);
}
if($devisPreviewId !== null) {
$request->getSession()->remove("devis_preview");
return $this->redirectToRoute('app_admin_devis_preview', ['id' => $devisPreviewId]);
}
return $this->render('home/welcome.html.twig', [
'dateArray' => $dateArray,
'classes' => $currentPathService->classes()
]);
} else {
$token = $tokenStorage->getToken();
if ($token) {
$request->getSession()->set("token", $token);
$tokenStorage->setToken(null);
}
return $this->render('security/trig.html.twig', ['erreur' => ""]);
}
}
}
// else{
$erreur = "";
$error = null;
// if( $request->getSession()->get("erreur") ){
// $erreur = $request->getSession()->get("erreur");
// $request->getSession()->remove("erreur");
// }
// else{
$error = $authenticationUtils->getLastAuthenticationError();
// }
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error, 'erreur' => $erreur]);
// }
}
/**
* @Route("/ckeckTrig", name="ckeckTrig", methods={"GET", "POST"})
*/
public function ckeckTrig(TranslatorInterface $translator, CurrentPathService $currentPathService, Request $request, Security $security, FactureRepository $factureRepository, FactureUserRepository $factureUserRepository, UrlGeneratorInterface $urlGenerator, CommercialeRepository $commercialeRepository, TokenStorageInterface $tokenStorage)
{
$blShowId = $request->getSession()->get("bl_show");
$devisPreviewId = $request->getSession()->get("devis_preview");
$token = $request->getSession()->get("token");
// dd($token->getUser());
// $user = $this->getUser();
$user = $token->getUser();
if ($user) {
if ($user instanceof User) {
$data = $request->request->all();
// $trig = $data["trig"];
$trig = $data["identification"];
$commerciale = $commercialeRepository->isTrueTrig($trig);
if ($commerciale !== '') {
$request->getSession()->remove("token");
return $this->render('security/trig.html.twig', ['erreur' => $commerciale . ". Vous devez vous connecter à nouveau."]);
} else {
$tokenStorage->setToken($request->getSession()->get("token"));
$request->getSession()->set("trig", $trig);
$request->getSession()->remove("token");
$dateTime = new \DateTime();
$hourNow = date('H:i', strtotime((date('H') + 1) . ':' . date('i')));
$dateArray = [
$translator->trans($dateTime->format('l')),
$dateTime->format('d'),
$translator->trans($dateTime->format('F')),
$hourNow
];
$trig = $request->getSession()->get("trig");
$commercialeData = $commercialeRepository->getCommercialeByTRIG($trig);
$fonction = $commercialeData->getFonction();
$msgChallenge = "";
/*if (!is_null($fonction) && in_array($fonction, Commerciale::getAllowedFunctions())) {
if (Commerciale::isCOM($fonction)) {
$firstDay = new \DateTime('last friday');
$lastDay = new \DateTime('next thursday');
}
else if (Commerciale::isCAG($fonction)) {
$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');
}
$dateDebut = $firstDay->format("Y-m-d")." 00:00:00";
$dateFin = $lastDay->format("Y-m-d")." 23:59:59";
$limit = 1;
$challengeFunction = new ChallengeFunction();
$challenges = $challengeFunction->getChallengesDecroissante($factureRepository, $factureUserRepository, $commercialeRepository, $dateDebut, $dateFin, $limit, false);
if (count($challenges)) {
$challengeFirst = $challenges[0];
if (Commerciale::isCOM($fonction)) {
if ($challengeFirst->getCommerciale()->getTrig() == $trig) {
$msgChallenge = "Félicitations, ".$commercialeData->getPrenom()." ! <br>Vous êtes actuellement en tête dans le cadre du challenge de vente organisée par notre plateforme. Continuez à relever ce défi avec détermination. Votre performance est remarquable, et nous vous encourageons à maintenir cet élan!<br>Verifier en permanence votre position <a href='".$urlGenerator->generate("app_admin_commerciale_challenge")."'>ici</a>";
}
else {
$ca_owner = 0;
foreach ($challenges as $key => $value) {
if ($value->getCommerciale()->getTrig() == $trig) $ca_owner += $value->getChiffreAffaires();
}
$ca_msg = $challengeFirst->getChiffreAffaires() - $ca_owner;
if ($ca_msg > 0) $msgChallenge = "Bonjour ".$commercialeData->getPrenom().",<br>selon les données actuelles, il vous suffirait de réaliser des ventes d'une valeur totale de ".number_format($ca_msg, 0, ',', '.')." Ar pour remporter le lot de la semaine d’une valeur de 100.000 Ar. 🎉🎉🎉 <br><br>BONNE CHANCE";
}
}
else if (Commerciale::isCAG($fonction)) {
$siege = $security->getUser()->getSiege()->getId();
if (count($challengeFirst->getFactures()) && $challengeFirst->getFactures()[0]->getSiege()->getId() == $siege) {
$msgChallenge = "Félicitations, ".$commercialeData->getPrenom()." ! <br>Vous êtes actuellement en tête dans le cadre du challenge de vente organisée par notre plateforme. Continuez à relever ce défi avec détermination. Votre performance est remarquable, et nous vous encourageons à maintenir cet élan!<br>Verifier en permanence votre position <a href='".$urlGenerator->generate("app_admin_commerciale_challenge")."'>ici</a>";
}
else {
$hv_owner = 0;
foreach ($challenges as $key => $value) {
$factures = $value->getFactures();
if (is_array($factures) && count($factures)) {
foreach ($factures as $keyF => $facture) {
if ($siege == $facture->getSiege()->getId()) $hv_owner += $facture->getMontant();
}
}
}
$ca_msg = $challengeFirst->getChiffreAffaires() - $hv_owner;
if ($ca_msg > 0) $msgChallenge = "Bonjour ".$commercialeData->getPrenom().",<br>selon les données actuelles, il vous suffirait de réaliser des ventes d'une valeur totale de ".number_format($ca_msg, 0, ',', '.')." Ar pour remporter votre lot du mois équivalent à un SMARTPHONE ITEL A04. 🎉🎉🎉 <br><br>BONNE CHANCE";
}
}
}
}*/
if ($blShowId !== null) {
$request->getSession()->remove("bl_show");
return $this->redirectToRoute('app_bon_de_livraison_show', ['id' => $blShowId]);
}
if($devisPreviewId !== null) {
$request->getSession()->remove("devis_preview");
return $this->redirectToRoute('app_admin_devis_preview', ['id' => $devisPreviewId]);
}
return $this->render('home/welcome.html.twig', [
'msgChallenge' => $msgChallenge,
'dateArray' => $dateArray,
'classes' => $currentPathService->classes()
]);
}
}
}
return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/dashboard", name="app_dashboard")
*/
public function dashboard(TranslatorInterface $translator, CurrentPathService $currentPathService, Security $security,): Response
{
$dateTime = new \DateTime();
$hourNow = date('H:i', strtotime((date('H') + 1) . ':' . date('i')));
$dateArray = [
$translator->trans($dateTime->format('l')),
$dateTime->format('d'),
$translator->trans($dateTime->format('F')),
$hourNow
];
$user = $security->getUser();
if ($user instanceof User) {
$centrale = 0;
$union = 0;
$agence = 0;
$caissier = 0;
$csaf = 0;
$dir_agence = 0;
$roles = $user->getRoles();
// Vérifie si l'utilisateur a exactement les rôles "ROLE_ADMIN", "ROLE_OPERATOR", "ROLE_SUPER_ADMIN"
if (empty(array_diff(["ROLE_USER", "ROLE_ADMIN", "ROLE_OPERATOR", "ROLE_SUPER_ADMIN"], $roles)) && count($roles) === 4) {
$centrale = 1;
}
// Vérifie si l'utilisateur a exactement les rôles "ROLE_ADMIN", "ROLE_OPERATOR"
elseif (empty(array_diff(["ROLE_USER", "ROLE_ADMIN", "ROLE_OPERATOR"], $roles)) && count($roles) === 3) {
$union = 1;
}
// Vérifie si l'utilisateur a exactement le rôle "ROLE_OPERATOR"
elseif (empty(array_diff(["ROLE_USER", "ROLE_OPERATOR"], $roles)) && count($roles) === 2) {
$agence = 1;
} elseif (empty(array_diff(["ROLE_USER", "ROLE_CAISSIERE"], $roles)) && count($roles) === 2) {
$caissier = 1;
} elseif (empty(array_diff(["ROLE_USER", "ROLE_CSAF_AGENCE"], $roles)) && count($roles) === 2) {
$csaf = 1;
} elseif (empty(array_diff(["ROLE_USER", "ROLE_DIRECTEUR_AGENCE"], $roles)) && count($roles) === 2) {
$dir_agence = 1;
}
return $this->render('home/dashboard.html.twig', [
'dateArray' => $dateArray,
'centrale' => $centrale,
'union' => $union,
'agence' => $agence,
'caissier' => $caissier,
'csaf' => $csaf,
'dir_agence' => $dir_agence,
'classes' => $currentPathService->classes()
]);
}
return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/dashboard/notif", name="app_dashboard_notif")
*/
public function dashboardNotif(TranslatorInterface $translator, CurrentPathService $currentPathService, Security $security,): Response
{
$dateTime = new \DateTime();
$hourNow = date('H:i', strtotime((date('H') + 1) . ':' . date('i')));
$dateArray = [
$translator->trans($dateTime->format('l')),
$dateTime->format('d'),
$translator->trans($dateTime->format('F')),
$hourNow
];
$user = $security->getUser();
$centrale = 0;
$union = 0;
$agence = 0;
$caissier = 0;
$csaf = 0;
$dir_agence = 0;
$roles = $user->getRoles();
// Vérifie si l'utilisateur a exactement les rôles "ROLE_ADMIN", "ROLE_OPERATOR", "ROLE_SUPER_ADMIN"
if (empty(array_diff(["ROLE_USER", "ROLE_ADMIN", "ROLE_OPERATOR", "ROLE_SUPER_ADMIN"], $roles)) && count($roles) === 4) {
$centrale = 1;
}
// Vérifie si l'utilisateur a exactement les rôles "ROLE_ADMIN", "ROLE_OPERATOR"
elseif (empty(array_diff(["ROLE_USER", "ROLE_ADMIN", "ROLE_OPERATOR"], $roles)) && count($roles) === 3) {
$union = 1;
}
// Vérifie si l'utilisateur a exactement le rôle "ROLE_OPERATOR"
elseif (empty(array_diff(["ROLE_USER", "ROLE_OPERATOR"], $roles)) && count($roles) === 2) {
$agence = 1;
} elseif (empty(array_diff(["ROLE_USER", "ROLE_CAISSIERE"], $roles)) && count($roles) === 2) {
$caissier = 1;
} elseif (empty(array_diff(["ROLE_USER", "ROLE_CSAF_AGENCE"], $roles)) && count($roles) === 2) {
$csaf = 1;
} elseif (empty(array_diff(["ROLE_USER", "ROLE_DIRECTEUR_AGENCE"], $roles)) && count($roles) === 2) {
$dir_agence = 1;
}
return $this->render('home/notification.html.twig', [
'dateArray' => $dateArray,
'centrale' => $centrale,
'union' => $union,
'agence' => $agence,
'caissier' => $caissier,
'csaf' => $csaf,
'dir_agence' => $dir_agence,
'classes' => $currentPathService->classes()
]);
}
/**
* @Route("/logout", name="app_logout")
*/
public function logout(): void
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
/**
* @Route("/user/add", name="app_user_add")
*/
public function addUser(
UserRepository $ur,
SiegeRepository $sr,
EntityManagerInterface $em,
UserPasswordHasherInterface $hasher
) {
$user = new User();
$user->setEmail("contact@teko-consulting.com");
$user->setRoles(['ROLE_SUPER_ADMIN', 'ROLE_ADMIN', 'ROLE_OPERATOR']);
$user->setFirstname("Teko");
$user->setName("Dom");
$user->setPhone("3456345667");
$siege = $sr->find(37);
$user->setSiege($siege);
$password = $hasher->hashPassword($user, 'devis_facture1234');
$user->setPassword($password);
$em->persist($user);
$em->flush();
// dd('user ajouté');
}
/**
* @Route("/register", name="app_register")
*/
public function register(
Request $request,
UserRepository $ur,
EntityManagerInterface $em,
UserPasswordHasherInterface $hasher
): Response {
$user = new User();
$form = $this->createForm(UserRegistrationType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setRoles(['ROLE_OPERATOR']);
$password = $hasher->hashPassword($user, $form->get('password')->getData());
$user->setPassword($password);
//dd($user);
$em->persist($user);
$em->flush();
return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('security/register.html.twig', [
'user' => $user,
'form' => $form,
]);
}
}