<?php
// src/Controller/LuckyController.php
namespace App\Controller;
use App\Entity\Counter;
use App\Entity\OrderUkraine;
use App\Service\CounterService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Validator\Constraints\Date;
class ScanController extends AbstractController
{
private $security;
public function __construct(Security $security, CounterService $counterService)
{
$this->security = $security;
$this->counterService = $counterService;
}
#[Route('/getstatus', name: 'getStatus')]
public function getStatus(Request $request): Response
{
$content = $request->getContent();
$data = json_decode($content, true);
$documentNumber = $data['DocumentNumber'];
$apiKey = $this->getParameter('api_key');
$phone = $this->getParameter('phone');
$postData = [
"apiKey" => $apiKey,
"modelName" => "TrackingDocumentGeneral",
"calledMethod" => "getStatusDocuments",
"methodProperties" => [
"Documents" => [
[
"DocumentNumber" => $documentNumber,
"Phone" => $phone
]
]
]
];
$ch = curl_init('https://api.novaposhta.ua/v2.0/json/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen(json_encode($postData))
]);
$response = curl_exec($ch);
curl_close($ch);
$responseArray = json_decode($response, true);
if (isset($responseArray['data'][0])) {
return new JsonResponse($responseArray['data'][0]);
} else {
return new JsonResponse(['error' => 'Invalid response from API'], 500);
}
}
#[Route('/testOrder', name: 'test_order')]
public function testOrder(Request $request, EntityManagerInterface $entityManager): Response
{
// Получаем все заказы
$orders = $entityManager->getRepository(OrderUkraine::class)->findAll();
// Создаем массив номеров заказов
$orderNumbers = [];
foreach ($orders as $order) {
$orderNumbers[] = $order->getNumber();
}
// Передаем массив в шаблон
return $this->render('test.html.twig', [
'orderNumbers' => $orderNumbers
]);
}
#[Route('/getStatusCheck/{document}', name: 'getStatusNew')]
public function getStatusCheck(Request $request, EntityManagerInterface $entityManager, string $document): Response
{
if (!$document) {
return new JsonResponse(['error' => 'Document number not provided'], 400);
}
$order = $entityManager->getRepository(OrderUkraine::class)->findOneBy(['number' => $document]);
if (!$order) {
return new JsonResponse(['error' => 'Order not found'], 404);
}
$apiKey = $this->getParameter('api_key');
$phone = $this->getParameter('phone');
$postData = [
"apiKey" => $apiKey,
"modelName" => "TrackingDocumentGeneral",
"calledMethod" => "getStatusDocuments",
"methodProperties" => [
"Documents" => [
[
"DocumentNumber" => $document,
"Phone" => $phone
]
]
]
];
$ch = curl_init('https://api.novaposhta.ua/v2.0/json/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
]);
$response = curl_exec($ch);
curl_close($ch);
$responseArray = json_decode($response, true);
if (isset($responseArray['data'][0]['SenderFullNameEW'])) {
$senderName = $responseArray['data'][0]['SenderFullNameEW'];
$order->setSenderFullNameEW($senderName);
$entityManager->persist($order);
$entityManager->flush();
return new JsonResponse(['success' => 'Order updated successfully']);
} else {
return new JsonResponse(['error' => 'Invalid response from API'], 500);
}
}
#[Route('/addScanDelivery', name: 'add_scan_delivery')]
public function addScanDelivery(Request $request, EntityManagerInterface $entityManager): JsonResponse
{
// Получение данных из запроса
$data = json_decode($request->getContent(), true);
// Проверка на наличие данных и валидность структуры
// Проверка на наличие данных и валидность структуры
if (!isset($data)) {
return new JsonResponse(['status' => 'Error', 'message' => 'Miss object'], JsonResponse::HTTP_BAD_REQUEST);
}
if(!is_array($data)) {
return new JsonResponse(['status' => 'Error', 'message' => 'Invalid data'], JsonResponse::HTTP_BAD_REQUEST);
}
try {
// Создание нового объекта OrderUkraine и установка данных
$orderUkraine = new OrderUkraine();
$orderUkraine->fromArray($data);
// Получение текущего значения счетчика
$value = $this->counterService->getCounterValue();
if ($value === null) {
return new JsonResponse(['status' => 'Error', 'message' => 'Counter value is null'], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
$value += 1;
// Установка значений в объекте OrderUkraine
$orderUkraine->setUndeliveryReasons("");
$orderUkraine->setTracknumberInGermany($value);
$valueDatetoAdd = new \DateTime();
$orderUkraine->setDateAdd($valueDatetoAdd->getTimestamp());
// Сохранение объекта в базе данных
$entityManager->persist($orderUkraine);
$entityManager->flush();
// Инкремент счетчика
$this->counterService->incrementCounter();
// Возвращаем успешный ответ
return new JsonResponse(['status' => 'Success', 'data' => $data], Response::HTTP_OK);
} catch (\Exception $e) {
// Обработка исключений и возврат ошибки
return new JsonResponse(['status' => 'Error', 'message' => $e->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
#[Route('/scan', name: 'admin_scan')]
public function scan(EntityManagerInterface $entityManager): Response
{
$user = $this->security->getUser();
//$orders = $entityManager->getRepository(OrderUkraine::class)->findAll();
$newConter = $entityManager->getRepository(Counter::class)->findAll();
$newCounter = $entityManager->getRepository(Counter::class)->findAll();
$firstCounter = new Counter();
if (!empty($newCounter)) {
$firstCounter = $newCounter[0];
// Теперь можно работать с $firstCounter
} else {
$firstCounter->setValue(0);
$currentDateTime = new \DateTime();
// Преобразование объекта DateTime в строку в формате 'Y-m-d H:i:s'
$dateString = $currentDateTime->format('Y-m-d H:i:s');
$firstCounter->setLastResetData($dateString);
$entityManager->persist($firstCounter);
$entityManager->flush();
}
return $this->render('scan.html.twig', [
'user' => $user,
'orderCount' => "Помилка тут забагато данних",
'newCounter' => $firstCounter->getValue()
]);
}
#[Route('/admin_search', name: 'admin_search')]
public function admin_search(EntityManagerInterface $entityManager): Response
{
$user = $this->security->getUser();
$orders = $entityManager->getRepository(OrderUkraine::class)->findAll();
$newConter = $entityManager->getRepository(Counter::class)->findAll();
$newCounter = $entityManager->getRepository(Counter::class)->findAll();
$firstCounter = new Counter();
if (!empty($newCounter)) {
$firstCounter = $newCounter[0];
// Теперь можно работать с $firstCounter
} else {
$firstCounter->setValue(0);
$currentDateTime = new \DateTime();
// Преобразование объекта DateTime в строку в формате 'Y-m-d H:i:s'
$dateString = $currentDateTime->format('Y-m-d H:i:s');
$firstCounter->setLastResetData($dateString);
$entityManager->persist($firstCounter);
$entityManager->flush();
}
return $this->render('search.html.twig', [
'user' => $user,
]);
}
#[Route('/getCountOrder', name: 'getCountOrder')]
public function getCountOrder(EntityManagerInterface $entityManager): JsonResponse
{
$user = $this->security->getUser();
if (!$user) {
return new JsonResponse(['error' => 'Unauthorized'], JsonResponse::HTTP_UNAUTHORIZED);
}
$orderCount = $entityManager->getRepository(OrderUkraine::class)->count([]);
return new JsonResponse(['orderCount' => $orderCount]);
}
#[Route('/getCountOrderNew', name: 'getCountOrderNew')]
public function getCountOrderNew(EntityManagerInterface $entityManager): JsonResponse
{
$user = $this->security->getUser();
if (!$user) {
return new JsonResponse(['error' => 'Unauthorized'], JsonResponse::HTTP_UNAUTHORIZED);
}
$orderCount = $entityManager->getRepository(Counter::class)->findAll();
$newCounter = $entityManager->getRepository(Counter::class)->findAll();
$firstCounter = new Counter();
if (!empty($newCounter)) {
$firstCounter = $newCounter[0];
// Теперь можно работать с $firstCounter
} else {
$firstCounter->setValue(0);
$currentDateTime = new \DateTime();
//Преобразование объекта DateTime в строку в формате 'Y-m-d H:i:s'
$dateString = $currentDateTime->format('Y-m-d H:i:s');
$firstCounter->setLastResetData($dateString);
$entityManager->persist($firstCounter);
$entityManager->flush();
}
return new JsonResponse(['orderCount' => $firstCounter->getValue()]);
}
#[Route('/getByTTN', name: 'getByTTN')]
public function GetByTTH(Request $request, EntityManagerInterface $entityManager): JsonResponse
{
$user = $this->security->getUser();
if (!$user) {
return new JsonResponse(['error' => 'Unauthorized'], JsonResponse::HTTP_UNAUTHORIZED);
}
$data = json_decode($request->getContent(), true);
$order = new OrderUkraine();
$order = $entityManager->getRepository(OrderUkraine::class)->findOneBy(['number' => $data]);
// Serialize the OrderUkraine object to JSON
return new JsonResponse(['TTH Україна' => $order->getNumber(), 'ТТН Німетчина' => $order->getTracknumberInGermany(), 'Ціна до сплати' => $order->getPriceToPay(), 'Фактична вага' => $order->getFactWeight(), 'Tелефон німеччина' => $order->getPhoneInGermany(), 'Телефон укр відправника' => $order->getPhoneSender(), 'Імя у німетчині' => $order->getNameInGermany(), 'Місто у німетчині'=>$order->getCityInGermany()]);
}
#[Route('/getByTTNGermany', name: 'getByTTNGermany')]
public function getByTTNGermany(EntityManagerInterface $entityManager): JsonResponse
{
$user = $this->security->getUser();
if (!$user) {
return new JsonResponse(['error' => 'Unauthorized'], JsonResponse::HTTP_UNAUTHORIZED);
}
$order = $entityManager->getRepository(OrderUkraine::class)->findOneBy(['number']);
return new JsonResponse(['order' => $order]);
}
#[Route('/setDeliverToClient', name: 'setToClient')]
public function setToClient(): Response
{
$user = $this->security->getUser();
return $this->render('dedescan.html.twig', [
'user' => $user
]);
}
}