<?php
namespace App\Controller\Back;
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\CurrentPathService;
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
{
if ($security->getUser()) {
$user = $security->getUser();
if( $user instanceof User ){
$fromValue = $request->getSession()->get("login_from");
$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($fromValue == "front"){
return $this->redirectToRoute('app_front_home', [], Response::HTTP_SEE_OTHER);
} else {
return $this->render('back/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('back/security/trig.html.twig', [ 'erreur' => ""]);
}
}
}
$from = $request->query->get("from") ?? "back";
if ($from) {
$request->getSession()->set("login_from", $from);
}
// 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('back/security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error, 'erreur' => $erreur]);
// }
}
/**
* @Route("/ckeckTrig", name="ckeckTrig", methods={"POST"})
*/
public function ckeckTrig(TranslatorInterface $translator, CurrentPathService $currentPathService, Request $request, Security $security, FactureRepository $factureRepository, FactureUserRepository $factureUserRepository, UrlGeneratorInterface $urlGenerator, CommercialeRepository $commercialeRepository, TokenStorageInterface $tokenStorage){
$token = $request->getSession()->get("token");
$user = $token->getUser();
if( $user instanceof User ){
$data = $request->request->all();
$trig = $data["trig"];
$commerciale = $commercialeRepository->isTrueTrig($trig);
if( $commerciale !== '' ){
$request->getSession()->remove("token");
return $this->render('back/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";
}
}
}
}*/
return $this->render('back/home/welcome.html.twig', [
'msgChallenge' => $msgChallenge,
'dateArray' => $dateArray,
'classes' => $currentPathService->classes()
]);
}
}
}
/**
* @Route("/dashboard", name="app_dashboard")
*/
public function dashboard(TranslatorInterface $translator, CurrentPathService $currentPathService): 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
];
return $this->render('back/home/dashboard.html.twig', [
'dateArray' => $dateArray,
'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('back/security/register.html.twig', [
'user' => $user,
'form' => $form,
]);
}
}