Пример #1
0
 /**
  * @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');
 }
Пример #2
0
 /**
  * @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;
 }
Пример #3
0
 /**
  * @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');
 }
Пример #4
0
 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);
         }
     }
 }
Пример #5
0
 /**
  * <p>Метод удаляет из корзины все записи с внутренним кодом владельца fUserID. Метод динамичный.</p>
  *
  *
  * @param int $fUserID  Внутренний код владельца.
  *
  * @param  $bool  Если флаг равен false (по-умолчанию), то удаляются только записи из
  * корзины. Если флаг равен true, то удаляются и те записи, которые
  * относятся к уже сделанным заказам.
  *
  * @param bIncOrdere $d = false] 
  *
  * @return bool 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * if (CSaleBasket::DeleteAll(3, False))
  *     echo "Корзина пользователя с внутренним кодом 3 успешно удалена";
  * ?&gt;
  * 
  * 
  * //пример вызова с автоопределением fUserID
  * &lt;?
  * CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
  * ?&gt;
  * </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;
 }