Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/lpost.delivery/lib/ |
Upload File : |
<? namespace Lpost\Delivery; use \Bitrix\Main\Localization\Loc; use Lpost\Delivery\Order\OrderShipmentParams\OrderParamsPvz; use Lpost\Delivery\Order\OrderShipmentParams\OrderParamsZone; use \Lpost\Delivery\Order\Property; Loc::loadMessages(__FILE__); \Bitrix\Main\Loader::IncludeModule('sale'); class Tracking { use Base; private $periodRequest = 86400; //next request only through this specified parameter after the previous one private $typesOrder = ['R', 'D', 'E']; //R - this order is returned, D - this order is delivery, E - error private $lpostIdOrder = ''; private $orderId; public function __construct($orderId = 0) { $this->orderId = $orderId; } public function getOrderReturnTypes() { return [ 1 => Loc::getMessage("lpost.tracking_returnType1"), 2 => Loc::getMessage("lpost.tracking_returnType2"), 3 => Loc::getMessage("lpost.tracking_returnType3"), 4 => Loc::getMessage("lpost.tracking_returnType4") ]; } public function getTypesOrder() { return [ 'R' => Loc::getMessage("lpost.tracking_TypeOrder_R"), 'D' => Loc::getMessage("lpost.tracking_TypeOrder_D"), 'E' => Loc::getMessage("lpost.tracking_TypeOrder_E") ]; } public function getStatesDelivery() { return [ 'CREATED' => Loc::getMessage("lpost.tracking_StateDelivery_CREATED"), 'ACT_CREATED' => Loc::getMessage("lpost.tracking_StateDelivery_ACT_CREATED"), 'ARRIVED_AT_THE_WAREHOUSE' => Loc::getMessage("lpost.tracking_StateDelivery_ARRIVED_AT_THE_WAREHOUSE"), 'ACCEPTED_BY_PLACES' => Loc::getMessage("lpost.tracking_StateDelivery_ACCEPTED_BY_PLACES"), 'SENT_TO_PICKUP_POINT' => Loc::getMessage("lpost.tracking_StateDelivery_SENT_TO_PICKUP_POINT"), 'PLACED_IN_PICKUP_POINT' => Loc::getMessage("lpost.tracking_StateDelivery_PLACED_IN_PICKUP_POINT"), 'DONE' => Loc::getMessage("lpost.tracking_StateDelivery_DONE"), 'CANCELLED' => Loc::getMessage("lpost.tracking_StateDelivery_CANCELLED"), //'SHIPPED' => Loc::getMessage("lpost.tracking_StateDelivery_SHIPPED"), //'DELIVERED' => Loc::getMessage("lpost.tracking_StateDelivery_DELIVERED") ]; } public function getStatesReturn() { return [ 'CREATED' => Loc::getMessage("lpost.tracking_StateReturn_CREATED"), 'READY_FOR_RETURN' => Loc::getMessage("lpost.tracking_StateReturn_READY_FOR_RETURN"), 'SENT_TO_WAREHOUSE' => Loc::getMessage("lpost.tracking_StateReturn_SENT_TO_WAREHOUSE"), 'ARRIVED_AT_THE_WAREHOUSE' => Loc::getMessage("lpost.tracking_StateReturn_ARRIVED_AT_THE_WAREHOUSE"), 'ACCEPTED_BY_PLACES' => Loc::getMessage("lpost.tracking_StateReturn_ACCEPTED_BY_PLACES"), 'RETURNED_TO_PARTNER' => Loc::getMessage("lpost.tracking_StateReturn_RETURNED_TO_PARTNER"), 'ARCHIVE' => Loc::getMessage("lpost.tracking_StateReturn_ARCHIVE"), ]; } private function checkUpdate() { $res = $this->getStateOrder(); if ($res != false) { if ($res['is_check_status']) { return true; } } return false; } private function tmpState() { return [ [ "ID_Order" => "ABC26197473", "StateDelivery" => "DONE", "DateChangeStateDelivery" => "24-03-2020 15:00", "PaymentMethod" => "��������", "CheckUml" => "https://check.ofd.ru/", "Summ" => 1000 ], [ "ID_Order" => "ABC26197473", "StateDelivery" => "DONE", "DateChangeStateDelivery" => "24-03-2020 15:00", "PaymentMethod" => "�����", "CheckUml" => "https://check.ofd.ru/", "Summ" => 1000, "StateReturn" => "CREATED", "DateChangeStateReturn" => "24-03-2020 15:00", ], [ "ID_Order" => "ABC26197473", "StateDelivery" => "CANCELLED", "DateChangeStateDelivery" => "24-03-2020 15:00", "CheckUml" => "https://check.ofd.ru/", "Summ" => 1000, "StateReturn" => "CREATED", "DateChangeStateReturn" => "24-03-2020 15:00", ], [ "ID_Order" => "ABC26197473", "StateDelivery" => "ARRIVED_AT_THE_WAREHOUSE", "DateChangeStateDelivery" => "24-03-2020 15:00", "StateInf" => "����������� ���� 870047733451" ], [ "ID_Order" => "ABC26197473", "Message" => "�� ������ �����������" ] ]; } public function updateStateOrder() { if ($this->checkUpdate()) { $statuses = $this->tmpState(); $newStatus = array_rand($statuses); $currentStatusArr = $statuses[$newStatus]; $stateDate = empty($currentStatusArr['StateReturn']) ? $currentStatusArr['DateChangeStateDelivery'] : $currentStatusArr['DateChangeStateReturn']; $newState = [ 'id_order' => $this->orderId, 'id_order_lpost' => $this->lpostIdOrder, 'state_order' => empty($currentStatusArr['StateReturn']) ? 'D' : 'R', 'state' => empty($currentStatusArr['StateReturn']) ? $currentStatusArr['StateDelivery'] : $currentStatusArr['StateReturn'], 'params' => \Bitrix\Main\Web\Json::encode($currentStatusArr), 'date_change' => new \Bitrix\Main\Type\DateTime($stateDate, "d-m-Y H:i") ]; $resOld = \Lpost\Delivery\Entity\TrackingTable::getList([ "filter" => [ "id_order" => $this->orderId ], "select" => ["*"], "order" => ['id' => 'desc'] ])->fetch(); if ($resOld['state_order'] == $newState['state_order'] && $resOld['state'] == $newState['state']) { $newState['date_request'] = new \Bitrix\Main\Type\DateTime(); \Lpost\Delivery\Entity\TrackingTable::update($resOld['id'], $newState); } else { \Lpost\Delivery\Entity\TrackingTable::add($newState); } } } public function getStateOrder() { $res = \Lpost\Delivery\Entity\TrackingTable::getList([ "filter" => [ "id_order" => $this->orderId ], "select" => ["*"], "order" => ['id' => 'desc'] ])->fetch(); if ($res !== false) { $this->lpostIdOrder = $res['id_order_lpost']; if(!empty($res['params'])){ $res['params'] = \Bitrix\Main\Web\Json::decode($res['params']); /*if(isset($res['params']['StateReturn'])){ $res['params']['OrderReturn'][] = [ 'IDProductPartner' => '94', 'NameShort' => 'Платье Модница на Прогулке', 'Quantity' => 1, 'ReturnType' => 1, ]; $res['params']['OrderReturn'][] = [ 'IDProductPartner' => '95', 'NameShort' => 'Платье Модница на Прогулке тест', 'Quantity' => 2, 'ReturnType' => 2, ]; }*/ if(!empty($res['params']['OrderReturn']) && is_array($res['params']['OrderReturn'])){ foreach($res['params']['OrderReturn'] as $key => $orderReturn){ $res['params']['OrderReturn'][$key]['ReturnTypeName'] = $this->getOrderReturnTypes()[$orderReturn['ReturnType']]; } } else $res['params']['OrderReturn'] = []; if(empty($res['params']['StateReturn'])) $res['params']['StateReturn'] = ''; } else $res['params'] = []; $res['state_name'] = $res['state']; $states = $res['state_order'] == 'D' ? $this->getStatesDelivery() : $this->getStatesReturn(); $res['state_name'] = empty($states[$res['state']]) ? $res['state'] : $states[$res['state']]; $res['is_check_status'] = ($res['state'] == 'DONE' || $res['state'] == 'RETURNED_TO_PARTNER') ? false : true; if ($res['is_check_status']) { $currentPeriod = time() - $res['date_request']->getTimestamp(); if ($currentPeriod < $this->periodRequest) { $res['is_check_status'] = false; } } } else $res['params']['OrderReturn'] = []; return $res; } /** * @throws \Bitrix\Main\ObjectPropertyException * @throws \Bitrix\Main\NotImplementedException * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\SystemException */ public function addOrder($orderManager, $data) { $options = Settings::getInstance(); $calculate = new \Lpost\Delivery\Calculate($data['profile']['ID']); $propertyCollection = $orderManager->getOrder()->getPropertyCollection(); $shipmentCollection = $orderManager->getOrder()->getShipmentCollection(); $paymentCollection = $orderManager->getOrder()->getPaymentCollection(); $shipmentParams = ""; $params = $calculate->getDefaultParams($data['profile']['ID']); $basketItems = $orderManager->getOrder()->getBasket(); $idSklad = 1; $issueType = 0; $pickupType = (strpos($data['profile']['CLASS_NAME'], "Zone") !== false) ? "zone" : "pvz"; foreach ($shipmentCollection as $shipment) { if (!$shipment->isSystem()) { $shipmentParams = $shipment->getField("PARAMS"); $shipmentParams = (!empty($shipmentParams)) ? \Bitrix\Main\Web\Json::decode($shipmentParams) : false; } } if (!empty($data['profile']['ID']) && !empty($params['ID_SKLAD'])) { $idSklad = $params['ID_SKLAD']; } if (!empty($data['profile']['ID']) && !empty($params['ISSUE_TYPE'])) { $issueType = (int) $params['ISSUE_TYPE']; } if ( isset($shipmentParams[OrderParamsPvz::PARAMS_PICKUP_ID]) AND $shipmentParams[OrderParamsPvz::PARAMS_PICKUP_ID] !== false ) { $pickupId = $shipmentParams[OrderParamsPvz::PARAMS_PICKUP_ID]; } if ( isset($shipmentParams[OrderParamsZone::PARAMS_ZONE_ID]) AND !empty($shipmentParams[OrderParamsZone::PARAMS_ZONE_ID]) ) { $pickupId = $shipmentParams[OrderParamsZone::PARAMS_ZONE_ID]; } if ($pickupType == "pvz" && (!isset($pickupId) || $this->isOrderPrepayment($orderManager->getOrder(), $pickupId, $pickupType))) { return false; } $name = $orderManager->getOrderName(); $phone = $orderManager->getOrderPhone(); $email = $orderManager->getOrderEmail(); $arDataOrder = [ "ID_Whence" => 2, "Order" => [ [ "PartnerNumber" => strval($order->getId()), "ID_Sklad" => (int)$idSklad, "IssueType" => $issueType, "Value" => $calculate->getInsurance($basketItems->getPrice(), $data['profile']['ID']), "SumPayment" => round($paymentCollection->isPaid() ? 0 : $order->getPrice(), 2), "SumPrePayment" => round($paymentCollection->isPaid() ? $order->getPrice() : 0, 2), "SumDelivery" => $order->getDeliveryPrice(), "SumServices" => 0, "CustomerNumber" => strval($order->getId()), "CustomerName" => $name, "Phone" => \Lpost\Delivery\Tools::formattingForApiOrderPhone($phone), "Email" => $email, "Comment" => $order->getField('USER_DESCRIPTION'), ] ] ]; if($porch = $orderManager->getOrderProp("integration_field_porch")){ $arDataOrder["Order"][0]["Porch"] = (int)$porch; } if($floor = $orderManager->getOrderProp( "integration_field_floor")){ $arDataOrder["Order"][0]["Floor"] = (int)$floor; } if($flat = $orderManager->getOrderProp( "integration_field_flat")){ $arDataOrder["Order"][0]["Flat"] = (int)$flat; } if($code = $orderManager->getOrderProp( "integration_field_code")){ $arDataOrder["Order"][0]["Code"] = $code; } if ($pickupType == "zone") { $propDateDelivery = new Property\Entity\PropertyDateDelivery(); $propTimeDelivery = new Property\Entity\PropertyTimeDelivery(); $orderManager->fillPropertyValue($propDateDelivery); $orderManager->fillPropertyValue($propTimeDelivery); $address = $orderManager->getOrderAddress(); // Если в это свойство были записанны дополнительные данные, то вырезаем их $address = preg_replace('/^"#[\d.,]+"\s/', '', $address); $location = $orderManager->getOrderLocation(); $coords = explode(",", $shipmentParams[OrderParamsZone::PARAMS_ZONE_COORDS]); $arDataOrder["Order"][0]["Address"] = "$location, $address"; $arDataOrder["Order"][0]["Latitude"] = $coords[0]; $arDataOrder["Order"][0]["Longitude"] = $coords[1]; if($propDateDeliveryValue = $propDateDelivery->getValue()) { $arDataOrder["Order"][0]["DateDeliv"] = $propDateDeliveryValue; } $arDataOrder["Order"][0]["TypeIntervalDeliv"] = (int)str_replace("_0", 0, $propTimeDelivery->getValue()); $this->setShippingCost($orderManager->getOrder(), $arDataOrder); } else { $arDataOrder["Order"][0]["ID_PickupPoint"] = (int)$pickupId; } $dimensionsBasket = $calculate->getDimensionBasketItems($basketItems, $data['profile']['ID']); $weightDefault = $dimensionsBasket['Weight'] > 1 ? $dimensionsBasket['Weight'] : 1; if($dimensionsBasket['Weight'] > 30000){ \CModule::IncludeModule("catalog"); $barcode = \Lpost\Delivery\Tools::getBarcode($this->orderManager->getDepartureNumber()); $dimensionsDefault = $calculate->getDefaultParams($this->orderManager->getDeliveryId()); $calcDimDefault = !empty($dimensionsDefault['CALC_DIMENSIONS_DEFAULT']) && $dimensionsDefault['CALC_DIMENSIONS_DEFAULT'] == 'product' ? 'product' : 'order'; // Значения габаритов по умолчанию для $goodsDimensionFrom = !empty($dimensionsDefault['GOODS_DIMENSIONS_FROM']) && $dimensionsDefault['GOODS_DIMENSIONS_FROM'] == 'product' ? 'product' : 'default'; // Забор информации о размерах товара // массив единиц товаров и их вес $arBasketItemsOne = $arBasketItemsOneId = []; foreach($basketItems as $basketItem) { $basketItemQuantity = $basketItem->getQuantity(); for( ; $basketItemQuantity > 0; $basketItemQuantity--){ $weight = (int)$basketItem->getWeight(); if(empty($weight)) { if($calcDimDefault == 'product') { // значения по умолчанию для одного товара $weight += isset($dimensionsDefault['DEFAULT_WEIGHT']) ? $dimensionsDefault['DEFAULT_WEIGHT'] : 100; } } $arDataProduct = [ 'IDProductPartner' => $basketItem->getProductId(), 'NameShort' => $basketItem->getField('NAME'), 'Price' => $basketItem->getPrice(), 'Barcode' => $barcode, 'NDS' => ((float)$basketItem->getField('VAT_RATE')) * 100, 'Quantity' => 1, 'Weight' => $weight, ]; if($goodsDimensionFrom == 'product'){ // Забор информации о размерах товара из товара $arDimentions = $basketItem->getField('DIMENSIONS'); if (is_string($arDimentions)) { $arDimentions = unserialize($arDimentions); } if(empty($arDimentions['WIDTH']) || empty($arDimentions['HEIGHT']) || empty($arDimentions['LENGTH'])){ $product = \CCatalogProduct::GetByID($basketItem->getProductId()); $arDimentions = [ 'WIDTH' => $product['WIDTH'], 'HEIGHT' => $product['HEIGHT'], 'LENGTH' => $product['LENGTH'], ]; } if($calcDimDefault == 'product') { if(empty($arDimentions["LENGTH"])) $arDimentions["LENGTH"] = isset($dimensionsDefault['DEFAULT_LENGTH']) ? $dimensionsDefault['DEFAULT_LENGTH'] : 380; if(empty($arDimentions["WIDTH"])) $arDimentions["WIDTH"] = isset($dimensionsDefault['DEFAULT_WIDTH']) ? $dimensionsDefault['DEFAULT_WIDTH'] : 380; if(empty($arDimentions["HEIGHT"])) $arDimentions["HEIGHT"] = isset($dimensionsDefault['DEFAULT_HEIGHT']) ? $dimensionsDefault['DEFAULT_HEIGHT'] : 380; } $arDataProduct["Length"] = $arDimentions['LENGTH']; $arDataProduct["Width"] = $arDimentions['WIDTH']; $arDataProduct["Height"] = $arDimentions['HEIGHT']; } if(!isset($arBasketItemsOneId[$arDataProduct['IDProductPartner']])){ $valuedMarkingCode = null; if($fieldMarkingCode && ($issueType == 0 || $issueType == 1) && (int)$basketItem->getQuantity() == 1){ $dbItem = \Bitrix\Iblock\ElementTable::getList([ 'select' => ['ID', 'IBLOCK_ID'], 'filter' => ['ID' => $basketItem->getProductId()], 'limit' => 1, ]); if($arItem = $dbItem->fetch()) { $dbProperty = \CIBlockElement::getProperty($arItem['IBLOCK_ID'], $arItem['ID'], ['sort', 'asc'], ['CODE' => $fieldMarkingCode]); if($arProperty = $dbProperty->fetch()) { if($arProperty['VALUE']) $valuedMarkingCode = $arProperty['VALUE']; } } } $arBasketItemsOneId[$arDataProduct['IDProductPartner']]['valuedMarkingCode'] = $valuedMarkingCode; } else $valuedMarkingCode = $arBasketItemsOneId[$arDataProduct['IDProductPartner']]['valuedMarkingCode']; if($valuedMarkingCode) $arDataProduct['ChestnyZnak'] = $valuedMarkingCode; $arBasketItemsOne[] = $arDataProduct; } } unset($arBasketItemsOneId); $arDataProducts = []; $curCargoesDimensions = [ "Length" => 0, "Width" => 0, "Height" => 0, "Weight" => 0, ]; $curCargoesInd = 0; foreach($arBasketItemsOne as $basketItem){ if(!empty($basketItem['Weight'])) $curCargoesDimensions['Weight'] += $basketItem['Weight']; if($curCargoesDimensions['Weight'] > 30000){ sort($arDataProducts); if($calcDimDefault == 'order'){ // значения по умолчанию для всего заказа if(empty($curCargoesDimensions["Weight"])) $curCargoesDimensions["Weight"] = isset($dimensionsDefault['DEFAULT_WEIGHT']) ? $dimensionsDefault['DEFAULT_WEIGHT'] : 100; if(empty($curCargoesDimensions["Length"])) $curCargoesDimensions["Length"] = isset($dimensionsDefault['DEFAULT_LENGTH']) ? $dimensionsDefault['DEFAULT_LENGTH'] : 380; if(empty($curCargoesDimensions["Width"])) $curCargoesDimensions["Width"] = isset($dimensionsDefault['DEFAULT_WIDTH']) ? $dimensionsDefault['DEFAULT_WIDTH'] : 380; if(empty($curCargoesDimensions["Height"])) $curCargoesDimensions["Height"] = isset($dimensionsDefault['DEFAULT_HEIGHT']) ? $dimensionsDefault['DEFAULT_HEIGHT'] : 380; } $arCargoes = [ "Weight" => $curCargoesDimensions['Weight'] - $basketItem['Weight'], "Length" => (int)$curCargoesDimensions['Length'], "Width" => (int)$curCargoesDimensions['Width'], "Height" => (int)$curCargoesDimensions['Height'], "Product" => $arDataProducts ]; $this->dataSent["Order"][0]["Cargoes"][$curCargoesInd] = $arCargoes; $curCargoesInd++; $arDataProducts = []; $arDataProducts[$basketItem['IDProductPartner']] = [ "IDProductPartner" => $basketItem['IDProductPartner'], "NameShort" => $basketItem['NameShort'], "Price" => $basketItem['Price'], "Barcode" => $basketItem['Barcode'], "NDS" => $basketItem['NDS'], "Quantity" => $basketItem['Quantity'], ]; $curCargoesDimensions = [ "Length" => $basketItem['Length'], "Width" => $basketItem['Width'], "Height" => $basketItem['Height'], "Weight" => $basketItem['Weight'] ]; } else{ if(!empty($basketItem['Length'])) $curCargoesDimensions['Length'] += $basketItem['Length']; if(!empty($basketItem['Width'])) $curCargoesDimensions['Width'] += $basketItem['Width']; if(!empty($basketItem['Height'])) $curCargoesDimensions['Height'] += $basketItem['Height']; if(isset($arDataProducts[$basketItem['IDProductPartner']])) $arDataProducts[$basketItem['IDProductPartner']]['Quantity'] += 1; else $arDataProducts[$basketItem['IDProductPartner']] = [ "IDProductPartner" => $basketItem['IDProductPartner'], "NameShort" => $basketItem['NameShort'], "Price" => $basketItem['Price'], "Barcode" => $basketItem['Barcode'], "NDS" => $basketItem['NDS'], "Quantity" => $basketItem['Quantity'], ]; } } if(!empty($arDataProducts)){ if($calcDimDefault == 'order'){ // значения по умолчанию для всего заказа if(empty($curCargoesDimensions["Weight"])) $curCargoesDimensions["Weight"] = isset($dimensionsDefault['DEFAULT_WEIGHT']) ? $dimensionsDefault['DEFAULT_WEIGHT'] : 100; if(empty($curCargoesDimensions["Length"])) $curCargoesDimensions["Length"] = isset($dimensionsDefault['DEFAULT_LENGTH']) ? $dimensionsDefault['DEFAULT_LENGTH'] : 380; if(empty($curCargoesDimensions["Width"])) $curCargoesDimensions["Width"] = isset($dimensionsDefault['DEFAULT_WIDTH']) ? $dimensionsDefault['DEFAULT_WIDTH'] : 380; if(empty($curCargoesDimensions["Height"])) $curCargoesDimensions["Height"] = isset($dimensionsDefault['DEFAULT_HEIGHT']) ? $dimensionsDefault['DEFAULT_HEIGHT'] : 380; } sort($arDataProducts); $arCargoes = [ "Weight" => $curCargoesDimensions['Weight'], "Length" => (int)$curCargoesDimensions['Length'], "Width" => (int)$curCargoesDimensions['Width'], "Height" => (int)$curCargoesDimensions['Height'], "Product" => $arDataProducts ]; $this->dataSent["Order"][0]["Cargoes"][$curCargoesInd] = $arCargoes; } } else{ $arDataOrder["Order"][0]["Cargoes"][] = [ "Weight" => $dimensionsBasket['Weight'] > 1 ? $dimensionsBasket['Weight'] : 1, "Length" => (int)$dimensionsBasket['Length'], "Width" => (int)$dimensionsBasket['Width'], "Height" => (int)$dimensionsBasket['Height'], "Product" => [] ]; \Bitrix\Main\Loader::includeModule('iblock'); $fieldMarkingCode = Settings::getInstance()->getOption('integration_field_marking_code'); foreach ($basketItems as $basketItem) { if((int)$basketItem->getQuantity() <= 0) continue; if($fieldMarkingCode && ($issueType == 0 || $issueType == 1) && (int)$basketItem->getQuantity() == 1){ $valuedMarkingCode = null; $dbItem = \Bitrix\Iblock\ElementTable::getList([ 'select' => ['ID', 'IBLOCK_ID'], 'filter' => ['ID' => $basketItem->getProductId()], 'limit' => 1, ]); if($arItem = $dbItem->fetch()) { $dbProperty = \CIBlockElement::getProperty($arItem['IBLOCK_ID'], $arItem['ID'], ['sort', 'asc'], ['CODE' => $fieldMarkingCode]); if($arProperty = $dbProperty->fetch()) { if($arProperty['VALUE']) $valuedMarkingCode = $arProperty['VALUE']; } } } $arDataProduct = [ "IDProductPartner" => $basketItem->getProductId(), "NameShort" => $basketItem->getField('NAME'), "Price" => $basketItem->getPrice(), "Barcode" => \Lpost\Delivery\Tools::getBarcode($this->orderManager->getDepartureNumber()), "NDS" => ((float)$basketItem->getField('VAT_RATE')) * 100, "Quantity" => $basketItem->getQuantity(), ]; if($valuedMarkingCode) $arDataProduct['ChestnyZnak'] = $valuedMarkingCode; $arDataOrder["Order"][0]["Cargoes"][0]['Product'][] = $arDataProduct; } } $data = $this->getData( "CreateOrders", [ "token" => $this->getToken(), "json" => str_replace("\u0027", "\u0027\u0027", \Bitrix\Main\Web\Json::encode($arDataOrder)) ], "POST" ); if(isset($data['JSON_TXT']) AND !empty($data['JSON_TXT'])) { $data = \Bitrix\Main\Web\Json::decode($data['JSON_TXT']); } if (empty($data[0]['ID_Order'])) { $this->setError( "Error saving an order in the api", true, [$data, $arDataOrder] ); } if(!empty($data[0]['Message'])) { // $orderManager-> } return (!empty($data[0]['ID_Order'])) ? $data[0] : ""; } private function isOrderPrepayment($order, $pickupId, $type) { $isCash = false; if($type == "zone") { $zone = \Lpost\Delivery\Main\Zone::getZone([ "id_pickup" => $pickupId ]); $isCash = $zone['is_cash']; } else { $pvz = \Lpost\Delivery\Main\Pvz::getPvz([ "id_pickup" => $pickupId ]); $isCash = $pvz['is_cash']; } if($isCash !== false AND (int)$isCash === 0 AND !$order->isPaid()) { return true; } return false; } public static function updateStateShipment(\Bitrix\Sale\Order $order, $state, $save = true) { $shipmentCollection = $order->getShipmentCollection(); foreach ($shipmentCollection as $shipment) { if (!$shipment->isSystem()) { break; } } if(empty($shipment) || $shipment->isSystem()) { return false; } switch($state){ case "CREATED": if(Settings::getInstance()->getOption('is_auto_allow_delivery') != 'N') $shipment->setField("ALLOW_DELIVERY", "Y"); break; case "ACT_CREATED": $shipment->setField("DEDUCTED", "Y"); break; case "DONE": $shipment->setField("STATUS_ID", "DF"); break; } if($save) $order->save(); } private function setShippingCost(\Bitrix\Sale\Order $order, &$arDataOrder) { $options = Settings::getInstance(); if ($options->getOption("SHIPPING_COST_ACTIVE") == "Y") { $valueSumRansom = $options->getOption("SHIPPING_COST_VALUE_SUM_RANSOM"); $valueSumDelivery = $options->getOption("SHIPPING_COST_VALUE_SUM_DELIVERY"); if(!empty($valueSumRansom) && !empty($valueSumDelivery)){ $arSumRansom = unserialize($valueSumRansom); $arSumDelivery = unserialize($valueSumDelivery); foreach($arSumRansom as $key => $valueSumRansom){ if(empty($valueSumRansom)) continue; $valueSumDelivery = $arSumDelivery[$key]; if ( $options->getOption("SHIPPING_COST_VALUE_SUM_RANSOM_TYPE") == \Lpost\Delivery\TabOptions\TabShippingCost::VALUE_SUM_RANDOM_TYPE_PERCENT ) { $valueSumRansom = ($order->getPrice() - $order->getDeliveryPrice()) * ($valueSumRansom / 100); $valueSumDelivery = $order->getDeliveryPrice() * ($valueSumDelivery / 100); } if ($valueSumRansom < ($order->getPrice() - $order->getDeliveryPrice())) { $arDataOrder["Order"][0]["PaymentSettings"][] = [ "ValueSumRansom" => (int)$valueSumRansom, "ValueSumDelivery" => (int)$valueSumDelivery ]; } } } } if($options->getOption("SHIPPING_COST_TAKE_MONEY_IF_REFUSAL") == "Y") { $valueSumRansom = 0; $valueSumDelivery = $order->getDeliveryPrice(); $arDataOrder["Order"][0]["PaymentSettings"][] = [ "ValueSumRansom" => $valueSumRansom, "ValueSumDelivery" => $valueSumDelivery ]; } } }