<?php
namespace App\Controller;
// use App\Entity\Siege;
use App\Entity\User;
use App\Form\UserRegistrationType;
use App\Repository\DeliveryRepository;
use App\Repository\PurchaseOrderRepository;
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;
use App\Entity\Product;
use App\Repository\ProductRepository;
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 ){
$isSuperAdmin = $userRepository->isSuperAdmin($user);
//if( $isSuperAdmin === true ){
$request->getSession()->set("trig", "");
$dateTime = new \DateTime();
//$hourNow = date('H:i', strtotime((date('H')+1).':'.date('i')));
$hourNow = (new \DateTime())->add(new \DateInterval('PT1H'))->format('h:i a');
//dd($hourNow);
$dateArray = [
//$translator->trans($dateTime->format('l')),
$dateTime->format('l'),
$dateTime->format('d'),
//$translator->trans($dateTime->format('F')),
$dateTime->format('F'),
$hourNow
];
return $this->redirectToRoute('app_dashboard_tracking', [], Response::HTTP_SEE_OTHER);
// 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("/forgottenpassword", name="app_forgotten_pwd")
*/
public function forgotten(Request $request): Response
{
if ($request->isMethod('POST')) {
return $this->redirectToRoute('app_send_code', [], Response::HTTP_SEE_OTHER);
}
return $this->render('security/forgot.html.twig', [
'controller_name' => 'SecurityController',
]);
}
/**
* @Route("/sendverifcode", name="app_send_code")
*/
public function sendVerification(Request $request): Response
{
if ($request->isMethod('POST')) {
return $this->redirectToRoute('app_new_pass', [], Response::HTTP_SEE_OTHER);
}
return $this->render('security/forgot-2.html.twig', [
'controller_name' => 'SecurityController',
]);
}
/**
* @Route("/newpassword", name="app_new_pass")
*/
public function newPassword(Request $request): Response
{
if ($request->isMethod('POST')) {
return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
}
return $this->render('security/new-password.html.twig', [
'controller_name' => 'SecurityController',
]);
}
/**
* @Route("/registertracking", name="app_register_track")
*/
public function registertrack(Request $request): Response
{
/*if ($request->isMethod('POST')) {
return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
}*/
return $this->render('security/register-tracking.html.twig', [
'controller_name' => 'SecurityController',
]);
}
/**
* @Route("/register", name="app_register")
*/
public function register(Request $request,
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);
$em->persist($user);
$em->flush();
return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
}*/
return $this->renderForm('security/register-tracking.html.twig', [
'controller_name' => 'SecurityController',
]);
}
/**
* @Route("/dashboard", name="app_dashboard")
*/
public function dashboard(TranslatorInterface $translator, CurrentPathService $currentPathService): Response{
$dateTime = new \DateTime();
$hourNow = (new \DateTime())->add(new \DateInterval('PT1H'))->format('h:i a');
$dateArray = [
$dateTime->format('l'),
$dateTime->format('d'),
$dateTime->format('F'),
$hourNow
];
return $this->render('home/dashboard.html.twig', [
'dateArray' => $dateArray,
'classes' => $currentPathService->classes()
]);
}
/**
* @Route("/dashboard-tracking", name="app_dashboard_tracking")
*/
public function dashboardTracking(Request $request, ProductRepository $productRepository, DeliveryRepository $deliveryRepository, PurchaseOrderRepository $purchaseOrderRepository, TranslatorInterface $translator, CurrentPathService $currentPathService, Security $security): Response{
// dd($security->getUser()); die;
$dateTime = new \DateTime();
$hourNow = (new \DateTime())->add(new \DateInterval('PT1H'))->format('h:i a');
$dateArray = [
$dateTime->format('l'),
$dateTime->format('d'),
$dateTime->format('F'),
$hourNow
];
if($request->query->has('delivery_id')) {
$delivery = $deliveryRepository->find($request->query->get('delivery_id'));
if (!is_null($delivery) && !empty($delivery)) {
return $this->redirectToRoute('app_dashboard_tracking_searching', ["p"=>$delivery->getId(), "isDelivery"=>true], Response::HTTP_SEE_OTHER);
} else {
$error = [
// "no_product" => 'Product "'.$request->query->get('p').'" doesn\'t exist.'
"no_product" => ' "'.$request->query->get('p').'" doesn\'t exist.'
];
}
}
$error = [];
if ($request->query->has('p') && !empty($request->query->get('p'))) {
// $product = $productRepository->findBy(["name"=>$request->query->get('p')]);
$purchaseOrder = $purchaseOrderRepository->findBy(["purchaseOrderReference"=>$request->query->get('p')]);
if (!is_null($purchaseOrder) && !empty($purchaseOrder)) {
return $this->redirectToRoute('app_dashboard_tracking_searching', ["p"=>$purchaseOrder[0]->getId()], Response::HTTP_SEE_OTHER);
} else {
// check if the reference is for delivery
$delivery = $deliveryRepository->findBy(["reference"=>trim($request->query->get('p'))]);
if(!is_null($delivery) && !empty($delivery)){
return $this->redirectToRoute('app_dashboard_tracking_searching', ["p"=>$delivery[0]->getId(), "isDelivery"=>true], Response::HTTP_SEE_OTHER);
} else {
$error = [
// "no_product" => 'Product "'.$request->query->get('p').'" doesn\'t exist.'
"no_product" => 'Purchase order or delivery "'.trim($request->query->get('p')).'" doesn\'t exist.'
];
}
}
}
return $this->render('home/dashboard_tracking.html.twig', [
'dateArray' => $dateArray,
'classes' => $currentPathService->classes(),
'error' => $error
]);
}
/**
* @Route("/dashboard-tracking-guest", name="app_dashboard_tracking_guest")
*/
public function dashboardTrackingGuest(Request $request, ProductRepository $productRepository, DeliveryRepository $deliveryRepository, PurchaseOrderRepository $purchaseOrderRepository, TranslatorInterface $translator, CurrentPathService $currentPathService, Security $security): Response{
// dd($security->getUser()); die;
$dateTime = new \DateTime();
$hourNow = (new \DateTime())->add(new \DateInterval('PT1H'))->format('h:i a');
$dateArray = [
$dateTime->format('l'),
$dateTime->format('d'),
$dateTime->format('F'),
$hourNow
];
if($request->query->has('delivery_id')) {
$delivery = $deliveryRepository->find($request->query->get('delivery_id'));
if (!is_null($delivery) && !empty($delivery)) {
return $this->redirectToRoute('app_dashboard_tracking_searching_guest', ["p"=>$delivery->getId(), "isDelivery"=>true], Response::HTTP_SEE_OTHER);
} else {
$error = [
// "no_product" => 'Product "'.$request->query->get('p').'" doesn\'t exist.'
"no_product" => ' "'.$request->query->get('p').'" doesn\'t exist.'
];
}
}
$error = [];
if ($request->query->has('p') && !empty($request->query->get('p'))) {
// $product = $productRepository->findBy(["name"=>$request->query->get('p')]);
$purchaseOrder = $purchaseOrderRepository->findBy(["purchaseOrderReference"=>$request->query->get('p')]);
if (!is_null($purchaseOrder) && !empty($purchaseOrder)) {
return $this->redirectToRoute('app_dashboard_tracking_searching_guest', ["p"=>$purchaseOrder[0]->getId()], Response::HTTP_SEE_OTHER);
} else {
// check if the reference is for delivery
$delivery = $deliveryRepository->findBy(["reference"=>trim($request->query->get('p'))]);
if(!is_null($delivery) && !empty($delivery)){
return $this->redirectToRoute('app_dashboard_tracking_searching_guest', ["p"=>$delivery[0]->getId(), "isDelivery"=>true], Response::HTTP_SEE_OTHER);
} else {
$error = [
// "no_product" => 'Product "'.$request->query->get('p').'" doesn\'t exist.'
"no_product" => 'Purchase order or delivery "'.trim($request->query->get('p')).'" doesn\'t exist.'
];
}
}
}
return $this->render('home/guest/dashboard_tracking.html.twig', [
'dateArray' => $dateArray,
'classes' => $currentPathService->classes(),
'error' => $error
]);
}
/**
* @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é');
}
*/
/*
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);
$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,
]);
}*/
}