%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/helpers/order/builder/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/helpers/order/builder/orderbuilderexist.php |
<? namespace Bitrix\Sale\Helpers\Order\Builder; use Bitrix\Main\Error; use Bitrix\Main\Localization\Loc; use Bitrix\Sale\Helpers\Admin\OrderEdit; use Bitrix\Sale\Order; use Bitrix\Sale\Registry; use Bitrix\Sale\Shipment; /** * Class OrderBuilderExist * @package Bitrix\Sale\Helpers\Order\Builder * @internal */ final class OrderBuilderExist implements IOrderBuilderDelegate { /** @var OrderBuilder|null */ protected $builder = null; /** * OrderBuilderExist constructor. * @param OrderBuilder $builder */ public function __construct(OrderBuilder $builder) { $this->builder = $builder; } /** * @param array $data Form data. * @return Order * @throws BuildingException * @throws \Bitrix\Main\ArgumentException */ public function createOrder(array $data) { $orderClassName = $this->builder->getRegistry()->getOrderClassName(); $currentUserId = 0; $oldUserId = null; if ((int)$data["USER_ID"] > 0) { $currentUserId = (int)$data["USER_ID"]; } if ((int)$data["OLD_USER_ID"] > 0) { $oldUserId = (int)$data["OLD_USER_ID"]; } //If buyer changed - discount also can be changed OrderEdit::initCouponsData($currentUserId, $data["ID"], $oldUserId); $order = $orderClassName::load($data["ID"]); if(!$order) { $this->builder->getErrorsContainer()->addError(new Error(Loc::getMessage("SALE_HLP_OBE_ORDER_NOT_LOADED"))); throw new BuildingException(); } return $order; } public function setUser() { $currentUserId = $this->builder->getOrder()->getUserId(); $formDataUserId = (int)$this->builder->getFormData()['USER_ID']; $isChanged = ((int)$currentUserId !== $formDataUserId); if ($currentUserId && $isChanged) { $paymentCollection = $this->builder->getOrder()->getPaymentCollection(); /** @var \Bitrix\Sale\Payment $payment */ foreach ($paymentCollection as $payment) { if ($payment->isPaid()) { $this->builder->getErrorsContainer()->addError(new Error( Loc::getMessage("SALE_HLP_OBE_CHANGE_USER_ERROR") , 'SALE_ORDEREDIT_ERROR_CHANGE_USER_WITH_PAID_PAYMENTS')); } } } $this->builder->getOrder()->setFieldNoDemand( "USER_ID", $this->builder->getUserId() ); if ($isChanged) { $personTypeId = (int)$this->builder->getOrder()->getPersonTypeId(); $resultLoading = \Bitrix\Sale\OrderUserProperties::loadProfiles($formDataUserId, $personTypeId); if (!$resultLoading->isSuccess()) { return; } $profiles = $resultLoading->getData(); if (!is_array($profiles[$personTypeId])) { return; } $currentProfile = current($profiles[$personTypeId]); if (empty($currentProfile)) { return; } $values = $currentProfile['VALUES']; $propertyCollection = $this->builder->getOrder()->getPropertyCollection(); $propertyCollection->setValuesFromPost( ['PROPERTIES' => $values],[] ); } } public function buildBasket() { if(is_array($this->builder->getFormData('PRODUCT'))) { $this->builder->getBasketBuilder() ->initBasket() ->preliminaryDataPreparation() ->removeDeletedItems() //edit only ->itemsDataPreparation() ->basketCodeMap() ->setItemsFields() ->finalActions(); } } public function setShipmentPriceFields(Shipment $shipment, array $fields) { $priceDelivery = $fields['PRICE_DELIVERY']; if($fields['CUSTOM_PRICE_DELIVERY'] == 'Y' || !isset($fields['BASE_PRICE_DELIVERY'])) { $basePriceDelivery = $priceDelivery; } else { $basePriceDelivery = $fields['BASE_PRICE_DELIVERY']; } $fields['BASE_PRICE_DELIVERY'] = $basePriceDelivery; $fields['PRICE_DELIVERY'] = $priceDelivery; $res = $shipment->setFields($fields); if(!$res->isSuccess()) { $this->builder->getErrorsContainer()->addErrors($res->getErrors()); } return $shipment; } }