src/Controller/HomeController.php line 111

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Signature;
  4. use App\Helpers\Helpers;
  5. use App\Helpers\JwtHelper;
  6. use App\Repository\CarriersRepository;
  7. use App\Repository\CarriersSubscriptionsRepository;
  8. use App\Repository\CompanysRepository;
  9. use App\Repository\DriversRepository;
  10. use App\Repository\PackageRepository;
  11. use App\Repository\RefCountryRepository;
  12. use App\Repository\SignatureRepository;
  13. use App\Repository\TaskRepository;
  14. use App\Repository\TasksStatusHistoryRepository;
  15. use App\Repository\UserRepository;
  16. use App\Repository\VillesRepository;
  17. use App\Services\CarrierService;
  18. use App\Services\DriverService;
  19. use App\Services\MailingAttempsFailedService;
  20. use App\Services\PaymentService;
  21. use App\Services\SearchService;
  22. use App\Services\SendMailService;
  23. use App\Services\TasksService;
  24. use App\Services\UserService;
  25. use DateTime;
  26. use Nelmio\ApiDocBundle\Annotation\Security;
  27. use OpenApi\Annotations as OA;
  28. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  29. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  30. use Symfony\Component\HttpFoundation\JsonResponse;
  31. use Symfony\Component\HttpFoundation\RedirectResponse;
  32. use Symfony\Component\HttpFoundation\Request;
  33. use Symfony\Component\HttpFoundation\Response;
  34. use Symfony\Component\Mime\Address;
  35. use Symfony\Component\Routing\Annotation\Route;
  36. class HomeController extends AbstractController
  37. {
  38.     private $_userService;
  39.     private $_taskService;
  40.     private $_chauffeurService;
  41.     private $_refCountryRepository;
  42.     private $_packageRepository;
  43.     private $_villesRepository;
  44.     private $_carriersRepository;
  45.     private $_userRepository;
  46.     private $_carriersSubscriptionRepository;
  47.     private $_driverRepository;
  48.     private $_companysRepository;
  49.     private $_searchService;
  50.     private $_signatureRepository;
  51.     private $_taskStatusHistoryRepository;
  52.     private $_taskRepository;
  53.     private $_paymentService;
  54.     private $_carrierService;
  55.     private $jwtHelper;
  56.     private $_params;
  57.     private $_sendMailService;
  58.     private $_mailingAttempsFailedService;
  59.     public function __construct(
  60.         UserService                     $userService,
  61.         TasksService                    $taskService,
  62.         DriverService                   $driverService,
  63.         RefCountryRepository            $refCountryRepository,
  64.         PackageRepository               $packageRepository,
  65.         VillesRepository                $villesRepository,
  66.         CarriersRepository              $carriersRepository,
  67.         UserRepository                  $userRepository,
  68.         CarriersSubscriptionsRepository $carriersSubscriptionsRepository,
  69.         DriversRepository               $driversRepository,
  70.         CompanysRepository              $companysRepository,
  71.         SearchService                   $searchService,
  72.         SignatureRepository             $signatureRepository,
  73.         TasksStatusHistoryRepository    $tasksStatusHistoryRepository,
  74.         TaskRepository                  $taskRepository,
  75.         PaymentService                  $paymentService,
  76.         CarrierService                  $carrierService,
  77.         SendMailService                  $sendMailService,
  78.         MailingAttempsFailedService    $mailingAttempsFailedService,
  79.         JwtHelper $jwtHelper,
  80.         ParameterBagInterface $params
  81.     )
  82.     {
  83.         $this->_userService = $userService;
  84.         $this->_taskService = $taskService;
  85.         $this->_chauffeurService = $driverService;
  86.         $this->_refCountryRepository = $refCountryRepository;
  87.         $this->_packageRepository = $packageRepository;
  88.         $this->_villesRepository = $villesRepository;
  89.         $this->_carriersRepository = $carriersRepository;
  90.         $this->_userRepository = $userRepository;
  91.         $this->_carriersSubscriptionRepository = $carriersSubscriptionsRepository;
  92.         $this->_driverRepository = $driversRepository;
  93.         $this->_companysRepository = $companysRepository;
  94.         $this->_searchService = $searchService;
  95.         $this->_signatureRepository = $signatureRepository;
  96.         $this->_taskStatusHistoryRepository = $tasksStatusHistoryRepository;
  97.         $this->_taskRepository = $taskRepository;
  98.         $this->_paymentService = $paymentService;
  99.         $this->_carrierService = $carrierService;
  100.         $this->_mailingAttempsFailedService = $mailingAttempsFailedService;
  101.         $this->jwtHelper = $jwtHelper;
  102.         $this->_params = $params;
  103.         $this->_sendMailService = $sendMailService;
  104.     }
  105.     #[Route('/', name: 'app_home')]
  106.     public function index(): Response
  107.     {
  108.         return $this->render('index.html.twig', [
  109.             'controller_name' => 'HomeController',
  110.         ]);
  111.     }
  112.     /**
  113.      * Inscription par virement.
  114.      * Permet de créer un nouveau compte utilisateur en suivant cinq étapes.
  115.      * La première étape est de sélectionner une offre commerciale. La deuxième étape est de saisir les informations du
  116.      * compte utilisateur. La troisième étape est saisir les informations de la société
  117.      * (carrier). La quatrième étape est de précier le mode paiement par carte bancaire ou par virement. La cinquième étape est de passer
  118.      * au paiement par CB, donc saisir le numéro de carte et payer ou bien par virement, donc lui afficher les données dans lesquelles
  119.      * l'inscripteur utilisent pour effectuer son virement.
  120.      *
  121.      * @OA\Tag(name="Inscription")
  122.      * @Security(name="Vyront")
  123.      * @OA\RequestBody(required=true,
  124.      *     @OA\JsonContent(
  125.      *         example={
  126.      *             "raison_sociale": "Bernard Trans",
  127.      *             "adr1": "9 Rue Euthymènes",
  128.      *             "adr2": "",
  129.      *             "cp": "13001",
  130.      *             "cedex": "",
  131.      *             "tel_carrier": "12aa34567dd89",
  132.      *             "ville": "",
  133.      *             "ref_country_id": "73",
  134.      *             "email_carrier": "carrier@gmail.com",
  135.      *             "package_id": "1",
  136.      *             "password": "Azerty123!",
  137.      *             "last_name": "Bonham",
  138.      *             "first_name": "John",
  139.      *             "tel": "123456ddd789",
  140.      *             "mobile": "123456ddd789",
  141.      *             "ref_country_id_user": "73",
  142.      *             "email": "user123@gmail.com",
  143.      *
  144.      *             "payment_mode": "VIR"
  145.      *         },
  146.      *         @OA\Schema (
  147.      *             type="object",
  148.      *             @OA\Property(property="raison_sociale", required=true, description="La raison sociale de la société (carrier).", type="string"),
  149.      *             @OA\Property(property="adr1", required=true, description="L'adresse 1 de la société (carrier).", type="string"),
  150.      *             @OA\Property(property="adr2", required=false, description="L'adresse 2 de la société (carrier).", type="string"),
  151.      *             @OA\Property(property="cp", required=true, description="Le code postal de la société (carrier).", type="string"),
  152.      *             @OA\Property(property="cedex", required=false, description="Le courrier d'entreprise à distribution exceptionnelle de la société (carrier).", type="string"),
  153.      *             @OA\Property(property="tel_carrier", required=true, description="Le numéro de téléphone de la société (carrier).", type="string"),
  154.      *             @OA\Property(property="ville", required=true, description="La ville de la société (carrier).", type="integer"),
  155.      *             @OA\Property(property="ref_country_id", required=true, description="Pays séléctionné de la société (carrier).", type="integer"),
  156.      *             @OA\Property(property="email_carrier", required=true, description="L'adresse e-mail de la société (carrier).", type="string"),
  157.      *
  158.      *             @OA\Property(property="password", required=true, description="Le mot de passe du compte utilisateur.", type="string"),
  159.      *             @OA\Property(property="last_name", required=true, description="Le nom de l'utilisateur.", type="string"),
  160.      *             @OA\Property(property="first_name", required=true, description="Le prénom de l'utilisateur.", type="string"),
  161.      *             @OA\Property(property="tel", required=true, description="Le numéro de téléphone de l'utilisateur.", type="string"),
  162.      *             @OA\Property(property="mobile", required=true, description="Le numéro du mobile de l'utilisateur.", type="string"),
  163.      *             @OA\Property(property="ref_country_id_user", required=true, description="Pays séléctionné de l'utilisateur.", type="string"),
  164.      *             @OA\Property(property="email", required=true, description="L'adresse e-mail de l'utilisateur.", type="string"),
  165.      *
  166.      *             @OA\Property(property="payment_mode", required=true, description="Le mode de paiement (CB ou VIR).", type="string"),
  167.      *         )
  168.      *     )
  169.      * )
  170.      * @OA\Response(
  171.      *     response=200,
  172.      *     description="Retourne un message, la référence et le montant."
  173.      * )
  174.      */
  175.     #[Route('/api/add/user', name: 'app_add_user', methods: ['POST'])]
  176.     public function inscription(Request $request)
  177.     {
  178.         //recuperation du data from request.
  179.         $data = json_decode($request->getContent(), true);
  180.         $user = $this->_userRepository->findOneBy(['email' => $data['email']]);
  181.         if(isset($data['nb_desired_drivers'])){
  182.             $nbDesiredDrivers = $data['nb_desired_drivers'];
  183.         }else{
  184.             $nbDesiredDrivers = $user->getCarriers()->getCarriersSubscriptions()->last()->getNbDesiredVehicles();
  185.         }
  186.         // récupérer l'offre correspondante au nombre des chauffeurs désirés
  187.         $package = $this->_packageRepository->getPackageByDesiredDrivers($nbDesiredDrivers);
  188.         $packageObj = $this->_packageRepository->findOneBy(['id' => $package[0]['id']]);
  189.         $id_payment = $user->getCarriers()->getCarriersSubscriptions()->last()->getPayment()->getId();
  190.         $this->_paymentService->validate($user->getCarriers()->getCarriersSubscriptions()->last()->getPayment(), 0, "VIR");
  191.         $length_id = strlen((string)$user->getCarriers()->getCarriersSubscriptions()->last()->getPayment()->getId());
  192.         $new_id = "00000";
  193.         switch ($length_id) {
  194.             case "1":
  195.                 $new_id = "0000" . $id_payment;
  196.                 break;
  197.             case "2":
  198.                 $new_id = "000" . $id_payment;
  199.                 break;
  200.             case "3":
  201.                 $new_id = "00" . $id_payment;
  202.                 break;
  203.             case "4":
  204.                 $new_id = "0" . $id_payment;
  205.                 break;
  206.             case "5":
  207.                 $new_id = $id_payment;
  208.                 break;
  209.         }
  210.         $datetime = new DateTime();
  211.         $datetime = $datetime->format('YmdHis');
  212.         $reference = $new_id . '-' . $datetime;
  213.         // calcul du prix à payer en se basant sur le nombre des véhicules désirés
  214.         $driversPrice = $this->_carrierService->calculerPrixTotal($packageObj, $nbDesiredDrivers, $user->getCarriers()->getCarriersSubscriptions()->last()->getSubscribedAt());
  215.         $annualPriceExtax = $driversPrice;
  216.         $message = "Vous venez d'ouvrir un compte sur Docutrans, et nous vous en remercions !
  217.         Vous trouverez ci-dessous l'ensemble des informations qui vous permettront d'effectuer votre virement. Votre compte a été créé et il sera activé dès la réception du paiement, un mail vous sera adressé pour vous en informer.
  218.         Si toutefois vous rencontrez un problème ou que vous souhaitez modifier votre mode de règlement, nous vous invitons à nous envoyer un mail ( ".$this->_params->get('support_mail_address')." ) ou à nous appeler au 01 23 45 67 89.";
  219.         // send email
  220.         $attach = array(
  221.             "allow" => "no"
  222.         );
  223.         $context = [
  224.             "angular_url" => $_ENV['DOCUTRANS_URL'],
  225.             "back_url" => $_ENV['BACK_URL'],
  226.             "urlDocutransFr" => $_ENV['Docutrans_FR_URL'],
  227.             "montant" => $annualPriceExtax,
  228.             "reference" => $reference,
  229.         ];
  230.         $admin_emails = $this->_userRepository->findUserByCarrierAndRole(null, "ROLE_ADMIN_USER");
  231.         $admins= [];
  232.         foreach($admin_emails as $admin_email){
  233.             $admins[] = $admin_email['email'];
  234.         }
  235.         $support_mail_address = $this->_params->get('support_mail_address');
  236.         $from_mail_address = $this->_params->get('from_mail_address');
  237.         if ($user->isContactMailjet() || $_ENV['APP_ENV'] === 'dev') {
  238.             $this->_sendMailService->sendTemplatedMail(
  239.                 new Address($from_mail_address, ""),
  240.                 array($user->getEmail()),
  241.                 new Address($support_mail_address, ""),
  242.                 $admin_emails,
  243.                 $attach,
  244.                 'Compte activé',
  245.                 "compte_active",
  246.                 $context
  247.             );
  248.         } else {
  249.             $data_email['from'] = $from_mail_address;
  250.             $data_email['toArray'] = array($user->getEmail());
  251.             $data_email['replyTo'] = $support_mail_address;
  252.             $data_email['cci'] = $admins;
  253.             $data_email['subject'] = 'Compte activé';
  254.             $data_email['template'] = 'compte_active';
  255.             $data_email['context'] = $context;
  256.             $data_email['carrier'] = $user->getCarriers();
  257.             $data_email['etat'] = 0;
  258.             $data_email['attach'] = $attach;
  259.             $data_email['sent_date'] = new \DateTime();
  260.             $this->_mailingAttempsFailedService->add_row($data_email);
  261.         }
  262.         return new JsonResponse(['message' => $message, 'reference' => $reference, 'montant' => $annualPriceExtax, 'status' => 200], Response::HTTP_OK);
  263.     }
  264.     /**
  265.      * Récupération de tous les pays.
  266.      *
  267.      * @OA\Tag(name="Pays et villes")
  268.      * @Security(name="Vyront")
  269.      * @OA\Response(
  270.      *     response=200,
  271.      *     description="Retourne la liste des pays."
  272.      * )
  273.      */
  274.     #[Route('/api/countries', name: 'app_countries', methods: ['GET', "POST"])]
  275.     public function pays()
  276.     {
  277.         $countries = $this->_refCountryRepository->findAllCountries();
  278.         return new JsonResponse($countries);
  279.     }
  280.     /**
  281.      * Récupération des villes par code postal.
  282.      *
  283.      * @OA\Tag(name="Pays et villes")
  284.      * @Security(name="Vyront")
  285.      * @OA\RequestBody(required=true,
  286.      *     @OA\JsonContent(
  287.      *         example={
  288.      *             "cp": "13001",
  289.      *         },
  290.      *         @OA\Schema (
  291.      *             type="object",
  292.      *             @OA\Property(property="cp", required=true, description="Le code postal d'une ville.", type="string"),
  293.      *         )
  294.      *     )
  295.      * )
  296.      * @OA\Response(
  297.      *     response=200,
  298.      *     description="Retourne la liste des villes par code postal."
  299.      * )
  300.      */
  301.     #[Route(path: '/api/villes', name: 'code_villes', methods: ['POST'])]
  302.     public function code_postal_villes(Request $request)
  303.     {
  304.         $code = json_decode($request->getContent(), true);
  305.         $villes = $this->_villesRepository->findVillesByCode($code['cp']);
  306.         return $this->json($villes);
  307.     }
  308.     /**
  309.      * Récupération de tous les clients (carriers).
  310.      * @OA\Tag(name="Clients")
  311.      * @Security(name="Vyront")
  312.      * @OA\Response(
  313.      *     response=200,
  314.      *     description="Retourne la liste des clients (carriers)."
  315.      * )
  316.      */
  317.     #[Route('/api/carriers', name: 'app_carriers', methods: ['GET'])]
  318.     public function carriers(Request $request): Response
  319.     {
  320.         $auth = $this->jwtHelper->verifyJwt($request, []);
  321.         if (is_string($auth)) {
  322.             return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
  323.         }
  324.         return new JsonResponse($this->_carriersRepository->findAllCarriers());
  325.     }
  326.     /**
  327.      * Récupérer une seule société (carrier).
  328.      *
  329.      * @OA\Tag(name="Clients")
  330.      * @Security(name="Vyront")
  331.      * @OA\Response(
  332.      *     response=200,
  333.      *     description="Retourne une seule société (carrier)."
  334.      * )
  335.      */
  336.     #[Route('/api/carriers/{carrierId}', name: 'app_one_carrier', methods: ['GET', "POST"])]
  337.     public function one_carrier(Request $request, $carrierId): Response
  338.     {
  339.         $auth = $this->jwtHelper->verifyJwt($request, []);
  340.         if (is_string($auth)) {
  341.             return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
  342.         }
  343.         $carrier = $this->_carriersRepository->findCarrierBy($carrierId);
  344.         $user = $this->_userRepository->findUserByCarrierAndRole($carrierId, "ROLE_PRINCIPAL_USER");
  345.         $carrier[0]['tel'] = "(+" . $carrier[0]['phonecode'] . ")" . $carrier[0]['tel'];
  346.         $carrier[0]['user'] = $user[0]['first_name'] . ' ' . $user[0]['last_name'];
  347.         $carrier[0]['tel_user'] = "(+" . $user[0]['phonecode'] . ")" . $user[0]['tel'];
  348.         $carrier[0]['created_at_user'] = $user[0]['created_at'];
  349.         return $this->json($carrier[0]);
  350.     }
  351.     /**
  352.      * Récupération des utilisateurs d'une telle société (carrier).
  353.      *
  354.      * @OA\Tag(name="Clients")
  355.      * @Security(name="Vyront")
  356.      * @OA\Response(
  357.      *     response=200,
  358.      *     description="Retourne la liste des utilisateurs d'une telle société (carrier)."
  359.      * )
  360.      */
  361.     #[Route('/api/all/users/{carrierId}', name: 'app_user_carrier', methods: ['GET', "POST"])]
  362.     public function users_carrier(Request $request, $carrierId): Response
  363.     {
  364.         $auth = $this->jwtHelper->verifyJwt($request, []);
  365.         if (is_string($auth)) {
  366.             return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
  367.         }
  368.         $users = $this->_userRepository->findUserByCarrier($carrierId);
  369.         foreach ($users as &$user) {
  370.             $user['role'] = $this->_userService->getFullRole($user['roles'][0]);
  371.             $user['role_user'] = $user['roles'][0];
  372.         }
  373.         unset($user);
  374.         return new JsonResponse($users);
  375.     }
  376.     /**
  377.      * Récupération des sociétés (carriers) qui sont nouvellement inscrites depuis les 30 derniers jours.
  378.      *
  379.      * @OA\Tag(name="Clients")
  380.      * @Security(name="Vyront")
  381.      * @OA\Response(
  382.      *     response=200,
  383.      *     description="Retourne la liste des sociétés (carriers) qui sont nouvellement inscrites dans les derniers 30 jours."
  384.      * )
  385.      */
  386.     #[Route('/api/new/inscription', name: 'app_new_inscription', methods: ['GET', "POST"])]
  387.     public function new_inscription(Request $request)
  388.     {
  389.         $auth = $this->jwtHelper->verifyJwt($request, []);
  390.         if (is_string($auth)) {
  391.             return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
  392.         }
  393.         $date = new DateTime(date('Y-m-d', strtotime('today - 30 days')));
  394.         $carriers = $this->_carriersRepository->findAllCarriers();
  395.         $carriers_arr = [];
  396.         foreach ($carriers as &$carrier) {
  397.             $carrierObj = $this->_carriersRepository->findOneBy(['id'=>$carrier['id']]);
  398.             $carrier['payment_mode'] = (!is_bool($carrierObj->getCarriersSubscriptions()->last()) ? $carrierObj->getCarriersSubscriptions()->last()->getPayment()->getPaymentMode() : "");
  399.             $carrier['mobile'] = '(+' . $carrier['phonecode'] . ')' . $carrier['tel'];
  400.             if ($carrier['created_at'] >= $date) {
  401.                 $carriers_arr[] = $carrier;
  402.             }
  403.         }
  404.         unset($carrier);
  405.         return new JsonResponse($carriers_arr);
  406.     }
  407.     /**
  408.      * Récupération de l'abonnement d'une telle société (carrier).
  409.      *
  410.      * Cet API permet de savoir si la société (carrier) a précié de renouveler automatiquement son abonnement actuel ou non.
  411.      * @OA\Tag(name="Clients")
  412.      * @Security(name="Vyront")
  413.      * @OA\Response(
  414.      *     response=200,
  415.      *     description="Retourne les données de l'abonnement actuel de la société (carrier)."
  416.      * )
  417.      */
  418.     #[Route('/api/carriers/subscriptions/{carrierId}', name: 'app_carriers_subscriptions', methods: ['GET', "POST"])]
  419.     public function carrier_subscrip(Request $request, $carrierId): Response
  420.     {
  421.         $auth = $this->jwtHelper->verifyJwt($request, []);
  422.         if (is_string($auth)) {
  423.             return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
  424.         }
  425.         $carrier_sub = $this->_carriersSubscriptionRepository->findCarrierSubscriptionsByCarrier($carrierId);
  426.         return new JsonResponse($carrier_sub);
  427.     }
  428.     /**
  429.      * Récupération de tous les clients (carriers).
  430.      * Permet de récupérer tous les clients (carriers) pour l'affichage des clients dans
  431.      * le compte administrateur de l'application web.
  432.      * @OA\Tag(name="Clients")
  433.      * @Security(name="Vyront")
  434.      * @OA\Response(
  435.      *     response=200,
  436.      *     description="Retourne la liste des clients (carriers)."
  437.      * )
  438.      */
  439.     #[Route('/api/all/carriers', name: 'app_all_carriers', methods: ['GET', "POST"])]
  440.     public function all_carriers(Request $request): Response
  441.     {
  442.         $auth = $this->jwtHelper->verifyJwt($request, []);
  443.         if (is_string($auth)) {
  444.             return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
  445.         }
  446.         $carriers = $this->_carriersRepository->findAllCarriers();
  447.         foreach ($carriers as &$carrier) {
  448.             $nbr_chauffeurs = $this->_driverRepository->getNumberOfDriverByCarrier($carrier['id']);
  449.             $carrier['nbr_chauffeurs'] = $nbr_chauffeurs[0]['nbr_chauff'];
  450.         }
  451.         unset($carrier);
  452.         return new JsonResponse($carriers);
  453.     }
  454.     /**
  455.      * Vérifier si une adresse e-mail saisie pour une société (carrier) existe déjà ou non.
  456.      *
  457.      * @OA\Tag(name="Clients")
  458.      * @Security(name="Vyront")
  459.      * @OA\RequestBody(required=true,
  460.      *     @OA\JsonContent(
  461.      *         example={
  462.      *             "email_carrier": "test@gmail.com",
  463.      *         },
  464.      *         @OA\Schema (
  465.      *             type="object",
  466.      *             @OA\Property(property="email_carrier", required=true, description="L'adresse e-mail à vérifier.", type="string"),
  467.      *         )
  468.      *     )
  469.      * )
  470.      * @OA\Response(
  471.      *     response=200,
  472.      *     description="Retourne un message si l'adresse e-mail existe déjà."
  473.      * )
  474.      */
  475.     #[Route('/api/check/email/carrier', name: 'app_check_carrier', methods: ['POST'])]
  476.     public function check_email_carrier(Request $request)
  477.     {
  478.         //recuperation du data from request.
  479.         $data = json_decode($request->getContent(), true);
  480.         $existCarrier = $this->_carriersRepository->findOneBy(['email' => $data['email_carrier']]);
  481.         if ($existCarrier != null) {
  482.             return $this->json("Transporteur avec l'adresse e-mail : " . $existCarrier->getEmail() . " existe déjà");
  483.         }
  484.         return $this->json(null);
  485.     }
  486.     /**
  487.      * Rechercher par mot clé.
  488.      * Le mot clé peut être :
  489.      * * le numéro de téléphone d'une compagnie ou un chauffeur.
  490.      * * le nom d'une entreprise ou un chauffeur.
  491.      * * l'adresse e-mail d'une compagnie ou un chauffeur.
  492.      *
  493.      * @OA\Tag(name="Docutrans")
  494.      * @Security(name="Vyront")
  495.      * @OA\RequestBody(required=true,
  496.      *     @OA\JsonContent(
  497.      *         example={
  498.      *             "search": "test@gmail.com",
  499.      *         },
  500.      *         @OA\Schema (
  501.      *             type="object",
  502.      *             @OA\Property(property="search", required=true, description="Un mot clé.", type="string"),
  503.      *         )
  504.      *     )
  505.      * )
  506.      * @OA\Response(
  507.      *     response=200,
  508.      *     description="Retourne un ou des compagnies et/ou un ou des chauffeurs recherchés par mot clé."
  509.      * )
  510.      */
  511.     #[Route(path: '/api/search/{carrierId}', name: 'docutrans_search', methods: 'POST')]
  512.     public function search(Request $request, $carrierId)
  513.     {
  514.         $auth = $this->jwtHelper->verifyJwt($request, []);
  515.         if (is_string($auth)) {
  516.             return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
  517.         }
  518.         $post = json_decode($request->getContent(), true);
  519. //        $post = $request->request->all();
  520.         $data = new \stdClass();
  521.         $companys = [];
  522.         $drivers = [];
  523.         $keyword = $post['search'];
  524.         // vérifier si la chaine saisie par l'utilisateur  n'est
  525.         // ni une chaine qui contient seulement des caractéres alphabétiques
  526.         // ni une adresse email
  527.         if ((!ctype_alpha(str_replace(' ', '', $keyword))) && (!$this->_searchService->checkEmail($keyword))) {
  528.             if (preg_match("/[A-Za-z0-9]/i", $keyword)) {
  529.                 $keyword = preg_replace("/[^0-9]/", '', $keyword);
  530.             }
  531.         }
  532.         // on vérifie le keyword si c'est un numéro
  533.         if (is_numeric($keyword)) {
  534.             $keyword = substr($keyword, -9);
  535.             $companys = $this->_companysRepository->findCompanysByTel($keyword, $carrierId);
  536.             $drivers = $this->_driverRepository->findDriversByTel($keyword, $carrierId);
  537.         }
  538.         // on vérifie le keyword si c'est une chaine qui contient seulement des caractéres alphabétiques
  539.         if ((!$this->_searchService->checkEmail($keyword)) && (!is_numeric($keyword))) {
  540.             $companys = $this->_companysRepository->findCompanysByName($keyword, $carrierId);
  541.             $drivers = $this->_driverRepository->findDriversByName($keyword, $carrierId);
  542.         }
  543.         // on vérifie le keyword si c'est une adresse email
  544.         if ($this->_searchService->checkEmail($keyword)) {
  545.             $companys = $this->_companysRepository->findCompanysByEmail($keyword, $carrierId);
  546.             $drivers = $this->_driverRepository->findDriversByEmail($keyword, $carrierId);
  547.         }
  548.         $data->companys = $companys;
  549.         $data->drivers = $drivers;
  550.         return new JsonResponse($data);
  551.     }
  552.     /**
  553.      * Récupération des données saisies dans les signatures par l'expéditeur et le destinataire.
  554.      *
  555.      * Cet API permet de revenir voir les données saisies dans les signatures par l'expéditeur et le destinataire.
  556.      * @OA\Tag(name="Signatures")
  557.      * @Security(name="Vyront")
  558.      * @OA\Response(
  559.      *     response=200,
  560.      *     description="Retourne les données des signatures."
  561.      * )
  562.      */
  563.     #[Route('/api/infos/exp-dest/{id}', name: 'app_infos_exp_dest_after_sign', methods: ['GET', "POST"])]
  564.     public function infos_exp_dest_after_sign(Request $request, $id)
  565.     {
  566.         $signatures = $this->_signatureRepository->findSigInfosByTask($id);
  567.         $last_status = $this->_taskStatusHistoryRepository->findStatusByTaskIdAnd($id, "started");
  568.         $mission = $this->_taskRepository->findOneBy(['id' => $id]);
  569.         return new JsonResponse([
  570.             'missionId'=>$id,
  571.             'data' => $signatures,
  572.             'last_status' => $last_status[0]['label'],
  573.             'last_status_slug' => $last_status[0]['slug'],
  574.             'date_status' => $last_status[0]['date'],
  575.             'status' => 200,
  576.             'missionType' => $mission->getMission(),
  577.             'exp'=>($mission->getSender() != null ? $mission->getSender()->getCompanyName() : ""),
  578.             'dest'=> ($mission->getConsignee() != null ? $mission->getConsignee()->getCompanyName() : ""),
  579.             'emailExp' => ($mission->getSender() != null ? $mission->getSender()->getEmail() : ""),
  580.             'emailDest' => ($mission->getConsignee() != null ? $mission->getConsignee()->getEmail() : ""),
  581.         ], Response::HTTP_OK);
  582.     }
  583.     /**
  584.      * Ajout ou mis à jour d'une signature.
  585.      *
  586.      * Cet API permet d'insérer ou mettre à jour une signature avec les champs des palettes.
  587.      * @OA\Tag(name="Signatures")
  588.      * @Security(name="Vyront")
  589.      * @OA\Response(
  590.      *     response=200,
  591.      *     description="Retourne un message de succès."
  592.      * )
  593.      */
  594.     #[Route('/api/add/palletsInfos', name: 'app_pallets_infos', methods: ['POST'])]
  595.     public function add_pallets_infos(Request $request)
  596.     {
  597.         file_put_contents("/tmp/pallets_debug.log", json_encode(json_decode($request->getContent(), true)) . "\n", FILE_APPEND);
  598.         $auth = $this->jwtHelper->verifyJwt($request, []);
  599.         if (is_string($auth)) {
  600.             return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
  601.         }
  602.         $data = json_decode($request->getContent(), true);
  603. //        $data = $request->request->all();
  604.         $task = $this->_taskRepository->findOneBy(['id' => $data['task_id']]);
  605.         $user = $this->_userRepository->findOneBy(['id' => $data['user_id']]);
  606.         $signatureObj = $this->_signatureRepository->findSigInfosByTaskAndDriver($task, $user->getDriver(), $data['type_signature']);
  607.         $data['driver'] = $user->getDriver();
  608.         if (count($signatureObj) > 0) {
  609.             $signatureObj = $this->_signatureRepository->findOneBy(['id' => $signatureObj[0]['id']]);
  610.             $this->_taskService->addPalletsOfTask($task, $signatureObj, $data);
  611.         } else {
  612.             $signature = new Signature();
  613.             $this->_taskService->addPalletsOfTask($task, $signature, $data);
  614.         }
  615.         return new JsonResponse(['message' => 'succès'], Response::HTTP_OK);
  616.     }
  617. }