%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/orderbuildernew.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\Registry; use Bitrix\Sale\Shipment; final class OrderBuilderNew implements IOrderBuilderDelegate { protected $builder = null; public function __construct(OrderBuilder $builder) { $this->builder = $builder; } public function createOrder(array $data) { $siteId = ''; if(isset($data['SITE_ID'])) { $siteId = $data['SITE_ID']; } elseif($data['LID']) { $siteId = $data['LID']; } if(strlen($siteId) <= 0) { $this->builder->getErrorsContainer()->addError(new Error(Loc::getMessage("SALE_HLP_OBN_SITEID_ABSENT"))); throw new BuildingException(); } $currentUserId = 0; $oldUserId = null; if (isset($data['USER_ID'])) { $currentUserId = (int)$data['USER_ID']; } if (isset($data['OLD_USER_ID'])) { $oldUserId = (int)$data['OLD_USER_ID']; } $currency = null; if (isset($data['CURRENCY'])) { $currency = $data['CURRENCY']; } //If buyer changed - discount also can be changed OrderEdit::initCouponsData($currentUserId, $data['ID'], $oldUserId); $orderClassName = $this->builder->getRegistry()->getOrderClassName(); $order = $orderClassName::create($siteId, $currentUserId, $currency); if(!$order) { $this->builder->getErrorsContainer()->addError(new Error(Loc::getMessage("SALE_HLP_OBE_ORDER_NOT_CREATED"))); throw new BuildingException(); } return $order; } public function buildBasket() { if(is_array($this->builder->getFormData('PRODUCT'))) { $this->builder->getBasketBuilder()->initBasket() ->preliminaryDataPreparation() ->itemsDataPreparation() ->basketCodeMap() ->setItemsFields() ->finalActions(); } else { if($basket = \Bitrix\Sale\Basket::create($this->builder->getOrder()->getSiteId())) { $this->builder->getOrder()->setBasket($basket); } else { $this->builder->getErrorsContainer()->addError(new Error('Can\'t create basket')); throw new BuildingException(); } } } public function setUser() { $this->builder->getOrder()->setFieldNoDemand( 'USER_ID', $this->builder->getUserId() ); $personTypeId = (int)$this->builder->getOrder()->getPersonTypeId(); $currentUserId = $this->builder->getOrder()->getUserId(); $oldFormDataUserId = (int)$this->builder->getFormData('OLD_USER_ID'); $reloadProfile = ((int)$currentUserId !== $oldFormDataUserId); if (!$reloadProfile && (int)$this->builder->getFormData('OLD_PERSON_TYPE_ID') !== $personTypeId) { $reloadProfile = true; } if ($reloadProfile) { $resultLoading = \Bitrix\Sale\OrderUserProperties::loadProfiles($currentUserId, $personTypeId); if (!$resultLoading->isSuccess()) { return; } $profiles = $resultLoading->getData(); if (empty($profiles) || !is_array($profiles)) { return; } $currentProfile = current($profiles[$personTypeId]); if (empty($currentProfile)) { return; } $values = $currentProfile['VALUES']; $propertyCollection = $this->builder->getOrder()->getPropertyCollection(); $propertyCollection->setValuesFromPost( ['PROPERTIES' => $values],[] ); } } public function setShipmentPriceFields(Shipment $shipment, array $fields) { if($fields['CUSTOM_PRICE_DELIVERY'] == 'Y') { $priceDelivery = $fields['PRICE_DELIVERY']; } else { $calcPrice = $shipment->calculateDelivery(); if(!$calcPrice->isSuccess()) { $this->builder->getErrorsContainer()->addErrors($calcPrice->getErrors()); } $priceDelivery = $calcPrice->getPrice(); } $fields['BASE_PRICE_DELIVERY'] = $priceDelivery; $fields['PRICE_DELIVERY'] = $priceDelivery; $res = $shipment->setFields($fields); if(!$res->isSuccess()) { $this->builder->getErrorsContainer()->addErrors($res->getErrors()); } return $shipment; } }