src/Controller/Api/ApiOpcController.php line 114

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\Adherent\Annuaire\MagasinContact;
  4. use App\Entity\Adherent\Magasin;
  5. use App\Entity\Adherent\MagasinCoordonnees;
  6. use App\Entity\Adherent\MagasinUrl;
  7. use App\Entity\Image\Image;
  8. use App\Entity\TraficMagasin\NotifReport;
  9. use App\Entity\TraficMagasin\RdvOpc;
  10. use App\Entity\Webfactory\Opc\OpcImage;
  11. use App\Manager\NotificationManager;
  12. use App\Manager\OpcManager;
  13. use App\Manager\TraficMagasin\SmsApiManager;
  14. use Brick\PhoneNumber\PhoneNumberFormat;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\Finder\Exception\AccessDeniedException;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. #[Route(path'/api')]
  22. class ApiOpcController extends AbstractController
  23. {
  24.     public function __construct(private readonly EntityManagerInterface $entityManager, private readonly NotificationManager $notificationManager)
  25.     {
  26.     }
  27.     #[Route(path'/no-permission'name'no_permission')]
  28.     public function noPermission(): never
  29.     {
  30.         throw new AccessDeniedException();
  31.     }
  32.     /**
  33.      * @param Request $request
  34.      * @param EntityManagerInterface $entityManager
  35.      * @param $code
  36.      * @return JsonResponse|void
  37.      */
  38.     #[Route(path'/get-url-fiche/{code}'name'get_url_fiche')]
  39.     public function getUrlFiche(Request $requestEntityManagerInterface $entityManager$code)
  40.     {
  41.         $url $entityManager->getRepository(MagasinUrl::class)->findOneBy(["type" => "OPC/OZC""magasin" => $code]);
  42.         if (!empty($url)) {
  43.             return $this->json(['code' => $url->getMagasin()->getKAdherent(), 'url' => $url->getUrl()]);
  44.         } else {
  45.             return $this->json([]);
  46.         }
  47.     }
  48.     /**
  49.      * @param Request $request
  50.      * @param EntityManagerInterface $entityManager
  51.      * @param OpcManager $manager
  52.      * @param $code
  53.      * @return JsonResponse|void
  54.      */
  55.     #[Route(path'/get-url-rdv/{code}'name'get_url_rdv')]
  56.     public function getUrlRDV(Request $requestEntityManagerInterface $entityManagerOpcManager $manager$code)
  57.     {
  58.         $urlRdv $this->entityManager->getRepository(MagasinUrl::class)->findOneBy(['magasin' => $code'type' => 'rdv']);
  59.         if (!is_null($urlRdv)) {
  60.             return $this->json(['code' => $code'url' => $urlRdv]);
  61.         } else {
  62.             $magasinCoordonnees $entityManager->getRepository(MagasinCoordonnees::class)->findOneBy(['K_ADHERENT' => $code]);
  63.             if (!empty($magasinCoordonnees)) {
  64.                 $url $manager->getAdhOpcUrl($magasinCoordonneespriseDeRdvtrue);
  65.                 return $this->json(['code' => $code'url' => $url]);
  66.             }
  67.         }
  68.     }
  69.     /**
  70.      * @param EntityManagerInterface $entityManager
  71.      * @return JsonResponse
  72.      */
  73.     #[Route(path'/image/vignettes'name'get_vignettes')]
  74.     public function getVignettes(Request $request)
  75.     {
  76.         $tab = [];
  77.         $parameters json_decode($request->getContent(), true);
  78.         if (isset($parameters['adherents']) && !empty($parameters['adherents'])) {
  79.             $vignettes $this->entityManager->getRepository(Image::class)->getVignettes($parameters['adherents']);
  80.             foreach ($vignettes as $vignette) {
  81.                 $tab[$vignette->getAdherent()] = [
  82.                     'img' => $vignette->getName(),
  83.                     'ext' => $vignette->getExtension(),
  84.                     'type' => $vignette->getType()->getName(),
  85.                     'logo' => $vignette->getLogoDefault(),
  86.                     'vignette' => $vignette->getProfileDefault(),
  87.                 ];
  88.             }
  89.             return new JsonResponse(['Status' => "200"'datas' => $tab]);
  90.         } else {
  91.             return new JsonResponse(['Status' => "400"'errors' => "Parametre adherents manquant"]);
  92.         }
  93.     }
  94.     /**
  95.      * @param $adherent
  96.      * @return JsonResponse
  97.      */
  98.     #[Route(path'/image/photos/{magasin}'name'get_photos_by_adherents')]
  99.     public function getPhotos(Request $requestMagasin $magasin)
  100.     {
  101.         $tab = [];
  102.         $photos $this->entityManager->getRepository(OpcImage::class)->findBy(['kAdh' => $magasin->getKAdherent()], ['sort' => 'ASC']);
  103.         foreach ($photos as $photo) {
  104.             $tab[strtoupper((string)$photo->getIdImage()->getAdherent())][] = [
  105.                 'img' => $photo->getIdImage()->getName(),
  106.                 'ext' => $photo->getIdImage()->getExtension(),
  107.                 'type' => $photo->getIdImage()->getType()->getName(),
  108.                 'logo' => $photo->getIdImage()->getLogoDefault(),
  109.                 'vignette' => $photo->getIdImage()->getProfileDefault()
  110.             ];
  111.         }
  112.         return new JsonResponse(['Status' => "200"'datas' => $tab]);
  113.     }
  114.     /**
  115.      * Insère en base les demandes de rendez-vous depuis OPC
  116.      */
  117.     #[Route(path'/sendRdvOpc'name'sendrdvopc')]
  118.     public function sendRdvOpc(Request $request): JsonResponse
  119.     {
  120.         //on récupère les data
  121.         $datas json_decode($request->getContent(), true);
  122.         if ($datas) {
  123.             //on les enregistre sur la table rdv_optician sur espace adhérent
  124.             $new_rdv = new RdvOpc();
  125.             $new_rdv->setKAdherent($datas[0]['codeAdh']);
  126.             $new_rdv->setFirstName($datas[0]['prenom']);
  127.             $new_rdv->setLastName($datas[0]['nom']);
  128.             $new_rdv->setPhone($datas[0]['tel']);
  129.             $new_rdv->setIndicatif($datas[0]['indicatif']);
  130.             if ($datas[0]['email'] != null) {
  131.                 $new_rdv->setEmail($datas[0]['email']);
  132.             }
  133.             $new_rdv->setObject($datas[0]['objet']);
  134.             $new_rdv->setDate(new \DateTime($datas[0]['date']['date']));
  135.             $new_rdv->setDateNaissance(new \DateTime($datas[0]['date_naissance']['date']));
  136.             $new_rdv->setMoment($datas[0]['moment']);
  137.             $new_rdv->setLang($datas[0]['lang']);
  138.             $new_rdv->setAlreadyCustomer($datas[0]['client'] == "Non" 1);
  139.             $new_rdv->setComment($datas[0]['comment'] ?: '');
  140.             $new_rdv->setNumDemande($datas[0]['numDemande'] ?: '');
  141.             $new_rdv->setPrenomProche($datas[0]['prenom_proche']);
  142.             $new_rdv->setNomProche($datas[0]['nom_proche']);
  143.             $new_rdv->setDateNaissanceProche(($datas[0]['date_naissance_proche']) ? new \DateTime($datas[0]['date_naissance_proche']['date']) : null);
  144.             $new_rdv->setIsForMe((int)$datas[0]['rdvPourMoi']);
  145.             $new_rdv->setRepresentantLegals($datas[0]['representant_legals']);
  146.             $this->entityManager->persist($new_rdv);
  147.             $this->entityManager->flush();
  148.             return new JsonResponse(['status' => 200'datas' => $datas]);
  149.         } else {
  150.             return new JsonResponse(['status' => 400'error' => "Aucune donnée envoyée"]);
  151.         }
  152.     }
  153.     /**
  154.      * Crée les notifications pour les rendez-vous
  155.      */
  156.     #[Route(path'/pushNotif'name'pushnotif')]
  157.     public function pushNotificationAction(Request $request): JsonResponse
  158.     {
  159.         //on récupère les data
  160.         $datas json_decode($request->getContent(), true);
  161.         if ($datas) {
  162.             $this->notificationManager->popNotification(
  163.                 $datas[0]['codeAdh'],
  164.                 strtolower($datas[0]['langue']),
  165.                 'trafic_magasin',
  166.                 'trafic_magasin_new_rdv',
  167.                 ((strtolower($datas[0]['langue']) == "fr") ? 'Mon trafic magasin' 'Mijn winkelverkeer'),
  168.                 $this->generateUrl('trafic_index'),
  169.                 $datas[0]['objet'],
  170.                 true
  171.             );
  172.             return new JsonResponse(['status' => 200'datas' => $datas]);
  173.         } else {
  174.             return new JsonResponse(['status' => 400'error' => "Aucune donnée envoyée"]);
  175.         }
  176.     }
  177.     /**
  178.      * @return JsonResponse|void
  179.      * @throws \Exception
  180.      */
  181.     #[Route(path'/send-sms'name'send_sms')]
  182.     public function sendSms(Request $requestSmsApiManager $smsApiManager)
  183.     {
  184.         if ($request->isMethod("POST")) {
  185.             $errors = [];
  186.             if (!$request->request->has('codeAdherent')) {
  187.                 $errors["errors"][] = "codeAdherent not found";
  188.             }
  189.             if ($request->request->has('deliveryTime')) {
  190.                 $request->request->set('deliveryTime', new \DateTime($request->request->get('deliveryTime')));
  191.             }
  192.             if (!$request->request->has('destinationAddress')) {
  193.                 $errors["errors"][] = "Field destinationAddress not found !";
  194.             }
  195.             if (!$request->request->has('messageText')) {
  196.                 $errors["errors"][] = "Field messageText not found !";
  197.             }
  198.             if (!$request->request->has('campaignName')) {
  199.                 $errors["errors"][] = "Field campaignName not found !";
  200.             }
  201.             if (!$request->request->has('originatingAddress')) {
  202.                 $errors["errors"][] = "Field originatingAddress not found !";
  203.             }
  204.             if (empty($errors)) {
  205.                 if ($request->request->get('destinationAddress') == "false" && $request->request->get('searchPhone') == "true") {
  206.                     $phoneNumber $this->entityManager->getRepository(MagasinContact::class)->getSpecificContact($request->request->get('codeAdherent'), 'rdv_sms');
  207.                     $phoneNumber $smsApiManager->getFormatSmsNumber($phoneNumber);
  208.                     if ($phoneNumber) {
  209.                         $request->request->set('destinationAddress'$phoneNumber);
  210.                     } else {
  211.                         $errors["errors"][] = "Invalid phone number or not found";
  212.                         return new JsonResponse($errors);
  213.                     }
  214.                 }
  215.                 if ($smsApiManager->canISendSms($request->request->get('codeAdherent'))) {
  216.                     $notifReport = new NotifReport();
  217.                     $notifReport->setKAdherent($request->request->get('codeAdherent'));
  218.                     $notifReport->setKPays((substr(strtoupper($request->request->get('codeAdherent')), 01) == "B") ? "BE" 'FR');
  219.                     $notifReport->setType("SMS");
  220.                     $notifReport->setDeliveryDate(new \DateTime());
  221.                     $notifReport->setDestination($request->request->get('destinationAddress'));
  222.                     $notifReport->setMessageText($request->request->get('messageText'));
  223.                     $notifReport->setCampaign($request->request->get('campaignName'));
  224.                     $this->entityManager->persist($notifReport);
  225.                     $this->entityManager->flush();
  226.                     $rep $smsApiManager->sendSms(
  227.                         $request->request->get('destinationAddress'),
  228.                         $request->request->get('messageText'),
  229.                         $request->request->get('campaignName'),
  230.                         $request->request->get('originatingAddress'),
  231.                         ($request->request->has('deliveryTime')) ? $request->request->get('deliveryTime') : null
  232.                     );
  233.                     return new JsonResponse(json_decode($rep));
  234.                 } else {
  235.                     $errors["errors"][] = "Impossible d'envoyer le sms ce jour.";
  236.                     return new JsonResponse($errors);
  237.                 }
  238.             } else {
  239.                 return new JsonResponse($errors);
  240.             }
  241.         }
  242.     }
  243.     /**
  244.      * @return JsonResponse|void
  245.      * @throws \Exception
  246.      */
  247.     #[Route(path'/send-sms-client'name'send_sms_client')]
  248.     public function sendSmsClient(Request $requestSmsApiManager $smsApiManager)
  249.     {
  250.         if ($request->isMethod("POST")) {
  251.             $errors = [];
  252.             if ($request->request->has('deliveryTime')) {
  253.                 $request->request->set('deliveryTime', new \DateTime($request->request->get('deliveryTime')));
  254.             }
  255.             if (!$request->request->has('destinationAddress')) {
  256.                 $errors["errors"][] = "Field destinationAddress not found !";
  257.             }
  258.             if (!$request->request->has('messageText')) {
  259.                 $errors["errors"][] = "Field messageText not found !";
  260.             }
  261.             if (!$request->request->has('campaignName')) {
  262.                 $errors["errors"][] = "Field campaignName not found !";
  263.             }
  264.             if (!$request->request->has('originatingAddress')) {
  265.                 $errors["errors"][] = "Field originatingAddress not found !";
  266.             }
  267.             if (!$request->request->has('phone')) {
  268.                 $errors["errors"][] = "Phone number not found !";
  269.             }
  270.             if (empty($errors)) {
  271.                 if ($request->request->get('destinationAddress') == "false" && $request->request->get('searchPhone') == "true") {
  272.                     $phoneNumber $request->request->get('phone');
  273.                     $formattedPhoneNumber $smsApiManager->getFormatSmsNumberClient($phoneNumber$request->request->get('lang'));
  274.                     if ($formattedPhoneNumber) {
  275.                         $request->request->set('destinationAddress'$formattedPhoneNumber);
  276.                     } else {
  277.                         $errors["errors"][] = "Invalid phone number or not found";
  278.                         return new JsonResponse($errors);
  279.                     }
  280.                 }
  281.                 $rep $smsApiManager->sendSms(
  282.                     $request->request->get('destinationAddress'),
  283.                     $request->request->get('messageText'),
  284.                     $request->request->get('campaignName'),
  285.                     $request->request->get('originatingAddress'),
  286.                 );
  287.                 return new JsonResponse(json_decode($rep));
  288.             } else {
  289.                 return new JsonResponse($errors);
  290.             }
  291.         }
  292.     }
  293. }