/** * @param Main\Event $event * * @return Main\EventResult */ public static function onBasketItemChange(Main\Event $event) { $parameters = $event->getParameters(); /** @var Sale\BasketItem $basketItem */ $basketItem = $parameters[0]; if (!$basketItem instanceof Sale\BasketItem) { return new Main\EventResult(Main\EventResult::ERROR, new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_EVENT_COMPATIBILITY_BASKET_ITEM_CHANGE_WRONG_BASKET'), 'SALE_EVENT_COMPATIBILITY_BASKET_ITEM_CHANGE_WRONG_BASKET'), 'sale'); } $currentBasketFields = $basketFields = BasketCompatibility::convertBasketItemToArray($basketItem); if ($basketItem->getId() == 0) { foreach (GetModuleEvents("sale", static::EVENT_COMPATIBILITY_ON_BEFORE_BASKET_ITEM_ADD, true) as $oldEvent) { if (ExecuteModuleEventEx($oldEvent, array(&$basketFields)) === false) { continue; } } } else { foreach (GetModuleEvents("sale", static::EVENT_COMPATIBILITY_ON_BEFORE_BASKET_ITEM_UPDATE, true) as $oldEvent) { if (ExecuteModuleEventEx($oldEvent, array($basketItem->getId(), &$basketFields)) === false) { continue; } } } foreach ($currentBasketFields as $key => $value) { if (isset($basketFields[$key]) && $basketFields[$key] != $value) { $basketItem->setFieldNoDemand($key, $basketFields[$key]); } } return new Main\EventResult(Main\EventResult::SUCCESS, null, 'sale'); }
/** * @internal * @param Sale\Order $order * @return array */ public static function convertOrderToArray(Sale\Order $order) { $fields = $order->getFieldValues(); //getWeight $fields = array_merge($fields, array('ORDER_WEIGHT' => 0, 'BASKET_ITEMS' => array(), 'ORDER_PROP' => array(), 'DISCOUNT_LIST' => array(), 'TAX_LIST' => array(), 'VAT_RATE' => $order->getVatRate(), 'VAT_SUM' => $order->getVatSum())); /** @var Sale\Basket $basket */ if ($basket = $order->getBasket()) { /** @var Sale\BasketItem $basketItem */ foreach ($basket as $basketItem) { $fields['BASKET_ITEMS'][] = BasketCompatibility::convertBasketItemToArray($basketItem); } } /** @var Sale\PropertyValueCollection $basket */ if ($propertyCollection = $order->getPropertyCollection()) { /** @var Sale\PropertyValue $property */ foreach ($propertyCollection as $property) { // $propertyValue = $property->getValue(); $fields['ORDER_PROP'][$property->getPropertyId()] = $property->getValue(); } } if ($propProfileName = $propertyCollection->getProfileName()) { $fields['PROFILE_NAME'] = $propProfileName->getValue(); } if ($propPayerName = $propertyCollection->getPayerName()) { $fields['PAYER_NAME'] = $propPayerName->getValue(); } if ($propUserEmail = $propertyCollection->getUserEmail()) { $fields['USER_EMAIL'] = $propUserEmail->getValue(); } if ($propDeliveryLocationZip = $propertyCollection->getDeliveryLocationZip()) { $fields['DELIVERY_LOCATION_ZIP'] = $propDeliveryLocationZip->getValue(); } if ($propDeliveryLocation = $propertyCollection->getDeliveryLocation()) { $fields['DELIVERY_LOCATION'] = $propDeliveryLocation->getValue(); } if ($propTaxLocation = $propertyCollection->getTaxLocation()) { $fields['TAX_LOCATION'] = $propTaxLocation->getValue(); } /** @var Sale\ShipmentCollection $shipmentCollection */ if ($shipmentCollection = $order->getShipmentCollection()) { $fields['ORDER_WEIGHT'] = $shipmentCollection->getWeight(); } $fields['DISCOUNT_LIST'] = DiscountCompatibility::getOldDiscountResult(); /** @var Sale\Tax $tax */ if ($tax = $order->getTax()) { $fields['TAX_LIST'] = $tax->getTaxList(); } return $fields; }
/** * @param Main\Event $event * * @return Main\EventResult */ public static function onBasketItemChange(Main\Event $event) { $parameters = $event->getParameters(); /** @var Sale\BasketItem $basketItem */ $basketItem = $parameters['ENTITY']; $isNew = $parameters['IS_NEW']; $oldValues = $parameters['VALUES']; if (!$basketItem instanceof Sale\BasketItem) { return new Main\EventResult(Main\EventResult::ERROR, new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_EVENT_COMPATIBILITY_BASKET_ITEM_CHANGE_WRONG_BASKET'), 'SALE_EVENT_COMPATIBILITY_BASKET_ITEM_CHANGE_WRONG_BASKET'), 'sale'); } $basketFields = BasketCompatibility::convertBasketItemToArray($basketItem); if (!$isNew) { foreach (GetModuleEvents("sale", static::EVENT_COMPATIBILITY_ON_BASKET_ITEM_UPDATE, true) as $oldEvent) { ExecuteModuleEventEx($oldEvent, array($basketItem->getId(), $basketFields)); } } if (array_key_exists('QUANTITY', $oldValues) && $basketFields['QUANTITY'] - $oldValues['QUANTITY'] > 0) { foreach (GetModuleEvents("sale", static::EVENT_COMPATIBILITY_ON_BASKET_ITEM_ADD, true) as $oldEvent) { ExecuteModuleEventEx($oldEvent, array($basketItem->getId(), $basketFields)); } } return new Main\EventResult(Main\EventResult::SUCCESS, null, 'sale'); }
function Update($ID, $arFields) { global $APPLICATION; $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N'); if (isset($arFields["ID"])) { unset($arFields["ID"]); } $ID = (int) $ID; CSaleBasket::Init(); foreach (GetModuleEvents("sale", "OnBeforeBasketUpdate", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) { return false; } } if (is_set($arFields, "QUANTITY") && floatval($arFields["QUANTITY"]) <= 0) { return CSaleBasket::Delete($ID); } else { if ($isOrderConverted == 'Y') { /** @var \Bitrix\Sale\Result $r */ $r = \Bitrix\Sale\Compatible\BasketCompatibility::update($ID, $arFields); if (!$r->isSuccess(true)) { foreach ($r->getErrorMessages() as $error) { $APPLICATION->ThrowException($error); } return false; } return true; } else { if (is_set($arFields, "QUANTITY")) { $arBasket = $arFields; $oldQuantity = false; if (!isset($arBasket['TYPE']) || !isset($arBasket['SET_PARENT_ID'])) { $basketIterator = CSaleBasket::GetList(array(), array('ID' => $ID), false, false, array('ID', 'TYPE', 'SET_PARENT_ID', 'QUANTITY')); if (!($basket = $basketIterator->Fetch())) { return false; } $arBasket['TYPE'] = (int) $basket['TYPE']; $arBasket['SET_PARENT_ID'] = (int) $basket['SET_PARENT_ID']; $arBasket['QUANTITY'] = $basket['QUANTITY']; $oldQuantity = $basket['QUANTITY']; unset($basket, $basketIterator); } if (CSaleBasketHelper::isSetParent($arBasket)) { if ($oldQuantity === false) { $basketIterator = CSaleBasket::GetList(array(), array('ID' => $ID), false, false, array('ID', 'QUANTITY')); if (!($basket = $basketIterator->Fetch())) { return false; } $arBasket['QUANTITY'] = $basket['QUANTITY']; $oldQuantity = $basket['QUANTITY']; unset($basket, $basketIterator); } if ($oldQuantity != $arFields['QUANTITY']) { $dbSetItems = CSaleBasket::GetList(array(), array("SET_PARENT_ID" => $ID, 'TYPE' => false), false, false, array('ID', 'QUANTITY', 'SET_PARENT_ID', 'TYPE')); while ($arItem = $dbSetItems->Fetch()) { $newQuantity = $arItem['QUANTITY'] / $arBasket['QUANTITY'] * $arFields['QUANTITY']; CSaleBasket::Update($arItem['ID'], array('QUANTITY' => $newQuantity, 'SET_PARENT_ID' => (int) $arItem['SET_PARENT_ID'], 'TYPE' => (int) $arItem['TYPE'])); } unset($arItem, $dbSetItems); } } } return CSaleBasket::_Update($ID, $arFields); } } }
/** * <p>Метод удаляет из корзины все записи с внутренним кодом владельца fUserID. Метод динамичный.</p> * * * @param int $fUserID Внутренний код владельца. * * @param $bool Если флаг равен false (по-умолчанию), то удаляются только записи из * корзины. Если флаг равен true, то удаляются и те записи, которые * относятся к уже сделанным заказам. * * @param bIncOrdere $d = false] * * @return bool * * <h4>Example</h4> * <pre> * <? * if (CSaleBasket::DeleteAll(3, False)) * echo "Корзина пользователя с внутренним кодом 3 успешно удалена"; * ?> * * * //пример вызова с автоопределением fUserID * <? * CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID()); * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalebasket/csalebasket__deleteall.e0d06223.php * @author Bitrix */ public static function DeleteAll($FUSER_ID = 0, $bIncOrdered = false) { global $DB, $APPLICATION; $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N'); $bIncOrdered = $bIncOrdered ? True : False; $FUSER_ID = intval($FUSER_ID); if ($FUSER_ID <= 0) { return false; } $arFilter = array("FUSER_ID" => $FUSER_ID); if (!$bIncOrdered) { $arFilter["ORDER_ID"] = "NULL"; } $dbBasket = CSaleBasket::GetList(array(), $arFilter, false, false, array('ID', 'ORDER_ID', 'PRODUCT_ID', 'NAME')); while ($arBasket = $dbBasket->Fetch()) { if ($isOrderConverted == "Y") { /** @var \Bitrix\Sale\Result $r */ $r = \Bitrix\Sale\Compatible\BasketCompatibility::delete($arBasket["ID"]); if (!$r->isSuccess(true)) { foreach ($r->getErrorMessages() as $error) { $APPLICATION->ThrowException($error); } return false; } } else { if (0 < intval($arBasket["ORDER_ID"])) { CSaleOrderChange::AddRecord($arBasket["ORDER_ID"], "BASKET_REMOVED", array("PRODUCT_ID" => $arBasket["PRODUCT_ID"], "NAME" => $arBasket["NAME"])); } $DB->Query("DELETE FROM b_sale_basket_props WHERE BASKET_ID = " . $arBasket["ID"], true); $DB->Query("DELETE FROM b_sale_store_barcode WHERE BASKET_ID = " . $arBasket["ID"], true); $DB->Query("DELETE FROM b_sale_basket WHERE ID = " . $arBasket["ID"], true); } } $_SESSION["SALE_BASKET_NUM_PRODUCTS"][SITE_ID] = 0; return true; }