src/WebBundle/Filler/OrderFiller.php line 336

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace WebBundle\Filler;
  4. use DateTime;
  5. use Exception;
  6. use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
  7. use WebBundle\Entity\BuyOrder;
  8. use WebBundle\Entity\BuyOrderArticle;
  9. use WebBundle\Entity\BuyOrderArticleHoliday;
  10. use WebBundle\Entity\OrderAddress;
  11. use WebBundle\Enum\BuyOrderStatusEnum;
  12. use WebBundle\Enum\DeliveryTypeTimeEnum;
  13. use WebBundle\Enum\PaymentTypeEnum;
  14. use WebBundle\Enum\VatTypeEnum;
  15. use WebBundle\Helper\App;
  16. use WebBundle\Helper\ConversionHelper;
  17. use WebBundle\Helper\LocaleHelper;
  18. use WebBundle\Helper\OrderAddressHelper;
  19. use WebBundle\Helper\OrderHelper;
  20. use WebBundle\Helper\ResponseApiHelper;
  21. use WebBundle\Repository\BuyOrderRepository;
  22. use WebBundle\Repository\ListCountryRepository;
  23. use WebBundle\Repository\ListVatRepository;
  24. use WebBundle\Repository\WarehouseRepository;
  25. use WebBundle\Serializer\Normalizer\OrderNormalizer;
  26. use WebBundle\Service\KladrService;
  27. use WebBundle\Service\OrderAddressService;
  28. use WebBundle\Service\OrderItemService;
  29. use WebBundle\Service\VatService;
  30. class OrderFiller
  31. {
  32.     /** @required */
  33.     public BuyOrderRepository $buyOrderRepository;
  34.     /** @required */
  35.     public ListCountryRepository $listCountryRepository;
  36.     /** @required */
  37.     public ListVatRepository $listVatRepository;
  38.     /** @required */
  39.     public WarehouseRepository $warehouseRepository;
  40.     /** @required */
  41.     public OrderItemService $orderItemService;
  42.     /** @required */
  43.     public OrderAddressService $addressService;
  44.     /** @required */
  45.     public KladrService $kladrService;
  46.     /** @required */
  47.     public VatService $vatService;
  48.     /** @required */
  49.     public OrderNormalizer $orderNormalizer;
  50.     /** @required */
  51.     public OrderItemsFiller $orderItemsFiller;
  52.     private AuthorizationChecker $authorizationChecker;
  53.     public function __construct(AuthorizationChecker $authorizationChecker)
  54.     {
  55.         $this->authorizationChecker $authorizationChecker;
  56.     }
  57.     public function fillOrderAsDraft(BuyOrder $order): void
  58.     {
  59.         // Если срок был подтвержденным, то при сбросе меняем тип на ранее подтвержденный
  60.         if ($order->getDeliveryTimeType() === DeliveryTypeTimeEnum::CONFIRMED) {
  61.             // фиксируем на всякий случай, что новые сроки подтвержденные
  62.             $order->setDeliveryTimeType(DeliveryTypeTimeEnum::PREVIOUSLY_CONFIRMED);
  63.         }
  64.         // запоминаем старые сроки прежде чем затереть их
  65.         if ($order->getDeliveryTimeMin() != null) {
  66.             $order->setDeliveryOldTimeMin($order->getDeliveryTimeMin());
  67.         }
  68.         if ($order->getDeliveryTimeMax() != null) {
  69.             $order->setDeliveryOldTimeMax($order->getDeliveryTimeMax());
  70.         }
  71.         $order->setSendCreate1C(false);
  72.         $order->setDelivery(null);
  73.         $order->setDeliveryPriceEuro(null);
  74.         $order->setCustomsPayment(null);
  75.         $order->setDeliveryCalculateType(null);
  76.         $order->setDeliveryTimeMin(null);
  77.         $order->setDeliveryTimeMax(null);
  78.         $order->setDeliveryTimeConfirmMin(null);
  79.         $order->setDeliveryTimeConfirmMax(null);
  80.         $order->setDeliveryTimeFastPayMin(null);
  81.         $order->setDeliveryTimeFastPayMax(null);
  82.         $order->setRemember(null);
  83.         $order->setWeightGross(null);
  84.         $order->setWeightLimit(null);
  85.         $order->setWeightReport(null);
  86.         $order->setLift(null);
  87.         $order->setCarrierName(null);
  88.         $order->setCarrierContactData(null);
  89.         /** @var BuyOrderArticle $item */
  90.         foreach ($order->getArticles() as $item) {
  91.             $item->setDeliveryTimeMin(null);
  92.             $item->setDeliveryTimeMax(null);
  93.             $item->setDeliveryTimeConfirmMin(null);
  94.             $item->setDeliveryTimeConfirmMax(null);
  95.             $item->setArticleTimeType(DeliveryTypeTimeEnum::CALCULATED);
  96.             $this->orderItemService->setItemData(
  97.                 $order,
  98.                 $item,
  99.                 $item->getAmount(),
  100.                 $item->getType(),
  101.                 $item->getSwimmingPool(),
  102.                 true
  103.             );
  104.         }
  105.         $this->buyOrderRepository->save($order);
  106.     }
  107.     /**
  108.      * @param BuyOrder $order
  109.      * @return array
  110.      * @throws Exception
  111.      * @deprecated todo Будет упразднена после перехода на заказ 2.0
  112.      */
  113.     public function fillArrayWithOldOrderData(BuyOrder $order): array
  114.     {
  115.         $currentLocale App::getCurLocale();
  116.         $response = new ResponseApiHelper();
  117.         $deliveryLink OrderHelper::deliveryLink($order);
  118.         $items $this->orderItemsFiller->fillArrayWithOrderItemsByOrder(
  119.             $order->getArticles(),
  120.             OrderHelper::asVat($order) && OrderHelper::homeCountryVat($order) == false
  121.         );
  122.         $response->setResponse('offsetReason'OrderHelper::offsetReason($order));
  123.         $response->setResponse(
  124.             'userUnid',
  125.             $order->getUser() && $order->getUser()->getUnid() ? $order->getUser()->getUnid() : null
  126.         );
  127.         if ($order->getWeightReport() > 0) {
  128.             $weightReport App::trans(
  129.                 LocaleHelper::weightLabel($order->getWeightReport(), true$order->getMeasure())
  130.             );
  131.             $response->setResponse(
  132.                 'weightReport',
  133.                 App::trans(
  134.                     'buyOrder.info.weightReport',
  135.                     $currentLocale,
  136.                     ['%d%' => $weightReport]
  137.                 )
  138.             );
  139.         } else {
  140.             $response->setResponse('weightReport'null);
  141.         }
  142.         $sum OrderHelper::sum($order);
  143.         $weightGross $order->getWeightGross();
  144.         if (!$weightGross) {
  145.             $weightGross $sum['weight'];
  146.             if ('ft' === $order->getMeasure()) {
  147.                 $weightGross ConversionHelper::convertKgLb((float) $weightGross);
  148.             }
  149.         }
  150.         $response->setResponse('weightGross'$weightGross);
  151.         if ($order->getCarrierName()) {
  152.             $response->setResponse(
  153.                 'courierName',
  154.                 App::trans('order.courier'null, ['%name%' => $order->getCarrierName()])
  155.             );
  156.         }
  157.         $response->setResponse(
  158.             'weightMea',
  159.             $order->getMeasure() == 'ft'
  160.                 App::trans('measure_lb')
  161.                 : App::trans('measure_kg')
  162.         );
  163.         $response->setResponse('taxNumber'$order->getTaxNumber() ? 0);
  164.         $response->setResponse('payType'$order->getPayType());
  165.         $response->setResponse('currency'LocaleHelper::getCurrency($order->getCurrency()));
  166.         $response->setResponse('timeProcess'date('Y-m-d H:i:s'));
  167.         $response->setResponse('timeType'$order->getDeliveryTimeType());
  168.         $response->setResponse('company'$order->getCompanyName());
  169.         $response->setResponse(
  170.             'puyBut',
  171.             (
  172.                 $order->getVatType() == ||
  173.                 $order->getVatNumber() != null ||
  174.                 $order->getDeliveryCountry() &&
  175.                 in_array($order->getDeliveryCountry()->getId(), OrderHelper::noEU()['id'])
  176.             ) && (
  177.                 $order->getVatType() == ||
  178.                 $order->getCompanyName() != null
  179.             ) && (
  180.                 $order->getUser() && $order->getUser()->getProved() && $sum['smart'] > ||
  181.                 OrderHelper::onlySamples($order)
  182.             )
  183.         );
  184.         $response->setResponse('mirror'$order->getMirror());
  185.         $response->setResponse('holiday'OrderHelper::isHoliday($order));
  186.         $response->setResponse('orderRequest'OrderHelper::checkForSend($order));
  187.         $response->setResponse('num'$order->getNumber());
  188.         $response->setResponse('id'$order->getId());
  189.         $response->setResponse('articles'$items);
  190.         $response->setResponse('paid'OrderHelper::paymentSum($order));
  191.         $response->setResponse('timeRu'OrderHelper::timeRu($order));
  192.         $response->setResponse('total'$sum);
  193.         $fullPrice OrderHelper::totalSum($order);
  194.         $paidPrice OrderHelper::paymentSum($order);
  195.         $fee OrderHelper::percent(
  196.             $fullPrice $paidPrice,
  197.             OrderHelper::paymentPercent($order$order->getPayType())
  198.         );
  199.         $response->setResponse('fullPrice'$fullPrice);
  200.         $response->setResponse('fee'$fee);
  201.         $response->setResponse('onlySamples'OrderHelper::onlySamples($order));
  202.         $response->setResponse(
  203.             'fullPriceWithBankFee',
  204.             $fullPrice $fee
  205.         );
  206.         $response->setResponse('EORIRequired'OrderHelper::EORIRequired($order));
  207.         $response->setResponse(
  208.             'freeDeliverySample',
  209.             $order->getDeliveryCountry() && $sum['all'] < $order->getDeliveryCountry()->getFreeSampleDelivery()
  210.                 ? App::trans(
  211.                     'order.free_delivery_sample',
  212.                     $currentLocale,
  213.                     [
  214.                     '%sum%' => $order->getDeliveryCountry()->getFreeSampleDelivery(),
  215.                     '%currency%' => LocaleHelper::getCurrency(OrderHelper::countryCode($order)),
  216.                     ]
  217.                 )
  218.                 : ''
  219.         );
  220.         $response->setResponse('status', [
  221.             'id' => $order->getStatus(),
  222.             'text' => (
  223.             $order->getStatus() != BuyOrderStatusEnum::AWAITING_CALCULATION ||
  224.             $order->getWeightLimit() == null ||
  225.             $sum['weight'] < $order->getWeightLimit()
  226.                 ? ($order->getStatus() == BuyOrderStatusEnum::REQUEST_DELIVERY
  227.                 strip_tags($deliveryLink)
  228.                 : App::trans('order.status.' BuyOrderStatusEnum::from($order->getStatus())->getAlias())
  229.             )
  230.                 : App::trans('order.status.more_weight'$currentLocale, [
  231.                 '%d%' => $order->getMeasure() == 'ft'
  232.                     ConversionHelper::convertKgLb((float) $order->getWeightLimit())
  233.                     : $order->getWeightLimit(),
  234.             ])
  235.             ),
  236.             'msg' => $order->getStatus() == BuyOrderStatusEnum::AWAITING_CALCULATION App::trans('buyOrder.error.on_request') : '',
  237.         ]);
  238.         if (OrderHelper::isUnavailableItem($order)) {
  239.             $response->setResponse('isUnavailableItem'App::trans('te.order.msg_unavailable_item_delete'));
  240.         }
  241.         $isSample OrderHelper::isSample($order);
  242.         $deliveryVal $order->getDelivery();
  243.         $currency '<b class="currency">' LocaleHelper::getCurrency($order->getCurrency()) . '</b>';
  244.         $response->setResponse('delivery', [
  245.             'asLink' => $order->getStatus() == BuyOrderStatusEnum::REQUEST_DELIVERY && OrderHelper::checkForSend($order),
  246.             'price' => [
  247.                 'val' => $deliveryVal,
  248.                 'text' => $order->getDelivery() !== null
  249.                     $currency ' <b>' number_format($order->getDelivery(), 2'.'' ') . '</b>'
  250.                     strip_tags($deliveryLink),
  251.             ],
  252.             'payDateExecution' => ($order->getPayDateExecution() && $order->getDeliveryCountry())
  253.                 ? $order->getPayDateExecution()->format(
  254.                     LocaleHelper::dateMask(1$order->getDeliveryCountry()->getCode())
  255.                 )
  256.                 : null,
  257.             'payDateExecutionISO' => $order->getPayDateExecution() && $order->getPayDateExecution()->getTimestamp() > (new DateTime())->getTimestamp()
  258.                 ? $order->getPayDateExecution()->getTimestamp()
  259.                 : null,
  260.             'time' => OrderHelper::time($order)
  261.                 ? OrderHelper::time($order)
  262.                 : htmlspecialchars($deliveryLink),
  263.             'lift' => $order->getLift() !== null $order->getLift() : 2,
  264.         ]);
  265.         $response->setResponse('showPaymentBefore'$order->getPayType() == PaymentTypeEnum::BANK_TRANSFER && !$isSample);
  266.         $response->setResponse('isSample'$isSample);
  267.         $response->setResponse('totalArticlesCount'$this->buyOrderRepository->getBuyOrderArticleCount($order->getToken()));
  268.         $response->setResponse(
  269.             'name',
  270.             OrderHelper::humanName(
  271.                 $order->getName(),
  272.                 $order->getStatus(),
  273.                 $order->getBankTransferRequested(),
  274.             )
  275.         );
  276.         $response->setResponse('url'App::generateUrl('app_buy_order', ['orderId' => $order->getHash()]));
  277.         $orderData OrderHelper::arrayData($order);
  278.         $response->setResponse('order'$orderData);
  279.         $response->setResponse('customsPayment'$order->getCustomsPayment());
  280.         $response->setResponse('prohibitSendReviewRequest'$order->isProhibitSendReviewRequest());
  281.         $response->setResponse('holidays'$this->getHolidaysForOrderItems($order));
  282.         return $response->result();
  283.     }
  284.     public function orderData(
  285.         BuyOrder $buyOrder,
  286.         ?string $token,
  287.         ?bool $isAccessAdminOrder,
  288.         ?array $pickupWarehouses,
  289.         ?array $context = [],
  290.         ?array $errors = []
  291.     ): array {
  292.         $tokenOrder $buyOrder->getToken();
  293.         $master $tokenOrder === $token
  294.             || $this->authorizationChecker->isGranted('ROLE_ADMIN')
  295.             || $this->authorizationChecker->isGranted('ROLE_CONS');
  296.         if ($master) {
  297.             $context['master'] = true;
  298.         }
  299.         $order $this->orderNormalizer->normalize($buyOrdernull$context);
  300.         $orderAddressesFiltered = [];
  301.         if ($master) {
  302.             $orderAddresses $this->addressService->getOrderAddress($tokenOrder);
  303.             foreach ($orderAddresses as $orderAddress) {
  304.                 if ($orderAddress['addressType'] == OrderAddress::IS_PAYER
  305.                     || ($order['payer']['id'] == $orderAddress['id']
  306.                         && $order['recipient']['id'] != $order['payer']['id']
  307.                     )
  308.                     || ($order['recipient']['id'] != $orderAddress['id']
  309.                         && ($orderAddress['frozen'] == 1
  310.                             || $this->requiredAddressFieldMissing($orderAddress)
  311.                         )
  312.                     )
  313.                 ) {
  314.                     continue;
  315.                 }
  316.                 $orderAddressesFiltered[] = $orderAddress;
  317.             }
  318.         }
  319.         $order['orderAddress'] = $orderAddressesFiltered;
  320.         $order['pickupWarehouses'] = $pickupWarehouses;
  321.         $order['err'] = [];
  322.         $order['auth'] = !!App::getCurUser();
  323.         $order['errors'] = $errors;
  324.         if (!empty($context['full'])) {
  325.             $order['trans'] = OrderHelper::transPage();
  326.             $order['paths'] = $this->getPaths($order['hash']);
  327.             $order['countryList'] = OrderHelper::countryList();
  328.         }
  329.         $order['master'] = $master;
  330.         $order['payerEdit'] = $this->buyOrderRepository->countDrafts($tokenOrder) < 2;
  331.         $order['isAccessAdminOrder'] = $isAccessAdminOrder;
  332.         $order['prohibitSendReviewRequest'] = $buyOrder->isProhibitSendReviewRequest();
  333.         $order['roles'] = [
  334.             'admin' => $this->authorizationChecker->isGranted('ROLE_ADMIN'),
  335.             'cons' => $this->authorizationChecker->isGranted('ROLE_CONS'),
  336.         ];
  337.         return $order;
  338.     }
  339.     private function requiredAddressFieldMissing(array $address): bool
  340.     {
  341.         if (empty($address['name'])
  342.             || empty($address['surname'])
  343.             || empty($address['country'])
  344.             || empty($address['phoneCode'])
  345.             || empty($address['phone'])
  346.             || empty($address['zipCode'])
  347.             || empty($address['city'])
  348.             || empty($address['street'])
  349.             || empty($address['building'])
  350.         ) {
  351.             return true;
  352.         }
  353.         return false;
  354.     }
  355.     public function fillOrderDeliveryFromFrontData(array $deliveryBuyOrder $orderBuyOrder $oldOrder): void
  356.     {
  357.         if (
  358.             !empty($delivery['country'])
  359.             && ($delivery['country'] != OrderHelper::country($oldOrder)
  360.                 || $order->getDeliveryCountry()->getId() != $delivery['country']
  361.             )
  362.         ) {
  363.             //нужно убрать ват номер при смене страны
  364.             $order->setVatNumber(null);
  365.             $countryEntity $this->listCountryRepository->getReference((int) $delivery['country']);
  366.             $order->setDeliveryCountry($countryEntity);
  367.             //обнуляем регион при назначении страны
  368.             $order->setDeliveryRegion(null);
  369.         }
  370.         if (!empty($delivery['index'])) {
  371.             if ($order->getDeliveryIndex() && $delivery['index'] != $order->getDeliveryIndex()) {
  372.                 $order->setKladrId(null);
  373.                 $order->setOkatoId(null);
  374.             }
  375.             $order->setDeliveryIndex($delivery['index']);
  376.         }
  377.         if (!empty($delivery['region'])) {
  378.             if (is_array($delivery['region'])) {
  379.                 $delivery['region'] = $delivery['region'][0];
  380.             }
  381.             $order->setDeliveryRegion($delivery['region']);
  382.         }
  383.         $order->setDeliveryCity($delivery['city'] ?? $order->getDeliveryCity());
  384.         $order->setDeliveryBuilding($delivery['building'] ?? $order->getDeliveryBuilding());
  385.         $order->setDeliveryApartmentOffice($delivery['apartmentOffice'] ?? $order->getDeliveryApartmentOffice());
  386.         $order->setDeliveryPhoneCode($delivery['phoneCode'][0] ?? $order->getDeliveryPhoneCode());
  387.         $order->setDeliveryPhone($delivery['phone'] ?? $order->getDeliveryPhone());
  388.         if (!empty($delivery['street'])) {
  389.             if ($order->getDeliveryBuilding()) {
  390.                 $delivery['street'] = OrderAddressHelper::replaceBuilding(
  391.                     $order->getDeliveryBuilding(),
  392.                     $delivery['street']
  393.                 );
  394.             }
  395.             $order->setDeliveryAddress($delivery['street']);
  396.         }
  397.         //only for Russia
  398.         if (!empty($delivery['country']) && $delivery['country'] == 643) {
  399.             $this->russianPreparedAddress($order$delivery);
  400.         }
  401.     }
  402.     public function fillOrderVatFromFrontData(array $vatBuyOrder $order): void
  403.     {
  404.         if (!isset($vat['type'])) {
  405.             return;
  406.         }
  407.         $vatType = (int) $vat['type'];
  408.         $vatType VatTypeEnum::isValid($vatType) ? $vatType VatTypeEnum::INDIVIDUAL;
  409.         if (VatTypeEnum::INDIVIDUAL === $vatType || VatTypeEnum::CORPORATE_RUS === $vatType) {
  410.             $order->setVatType(VatTypeEnum::INDIVIDUAL);
  411.             return;
  412.         }
  413.         $vatNumber = !empty($vat['number']) ? $vat['number'] : null;
  414.         if ($vatNumber) {
  415.             $resVat $this->vatService->checkVAT($vatNumber);
  416.             if ($resVat) {
  417.                 $order->setVatNumber($vatNumber);
  418.                 $order->setVatType($vatType);
  419.                 if (!empty($resVat['name'])) {
  420.                     $order->setCompanyName($resVat['name']);
  421.                 }
  422.                 return;
  423.             }
  424.             $vatType VatTypeEnum::INDIVIDUAL;
  425.         }
  426.         if ($order->getVatNumber() == null || !OrderHelper::noVat($order)) {
  427.             $vatType VatTypeEnum::INDIVIDUAL;
  428.         }
  429.         $order->setVatType($vatType);
  430.     }
  431.     /**
  432.      * @param BuyOrder $order
  433.      * @param array $delivery
  434.      * @return void
  435.      * @throws Exception
  436.      */
  437.     private function russianPreparedAddress(BuyOrder $order, array $delivery): void
  438.     {
  439.         if (
  440.             !in_array($order->getPayType(), [PaymentTypeEnum::BANK_TRANSFERPaymentTypeEnum::RUSSIAN_CARD])
  441.         ) {
  442.             $order->setPayType(PaymentTypeEnum::RUSSIAN_CARD);
  443.         }
  444.         if (!empty($delivery['kladrId']) && !empty($delivery['index']) && !empty($delivery['city'])) {
  445.             $order->setKladrId($delivery['kladrId']);
  446.             $order->setOkatoId($delivery['okatoId']);
  447.         } elseif (empty($delivery['kladrId']) && !empty($delivery['index']) && !empty($delivery['city'])) {
  448.             $kladrId $this->kladrService->getKladrIdByCityAndIndex((int) $delivery['index'], $delivery['city']);
  449.             if ($kladrId !== false) {
  450.                 $order->setKladrId($kladrId);
  451.             }
  452.         }
  453.     }
  454.     public function fillCompanyNameForOrder(BuyOrder $order, ?string $companyName): void
  455.     {
  456.         if (null === $companyName) {
  457.             return;
  458.         }
  459.         // если есть ват номер и название фирмы зафиксированная в нем,
  460.         // то название фирмы менять нельзя
  461.         if ($order->getVatNumber() === null) {
  462.             $order->setVatNumber($companyName);
  463.             return;
  464.         }
  465.         $company $this->listVatRepository->findOneByNumber($order->getVatNumber());
  466.         if ($company && $company->getName() != null && $company->getName() != '') {
  467.             $order->setCompanyName($company->getName());
  468.         } else {
  469.             $order->setCompanyName($companyName);
  470.         }
  471.     }
  472.     public function fillWarehouseData(BuyOrder $order, array $data): void
  473.     {
  474.         if (!isset($data['warehouse']['id'])) {
  475.             return;
  476.         }
  477.         $warehouse null;
  478.         if ($order->getDeliveryType() === 1) {
  479.             $warehouse $this->warehouseRepository->getWarehouse($data['warehouse']['id']);
  480.         }
  481.         $order->setWarehouse($warehouse);
  482.     }
  483.     public function fillHolidaysForItems(BuyOrder $order, array $data): void
  484.     {
  485.         if (!isset($data['items'])) {
  486.             return;
  487.         }
  488.         $processed $data['items'];
  489.         /** @var BuyOrderArticle $buyOrderArticle */
  490.         foreach ($order->getArticles() as $buyOrderArticle) {
  491.             $code $buyOrderArticle->chooseCode();
  492.             if (!array_key_exists($code$processed)) {
  493.                 continue;
  494.             }
  495.             if (!($processed[$code]['holiday'] ?? false)) {
  496.                 $buyOrderArticle->getBuyOrderArticleHolidays()->clear();
  497.                 continue;
  498.             }
  499.             if (empty($processed[$code]['HolidayCodes'] ?? [])) {
  500.                 $buyOrderArticle->getBuyOrderArticleHolidays()->clear();
  501.                 continue;
  502.             }
  503.             $holidayCodes $processed[$code]['HolidayCodes'];
  504.             /** @var BuyOrderArticleHoliday $buyOrderArticleHoliday */
  505.             foreach ($buyOrderArticle->getBuyOrderArticleHolidays() as $buyOrderArticleHoliday) {
  506.                 if (!in_array($buyOrderArticleHoliday->getHolidayCode(), $holidayCodes)) {
  507.                     $buyOrderArticle->removeBuyOrderArticleHoliday($buyOrderArticleHoliday);
  508.                 }
  509.             }
  510.             foreach ($holidayCodes as $holidayCode) {
  511.                 $buyOrderArticleHoliday = new BuyOrderArticleHoliday();
  512.                 $buyOrderArticleHoliday
  513.                     ->setBuyOrderArticle($buyOrderArticle)
  514.                     ->setHolidayCode($holidayCode);
  515.                 $buyOrderArticle->addBuyOrderArticleHoliday($buyOrderArticleHoliday);
  516.             }
  517.         }
  518.     }
  519.     public function getHolidaysForOrderItems(BuyOrder $order): string
  520.     {
  521.         $errors = [];
  522.         // теперь отдаём просто строкой инфу о первом попавшемся празднике, из-за которого увеличен срок поставки
  523.         $translate '';
  524.         /** @var BuyOrderArticle $buyOrderArticle */
  525.         foreach ($order->getArticles() as $buyOrderArticle) {
  526.             $code $buyOrderArticle->chooseCode();
  527.             if (!$buyOrderArticle->getBuyOrderArticleHolidays()->isEmpty()) {
  528.                 foreach ($buyOrderArticle->getBuyOrderArticleHolidays() as $buyOrderArticleHoliday) {
  529.                     $holidayCode 'holidays.' $buyOrderArticleHoliday->getHolidayCode();
  530.                     $translate App::trans($holidayCode);
  531.                     if ($translate === $holidayCode) {
  532.                         $errors[] = 'Запрошен перевод для арта ' $code ' - не найден следующий: ' $translate;
  533.                     } else {
  534.                         break 2;
  535.                     }
  536.                 }
  537.             }
  538.         }
  539.         if (!empty($errors)) {
  540.             try {
  541.                 OrderHelper::Alert(
  542.                     [
  543.                         'subject' => 'Ошибка - не хватает перевода для праздника! %)))',
  544.                         'errors ' => $errors,
  545.                     ],
  546.                     'edotsenko|rzagorudko|dfomenkov131122'
  547.                 );
  548.             } catch (Exception $e) {
  549.             }
  550.         }
  551.         return $translate;
  552.     }
  553.     private function getPaths(string $hash): array
  554.     {
  555.         return [
  556.             'appOrders' => App::generateUrl(
  557.                 'app_orders',
  558.                 [
  559.                     '_locale' => App::getCurLocale(true),
  560.                 ]
  561.             ),
  562.             'appOrderEdit' => App::generateUrl(
  563.                 'app_order_edit_name',
  564.                 [
  565.                     'hash' => $hash,
  566.                     'name' => '__name__',
  567.                     '_locale' => App::getCurLocale(true),
  568.                 ]
  569.             ),        // show-order-header.html.twig, строка 56
  570.             'appOrderCheckVat' => App::generateUrl(
  571.                 'app_check_vat',
  572.                 [
  573.                     'vat' => '__vat__',
  574.                 ]
  575.             ),
  576.             'apiCheckEmail' => App::generateUrl(
  577.                 'api.check_email',
  578.                 [
  579.                     '_locale' => App::getCurLocale(true),
  580.                 ]
  581.             ),
  582.             'apiCheckAddressData' => App::generateUrl(
  583.                 'api_check_address_postCode',
  584.                 []
  585.             ),
  586.             'apiRequestDelivery' => App::generateUrl(
  587.                 'app_api_request_delivery',
  588.                 [
  589.                     '_locale' => App::getCurLocale(true),
  590.                     'hash' => $hash,
  591.                 ]
  592.             ),
  593.             'apiOrder' => App::generateUrl(
  594.                 'app_api_order',
  595.                 [
  596.                     'hash' => $hash,
  597.                 ]
  598.             ),
  599.             'apiDelItems' => App::generateUrl(
  600.                 'app_api_del_item',
  601.                 [
  602.                     '_locale' => App::getCurLocale(true),
  603.                     // 'hash' => $hash
  604.                 ]
  605.             ),
  606.             'apiMoveItems' => App::generateUrl(
  607.                 'app_api_move_item',
  608.                 [
  609.                     '_locale' => App::getCurLocale(true),
  610.                 ]
  611.             ),
  612.             'apiDelAddres' => App::generateUrl(
  613.                 'app_api_del_address',
  614.                 [
  615.                     '_locale' => App::getCurLocale(true),
  616.                 ]
  617.             ),
  618.             'login' => App::generateUrl(
  619.                 'app_login',
  620.                 [
  621.                     '_locale' => App::getCurLocale(true),
  622.                 ]
  623.             ),
  624.             'requestDeliveryCancel' => App::generateUrl(
  625.                 'app_buy_order_request_delivery_cancel',
  626.                 [
  627.                     'orderId' => $hash,
  628.                     '_locale' => App::getCurLocale(true),
  629.                 ]
  630.             ), // s
  631.             'payment' => [
  632.                 => App::generateUrl(
  633.                     'app_order_bank_transfer',
  634.                     [
  635.                         'hash' => $hash,
  636.                         '_locale' => App::getCurLocale(true),
  637.                     ]
  638.                 ),
  639.                 => App::generateUrl(
  640.                     'app_credit_card_form',
  641.                     [
  642.                         'hash' => $hash,
  643.                     ],
  644.                     0
  645.                 ),
  646.                 => App::generateUrl(
  647.                     'app_credit_card_form',
  648.                     [
  649.                         'hash' => $hash,
  650.                         'type' => 2,
  651.                         '_locale' => App::getCurLocale(true),
  652.                     ]
  653.                 ), // /show.html.twig, строка 1626, appCreditCardForm тип_2
  654.                 => App::generateUrl(
  655.                     'app_credit_card_register',
  656.                     [
  657.                         'hash' => $hash,
  658.                         '_locale' => App::getCurLocale(true),
  659.                     ]
  660.                 ),        // /show.html.twig, строка 1626, appCreditCardRegister
  661.                 => App::generateUrl(
  662.                     'app_paypal',
  663.                     [
  664.                         'hash' => $hash,
  665.                         '_locale' => App::getCurLocale(true),
  666.                     ]
  667.                 ), // show.html.twig, строка 1696, appPayPal
  668.             ],
  669.             'appPage' => App::generateUrl(
  670.                 'app_page',
  671.                 [
  672.                     'url' => '__url__',
  673.                     '_locale' => App::getCurLocale(true),
  674.                 ]
  675.             ),
  676.             'apiOrdersShortList' => App::generateUrl(
  677.                 'app_api_orders_short_list'
  678.             ),
  679.             'appOrderCreate' => App::generateUrl(
  680.                 'app_buy_order_create',
  681.                 [
  682.                     '_locale' => App::getCurLocale(true),
  683.                 ]
  684.             ),
  685.             'chatb' => App::generateUrl(
  686.                 'app_chatb_chatbpage',
  687.                 [
  688.                     '_locale' => App::getCurLocale(true),
  689.                 ]
  690.             ),
  691.             'history' => App::generateUrl(
  692.                 'app_api_order_history',
  693.                 [
  694.                     '_locale' => App::getCurLocale(true),
  695.                     'hash' => $hash,
  696.                 ]
  697.             ),
  698.             'resend' => App::generateUrl('app_order_recreate_1C', ['hash' => $hash]),
  699.             'sync' => App::generateUrl(
  700.                 'app_order_sync',
  701.                 [
  702.                     'hash' => $hash,
  703.                 ]
  704.             ),
  705.             'recovery' => App::generateUrl(
  706.                 'app_order_recovery',
  707.                 [
  708.                     'hash' => $hash,
  709.                 ]
  710.             ),
  711.             'deleteData' => App::generateUrl(
  712.                 'app_all_data_user',
  713.                 [
  714.                     'hash' => $hash,
  715.                 ]
  716.             ),
  717.             //ToDo: Проверить функционал по одобрению сроков доставки
  718.             'confirmDate' => App::generateUrl(
  719.                 'app_buy_order_confirm',
  720.                 [
  721.                     'orderId' => $hash,
  722.                     'val' => '__val__',
  723.                 ]
  724.             ),
  725.             'overpayment' => App::generateUrl(
  726.                 'app_order_overpayment',
  727.                 [
  728.                     'orderId' => $hash,
  729.                     'type' => '1',
  730.                 ]
  731.             ),
  732.             'dataAgreeLinks' => [
  733.                 'link' => App::generateUrl('app_page', ['url' => 'policy-personal-data-process']),
  734.                 'link2' => App::generateUrl('app_page', ['url' => 'cookie-policy']),
  735.                 'link3' => App::generateUrl('app_page', ['url' => 'conditions']),
  736.                 'link4' => App::generateUrl('app_page', ['url' => 'privacypolicy']),
  737.             ],
  738.         ];
  739.     }
  740. }