src/Controller/SecurityController.php line 42

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\DBAL\Connection;
  4. use App\Entity\Siege;
  5. use App\Entity\User;
  6. use App\Form\UserRegistrationType;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use App\Entity\Commerciale;
  9. use App\Classes\ChallengeFunction;
  10. use App\Repository\FactureRepository;
  11. use App\Repository\FactureUserRepository;
  12. use App\Repository\CommercialeRepository;
  13. use App\Repository\UserRepository;
  14. use App\Repository\SiegeRepository;
  15. use App\Services\DataDeletionService;
  16. use App\Services\CurrentPathService;
  17. use App\Services\SiegeDeletionService;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  24. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  25. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  26. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  27. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  28. use Symfony\Component\Validator\Constraints\DateTime;
  29. use Symfony\Contracts\Translation\TranslatorInterface;
  30. use Symfony\Component\Security\Core\Security;
  31. class SecurityController extends AbstractController
  32. {
  33. /**
  34. * @Route("/login", name="app_login")
  35. */
  36. public function login(Request $request, AuthenticationUtils $authenticationUtils, TranslatorInterface $translator, CurrentPathService $currentPathService, Security $security, UserRepository $userRepository, TokenStorageInterface $tokenStorage): Response
  37. {
  38. $blShowId = $request->getSession()->get("bl_show");
  39. $devisPreviewId = $request->getSession()->get("devis_preview");
  40. // dd($security->getUser());
  41. if ($security->getUser()) {
  42. $user = $security->getUser();
  43. if ($user instanceof User) {
  44. $isSuperAdmin = $userRepository->isSuperAdmin($user);
  45. if ($isSuperAdmin === true) {
  46. $request->getSession()->set("trig", "");
  47. $dateTime = new \DateTime();
  48. $hourNow = date('H:i', strtotime((date('H') + 1) . ':' . date('i')));
  49. $dateArray = [
  50. $translator->trans($dateTime->format('l')),
  51. $dateTime->format('d'),
  52. $translator->trans($dateTime->format('F')),
  53. $hourNow
  54. ];
  55. if ($blShowId !== null) {
  56. $request->getSession()->remove("bl_show");
  57. return $this->redirectToRoute('app_bon_de_livraison_show', ['id' => $blShowId]);
  58. }
  59. if($devisPreviewId !== null) {
  60. $request->getSession()->remove("devis_preview");
  61. return $this->redirectToRoute('app_admin_devis_preview', ['id' => $devisPreviewId]);
  62. }
  63. return $this->render('home/welcome.html.twig', [
  64. 'dateArray' => $dateArray,
  65. 'classes' => $currentPathService->classes()
  66. ]);
  67. } else {
  68. $token = $tokenStorage->getToken();
  69. if ($token) {
  70. $request->getSession()->set("token", $token);
  71. $tokenStorage->setToken(null);
  72. }
  73. return $this->render('security/trig.html.twig', ['erreur' => ""]);
  74. }
  75. }
  76. }
  77. // else{
  78. $erreur = "";
  79. $error = null;
  80. // if( $request->getSession()->get("erreur") ){
  81. // $erreur = $request->getSession()->get("erreur");
  82. // $request->getSession()->remove("erreur");
  83. // }
  84. // else{
  85. $error = $authenticationUtils->getLastAuthenticationError();
  86. // }
  87. $lastUsername = $authenticationUtils->getLastUsername();
  88. return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error, 'erreur' => $erreur]);
  89. // }
  90. }
  91. /**
  92. * @Route("/ckeckTrig", name="ckeckTrig", methods={"GET", "POST"})
  93. */
  94. public function ckeckTrig(TranslatorInterface $translator, CurrentPathService $currentPathService, Request $request, Security $security, FactureRepository $factureRepository, FactureUserRepository $factureUserRepository, UrlGeneratorInterface $urlGenerator, CommercialeRepository $commercialeRepository, TokenStorageInterface $tokenStorage)
  95. {
  96. $blShowId = $request->getSession()->get("bl_show");
  97. $devisPreviewId = $request->getSession()->get("devis_preview");
  98. $token = $request->getSession()->get("token");
  99. // dd($token->getUser());
  100. // $user = $this->getUser();
  101. $user = $token->getUser();
  102. if ($user) {
  103. if ($user instanceof User) {
  104. $data = $request->request->all();
  105. // $trig = $data["trig"];
  106. $trig = $data["identification"];
  107. $commerciale = $commercialeRepository->isTrueTrig($trig);
  108. if ($commerciale !== '') {
  109. $request->getSession()->remove("token");
  110. return $this->render('security/trig.html.twig', ['erreur' => $commerciale . ". Vous devez vous connecter à nouveau."]);
  111. } else {
  112. $tokenStorage->setToken($request->getSession()->get("token"));
  113. $request->getSession()->set("trig", $trig);
  114. $request->getSession()->remove("token");
  115. $dateTime = new \DateTime();
  116. $hourNow = date('H:i', strtotime((date('H') + 1) . ':' . date('i')));
  117. $dateArray = [
  118. $translator->trans($dateTime->format('l')),
  119. $dateTime->format('d'),
  120. $translator->trans($dateTime->format('F')),
  121. $hourNow
  122. ];
  123. $trig = $request->getSession()->get("trig");
  124. $commercialeData = $commercialeRepository->getCommercialeByTRIG($trig);
  125. $fonction = $commercialeData->getFonction();
  126. $msgChallenge = "";
  127. /*if (!is_null($fonction) && in_array($fonction, Commerciale::getAllowedFunctions())) {
  128. if (Commerciale::isCOM($fonction)) {
  129. $firstDay = new \DateTime('last friday');
  130. $lastDay = new \DateTime('next thursday');
  131. }
  132. else if (Commerciale::isCAG($fonction)) {
  133. $firstDay = new \DateTime('first day of this month');
  134. $lastDay = new \DateTime('last day of this month');
  135. }
  136. $dateDebut = $firstDay->format("Y-m-d")." 00:00:00";
  137. $dateFin = $lastDay->format("Y-m-d")." 23:59:59";
  138. $limit = 1;
  139. $challengeFunction = new ChallengeFunction();
  140. $challenges = $challengeFunction->getChallengesDecroissante($factureRepository, $factureUserRepository, $commercialeRepository, $dateDebut, $dateFin, $limit, false);
  141. if (count($challenges)) {
  142. $challengeFirst = $challenges[0];
  143. if (Commerciale::isCOM($fonction)) {
  144. if ($challengeFirst->getCommerciale()->getTrig() == $trig) {
  145. $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>";
  146. }
  147. else {
  148. $ca_owner = 0;
  149. foreach ($challenges as $key => $value) {
  150. if ($value->getCommerciale()->getTrig() == $trig) $ca_owner += $value->getChiffreAffaires();
  151. }
  152. $ca_msg = $challengeFirst->getChiffreAffaires() - $ca_owner;
  153. 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";
  154. }
  155. }
  156. else if (Commerciale::isCAG($fonction)) {
  157. $siege = $security->getUser()->getSiege()->getId();
  158. if (count($challengeFirst->getFactures()) && $challengeFirst->getFactures()[0]->getSiege()->getId() == $siege) {
  159. $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>";
  160. }
  161. else {
  162. $hv_owner = 0;
  163. foreach ($challenges as $key => $value) {
  164. $factures = $value->getFactures();
  165. if (is_array($factures) && count($factures)) {
  166. foreach ($factures as $keyF => $facture) {
  167. if ($siege == $facture->getSiege()->getId()) $hv_owner += $facture->getMontant();
  168. }
  169. }
  170. }
  171. $ca_msg = $challengeFirst->getChiffreAffaires() - $hv_owner;
  172. 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";
  173. }
  174. }
  175. }
  176. }*/
  177. if ($blShowId !== null) {
  178. $request->getSession()->remove("bl_show");
  179. return $this->redirectToRoute('app_bon_de_livraison_show', ['id' => $blShowId]);
  180. }
  181. if($devisPreviewId !== null) {
  182. $request->getSession()->remove("devis_preview");
  183. return $this->redirectToRoute('app_admin_devis_preview', ['id' => $devisPreviewId]);
  184. }
  185. return $this->render('home/welcome.html.twig', [
  186. 'msgChallenge' => $msgChallenge,
  187. 'dateArray' => $dateArray,
  188. 'classes' => $currentPathService->classes()
  189. ]);
  190. }
  191. }
  192. }
  193. return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  194. }
  195. /**
  196. * @Route("/dashboard", name="app_dashboard")
  197. */
  198. public function dashboard(TranslatorInterface $translator, CurrentPathService $currentPathService, Security $security,): Response
  199. {
  200. $dateTime = new \DateTime();
  201. $hourNow = date('H:i', strtotime((date('H') + 1) . ':' . date('i')));
  202. $dateArray = [
  203. $translator->trans($dateTime->format('l')),
  204. $dateTime->format('d'),
  205. $translator->trans($dateTime->format('F')),
  206. $hourNow
  207. ];
  208. $user = $security->getUser();
  209. if ($user instanceof User) {
  210. $centrale = 0;
  211. $union = 0;
  212. $agence = 0;
  213. $caissier = 0;
  214. $csaf = 0;
  215. $dir_agence = 0;
  216. $roles = $user->getRoles();
  217. // Vérifie si l'utilisateur a exactement les rôles "ROLE_ADMIN", "ROLE_OPERATOR", "ROLE_SUPER_ADMIN"
  218. if (empty(array_diff(["ROLE_USER", "ROLE_ADMIN", "ROLE_OPERATOR", "ROLE_SUPER_ADMIN"], $roles)) && count($roles) === 4) {
  219. $centrale = 1;
  220. }
  221. // Vérifie si l'utilisateur a exactement les rôles "ROLE_ADMIN", "ROLE_OPERATOR"
  222. elseif (empty(array_diff(["ROLE_USER", "ROLE_ADMIN", "ROLE_OPERATOR"], $roles)) && count($roles) === 3) {
  223. $union = 1;
  224. }
  225. // Vérifie si l'utilisateur a exactement le rôle "ROLE_OPERATOR"
  226. elseif (empty(array_diff(["ROLE_USER", "ROLE_OPERATOR"], $roles)) && count($roles) === 2) {
  227. $agence = 1;
  228. } elseif (empty(array_diff(["ROLE_USER", "ROLE_CAISSIERE"], $roles)) && count($roles) === 2) {
  229. $caissier = 1;
  230. } elseif (empty(array_diff(["ROLE_USER", "ROLE_CSAF_AGENCE"], $roles)) && count($roles) === 2) {
  231. $csaf = 1;
  232. } elseif (empty(array_diff(["ROLE_USER", "ROLE_DIRECTEUR_AGENCE"], $roles)) && count($roles) === 2) {
  233. $dir_agence = 1;
  234. }
  235. return $this->render('home/dashboard.html.twig', [
  236. 'dateArray' => $dateArray,
  237. 'centrale' => $centrale,
  238. 'union' => $union,
  239. 'agence' => $agence,
  240. 'caissier' => $caissier,
  241. 'csaf' => $csaf,
  242. 'dir_agence' => $dir_agence,
  243. 'classes' => $currentPathService->classes()
  244. ]);
  245. }
  246. return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  247. }
  248. /**
  249. * @Route("/dashboard/notif", name="app_dashboard_notif")
  250. */
  251. public function dashboardNotif(TranslatorInterface $translator, CurrentPathService $currentPathService, Security $security,): Response
  252. {
  253. $dateTime = new \DateTime();
  254. $hourNow = date('H:i', strtotime((date('H') + 1) . ':' . date('i')));
  255. $dateArray = [
  256. $translator->trans($dateTime->format('l')),
  257. $dateTime->format('d'),
  258. $translator->trans($dateTime->format('F')),
  259. $hourNow
  260. ];
  261. $user = $security->getUser();
  262. $centrale = 0;
  263. $union = 0;
  264. $agence = 0;
  265. $caissier = 0;
  266. $csaf = 0;
  267. $dir_agence = 0;
  268. $roles = $user->getRoles();
  269. // Vérifie si l'utilisateur a exactement les rôles "ROLE_ADMIN", "ROLE_OPERATOR", "ROLE_SUPER_ADMIN"
  270. if (empty(array_diff(["ROLE_USER", "ROLE_ADMIN", "ROLE_OPERATOR", "ROLE_SUPER_ADMIN"], $roles)) && count($roles) === 4) {
  271. $centrale = 1;
  272. }
  273. // Vérifie si l'utilisateur a exactement les rôles "ROLE_ADMIN", "ROLE_OPERATOR"
  274. elseif (empty(array_diff(["ROLE_USER", "ROLE_ADMIN", "ROLE_OPERATOR"], $roles)) && count($roles) === 3) {
  275. $union = 1;
  276. }
  277. // Vérifie si l'utilisateur a exactement le rôle "ROLE_OPERATOR"
  278. elseif (empty(array_diff(["ROLE_USER", "ROLE_OPERATOR"], $roles)) && count($roles) === 2) {
  279. $agence = 1;
  280. } elseif (empty(array_diff(["ROLE_USER", "ROLE_CAISSIERE"], $roles)) && count($roles) === 2) {
  281. $caissier = 1;
  282. } elseif (empty(array_diff(["ROLE_USER", "ROLE_CSAF_AGENCE"], $roles)) && count($roles) === 2) {
  283. $csaf = 1;
  284. } elseif (empty(array_diff(["ROLE_USER", "ROLE_DIRECTEUR_AGENCE"], $roles)) && count($roles) === 2) {
  285. $dir_agence = 1;
  286. }
  287. return $this->render('home/notification.html.twig', [
  288. 'dateArray' => $dateArray,
  289. 'centrale' => $centrale,
  290. 'union' => $union,
  291. 'agence' => $agence,
  292. 'caissier' => $caissier,
  293. 'csaf' => $csaf,
  294. 'dir_agence' => $dir_agence,
  295. 'classes' => $currentPathService->classes()
  296. ]);
  297. }
  298. /**
  299. * @Route("/logout", name="app_logout")
  300. */
  301. public function logout(): void
  302. {
  303. throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  304. }
  305. /**
  306. * @Route("/user/add", name="app_user_add")
  307. */
  308. public function addUser(
  309. UserRepository $ur,
  310. SiegeRepository $sr,
  311. EntityManagerInterface $em,
  312. UserPasswordHasherInterface $hasher
  313. ) {
  314. $user = new User();
  315. $user->setEmail("contact@teko-consulting.com");
  316. $user->setRoles(['ROLE_SUPER_ADMIN', 'ROLE_ADMIN', 'ROLE_OPERATOR']);
  317. $user->setFirstname("Teko");
  318. $user->setName("Dom");
  319. $user->setPhone("3456345667");
  320. $siege = $sr->find(37);
  321. $user->setSiege($siege);
  322. $password = $hasher->hashPassword($user, 'devis_facture1234');
  323. $user->setPassword($password);
  324. $em->persist($user);
  325. $em->flush();
  326. // dd('user ajouté');
  327. }
  328. /**
  329. * @Route("/register", name="app_register")
  330. */
  331. public function register(
  332. Request $request,
  333. UserRepository $ur,
  334. EntityManagerInterface $em,
  335. UserPasswordHasherInterface $hasher
  336. ): Response {
  337. $user = new User();
  338. $form = $this->createForm(UserRegistrationType::class, $user);
  339. $form->handleRequest($request);
  340. if ($form->isSubmitted() && $form->isValid()) {
  341. $user->setRoles(['ROLE_OPERATOR']);
  342. $password = $hasher->hashPassword($user, $form->get('password')->getData());
  343. $user->setPassword($password);
  344. //dd($user);
  345. $em->persist($user);
  346. $em->flush();
  347. return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  348. }
  349. return $this->renderForm('security/register.html.twig', [
  350. 'user' => $user,
  351. 'form' => $form,
  352. ]);
  353. }
  354. }