src/Controller/ScanController.php line 271

Open in your IDE?
  1. <?php
  2. // src/Controller/LuckyController.php
  3. namespace App\Controller;
  4. use App\Entity\Counter;
  5. use App\Entity\OrderUkraine;
  6. use App\Service\CounterService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Core\Security;
  14. use Symfony\Component\Validator\Constraints\Date;
  15. class ScanController extends AbstractController
  16. {
  17.     private $security;
  18.     public function __construct(Security $securityCounterService $counterService)
  19.     {
  20.         $this->security $security;
  21.         $this->counterService $counterService;
  22.     }
  23.     #[Route('/getstatus'name'getStatus')]
  24.     public function getStatus(Request $request): Response
  25.     {
  26.         $content $request->getContent();
  27.         $data json_decode($contenttrue);
  28.         $documentNumber $data['DocumentNumber'];
  29.         $apiKey $this->getParameter('api_key');
  30.         $phone $this->getParameter('phone');
  31.         $postData = [
  32.             "apiKey" => $apiKey,
  33.             "modelName" => "TrackingDocumentGeneral",
  34.             "calledMethod" => "getStatusDocuments",
  35.             "methodProperties" => [
  36.                 "Documents" => [
  37.                     [
  38.                         "DocumentNumber" => $documentNumber,
  39.                         "Phone" => $phone
  40.                     ]
  41.                 ]
  42.             ]
  43.         ];
  44.         $ch curl_init('https://api.novaposhta.ua/v2.0/json/');
  45.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  46.         curl_setopt($chCURLOPT_POSTtrue);
  47.         curl_setopt($chCURLOPT_POSTFIELDSjson_encode($postData));
  48.         curl_setopt($chCURLOPT_HTTPHEADER, [
  49.             'Content-Type: application/json',
  50.             'Content-Length: ' strlen(json_encode($postData))
  51.         ]);
  52.         $response curl_exec($ch);
  53.         curl_close($ch);
  54.         $responseArray json_decode($responsetrue);
  55.         if (isset($responseArray['data'][0])) {
  56.             return new JsonResponse($responseArray['data'][0]);
  57.         } else {
  58.             return new JsonResponse(['error' => 'Invalid response from API'], 500);
  59.         }
  60.     }
  61.     #[Route('/testOrder'name'test_order')]
  62.     public function testOrder(Request $requestEntityManagerInterface $entityManager): Response
  63.     {
  64.         // Получаем все заказы
  65.         $orders $entityManager->getRepository(OrderUkraine::class)->findAll();
  66.         // Создаем массив номеров заказов
  67.         $orderNumbers = [];
  68.         foreach ($orders as $order) {
  69.             $orderNumbers[] = $order->getNumber();
  70.         }
  71.         // Передаем массив в шаблон
  72.         return $this->render('test.html.twig', [
  73.             'orderNumbers' => $orderNumbers
  74.         ]);
  75.     }
  76.     #[Route('/getStatusCheck/{document}'name'getStatusNew')]
  77.     public function getStatusCheck(Request $requestEntityManagerInterface $entityManagerstring $document): Response
  78.     {
  79.         if (!$document) {
  80.             return new JsonResponse(['error' => 'Document number not provided'], 400);
  81.         }
  82.         $order $entityManager->getRepository(OrderUkraine::class)->findOneBy(['number' => $document]);
  83.         if (!$order) {
  84.             return new JsonResponse(['error' => 'Order not found'], 404);
  85.         }
  86.         $apiKey $this->getParameter('api_key');
  87.         $phone $this->getParameter('phone');
  88.         $postData = [
  89.             "apiKey" => $apiKey,
  90.             "modelName" => "TrackingDocumentGeneral",
  91.             "calledMethod" => "getStatusDocuments",
  92.             "methodProperties" => [
  93.                 "Documents" => [
  94.                     [
  95.                         "DocumentNumber" => $document,
  96.                         "Phone" => $phone
  97.                     ]
  98.                 ]
  99.             ]
  100.         ];
  101.         $ch curl_init('https://api.novaposhta.ua/v2.0/json/');
  102.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  103.         curl_setopt($chCURLOPT_POSTtrue);
  104.         curl_setopt($chCURLOPT_POSTFIELDSjson_encode($postData));
  105.         curl_setopt($chCURLOPT_HTTPHEADER, [
  106.             'Content-Type: application/json',
  107.         ]);
  108.         $response curl_exec($ch);
  109.         curl_close($ch);
  110.         $responseArray json_decode($responsetrue);
  111.         if (isset($responseArray['data'][0]['SenderFullNameEW'])) {
  112.             $senderName $responseArray['data'][0]['SenderFullNameEW'];
  113.             $order->setSenderFullNameEW($senderName);
  114.             $entityManager->persist($order);
  115.             $entityManager->flush();
  116.             return new JsonResponse(['success' => 'Order updated successfully']);
  117.         } else {
  118.             return new JsonResponse(['error' => 'Invalid response from API'], 500);
  119.         }
  120.     }
  121.     #[Route('/addScanDelivery'name'add_scan_delivery')]
  122.     public function addScanDelivery(Request $requestEntityManagerInterface $entityManager): JsonResponse
  123.     {
  124.         // Получение данных из запроса
  125.         $data json_decode($request->getContent(), true);
  126.         // Проверка на наличие данных и валидность структуры
  127.        
  128.         // Проверка на наличие данных и валидность структуры
  129.         if (!isset($data)) {
  130.             return new JsonResponse(['status' => 'Error''message' => 'Miss object'], JsonResponse::HTTP_BAD_REQUEST);
  131.         }
  132.         if(!is_array($data)) {
  133.             return new JsonResponse(['status' => 'Error''message' => 'Invalid data'], JsonResponse::HTTP_BAD_REQUEST);
  134.         }
  135.         try {
  136.             // Создание нового объекта OrderUkraine и установка данных
  137.             $orderUkraine = new OrderUkraine();
  138.             $orderUkraine->fromArray($data);
  139.             // Получение текущего значения счетчика
  140.             $value $this->counterService->getCounterValue();
  141.             if ($value === null) {
  142.                 return new JsonResponse(['status' => 'Error''message' => 'Counter value is null'], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
  143.             }
  144.             $value += 1;
  145.             // Установка значений в объекте OrderUkraine
  146.             $orderUkraine->setUndeliveryReasons("");
  147.             $orderUkraine->setTracknumberInGermany($value);
  148.             $valueDatetoAdd = new \DateTime();
  149.             $orderUkraine->setDateAdd($valueDatetoAdd->getTimestamp());
  150.             // Сохранение объекта в базе данных
  151.             $entityManager->persist($orderUkraine);
  152.             $entityManager->flush();
  153.             // Инкремент счетчика
  154.             $this->counterService->incrementCounter();
  155.             // Возвращаем успешный ответ
  156.             return new JsonResponse(['status' => 'Success''data' => $data], Response::HTTP_OK);
  157.         } catch (\Exception $e) {
  158.             // Обработка исключений и возврат ошибки
  159.             return new JsonResponse(['status' => 'Error''message' => $e->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);
  160.         }
  161.     }
  162.     #[Route('/scan'name'admin_scan')]
  163.     public function scan(EntityManagerInterface $entityManager): Response
  164.     {
  165.         $user $this->security->getUser();
  166.         //$orders = $entityManager->getRepository(OrderUkraine::class)->findAll();
  167.         
  168.         $newConter $entityManager->getRepository(Counter::class)->findAll();
  169.         $newCounter $entityManager->getRepository(Counter::class)->findAll();
  170.         $firstCounter = new Counter();
  171.         if (!empty($newCounter)) {
  172.             $firstCounter $newCounter[0];
  173.             // Теперь можно работать с $firstCounter
  174.         } else {
  175.             $firstCounter->setValue(0);
  176.             $currentDateTime = new \DateTime();
  177.             // Преобразование объекта DateTime в строку в формате 'Y-m-d H:i:s'
  178.             $dateString $currentDateTime->format('Y-m-d H:i:s');
  179.             $firstCounter->setLastResetData($dateString);
  180.             $entityManager->persist($firstCounter);
  181.             $entityManager->flush();
  182.         }
  183.         return $this->render('scan.html.twig', [
  184.             'user' => $user,
  185.             'orderCount' => "Помилка тут забагато данних",
  186.             'newCounter' => $firstCounter->getValue()
  187.         ]);
  188.     }
  189.     #[Route('/admin_search'name'admin_search')]
  190.     public function admin_search(EntityManagerInterface $entityManager): Response
  191.     {
  192.         $user $this->security->getUser();
  193.         $orders $entityManager->getRepository(OrderUkraine::class)->findAll();
  194.         $newConter $entityManager->getRepository(Counter::class)->findAll();
  195.         $newCounter $entityManager->getRepository(Counter::class)->findAll();
  196.         $firstCounter = new Counter();
  197.         if (!empty($newCounter)) {
  198.             $firstCounter $newCounter[0];
  199.             // Теперь можно работать с $firstCounter
  200.         } else {
  201.             $firstCounter->setValue(0);
  202.             $currentDateTime = new \DateTime();
  203.             // Преобразование объекта DateTime в строку в формате 'Y-m-d H:i:s'
  204.             $dateString $currentDateTime->format('Y-m-d H:i:s');
  205.             $firstCounter->setLastResetData($dateString);
  206.             $entityManager->persist($firstCounter);
  207.             $entityManager->flush();
  208.         }
  209.         return $this->render('search.html.twig', [
  210.             'user' => $user,
  211.         ]);
  212.     }
  213.     #[Route('/getCountOrder'name'getCountOrder')]
  214.     public function getCountOrder(EntityManagerInterface $entityManager): JsonResponse
  215.     {
  216.         $user $this->security->getUser();
  217.         if (!$user) {
  218.             return new JsonResponse(['error' => 'Unauthorized'], JsonResponse::HTTP_UNAUTHORIZED);
  219.         }
  220.         $orderCount $entityManager->getRepository(OrderUkraine::class)->count([]);
  221.         return new JsonResponse(['orderCount' => $orderCount]);
  222.     }
  223.     #[Route('/getCountOrderNew'name'getCountOrderNew')]
  224.     public function getCountOrderNew(EntityManagerInterface $entityManager): JsonResponse
  225.     {
  226.         $user $this->security->getUser();
  227.         if (!$user) {
  228.             return new JsonResponse(['error' => 'Unauthorized'], JsonResponse::HTTP_UNAUTHORIZED);
  229.         }
  230.         $orderCount $entityManager->getRepository(Counter::class)->findAll();
  231.         $newCounter $entityManager->getRepository(Counter::class)->findAll();
  232.         $firstCounter = new Counter();
  233.         if (!empty($newCounter)) {
  234.             $firstCounter $newCounter[0];
  235.             // Теперь можно работать с $firstCounter
  236.         } else {
  237.             $firstCounter->setValue(0);
  238.             $currentDateTime = new \DateTime();
  239.             //Преобразование объекта DateTime в строку в формате 'Y-m-d H:i:s'
  240.             $dateString $currentDateTime->format('Y-m-d H:i:s');
  241.             $firstCounter->setLastResetData($dateString);
  242.             $entityManager->persist($firstCounter);
  243.             $entityManager->flush();
  244.         }
  245.         return new JsonResponse(['orderCount' => $firstCounter->getValue()]);
  246.     }
  247.     
  248.     
  249.     #[Route('/getByTTN'name'getByTTN')]
  250.     public function GetByTTH(Request $requestEntityManagerInterface $entityManager): JsonResponse
  251.     {
  252.         $user $this->security->getUser();
  253.         if (!$user) {
  254.             return new JsonResponse(['error' => 'Unauthorized'], JsonResponse::HTTP_UNAUTHORIZED);
  255.         }
  256.         $data json_decode($request->getContent(), true);
  257.         $order = new OrderUkraine();
  258.         $order $entityManager->getRepository(OrderUkraine::class)->findOneBy(['number' => $data]);
  259.         // Serialize the OrderUkraine object to JSON
  260.        return new JsonResponse(['TTH Україна' => $order->getNumber(), 'ТТН Німетчина' => $order->getTracknumberInGermany(), 'Ціна до сплати' => $order->getPriceToPay(), 'Фактична вага' => $order->getFactWeight(), 'Tелефон німеччина' => $order->getPhoneInGermany(), 'Телефон укр відправника' => $order->getPhoneSender(), 'Імя у німетчині' => $order->getNameInGermany(), 'Місто у німетчині'=>$order->getCityInGermany()]);
  261.     }
  262.     #[Route('/getByTTNGermany'name'getByTTNGermany')]
  263.     public function getByTTNGermany(EntityManagerInterface $entityManager): JsonResponse
  264.     {
  265.         $user $this->security->getUser();
  266.         if (!$user) {
  267.             return new JsonResponse(['error' => 'Unauthorized'], JsonResponse::HTTP_UNAUTHORIZED);
  268.         }
  269.         $order $entityManager->getRepository(OrderUkraine::class)->findOneBy(['number']);
  270.         return new JsonResponse(['order' => $order]);
  271.     }
  272.     #[Route('/setDeliverToClient'name'setToClient')]
  273.     public function setToClient(): Response
  274.     {
  275.         $user $this->security->getUser();
  276.         return $this->render('dedescan.html.twig', [
  277.             'user' => $user
  278.         ]);
  279.     }
  280. }