src/WebBundle/Controller/OrdersController.php line 143

Open in your IDE?
  1. <?php
  2. namespace WebBundle\Controller;
  3. use Exception;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Serializer\Exception\ExceptionInterface;
  7. use WebBundle\Entity\BuyOrder;
  8. use WebBundle\Enum\BuyOrderStatusEnum;
  9. use WebBundle\Helper\App;
  10. use WebBundle\Helper\ConversionHelper;
  11. use WebBundle\Helper\LocaleHelper;
  12. use WebBundle\Helper\OrderHelper;
  13. use WebBundle\Helper\UserHelper;
  14. use WebBundle\Repository\BuyOrderRepository;
  15. /**
  16.  * Class OrdersController
  17.  * @package WebBundle\Controller
  18.  */
  19. class OrdersController extends ExtendedController
  20. {
  21.     private BuyOrderRepository $orderRepo;
  22.     /**
  23.      * OrdersController constructor.
  24.      * @param BuyOrderRepository $orderRepo
  25.      * @throws Exception
  26.      */
  27.     public function __construct(BuyOrderRepository $orderRepo)
  28.     {
  29.         parent::__construct();
  30.         $this->orderRepo $orderRepo;
  31.     }
  32.     /**
  33.      * @param null $token
  34.      * @return array
  35.      * @throws Exception
  36.      */
  37.     private function paths($token null): array
  38.     {
  39.         return [
  40.             'apiOrders'      => App::generateUrl(
  41.                 'app_api_orders',
  42.                 [
  43.                     '_locale' => App::getCurLocale(true),
  44.                     'token'   => $token,
  45.                 ]
  46.             ),
  47.             'buyOrderEdit'   => App::generateUrl(
  48.                 'app_order_edit_name',
  49.                 [
  50.                     '_locale' => App::getCurLocale(true),
  51.                     'hash'    => '__hash__',
  52.                     'name'    => '__name__',
  53.                 ]
  54.             ),
  55.             'buyOrderDelete' => App::generateUrl(
  56.                 'app_buy_order_del',
  57.                 [
  58.                     '_locale' => App::getCurLocale(true),
  59.                     'orderId' => '__hash__',
  60.                 ]
  61.             ),
  62.             'appOrder'       => App::generateUrl(
  63.                 'app_order',
  64.                 [
  65.                     '_locale' => App::getCurLocale(true),
  66.                     'hash'    => '__hash__',
  67.                 ]
  68.             ),
  69.             'appBuyOrder'    => App::generateUrl(
  70.                 'app_buy_order',
  71.                 [
  72.                     '_locale' => App::getCurLocale(true),
  73.                     'orderId' => '__hash__',
  74.                 ]
  75.             ),
  76.             'appHome'        => App::generateUrl(
  77.                 'app_home',
  78.                 [
  79.                     '_locale' => App::getCurLocale(true),
  80.                 ]
  81.             ),
  82.             'appBuyOrderCreate' => App::generateUrl(
  83.                 'app_buy_order_create',
  84.                 [
  85.                     '_locale' => App::getCurLocale(true),
  86.                 ]
  87.             ),
  88.         ];
  89.     }
  90.     /**
  91.      * @return array
  92.      * @throws Exception
  93.      */
  94.     private function transPage(): array
  95.     {
  96.         return [
  97.             'myOrders'                 => App::trans('buyOrder.index.header'),
  98.             'addOrder'                 => App::trans('buyOrder.index.addOrder'),
  99.             'delete'                   => App::trans('order.remove'),
  100.             'save'                     => App::trans('save'),
  101.             'cancel'                   => App::trans('cancel'),
  102.             'yes'                      => App::trans('yes'),
  103.             'no'                       => App::trans('no'),
  104.             'table'                    => [
  105.                 'date'        => App::trans('buyOrder.th.date'),
  106.                 'dateCreated' => App::trans('buyOrder.event.order_created'),
  107.                 'name'        => App::trans('buyOrder.th.name'),
  108.                 'goods'       => App::trans('buyOrder.th.good'),
  109.                 'weight'      => App::trans('buyOrder.th.weight'),
  110.                 'sum'         => App::trans('buyOrder.th.sum'),
  111.                 'status'      => App::trans('buyOrder.th.status'),
  112.             ],
  113.             'day'                      => [
  114.                 'today'     => App::trans('main_menu_today'),
  115.                 'yesterday' => App::trans('main_menu_yesterday'),
  116.             ],
  117.             'noObligation'             => App::trans('buyOrder.no_obligation'),
  118.             'confirmOrderRemove'       => App::trans('buyOrder.confirm.message_dellete'),
  119.             'afterDeliveryCalculation' => App::trans('order.status.afterDeliveryCalculation'),
  120.             'homePage'                 => App::trans('home_page'),
  121.             'draftOrder'               => App::trans('order.status.draft'),
  122.             'empty'                    => App::trans('order.status.empty'),
  123.             'noOrder'                  => App::trans('buyOrder.index.noOrder'),
  124.             'draftOrderPlaceholder'    => App::trans('buyOrder.name3'),
  125.         ];
  126.     }
  127.     /**
  128.      * Страница заказов
  129.      *
  130.      * @param string|null $token
  131.      * @return Response
  132.      * @throws ExceptionInterface
  133.      * @throws Exception
  134.      */
  135.     public function indexAction(?string $token null): Response
  136.     {
  137.         $token $token ?? UserHelper::getInstance()->getToken();
  138.         $buyOrders $this->orderRepo->getBuyOrders(['token' => $token]);
  139.         $serializer $this->get('serializer');
  140.         if ($buyOrders && count($buyOrders) == && empty($_GET['noR'])) {
  141.             /** @var BuyOrder $buyOrder */
  142.             $buyOrder $buyOrders[0];
  143.             return $this->redirect($this->generateUrl('app_buy_order', [
  144.                 'orderId' => $buyOrder->getHash(),
  145.                 '_locale' => App::getCurLocale(),
  146.             ], 0));
  147.         }
  148.         $orders = [];
  149.         $list = [];
  150.         /** @var BuyOrder $order */
  151.         foreach ($buyOrders as $order) {
  152.             $list[] = [
  153.                 'hash'   => $order->getHash(),
  154.                 'number' => $order->getNumber(),
  155.             ];
  156.         }
  157.         $orders['list'] = $list;
  158.         $orders['trans'] = $this->transPage();
  159.         // в шапке меняем в зависимости от единицы измерения площади
  160.         $measure LocaleHelper::getUserMeasure();
  161.         if ($measure === 'ft') {
  162.             $orders['trans']['table']['weight'] = str_ireplace(['кг''kg'], ['фунт''lb'], $orders['trans']['table']['weight']);
  163.         }
  164.         $orders['paths'] = $this->paths($token);
  165.         $orders['updating'] = true// TRUE чтоб избежать миганий при отображении спиннера во время стартовой загрузки данных по заказам
  166.         $orders['updatingDetails'] = ['initial' => true]; // TRUE чтоб избежать миганий при отображении спиннера во время стартовой загрузки данных по заказам
  167.         return $this->renderReact('@Web/Order/index.html.twig', [
  168.             'initialState' => $serializer->normalize(
  169.                 [
  170.                     'orders' => $orders,
  171.                 ]
  172.             ),
  173.         ]);
  174.     }
  175.     /**
  176.      * @param string|null $token
  177.      * @return JsonResponse
  178.      * @throws Exception
  179.      */
  180.     public function apiOrdersAction(string $token null): JsonResponse
  181.     {
  182.         $token $token ?? UserHelper::getInstance()->getToken();
  183.         $buyOrders $this->orderRepo->getBuyOrders(['token' => $token]);
  184.         $orders = [];
  185.         /** @var BuyOrder $order */
  186.         foreach ($buyOrders as $order) {
  187.             $items = [];
  188.             foreach ($order->getArticles() as $article) {
  189.                 $items[] = $article->getArticle()->getAlternateName() != null ?
  190.                     $article->getArticle()->getAlternateName() :
  191.                     $article->getArticle()->getName();
  192.             }
  193.             $measure LocaleHelper::getUserMeasure();
  194.             $totalRealWeight $order->getWeightGross() ?: OrderHelper::totalWeight($order);
  195.             if ($order->isWeightInKg()) {
  196.                 $orderWeightInKg $totalRealWeight;
  197.                 $orderWeightInLb ConversionHelper::convertKgLb((float) $totalRealWeightConversionHelper::LB);
  198.                 // вес заказа в кг, а нужно lb - конвертим
  199.                 if ($measure === 'ft') {
  200.                     $totalRealWeight $orderWeightInLb;
  201.                 }
  202.             } else {
  203.                 $orderWeightInKg ConversionHelper::convertKgLb((float) $totalRealWeightConversionHelper::KG);
  204.                 $orderWeightInLb $totalRealWeight;
  205.                 // вес заказа в lb, а нужно кг - конвертим
  206.                 if ($measure === 'm') {
  207.                     $totalRealWeight $orderWeightInKg;
  208.                 }
  209.             }
  210.             $orders[] = [
  211.                 'hash'            => $order->getHash(),
  212.                 'number'          => $order->getNumber(),
  213.                 'status'          => [
  214.                     'id'    => $order->getStatus(),
  215.                     'title' => count($items) == 0
  216.                         App::trans('order.status.empty')
  217.                         : ($order->getStatus() < BuyOrderStatusEnum::PARTIALLY_PAID
  218.                             App::trans('order.status.draft')
  219.                             : App::trans('order.status.' BuyOrderStatusEnum::from($order->getStatus())->getAlias(),
  220.                                 App::getCurLocale(),
  221.                                 [
  222.                                     '%factDate%' => $order->getFactDate()
  223.                                         ? $order->getFactDate()->format(
  224.                                             LocaleHelper::dateMask(1App::getCountryCode())
  225.                                         )
  226.                                         : '',
  227.                                     '%number%'   => $order->getRecipientNumber() ?? '-',
  228.                                 ]
  229.                             )
  230.                         ),
  231.                 ],
  232.                 'date'            => $order->getCreateDate()->format('d.m.Y'),
  233.                 'items'           => $items,
  234.                 'name'            => OrderHelper::humanName($order->getName(), $order->getStatus(), $order->getBankTransferRequested()),
  235.                 'visibleName'     => OrderHelper::header($order),
  236.                 'weightGross'     => $totalRealWeight,
  237.                 'orderWeightInKg' => $orderWeightInKg,
  238.                 'orderWeightInLb' => $orderWeightInLb,
  239.                 'fullPrice'       => OrderHelper::totalSum($order),
  240.                 'currency'        => LocaleHelper::getCurrency($order->getCurrency()),
  241.             ];
  242.         }
  243.         return new JsonResponse($orders);
  244.     }
  245. }