%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/basketbuilderexist.php |
<?
namespace Bitrix\Sale\Helpers\Order\Builder;
use Bitrix\Sale\BasketItem;
final class BasketBuilderExist implements IBasketBuilderDelegate
{
/** @var BasketBuilder */
private $builder = null;
public function __construct(BasketBuilder $builder)
{
$this->builder = $builder;
}
public function getItemFromBasket($basketCode, $productData)
{
if(empty($productData['MANUALLY_EDITED']))
{
$item = $this->builder->getBasket()->getExistsItem($productData["MODULE"], $productData["OFFER_ID"], $productData["PROPS"]);
}
else
{
$item = $this->builder->getBasket()->getItemByBasketCode($basketCode);
}
//sku was changed
if($item == null && $basketCode != BasketBuilder::BASKET_CODE_NEW)
{
if($item = $this->builder->getBasket()->getItemByBasketCode($basketCode))
{
$res = $item->delete();
if(!$res->isSuccess())
{
$this->builder->getErrorsContainer()->addErrors($res->getErrors());
throw new BuildingException();
}
$item = null;
}
}
return $item;
}
/**
* @param $basketCode
* @param BasketItem $item
* @param array $productData
*/
public function setItemData($basketCode, &$productData, &$item)
{
if ($basketCode != $productData["BASKET_CODE"])
$productData["BASKET_CODE"] = $item->getBasketCode();
if(isset($productData["OFFER_ID"]) || intval($productData["OFFER_ID"]) >= 0)
$productData["PRODUCT_ID"] = $productData["OFFER_ID"];
$itemFields = array_intersect_key($productData, array_flip($item::getAvailableFields()));
if(isset($itemFields["MEASURE_CODE"]) && strlen($itemFields["MEASURE_CODE"]) > 0)
{
$measures = $this->builder->getCatalogMeasures();
if(isset($measures[$itemFields["MEASURE_CODE"]]) && strlen($measures[$itemFields["MEASURE_CODE"]]) > 0)
$itemFields["MEASURE_NAME"] = $measures[$itemFields["MEASURE_CODE"]];
}
if(!empty($productData["PROVIDER_DATA"]) && !$this->builder->isNeedUpdateNewProductPrice() && CheckSerializedData($productData["PROVIDER_DATA"]))
{
$providerData = unserialize($productData["PROVIDER_DATA"]);
}
if(is_array($providerData) && !empty($providerData))
$this->builder->sendProductCachedDataToProvider($item, $this->builder->getOrder(), $providerData);
if(!empty($productData["SET_ITEMS_DATA"]) && CheckSerializedData($productData["SET_ITEMS_DATA"]))
$productData["SET_ITEMS"] = unserialize($productData["SET_ITEMS_DATA"]);
$this->builder->setBasketItemFields($item, $itemFields);
}
public function finalActions()
{
if($this->builder->isProductAdded())
{
$res = $this->builder->getBasket()->refreshData(array('PRICE', 'COUPONS'));
if (!$res->isSuccess())
{
$this->builder->getErrorsContainer()->addErrors($res->getErrors());
}
}
}
}