<?php
namespace App\Controller;
use App\Entity\Signature;
use App\Helpers\Helpers;
use App\Helpers\JwtHelper;
use App\Repository\CarriersRepository;
use App\Repository\CarriersSubscriptionsRepository;
use App\Repository\CompanysRepository;
use App\Repository\DriversRepository;
use App\Repository\PackageRepository;
use App\Repository\RefCountryRepository;
use App\Repository\SignatureRepository;
use App\Repository\TaskRepository;
use App\Repository\TasksStatusHistoryRepository;
use App\Repository\UserRepository;
use App\Repository\VillesRepository;
use App\Services\CarrierService;
use App\Services\DriverService;
use App\Services\MailingAttempsFailedService;
use App\Services\PaymentService;
use App\Services\SearchService;
use App\Services\SendMailService;
use App\Services\TasksService;
use App\Services\UserService;
use DateTime;
use Nelmio\ApiDocBundle\Annotation\Security;
use OpenApi\Annotations as OA;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
private $_userService;
private $_taskService;
private $_chauffeurService;
private $_refCountryRepository;
private $_packageRepository;
private $_villesRepository;
private $_carriersRepository;
private $_userRepository;
private $_carriersSubscriptionRepository;
private $_driverRepository;
private $_companysRepository;
private $_searchService;
private $_signatureRepository;
private $_taskStatusHistoryRepository;
private $_taskRepository;
private $_paymentService;
private $_carrierService;
private $jwtHelper;
private $_params;
private $_sendMailService;
private $_mailingAttempsFailedService;
public function __construct(
UserService $userService,
TasksService $taskService,
DriverService $driverService,
RefCountryRepository $refCountryRepository,
PackageRepository $packageRepository,
VillesRepository $villesRepository,
CarriersRepository $carriersRepository,
UserRepository $userRepository,
CarriersSubscriptionsRepository $carriersSubscriptionsRepository,
DriversRepository $driversRepository,
CompanysRepository $companysRepository,
SearchService $searchService,
SignatureRepository $signatureRepository,
TasksStatusHistoryRepository $tasksStatusHistoryRepository,
TaskRepository $taskRepository,
PaymentService $paymentService,
CarrierService $carrierService,
SendMailService $sendMailService,
MailingAttempsFailedService $mailingAttempsFailedService,
JwtHelper $jwtHelper,
ParameterBagInterface $params
)
{
$this->_userService = $userService;
$this->_taskService = $taskService;
$this->_chauffeurService = $driverService;
$this->_refCountryRepository = $refCountryRepository;
$this->_packageRepository = $packageRepository;
$this->_villesRepository = $villesRepository;
$this->_carriersRepository = $carriersRepository;
$this->_userRepository = $userRepository;
$this->_carriersSubscriptionRepository = $carriersSubscriptionsRepository;
$this->_driverRepository = $driversRepository;
$this->_companysRepository = $companysRepository;
$this->_searchService = $searchService;
$this->_signatureRepository = $signatureRepository;
$this->_taskStatusHistoryRepository = $tasksStatusHistoryRepository;
$this->_taskRepository = $taskRepository;
$this->_paymentService = $paymentService;
$this->_carrierService = $carrierService;
$this->_mailingAttempsFailedService = $mailingAttempsFailedService;
$this->jwtHelper = $jwtHelper;
$this->_params = $params;
$this->_sendMailService = $sendMailService;
}
#[Route('/', name: 'app_home')]
public function index(): Response
{
return $this->render('index.html.twig', [
'controller_name' => 'HomeController',
]);
}
/**
* Inscription par virement.
* Permet de créer un nouveau compte utilisateur en suivant cinq étapes.
* La première étape est de sélectionner une offre commerciale. La deuxième étape est de saisir les informations du
* compte utilisateur. La troisième étape est saisir les informations de la société
* (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
* 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
* l'inscripteur utilisent pour effectuer son virement.
*
* @OA\Tag(name="Inscription")
* @Security(name="Vyront")
* @OA\RequestBody(required=true,
* @OA\JsonContent(
* example={
* "raison_sociale": "Bernard Trans",
* "adr1": "9 Rue Euthymènes",
* "adr2": "",
* "cp": "13001",
* "cedex": "",
* "tel_carrier": "12aa34567dd89",
* "ville": "",
* "ref_country_id": "73",
* "email_carrier": "carrier@gmail.com",
* "package_id": "1",
* "password": "Azerty123!",
* "last_name": "Bonham",
* "first_name": "John",
* "tel": "123456ddd789",
* "mobile": "123456ddd789",
* "ref_country_id_user": "73",
* "email": "user123@gmail.com",
*
* "payment_mode": "VIR"
* },
* @OA\Schema (
* type="object",
* @OA\Property(property="raison_sociale", required=true, description="La raison sociale de la société (carrier).", type="string"),
* @OA\Property(property="adr1", required=true, description="L'adresse 1 de la société (carrier).", type="string"),
* @OA\Property(property="adr2", required=false, description="L'adresse 2 de la société (carrier).", type="string"),
* @OA\Property(property="cp", required=true, description="Le code postal de la société (carrier).", type="string"),
* @OA\Property(property="cedex", required=false, description="Le courrier d'entreprise à distribution exceptionnelle de la société (carrier).", type="string"),
* @OA\Property(property="tel_carrier", required=true, description="Le numéro de téléphone de la société (carrier).", type="string"),
* @OA\Property(property="ville", required=true, description="La ville de la société (carrier).", type="integer"),
* @OA\Property(property="ref_country_id", required=true, description="Pays séléctionné de la société (carrier).", type="integer"),
* @OA\Property(property="email_carrier", required=true, description="L'adresse e-mail de la société (carrier).", type="string"),
*
* @OA\Property(property="password", required=true, description="Le mot de passe du compte utilisateur.", type="string"),
* @OA\Property(property="last_name", required=true, description="Le nom de l'utilisateur.", type="string"),
* @OA\Property(property="first_name", required=true, description="Le prénom de l'utilisateur.", type="string"),
* @OA\Property(property="tel", required=true, description="Le numéro de téléphone de l'utilisateur.", type="string"),
* @OA\Property(property="mobile", required=true, description="Le numéro du mobile de l'utilisateur.", type="string"),
* @OA\Property(property="ref_country_id_user", required=true, description="Pays séléctionné de l'utilisateur.", type="string"),
* @OA\Property(property="email", required=true, description="L'adresse e-mail de l'utilisateur.", type="string"),
*
* @OA\Property(property="payment_mode", required=true, description="Le mode de paiement (CB ou VIR).", type="string"),
* )
* )
* )
* @OA\Response(
* response=200,
* description="Retourne un message, la référence et le montant."
* )
*/
#[Route('/api/add/user', name: 'app_add_user', methods: ['POST'])]
public function inscription(Request $request)
{
//recuperation du data from request.
$data = json_decode($request->getContent(), true);
$user = $this->_userRepository->findOneBy(['email' => $data['email']]);
if(isset($data['nb_desired_drivers'])){
$nbDesiredDrivers = $data['nb_desired_drivers'];
}else{
$nbDesiredDrivers = $user->getCarriers()->getCarriersSubscriptions()->last()->getNbDesiredVehicles();
}
// récupérer l'offre correspondante au nombre des chauffeurs désirés
$package = $this->_packageRepository->getPackageByDesiredDrivers($nbDesiredDrivers);
$packageObj = $this->_packageRepository->findOneBy(['id' => $package[0]['id']]);
$id_payment = $user->getCarriers()->getCarriersSubscriptions()->last()->getPayment()->getId();
$this->_paymentService->validate($user->getCarriers()->getCarriersSubscriptions()->last()->getPayment(), 0, "VIR");
$length_id = strlen((string)$user->getCarriers()->getCarriersSubscriptions()->last()->getPayment()->getId());
$new_id = "00000";
switch ($length_id) {
case "1":
$new_id = "0000" . $id_payment;
break;
case "2":
$new_id = "000" . $id_payment;
break;
case "3":
$new_id = "00" . $id_payment;
break;
case "4":
$new_id = "0" . $id_payment;
break;
case "5":
$new_id = $id_payment;
break;
}
$datetime = new DateTime();
$datetime = $datetime->format('YmdHis');
$reference = $new_id . '-' . $datetime;
// calcul du prix à payer en se basant sur le nombre des véhicules désirés
$driversPrice = $this->_carrierService->calculerPrixTotal($packageObj, $nbDesiredDrivers, $user->getCarriers()->getCarriersSubscriptions()->last()->getSubscribedAt());
$annualPriceExtax = $driversPrice;
$message = "Vous venez d'ouvrir un compte sur Docutrans, et nous vous en remercions !
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.
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.";
// send email
$attach = array(
"allow" => "no"
);
$context = [
"angular_url" => $_ENV['DOCUTRANS_URL'],
"back_url" => $_ENV['BACK_URL'],
"urlDocutransFr" => $_ENV['Docutrans_FR_URL'],
"montant" => $annualPriceExtax,
"reference" => $reference,
];
$admin_emails = $this->_userRepository->findUserByCarrierAndRole(null, "ROLE_ADMIN_USER");
$admins= [];
foreach($admin_emails as $admin_email){
$admins[] = $admin_email['email'];
}
$support_mail_address = $this->_params->get('support_mail_address');
$from_mail_address = $this->_params->get('from_mail_address');
if ($user->isContactMailjet() || $_ENV['APP_ENV'] === 'dev') {
$this->_sendMailService->sendTemplatedMail(
new Address($from_mail_address, ""),
array($user->getEmail()),
new Address($support_mail_address, ""),
$admin_emails,
$attach,
'Compte activé',
"compte_active",
$context
);
} else {
$data_email['from'] = $from_mail_address;
$data_email['toArray'] = array($user->getEmail());
$data_email['replyTo'] = $support_mail_address;
$data_email['cci'] = $admins;
$data_email['subject'] = 'Compte activé';
$data_email['template'] = 'compte_active';
$data_email['context'] = $context;
$data_email['carrier'] = $user->getCarriers();
$data_email['etat'] = 0;
$data_email['attach'] = $attach;
$data_email['sent_date'] = new \DateTime();
$this->_mailingAttempsFailedService->add_row($data_email);
}
return new JsonResponse(['message' => $message, 'reference' => $reference, 'montant' => $annualPriceExtax, 'status' => 200], Response::HTTP_OK);
}
/**
* Récupération de tous les pays.
*
* @OA\Tag(name="Pays et villes")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne la liste des pays."
* )
*/
#[Route('/api/countries', name: 'app_countries', methods: ['GET', "POST"])]
public function pays()
{
$countries = $this->_refCountryRepository->findAllCountries();
return new JsonResponse($countries);
}
/**
* Récupération des villes par code postal.
*
* @OA\Tag(name="Pays et villes")
* @Security(name="Vyront")
* @OA\RequestBody(required=true,
* @OA\JsonContent(
* example={
* "cp": "13001",
* },
* @OA\Schema (
* type="object",
* @OA\Property(property="cp", required=true, description="Le code postal d'une ville.", type="string"),
* )
* )
* )
* @OA\Response(
* response=200,
* description="Retourne la liste des villes par code postal."
* )
*/
#[Route(path: '/api/villes', name: 'code_villes', methods: ['POST'])]
public function code_postal_villes(Request $request)
{
$code = json_decode($request->getContent(), true);
$villes = $this->_villesRepository->findVillesByCode($code['cp']);
return $this->json($villes);
}
/**
* Récupération de tous les clients (carriers).
* @OA\Tag(name="Clients")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne la liste des clients (carriers)."
* )
*/
#[Route('/api/carriers', name: 'app_carriers', methods: ['GET'])]
public function carriers(Request $request): Response
{
$auth = $this->jwtHelper->verifyJwt($request, []);
if (is_string($auth)) {
return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
}
return new JsonResponse($this->_carriersRepository->findAllCarriers());
}
/**
* Récupérer une seule société (carrier).
*
* @OA\Tag(name="Clients")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne une seule société (carrier)."
* )
*/
#[Route('/api/carriers/{carrierId}', name: 'app_one_carrier', methods: ['GET', "POST"])]
public function one_carrier(Request $request, $carrierId): Response
{
$auth = $this->jwtHelper->verifyJwt($request, []);
if (is_string($auth)) {
return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
}
$carrier = $this->_carriersRepository->findCarrierBy($carrierId);
$user = $this->_userRepository->findUserByCarrierAndRole($carrierId, "ROLE_PRINCIPAL_USER");
$carrier[0]['tel'] = "(+" . $carrier[0]['phonecode'] . ")" . $carrier[0]['tel'];
$carrier[0]['user'] = $user[0]['first_name'] . ' ' . $user[0]['last_name'];
$carrier[0]['tel_user'] = "(+" . $user[0]['phonecode'] . ")" . $user[0]['tel'];
$carrier[0]['created_at_user'] = $user[0]['created_at'];
return $this->json($carrier[0]);
}
/**
* Récupération des utilisateurs d'une telle société (carrier).
*
* @OA\Tag(name="Clients")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne la liste des utilisateurs d'une telle société (carrier)."
* )
*/
#[Route('/api/all/users/{carrierId}', name: 'app_user_carrier', methods: ['GET', "POST"])]
public function users_carrier(Request $request, $carrierId): Response
{
$auth = $this->jwtHelper->verifyJwt($request, []);
if (is_string($auth)) {
return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
}
$users = $this->_userRepository->findUserByCarrier($carrierId);
foreach ($users as &$user) {
$user['role'] = $this->_userService->getFullRole($user['roles'][0]);
$user['role_user'] = $user['roles'][0];
}
unset($user);
return new JsonResponse($users);
}
/**
* Récupération des sociétés (carriers) qui sont nouvellement inscrites depuis les 30 derniers jours.
*
* @OA\Tag(name="Clients")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne la liste des sociétés (carriers) qui sont nouvellement inscrites dans les derniers 30 jours."
* )
*/
#[Route('/api/new/inscription', name: 'app_new_inscription', methods: ['GET', "POST"])]
public function new_inscription(Request $request)
{
$auth = $this->jwtHelper->verifyJwt($request, []);
if (is_string($auth)) {
return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
}
$date = new DateTime(date('Y-m-d', strtotime('today - 30 days')));
$carriers = $this->_carriersRepository->findAllCarriers();
$carriers_arr = [];
foreach ($carriers as &$carrier) {
$carrierObj = $this->_carriersRepository->findOneBy(['id'=>$carrier['id']]);
$carrier['payment_mode'] = (!is_bool($carrierObj->getCarriersSubscriptions()->last()) ? $carrierObj->getCarriersSubscriptions()->last()->getPayment()->getPaymentMode() : "");
$carrier['mobile'] = '(+' . $carrier['phonecode'] . ')' . $carrier['tel'];
if ($carrier['created_at'] >= $date) {
$carriers_arr[] = $carrier;
}
}
unset($carrier);
return new JsonResponse($carriers_arr);
}
/**
* Récupération de l'abonnement d'une telle société (carrier).
*
* Cet API permet de savoir si la société (carrier) a précié de renouveler automatiquement son abonnement actuel ou non.
* @OA\Tag(name="Clients")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne les données de l'abonnement actuel de la société (carrier)."
* )
*/
#[Route('/api/carriers/subscriptions/{carrierId}', name: 'app_carriers_subscriptions', methods: ['GET', "POST"])]
public function carrier_subscrip(Request $request, $carrierId): Response
{
$auth = $this->jwtHelper->verifyJwt($request, []);
if (is_string($auth)) {
return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
}
$carrier_sub = $this->_carriersSubscriptionRepository->findCarrierSubscriptionsByCarrier($carrierId);
return new JsonResponse($carrier_sub);
}
/**
* Récupération de tous les clients (carriers).
* Permet de récupérer tous les clients (carriers) pour l'affichage des clients dans
* le compte administrateur de l'application web.
* @OA\Tag(name="Clients")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne la liste des clients (carriers)."
* )
*/
#[Route('/api/all/carriers', name: 'app_all_carriers', methods: ['GET', "POST"])]
public function all_carriers(Request $request): Response
{
$auth = $this->jwtHelper->verifyJwt($request, []);
if (is_string($auth)) {
return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
}
$carriers = $this->_carriersRepository->findAllCarriers();
foreach ($carriers as &$carrier) {
$nbr_chauffeurs = $this->_driverRepository->getNumberOfDriverByCarrier($carrier['id']);
$carrier['nbr_chauffeurs'] = $nbr_chauffeurs[0]['nbr_chauff'];
}
unset($carrier);
return new JsonResponse($carriers);
}
/**
* Vérifier si une adresse e-mail saisie pour une société (carrier) existe déjà ou non.
*
* @OA\Tag(name="Clients")
* @Security(name="Vyront")
* @OA\RequestBody(required=true,
* @OA\JsonContent(
* example={
* "email_carrier": "test@gmail.com",
* },
* @OA\Schema (
* type="object",
* @OA\Property(property="email_carrier", required=true, description="L'adresse e-mail à vérifier.", type="string"),
* )
* )
* )
* @OA\Response(
* response=200,
* description="Retourne un message si l'adresse e-mail existe déjà."
* )
*/
#[Route('/api/check/email/carrier', name: 'app_check_carrier', methods: ['POST'])]
public function check_email_carrier(Request $request)
{
//recuperation du data from request.
$data = json_decode($request->getContent(), true);
$existCarrier = $this->_carriersRepository->findOneBy(['email' => $data['email_carrier']]);
if ($existCarrier != null) {
return $this->json("Transporteur avec l'adresse e-mail : " . $existCarrier->getEmail() . " existe déjà");
}
return $this->json(null);
}
/**
* Rechercher par mot clé.
* Le mot clé peut être :
* * le numéro de téléphone d'une compagnie ou un chauffeur.
* * le nom d'une entreprise ou un chauffeur.
* * l'adresse e-mail d'une compagnie ou un chauffeur.
*
* @OA\Tag(name="Docutrans")
* @Security(name="Vyront")
* @OA\RequestBody(required=true,
* @OA\JsonContent(
* example={
* "search": "test@gmail.com",
* },
* @OA\Schema (
* type="object",
* @OA\Property(property="search", required=true, description="Un mot clé.", type="string"),
* )
* )
* )
* @OA\Response(
* response=200,
* description="Retourne un ou des compagnies et/ou un ou des chauffeurs recherchés par mot clé."
* )
*/
#[Route(path: '/api/search/{carrierId}', name: 'docutrans_search', methods: 'POST')]
public function search(Request $request, $carrierId)
{
$auth = $this->jwtHelper->verifyJwt($request, []);
if (is_string($auth)) {
return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
}
$post = json_decode($request->getContent(), true);
// $post = $request->request->all();
$data = new \stdClass();
$companys = [];
$drivers = [];
$keyword = $post['search'];
// vérifier si la chaine saisie par l'utilisateur n'est
// ni une chaine qui contient seulement des caractéres alphabétiques
// ni une adresse email
if ((!ctype_alpha(str_replace(' ', '', $keyword))) && (!$this->_searchService->checkEmail($keyword))) {
if (preg_match("/[A-Za-z0-9]/i", $keyword)) {
$keyword = preg_replace("/[^0-9]/", '', $keyword);
}
}
// on vérifie le keyword si c'est un numéro
if (is_numeric($keyword)) {
$keyword = substr($keyword, -9);
$companys = $this->_companysRepository->findCompanysByTel($keyword, $carrierId);
$drivers = $this->_driverRepository->findDriversByTel($keyword, $carrierId);
}
// on vérifie le keyword si c'est une chaine qui contient seulement des caractéres alphabétiques
if ((!$this->_searchService->checkEmail($keyword)) && (!is_numeric($keyword))) {
$companys = $this->_companysRepository->findCompanysByName($keyword, $carrierId);
$drivers = $this->_driverRepository->findDriversByName($keyword, $carrierId);
}
// on vérifie le keyword si c'est une adresse email
if ($this->_searchService->checkEmail($keyword)) {
$companys = $this->_companysRepository->findCompanysByEmail($keyword, $carrierId);
$drivers = $this->_driverRepository->findDriversByEmail($keyword, $carrierId);
}
$data->companys = $companys;
$data->drivers = $drivers;
return new JsonResponse($data);
}
/**
* Récupération des données saisies dans les signatures par l'expéditeur et le destinataire.
*
* Cet API permet de revenir voir les données saisies dans les signatures par l'expéditeur et le destinataire.
* @OA\Tag(name="Signatures")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne les données des signatures."
* )
*/
#[Route('/api/infos/exp-dest/{id}', name: 'app_infos_exp_dest_after_sign', methods: ['GET', "POST"])]
public function infos_exp_dest_after_sign(Request $request, $id)
{
$signatures = $this->_signatureRepository->findSigInfosByTask($id);
$last_status = $this->_taskStatusHistoryRepository->findStatusByTaskIdAnd($id, "started");
$mission = $this->_taskRepository->findOneBy(['id' => $id]);
return new JsonResponse([
'missionId'=>$id,
'data' => $signatures,
'last_status' => $last_status[0]['label'],
'last_status_slug' => $last_status[0]['slug'],
'date_status' => $last_status[0]['date'],
'status' => 200,
'missionType' => $mission->getMission(),
'exp'=>($mission->getSender() != null ? $mission->getSender()->getCompanyName() : ""),
'dest'=> ($mission->getConsignee() != null ? $mission->getConsignee()->getCompanyName() : ""),
'emailExp' => ($mission->getSender() != null ? $mission->getSender()->getEmail() : ""),
'emailDest' => ($mission->getConsignee() != null ? $mission->getConsignee()->getEmail() : ""),
], Response::HTTP_OK);
}
/**
* Ajout ou mis à jour d'une signature.
*
* Cet API permet d'insérer ou mettre à jour une signature avec les champs des palettes.
* @OA\Tag(name="Signatures")
* @Security(name="Vyront")
* @OA\Response(
* response=200,
* description="Retourne un message de succès."
* )
*/
#[Route('/api/add/palletsInfos', name: 'app_pallets_infos', methods: ['POST'])]
public function add_pallets_infos(Request $request)
{
file_put_contents("/tmp/pallets_debug.log", json_encode(json_decode($request->getContent(), true)) . "\n", FILE_APPEND);
$auth = $this->jwtHelper->verifyJwt($request, []);
if (is_string($auth)) {
return new JsonResponse(['message' => $auth, 'status' => 401], JsonResponse::HTTP_UNAUTHORIZED);
}
$data = json_decode($request->getContent(), true);
// $data = $request->request->all();
$task = $this->_taskRepository->findOneBy(['id' => $data['task_id']]);
$user = $this->_userRepository->findOneBy(['id' => $data['user_id']]);
$signatureObj = $this->_signatureRepository->findSigInfosByTaskAndDriver($task, $user->getDriver(), $data['type_signature']);
$data['driver'] = $user->getDriver();
if (count($signatureObj) > 0) {
$signatureObj = $this->_signatureRepository->findOneBy(['id' => $signatureObj[0]['id']]);
$this->_taskService->addPalletsOfTask($task, $signatureObj, $data);
} else {
$signature = new Signature();
$this->_taskService->addPalletsOfTask($task, $signature, $data);
}
return new JsonResponse(['message' => 'succès'], Response::HTTP_OK);
}
}