<?php
namespace App\Controller;
use App\Entity;
use App\Model\Catapulto\BasicResponse;
use App\Model\Catapulto\Logger as CatapultoLogger;
use App\Services;
use App\Services\Catapulto\Package;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\EntityManagerInterface;
use Ipol\Catapulto\Catapulto\CatapultoApplication;
use Ipol\Catapulto\Core\Entity\Money;
use Ipol\Catapulto\Core\Order\Address;
use Ipol\Catapulto\Core\Order\Buyer;
use Ipol\Catapulto\Core\Order\BuyerCollection;
use Ipol\Catapulto\Core\Order\Item;
use Ipol\Catapulto\Core\Order\ItemCollection;
use Ipol\Catapulto\Core\Order\Order;
use Ipol\Catapulto\Core\Order\Payment;
use Ipol\Catapulto\Core\Order\ReceiverCollection;
use Psr\Log\LoggerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpClient\CurlHttpClient;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Class ApplicationController
* @package App\Controller
*/
class ApplicationController extends BaseController
{
/**
* @Route(path="/app/configuration/{insalesId}", name="app.configuration")
* @ParamConverter(name="shop", options={"mapping" : {"insalesId" = "insalesId"}, "repository_method" = "getByInsalesIdEx"})
* @param Services\Insales\User $user
* @param Entity\Shop $shop
* @return Response
*/
public function configuration(Services\Insales\User $user, Entity\Shop $shop)
{
if(!$user->checkShopAuthorize($shop))
return $this->redirectToRoute('session.end');
return $this->redirectToRoute(
'app.configuration.connection',
[
'insalesId' => $shop->getInsalesId()
]
);
}
/**
* Виджет отправки заявки в карточке заказа
* @Route(path="/app/order/widget/{insalesId}/{widgetPassword}/{orderId}", name="app.order.widget", defaults={"orderId" : ""})
* @ParamConverter(name="shop", options={"mapping" : {"insalesId" = "insalesId"}, "repository_method" = "getByInsalesIdEx"})
* @param Entity\Shop $shop
* @param $orderId
* @param $widgetPassword
* @param Services\Insales\Client $insales
* @param Package $package
* @param Services\Catapulto\Order $catapultoOrder
* @param Request $request
* @return Response|\Symfony\Component\Security\Core\Exception\AccessDeniedException
* @throws \Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface
* @throws \Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface
* @throws \Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface
* @throws \Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface
* @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
*/
public function orderWidget(
Entity\Shop $shop,
$orderId,
$widgetPassword,
Services\Insales\Client $insales,
Services\Catapulto\Package $package,
Services\Catapulto\Order $catapultoOrder,
ParameterBagInterface $parameterBag,
RouterInterface $router,
Request $request
)
{
/** @var array $errors */
$errors = [];
/** @var Entity\Order $order */
$order = $insales->setShop($shop)->getByOrderId($orderId, true);
if(
!$order instanceof Entity\Order
|| $order->getShop() !== $shop
|| $shop->getWidgetPassword() !== $widgetPassword
)
return $this->render('application/widget/order-error.html.twig');
$connection = $shop->getConnection();
$arDelivery = [
$shop->getDeliveryId()
];
if(
/*!in_array($order->getDeliveryInformation()['outlet']['source_id'], array_keys($arDelivery))
&&*/ $order->getDeliveryInformation()['delivery_variant_id'] != $shop->getDeliveryId()
)
return $this->render('application/widget/other-delivery-variant.html.twig');
$package->setShop($shop)->setOrder($order);
$package->getPackageEntity();
$calculation = $shop->getCalculation();
// получаем служебные данные о доставке из свойств заказа и передаём в twig
$arRateResultProp = array_filter($order->getFieldValues(), function ($val) use ($shop) {
return $val['field_id'] === $shop->getRateResultPropertyId();
});
if (empty($arRateResultProp)) {
return $this->render('application/widget/empty-rate-result.html.twig',array_merge($this->prepareOrderParams($order),[
'service_path'=>$router->generate('widget',['insalesId'=>$shop->getInsalesId()],UrlGeneratorInterface::ABSOLUTE_PATH),
'protocol' => $parameterBag->get('router.request_context.scheme'),
'host' => $parameterBag->get('router.request_context.host'),
]));
}
$arRateResultProp = array_shift($arRateResultProp);
if (!empty($arRateResultProp) && !empty($arRateResultProp['value'])) {
$rateResultPropValue = preg_replace("/&/",'&',$arRateResultProp['value']);
$rateResultPropValue = preg_replace("/"/",'"',$rateResultPropValue);
$rateResult = json_decode(htmlspecialchars_decode($rateResultPropValue), true);
} else {
return $this->render('application/widget/empty-rate-result.html.twig',array_merge($this->prepareOrderParams($order),[
'service_path'=>$router->generate('widget',['insalesId'=>$shop->getInsalesId()],UrlGeneratorInterface::ABSOLUTE_PATH),
'protocol' => $parameterBag->get('router.request_context.scheme'),
'host' => $parameterBag->get('router.request_context.host'),
]));
}
$orderPackage = $package->getPackageEntity() ?? null;
if (!empty($rateResult['dadata'])) {
$rateResult['dadata'] = json_decode(htmlspecialchars_decode($rateResult['dadata']), true);
if (is_array($rateResult)) {
$strLine = '';
$newShippingAddress = $order->getShippingAddress();
$newShippingAddress['isDadata'] = true;
$newShippingAddress['location']['kladr_zip'] = '';
$newShippingAddress['city'] = '';
$newShippingAddress['location']['street'] = '';
$newShippingAddress['location']['house'] = '';
$newShippingAddress['location']['flat'] = '';
$newShippingAddress['address_for_gis'] = '';
if ($rateResult['dadata']['zip']) {
$strLine = $rateResult['dadata']['zip'];
$newShippingAddress['location']['kladr_zip'] = $rateResult['dadata']['zip'];
}
if (!$rateResult['dadata']['city']) {
if ($rateResult['dadata']['settlement']) $newShippingAddress['city'] = $rateResult['dadata']['settlement'];
} else $newShippingAddress['city'] = $rateResult['dadata']['city'];
if ($rateResult['dadata']['street']) {
$newShippingAddress['location']['street'] = $rateResult['dadata']['street'];
$strLine .= (!empty($strLine)?', ':'') . $rateResult['dadata']['street'];
}
if ($rateResult['dadata']['house']) {
$strLine .= (!empty($strLine)?', ':'') . $rateResult['dadata']['house'];
if ($rateResult['dadata']['block']) {
if ($rateResult['dadata']['blockt']) $rateResult['dadata']['block'] = $rateResult['dadata']['blockt'] . ' ' . $rateResult['dadata']['block'];
$strLine .= (!empty($strLine)?', ':'') . $rateResult['dadata']['block'];
$rateResult['dadata']['house'] .= ', ' . $rateResult['dadata']['block'];
}
$newShippingAddress['location']['house'] = $rateResult['dadata']['house'];
}
if ($rateResult['dadata']['flat']) {
$newShippingAddress['location']['flat'] = $rateResult['dadata']['flat'];
$strLine .= (!empty($strLine)?', ':'') . $rateResult['dadata']['flat'];
}
$newShippingAddress['address_for_gis'] = $strLine;
if ($rateResult['rate_result']['pvz']) {
$dadataKey = $shop->getCalculation()->getDadataApikey();
$queryString = $rateResult['dadata']['region'];
$queryString .= (!empty($queryString)?', ':'') . $rateResult['dadata']['city'] . ', ' . $rateResult['rate_result']['pvz']['address'];
$data = ['query'=>$queryString,'count'=>1];
$httpClient = new CurlHttpClient();
$response = $httpClient->request('POST','https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address',[
'headers'=>[
'Content-Type'=>'application/json; charset=utf-8',
'Accept'=>'application/json',
'Authorization'=>'Token '.$dadataKey
],
'body'=>json_encode($data)
]);
$content = $response->getContent();
if ($suggest = @json_decode($content,true)) {
if (!empty($suggest['suggestions'])) {
$result = $suggest['suggestions'][0]['data'];
$strLine = '';
if ($result['postal_code']) {
$strLine = $result['postal_code'];
$newShippingAddress['location']['kladr_zip'] = $result['postal_code'];
}
if ($result['settlement']) $newShippingAddress['city'] = $result['settlement'];
else $newShippingAddress['city'] = $result['city'];
$strLine .= (!empty($strLine)?', ':'') . $newShippingAddress['city'];
if ($result['street']) {
$newShippingAddress['location']['street'] = $result['street'];
$strLine .= (!empty($strLine)?', ':'') . $result['street'];
}
if ($result['house']) {
$strLine .= (!empty($strLine)?', ':'') . $result['house'];
if ($result['block']) {
if ($result['block_type']) $result['block'] = $result['block_type'] . ' ' . $result['block'];
$strLine .= (!empty($strLine)?', ':'') . $result['block'];
$result['house'] .= ', ' . $result['block'];
}
$newShippingAddress['location']['house'] = $result['house'];
}
if ($result['flat']) {
$newShippingAddress['location']['flat'] = $result['flat'];
$strLine .= (!empty($strLine)?', ':'') . $result['flat'];
}
$newShippingAddress['address_for_gis'] = $strLine;
}
}
}
$newPackageAddress = [
'address_line_1'=>$newShippingAddress['address_for_gis'], //fulladdr
'address_line_2'=>'',
'building'=>$newShippingAddress['location']['house'], //house
'comment'=>'',
'country'=>'',
'door_number'=>$newShippingAddress['location']['flat'],//flat
'id'=>'',
'locality'=>$newShippingAddress['city'],//city
'locality_type'=>'',
'region1'=>'',
'region1_type'=>'',
'region2'=>'',
'region2_type'=>'',
'region3'=>'',
'region3_type'=>'',
'state_province'=>'',
'street'=>$newShippingAddress['location']['street'],//street
'street_type'=>'',
'zip'=>$newShippingAddress['location']['kladr_zip'] //zip
];
if ($orderPackage) {
$orderPackage->setReceiverLocality($newShippingAddress['city']); //city
$orderPackage->setReceiverAddress($newPackageAddress);
}
$order->setShippingAddress($newShippingAddress);
}
}
if($request->getMethod() === $request::METHOD_POST)
{
$action = $request->request->get('ctdlv_action','');
if ($action == 'send') {
/** @var BasicResponse $sendOrder */
$sendOrder = $catapultoOrder->sendOrder($request, $package, $rateResult);
if (!$sendOrder->isSuccess()) {
// ошибка отправки заказа
$errors[] = ['ErrorMessage' => $sendOrder->getErrorText()];
} else {
return $this->redirectToRoute(
'app.order.widget',
[
'insalesId' => $shop->getInsalesId(),
'widgetPassword' => $shop->getWidgetPassword(),
'orderId' => $order->getOrderId()
]
);
}
}
if ($action == 'clear') {
$insales->updateOrderField(intval($orderId),$parameterBag->get('app.insales.property.rate.result.handle'),'');
return $this->render('application/widget/empty-rate-result.html.twig',array_merge($this->prepareOrderParams($order),[
'service_path'=>$router->generate('widget',['insalesId'=>$shop->getInsalesId()],UrlGeneratorInterface::ABSOLUTE_PATH),
'protocol' => $parameterBag->get('router.request_context.scheme'),
'host' => $parameterBag->get('router.request_context.host'),
]));
}
}
// Инициализируем класс money для корректной работы getAmount() внутри twig
$obMoney = new Money(0);
//dump($order);
//parse Phone Number
$phoneNumber = preg_replace("/^8/",'+7',$order->getClient()['phone']);
return $this->render(
'application/widget/widget.html.twig',
[
'calculation' => $calculation,
'shop' => $shop,
'order' => $order,
'errors' => $errors,
'package' => $orderPackage, // если данные уже вводились и записались в бд - выводим их
'rateResult' => $rateResult ?? null,
'parsedPhoneNumber' => $phoneNumber
]
);
}
/**
* Открытие виджета выбора варианта доставки в новом окне: защита при помощи manageToken со сроком действия
* @Route(path="/app/order/reselectrate/{insalesId}/{manageToken}/{orderId}", name="app.order.reselectrate", defaults={"orderId" : ""})
* @ParamConverter(name="shop", options={"mapping" : {"insalesId" = "insalesId"}, "repository_method" = "getByInsalesIdEx"})
* @param Entity\Shop $shop
* @param $orderId
* @param $manageToken
* @param Services\Insales\Client $insales
* @param Package $package
* @param Services\Catapulto\Order $catapultoOrder
* @param ParameterBagInterface $parameterBag
* @param RouterInterface $router
* @param Request $request
* @return Response|\Symfony\Component\Security\Core\Exception\AccessDeniedException
*/
public function reselectRateInNewWindow(
Entity\Shop $shop,
$orderId,
$manageToken,
Services\Insales\Client $insales,
Services\Catapulto\Package $package,
ParameterBagInterface $parameterBag,
RouterInterface $router
)
{
/** @var Entity\Order $order */
$order = $insales->setShop($shop)->getByOrderId($orderId);
$insalesOrderLink = 'https://'.$order->getShop()->getShop().'/admin2/orders/'.$order->getOrderId();
if(
!$order instanceof Entity\Order
|| $order->getShop() !== $shop
)
return $this->render('publicpage/order-error.html.twig');
if( $order->getDeliveryInformation()['delivery_variant_id'] != $shop->getDeliveryId() )
return $this->render('publicpage/other-delivery-variant.html.twig');
//CheckToken
if ($manageToken != $order->getManageToken()) {
return $this->render('publicpage/order-error.html.twig');
}
if ( (new \DateTime()) > $order->getManageTokenExpire() ) {
return $this->render('publicpage/tokenexpire.html.twig');
}
$package->setShop($shop)->setOrder($order);
$package->getPackageEntity();
$arRateResultProp = array_filter($order->getFieldValues(), function ($val) use ($shop) {
return $val['field_id'] === $shop->getRateResultPropertyId();
});
if (!empty($arRateResultProp) && is_array($arRateResultProp))
$arRateResultProp = array_shift($arRateResultProp);
if (!empty($arRateResultProp) && !empty($arRateResultProp['value'])) {
return $this->render('publicpage/dataexist.html.twig',[
'manageOrderLink'=>$insalesOrderLink
]);
}
return $this->render('publicpage/empty-rate-result.html.twig',array_merge($this->prepareOrderParams($order),[
'service_path'=>$router->generate('widget',['insalesId'=>$shop->getInsalesId()],UrlGeneratorInterface::ABSOLUTE_PATH),
'protocol' => $parameterBag->get('router.request_context.scheme'),
'host' => $parameterBag->get('router.request_context.host'),
'manageOrderLink' => $insalesOrderLink
]));
}
/**
* @Route(path="/app/order/widget/{insalesId}/{widgetPassword}/{orderId}/ratesave", name="app.order.widget.ratesave", defaults={"orderId" : ""})
* @ParamConverter(name="shop", options={"mapping" : {"insalesId" = "insalesId"}, "repository_method" = "getByInsalesIdEx"})
* @param Entity\Shop $shop
* @param $orderId
* @param $widgetPassword
* @param Services\Insales\Client $insales
* @param ParameterBagInterface $parameterBag
* @param Request $request
* @return Response
*/
public function updateOrderRateFromAdmin(
Entity\Shop $shop,
$orderId,
$widgetPassword,
Services\Insales\Client $insales,
ParameterBagInterface $parameterBag,
EntityManagerInterface $em,
Request $request
):Response
{
/** @var Entity\Order $order */
$order = $insales->setShop($shop)->getByOrderId($orderId);
if(
!$order instanceof Entity\Order
|| $order->getShop() !== $shop
|| $shop->getWidgetPassword() !== $widgetPassword
)
return $this->render('application/widget/order-error.html.twig');
$rateResult = $request->request->get('result');
$rateResultData = json_decode($rateResult,true);
//saving...
$operators = $this->getOperators($em);
$result = $insales->updateOrderField(intval($orderId),$parameterBag->get('app.insales.property.rate.result.handle'), $rateResult);
if (($result->getMessage() != 'OK') || ($result->getHttpCode() != Response::HTTP_OK)) {
$errorCode = $result->getHttpCode();
$errorMessage = $result->getMessage();
return $this->json(['r'=>false,'code'=>$result->getHttpCode(),'mes'=>$result->getMessage()]);
}
//update Delivery Information
$description = "{$operators[$rateResultData['rate_result']['operator']]} ({$rateResultData['rate_result']['rate']})".(($rateResultData['rate_result']['pvz'])?" <br>".$rateResultData['rate_result']['pvz']['address']." #".$rateResultData['rate_result']['pvz']['code']:"")." <br>Дата доставки: {$rateResultData['rate_result']['delivery_day']}";
$result = $insales->updateOrder(intval($orderId),[
'delivery_price'=>$rateResultData['rate_cost'],
'full_delivery_price'=>$rateResultData['rate_cost'],
'delivery_description'=>$description
]);
if (($result->getMessage() != 'OK') || ($result->getHttpCode() != Response::HTTP_OK)) {
$errorCode = $result->getHttpCode();
$errorMessage = $result->getMessage();
return $this->json(['r'=>false,'code'=>$result->getHttpCode(),'mes'=>$result->getMessage()]);
}
return $this->json(['r'=>true]);
}
/** Обновление статуса заказа озон
* @Route(path="/app/order/widget/{insalesId}/{widgetPassword}/{orderId}/refresh", name="app.order.widget.refresh", defaults={"orderId" : ""})
* @ParamConverter(name="shop", options={"mapping" : {"insalesId" = "insalesId"}, "repository_method" = "getByInsalesIdEx"})
* @param Entity\Shop $shop
* @param $orderId
* @param $widgetPassword
* @param Services\Insales\Client $insales
* @param Services\Catapulto\Package $package
* @param Services\Catapulto\Order $catapultoOrder
* @return Response
* @throws \Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface
* @throws \Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface
* @throws \Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface
* @throws \Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface
* @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
*/
public function orderWidgetRefresh(
Entity\Shop $shop,
$orderId,
$widgetPassword,
Services\Insales\Client $insales,
Services\Catapulto\Package $package,
Services\Catapulto\Order $catapultoOrder
)
{
/** @var array $errors */
$errors = [];
/** @var Entity\Order $order */
$order = $insales->setShop($shop)->getByOrderId($orderId);
if(
!$order instanceof Entity\Order
|| $order->getShop() !== $shop
|| $shop->getWidgetPassword() !== $widgetPassword
)
return $this->render('application/widget/order-error.html.twig');
$arDelivery = [
$shop->getDeliveryId()
];
if(
!in_array($order->getDeliveryInformation()['outlet']['source_id'], array_keys($arDelivery))
&& $order->getDeliveryInformation()['delivery_variant_id'] != $shop->getDeliveryId()
)
return $this->render('application/widget/other-delivery-variant.html.twig');
$package->setShop($shop)->setOrder($order);
$package->getPackageEntity();
/** @var BasicResponse $sendOrder */
$sendOrder = $catapultoOrder->refreshOrder($package);
if (!$sendOrder->isSuccess()) {
// ошибка отправки заказа
$errors[] = ['ErrorMessage' => $sendOrder->getErrorText()];
} else {
return $this->redirectToRoute(
'app.order.widget',
[
'insalesId' => $shop->getInsalesId(),
'widgetPassword' => $shop->getWidgetPassword(),
'orderId' => $order->getOrderId()
]
);
}
return $this->redirectToRoute(
'app.order.widget',
[
'insalesId' => $shop->getInsalesId(),
'widgetPassword' => $shop->getWidgetPassword(),
'orderId' => $order->getOrderId()
]
);
}
/** Обновление статуса заказа озон
* @Route(path="/app/order/widget/{insalesId}/{widgetPassword}/{orderId}/cancel", name="app.order.widget.cancel", defaults={"orderId" : ""})
* @ParamConverter(name="shop", options={"mapping" : {"insalesId" = "insalesId"}, "repository_method" = "getByInsalesIdEx"})
* @param Entity\Shop $shop
* @param $orderId
* @param $widgetPassword
* @param Services\Insales\Client $insales
* @param Services\Catapulto\Package $package
* @param Services\Catapulto\Order $catapultoOrder
* @return Response
*/
public function cancelOrder(
Entity\Shop $shop,
$orderId,
$widgetPassword,
Services\Insales\Client $insales,
Services\Catapulto\Package $package,
Services\Catapulto\Order $catapultoOrder
): Response
{
/** @var Entity\Order $order */
$order = $insales->setShop($shop)->getByOrderId($orderId);
if(
!$order instanceof Entity\Order
|| $order->getShop() !== $shop
|| $shop->getWidgetPassword() !== $widgetPassword
)
return $this->render('application/widget/order-error.html.twig');
$arDelivery = [
$shop->getDeliveryId()
];
if(
!in_array($order->getDeliveryInformation()['outlet']['source_id'], array_keys($arDelivery))
&& $order->getDeliveryInformation()['delivery_variant_id'] != $shop->getDeliveryId()
)
return $this->render('application/widget/other-delivery-variant.html.twig');
$package->setShop($shop)->setOrder($order);
$package->getPackageEntity();
/** @var BasicResponse $cancelOrder */
$cancelOrder = $catapultoOrder->cancelOrder($package);
if (!$cancelOrder->isSuccess()) {
// errors...
}
return $this->redirectToRoute(
'app.order.widget',
[
'insalesId' => $shop->getInsalesId(),
'widgetPassword' => $shop->getWidgetPassword(),
'orderId' => $order->getOrderId()
]
);
}
/**
* @Route(path="/session-end", name="session.end")
*/
public function sessionEnd()
{
return $this->render('application/session-end.html.twig');
}
private function prepareOrderParams(Entity\Order $order):array
{
$shop = $order->getShop();
$cargoParams = [
'width' => $order->getWidth(),
'length' => $order->getLength(),
'height' => $order->getHeight(),
'weight' => $order->getWeight(),
'cargo_comment' => ''
];
foreach ($order->getProducts() as $product) {
$cargoParams['cargo_comment'] .= $product['title'] . '(' . $product['quantity'] . ');';
}
$location = $order->getShippingAddress()['location']['state'].' '.$order->getShippingAddress()['location']['state_type'].' '.$order->getShippingAddress()['location']['city_type'].' '.$order->getShippingAddress()['location']['city'];
if ($order->getShippingAddress()['location']['settlement']) {
if ($order->getShippingAddress()['location']['settlement_type']) $location.=' '.$order->getShippingAddress()['location']['settlement_type'];
$location.=' '.$order->getShippingAddress()['location']['settlement'];
}
$isCard = in_array($order->getPaymentGatewayId(),$shop->getCalculation()->getCard());
$isCash = in_array($order->getPaymentGatewayId(),$shop->getCalculation()->getCash());
$serviceFilter = '';
if ($isCash || $isCard) $serviceFilter = 'NP,COD';
$defaultSendType = $shop->getCalculation()->getWidgetDeliveryFrom();
$invTKSendTypes = [];
$tkSTypes = $shop->getCalculation()->getCalculationDeliveryOperators();
foreach ($tkSTypes as $tk) {
if (empty($tk->getSendType())) continue;
if ($tk->getSendType() === $defaultSendType) continue;
$invTKSendTypes[] = $tk->getDeliveryOperator()->getOperatorId();
}
return [
'sender_locality_id'=>$shop->getCalculation()->getSenderLocalityId(),
'sender_zip'=>$shop->getCalculation()->getSenderZip(),
'sender_city_from'=>$shop->getCalculation()->getSenderCity(),
'startTabMap'=>$shop->getCalculation()->getMapOpenMode() === 'map',
'dadata_token'=>$shop->getCalculation()->getDadataApikey(),
'cargo'=>$cargoParams,
'insured_value'=>floatval($order->getPrice()),//Стоимость заказа!
'need_insurance'=>($shop->getCalculation()->getMindEnsurance()===true)?'true':'false',
'services_filter'=>$serviceFilter,
'filter_card'=>($isCard===true)?'true':'false',
'filter_cash'=>($isCash===true)?'true':'false',
'location_address'=>$location,
'only_delivery_type'=> ($shop->getCalculation()->getWidgetDeliveryTypes()=='All')?'':$shop->getCalculation()->getWidgetDeliveryTypes(),
'delivery_type'=>$shop->getCalculation()->getWidgetDeliveryFrom(),
'day_shift'=>$shop->getCalculation()->getAppendDeliveryDay(),
'widgetPassword'=>$shop->getWidgetPassword(),
'orderId'=>$order->getOrderId(),
'insalesId'=>$shop->getInsalesId(),
'manageToken'=>$order->getManageToken(),
'termSendTypes' => $invTKSendTypes,
];
}
private function getOperators(EntityManagerInterface $em)
{
$deliveryOperatorsRepository = $em->getRepository(Entity\Catapulto\DeliveryOperators::class);
$allOperators = $deliveryOperatorsRepository->findAll();
$operators = [];
array_map(function($val) use (&$operators){
$operators[$val->getOperatorId()] = $val->getOperatorDisplay();
},$allOperators);
return $operators;
}
}