src/Controller/OrderController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\GoodsOrder;
  4. use App\Entity\GoodsOrderTarget;
  5. use App\Entity\Multibonus\Order as MultibonusOrder;
  6. use App\Entity\OzonPosting;
  7. use App\Entity\OzonPostingTarget;
  8. use App\Entity\WBOrder;
  9. use App\Entity\WildberriesPostingTarget;
  10. use App\Entity\YandexOrder;
  11. use App\Entity\YandexOrderTarget;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class OrderController extends AbstractController
  17. {
  18.     /**
  19.      * @Route(
  20.      *     "order/{number}/",
  21.      *     name="get_order",
  22.      *     host="%host.monitoring%",
  23.      *     methods={"GET"}
  24.      * )
  25.      *
  26.      * @param string $number
  27.      *
  28.      * @return Response
  29.      */
  30.     public function getOrderAction(string $numberRequest $request): Response
  31.     {
  32.         if($request->get('api_key') != $this->tokenOrderInfo) {
  33.             return new JsonResponse('Invalid token'400);
  34.         }
  35.         try {
  36.             /** OZON */
  37.             /** @var OzonPostingTarget $ozonPostingTarget */
  38.             $posting $this->em
  39.                 ->getRepository(OzonPosting::class)
  40.                 ->findOneBy(["postingNumber" => $number]);
  41.             /** OZON */
  42.             /** WB */
  43.             if(null == $posting) {
  44.                 /** @var WBOrder $posting */
  45.                 $posting $this->em
  46.                     ->getRepository(WBOrder::class)
  47.                     ->findOneBy(["orderId" => $number]);
  48.             }
  49.             /** WB */
  50.             /** Yandex */
  51.             if(null == $posting) {
  52.                 /** @var YandexOrder $posting */
  53.                 $posting $this->em
  54.                     ->getRepository(YandexOrder::class)
  55.                     ->findOneBy(["orderId" => $number]);
  56.             }
  57.             /** Yandex */
  58.             /** Sber */
  59.             if(null == $posting) {
  60.                 /** @var GoodsOrder $posting */
  61.                 $posting $this->em
  62.                     ->getRepository(GoodsOrder::class)
  63.                     ->findOneBy(["shipmentId" => $number]);
  64.             }
  65.             /** Sber */
  66.             /** Multibonus */
  67.             if (null == $posting) {
  68.                 /** @var MultibonusOrder $goodsPostingTarget */
  69.                 $posting $this->em
  70.                     ->getRepository(MultibonusOrder::class)
  71.                     ->findOneBy(["externalId" => $number]);
  72.             }
  73.             /** Multibonus */
  74.             if(null == $posting) {
  75.                 return new JsonResponse([
  76.                     'status' => false,
  77.                     'error' => 'Order not found'
  78.                 ]);
  79.             }
  80.             $data $this->postingToOrder($posting);
  81.             $json json_encode($dataJSON_PRETTY_PRINT |JSON_UNESCAPED_UNICODE);
  82.             return new JsonResponse($json200, [], true);
  83.         } catch (\Exception $e) {
  84.             $this->logger->debug('getOrderNumberAction: ' $e->getMessage());
  85.             return new JsonResponse(['status' => false'error' => 'Something went wrong']);
  86.         }
  87.     }
  88.     private function postingToOrder($posting): array
  89.     {
  90.         //дата заказа, площадка, юр лицо магазина, информация о товарах в заказе массивом (СП код, наименование, кол-во, стоимость единицы, сумма
  91.         $orderDate null;
  92.         $mp null;
  93.         $company null;
  94.         $products = [];
  95.         /** @var OzonPosting $posting */
  96.         if ($posting instanceof OzonPosting) {
  97.             $orderDate $posting->getCreatedAt();
  98.             $mp 'Ozon';
  99.             $company $posting->getClient()->getLegalName();
  100.             foreach ($posting->getPostingProducts() as $postingProduct) {
  101.                 $product $postingProduct->getProduct();
  102.                 $products[] = [
  103.                     'article' => $postingProduct->getOfferId(),
  104.                     'name' => $product->getName(),
  105.                     'quantity' => $postingProduct->getQuantity(),
  106.                     'price' => $postingProduct->getPrice(),
  107.                     'cost' => $postingProduct->getQuantity() * $postingProduct->getPrice()
  108.                 ];
  109.             }
  110.             /** @var WBOrder $posting */
  111.         } else if ($posting instanceof WBOrder) {
  112.             $orderDate $posting->getOrderDate();
  113.             $mp 'Wildberries';
  114.             $company $posting->getClient()->getCompany();
  115.             foreach ($posting->getItems() as $orderItem) {
  116.                 $product $orderItem->getWildberriesProduct();
  117.                 $products[] = [
  118.                     'article' => $product->getArticle(),
  119.                     'name' => $product->getName(),
  120.                     'quantity' => 1,
  121.                     'price' => $orderItem->getTotalPrice(),
  122.                     'cost' => $orderItem->getTotalPrice()
  123.                 ];
  124.             }
  125.             /** @var YandexOrder $posting */
  126.         } else if ($posting instanceof YandexOrder) {
  127.             $orderDate $posting->getCreatedAt();
  128.             $mp "Yandex";
  129.             $company $posting->getClient()->getCompany();
  130.             foreach ($posting->getOrderItems() as $orderItem) {
  131.                 $product $orderItem->getProduct();
  132.                 $price = (int)round($orderItem->getPrice() * 100);
  133.                 $products[] = [
  134.                     'article' => $product->getArticle(),
  135.                     'name' => $product->getName(),
  136.                     'quantity' => $orderItem->getQuantity(),
  137.                     'price' => $price,
  138.                     'cost' => $orderItem->getQuantity() * $price
  139.                 ];
  140.             }
  141.             /** @var GoodsOrder $posting */
  142.         } else if ($posting instanceof GoodsOrder) {
  143.             $orderDate $posting->getCreatedAt();
  144.             $mp "МегаМаркет";
  145.             $company $posting->getClient()->getCompany();
  146.             foreach ($posting->getItems() as $orderItem) {
  147.                 $price = (int)round($orderItem->getFinalPrice() * 100);
  148.                 $products[] = [
  149.                     'article' => $orderItem->getOfferId(),
  150.                     'name' => $orderItem->getItemName(),
  151.                     'quantity' => $orderItem->getQuantity(),
  152.                     'price' => $price,
  153.                     'cost' => $orderItem->getQuantity() * $price
  154.                 ];
  155.             }
  156.             /** @var MultibonusOrder $posting */
  157.         } else if ($posting instanceof MultibonusOrder) {
  158.             $orderDate $posting->getCreatedAt();
  159.             $mp "Мультибонус";
  160.             $company $posting->getClient()->getCompany();
  161.             foreach ($posting->getItems() as $orderItem) {
  162.                 $product $orderItem->getProduct();
  163.                 $price = (int)round($orderItem->getPrice() * 100);
  164.                 $products[] = [
  165.                     'article' => $orderItem->getOfferId(),
  166.                     'name' => $product->getName(),
  167.                     'quantity' => $orderItem->getAmount(),
  168.                     'price' => $price,
  169.                     'cost' => $orderItem->getAmount() * $price
  170.                 ];
  171.             }
  172.         }
  173.         return [
  174.             'created_at' => $orderDate instanceof \DateTime $orderDate->format('d.m.Y H:i') : '',
  175.             'client' => $mp,
  176.             'company' => $company,
  177.             'products' => $products
  178.         ];
  179.     }
  180. }