/** * @param $id * @return Sale\BasketItem|Sale\Result|null * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\ArgumentNullException */ protected static function loadEntityFromBasket($id) { $result = new Sale\Result(); $order = null; $basket = null; $item = null; $res = BasketTable::getList(array('filter' => array('ID' => $id), 'select' => array('ID', 'ORDER_ID', 'SET_PARENT_ID', 'TYPE', 'FUSER_ID', 'LID'))); if (!($itemDat = $res->fetch())) { $result->addError(new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_BASKET_COMPATIBLE_BASKET_ITEM_NOT_FOUND'), 'BASKET_ITEM_NOT_FOUND')); return $result; } if (intval($itemDat['ORDER_ID']) > 0) { /** @var Sale\Order $order */ if ($order = Sale\Order::load(intval($itemDat['ORDER_ID']))) { if ($basket = $order->getBasket()) { /** @var Sale\BasketItem $item */ $item = $basket->getItemById($id); } } } else { // if (!array_key_exists('FUSER_ID', $itemDat) || intval($itemDat['FUSER_ID']) <= 0) // { // $itemDat['FUSER_ID'] = Sale\Fuser::getId(); // } /** @var Sale\Basket $basket */ $basket = Sale\Basket::loadItemsForFUser($itemDat["FUSER_ID"], $itemDat['LID']); if ($basket) { /** @var Sale\BasketItem $item */ $item = $basket->getItemById($id); } } $data = array('BASKET_ITEM' => $item); if ($order !== null) { $data['ORDER'] = $order; } $result->addData($data); return $result; }
/** * @internal * @param string $action * @param array $fields * * @return Sale\Result * @throws Main\ArgumentNullException * @throws Main\ObjectNotFoundException */ public static function modifyOrder($action, array $fields) { $result = new Sale\Result(); try { $adminSection = defined('ADMIN_SECTION') && ADMIN_SECTION === true; /** @var Sale\Compatible\OrderCompatibility $orderCompatibility */ $orderCompatibility = Sale\Compatible\OrderCompatibility::create($fields); /** @var Sale\Order $order */ $order = $orderCompatibility->getOrder(); $oldPrice = $order->getPrice(); // $isStartField = $order->isStartField(); /** @var Sale\Basket $basket */ $basket = $order->getBasket(); if (!$basket && $action == static::ORDER_COMPAT_ACTION_SAVE) { $fUserId = null; $userId = $order->getUserId(); if ($userId > 0) { $fUserId = Sale\Fuser::getIdByUserId($userId); } else { if (!empty($fields['BASKET_ITEMS']) && is_array($fields['BASKET_ITEMS'])) { foreach ($fields['BASKET_ITEMS'] as $basketItemData) { if (!empty($basketItemData['FUSER_ID']) && intval($basketItemData['FUSER_ID']) > 0) { $fUserId = intval($basketItemData['FUSER_ID']); break; } } } } if (intval($fUserId) <= 0 && !$adminSection) { $fUserId = Sale\Fuser::getId(); } if (intval($fUserId) <= 0) { $result->addError(new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_COMPATIBLE_ORDER_FUSERID_NOT_FOUND'), "SALE_COMPATIBLE_ORDER_FUSERID_NOT_FOUND")); return $result; } if (!$adminSection) { $siteId = !empty($fields["SITE_ID"]) ? $fields["SITE_ID"] : (!empty($fields["LID"]) ? $fields['LID'] : null); /** @var Sale\Basket $allBasket */ $allBasket = Sale\Basket::loadItemsForFUser($fUserId, $siteId); if ($allBasket) { $basket = $allBasket->getOrderableItems(); } } if (!$basket) { $basket = Sale\Basket::create($order->getSiteId()); $basket->setFUserId($fUserId); } } $isStartField = $order->isStartField(true); if ($basket) { $basketCompatibility = BasketCompatibility::create($orderCompatibility); // $orderCompatibility->resetOrderPrice($basket, $fields); /** @var Sale\Result $r */ $r = $basketCompatibility->fillBasket($basket, $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } if ($action == static::ORDER_COMPAT_ACTION_SAVE && $order->getId() == 0 && count($basket) > 0) { $order->setMathActionOnly(true); $order->setBasket($basket); $order->setMathActionOnly(false); } if ($orderCompatibility->isExistPrice() && $oldPrice == $order->getPrice()) { $order->setFieldNoDemand('PRICE', $orderCompatibility->externalPrice); } } /** @var Sale\Result $r */ $r = $orderCompatibility->fillTaxFromRequest($order->getTax(), $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } if ($isStartField) { $hasMeaningfulFields = $order->hasMeaningfulField(); /** @var Sale\Result $r */ $r = $order->doFinalAction($hasMeaningfulFields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } } /** @var Sale\Result $r */ $r = $orderCompatibility->fillShipmentCollectionFromRequest($order->getShipmentCollection(), $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } $order->setMathActionOnly(false); /** @var Sale\Result $r */ $r = $orderCompatibility->fillPaymentCollectionFromRequest($fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } /** @var Sale\Result $r */ $r = Sale\Compatible\OrderCompatibility::fillOrderFromRequest($order, $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } } catch (Sale\UserMessageException $e) { $result->addError(new Sale\ResultError($e->getMessage(), $e->getCode())); return $result; } static::transformationLocation($order); /** @var Sale\Result $r */ $r = $order->save(); if ($r->isSuccess()) { if ($orderData = $r->getData()) { $result->setData($orderData); } if ($orderId = $r->getId()) { $result->setId($orderId); } /** @var Sale\Result $r */ $r = $orderCompatibility->saveRawFields($order, static::ENTITY_ORDER); } if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } else { $oldFields = static::convertDateFieldsToOldFormat($order->getFieldValues()); $oldFields = $oldFields + $orderCompatibility->rawFields; /** @var Sale\PaymentCollection $paymentCollection */ if ($paymentCollection = $order->getPaymentCollection()) { /** @var Sale\Payment $payment */ foreach ($paymentCollection as $payment) { /** @var Sale\Result $r */ $r = $orderCompatibility->saveRawFields($payment, static::ENTITY_PAYMENT); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } } $result->setData(array('OLD_FIELDS' => $oldFields)); } return $result; }
/** * @internal * @param string $action * @param array $fields * * @return Sale\Result * @throws Main\ArgumentNullException * @throws Main\ObjectNotFoundException */ public static function modifyOrder($action, array $fields) { $result = new Sale\Result(); try { $adminSection = defined('ADMIN_SECTION') && ADMIN_SECTION === true; /** @var Sale\Compatible\OrderCompatibility $orderCompatibility */ $orderCompatibility = Sale\Compatible\OrderCompatibility::create($fields); /** @var Sale\Order $order */ $order = $orderCompatibility->getOrder(); $oldPrice = $order->getPrice(); // $isStartField = $order->isStartField(); /** @var Sale\Basket $basket */ $basket = $order->getBasket(); if (!$basket && $action == static::ORDER_COMPAT_ACTION_SAVE) { $fUserId = Sale\Fuser::getIdByUserId($order->getUserId()); if (!$adminSection) { $siteId = !empty($fields["SITE_ID"]) ? $fields["SITE_ID"] : (!empty($fields["LID"]) ? $fields['LID'] : null); $basket = Sale\Basket::loadItemsForFUser($fUserId, $siteId); } if (!$basket) { $basket = Sale\Basket::create($order->getSiteId(), $fUserId); } } if ($basket) { $basketCompatibility = BasketCompatibility::create($orderCompatibility); // $orderCompatibility->resetOrderPrice($basket, $fields); /** @var Sale\Result $r */ $r = $basketCompatibility->fillBasket($basket, $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } if ($action == static::ORDER_COMPAT_ACTION_SAVE && $order->getId() == 0 && count($basket->getOrderableItems()) > 0) { $order->setMathActionOnly(true); $order->setBasket($basket->getOrderableItems()); $order->setMathActionOnly(false); } if ($orderCompatibility->isExistPrice() && $oldPrice == $order->getPrice()) { $order->setFieldNoDemand('PRICE', $orderCompatibility->externalPrice); } } /** @var Sale\Result $r */ $r = Sale\Compatible\OrderCompatibility::fillTaxFromRequest($order->getTax(), $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } /** @var Sale\Result $r */ $r = OrderCompatibility::fillShipmentCollectionFromRequest($order->getShipmentCollection(), $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } $order->setMathActionOnly(false); /** @var Sale\Result $r */ $r = Sale\Compatible\OrderCompatibility::fillPaymentCollectionFromRequest($order->getPaymentCollection(), $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } /** @var Sale\Result $r */ $r = Sale\Compatible\OrderCompatibility::fillOrderFromRequest($order, $fields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } } catch (Sale\UserMessageException $e) { $result->addError(new Sale\ResultError($e->getMessage(), $e->getCode())); return $result; } static::transformationLocation($order); /** @var Sale\Result $r */ $r = $order->save(); if ($r->isSuccess()) { if ($orderData = $r->getData()) { $result->setData($orderData); } if ($orderId = $r->getId()) { $result->setId($orderId); } /** @var Sale\Result $r */ $r = $orderCompatibility->saveRawFields(); } if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } else { $oldFields = static::convertDateFieldsToOldFormat($order->getFieldValues()); $oldFields = $oldFields + $orderCompatibility->rawFields; $result->setData(array('OLD_FIELDS' => $oldFields)); } return $result; }
/** * @param \Bitrix\Main\Event $event * * @return \Bitrix\Main\EventResult */ public function onSaleBasketItemDeleted(\Bitrix\Main\Event $event) { $originalValues = $event->getParameter('VALUES'); if ($originalValues['FUSER_ID'] != \Bitrix\Sale\Fuser::getId(true)) { return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, null, 'sale'); } $allBasket = \Bitrix\Sale\Basket::loadItemsForFUser($originalValues['FUSER_ID'], SITE_ID); if ($allBasket) { $_SESSION["SALE_BASKET_PRICE"][SITE_ID] = static::getActualBasketPrice($allBasket); } return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, null, 'sale'); }
{ foreach ($propertyCollection as $property) { if ($property->getField('CODE') == $code) { return $property; } } } $siteId = \Bitrix\Main\Context::getCurrent()->getSite(); $fio = 'Пупкин Василий'; $phone = '9511111111'; $email = '*****@*****.**'; $currencyCode = Option::get('sale', 'default_currency', 'RUB'); DiscountCouponsManager::init(); $order = Order::create($siteId, \CSaleUser::GetAnonymousUserID()); $order->setPersonTypeId(1); $basket = Sale\Basket::loadItemsForFUser(\CSaleBasket::GetBasketUserID(), $siteId)->getOrderableItems(); /* Действия над товарами $basketItems = $basket->getBasketItems(); foreach ($basketItems as $basketItem) { } */ $order->setBasket($basket); /*Shipment*/ $shipmentCollection = $order->getShipmentCollection(); $shipment = $shipmentCollection->createItem(); $shipment->setFields(['DELIVERY_ID' => 1, 'CURRENCY' => $currencyCode]); /**/ /*Payment*/ $paymentCollection = $order->getPaymentCollection(); $extPayment = $paymentCollection->createItem();
$basket->usePrepayment = isset($_POST["use_prepayment"]) && $_POST["use_prepayment"] == "Y" ? "Y" : "N"; $res = $basket->recalculateBasket($_POST); foreach ($res as $key => $value) { $arRes[$key] = $value; } $arRes["BASKET_DATA"] = $basket->getBasketItems(); $arRes["BASKET_DATA"]["GRID"]["HEADERS"] = $basket->getCustomColumns(); $arRes["COLUMNS"] = $strColumns; $arRes["CODE"] = "SUCCESS"; if (!empty($_POST["coupon"]) && $arRes['VALID_COUPON'] === true) { if (!empty($arRes['BASKET_DATA']['FULL_DISCOUNT_LIST'])) { global $USER; $userId = $USER instanceof CAllUser ? $USER->getId() : null; $giftManager = \Bitrix\Sale\Discount\Gift\Manager::getInstance()->setUserId($userId); \Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible(); $collections = $giftManager->getCollectionsByBasket(\Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), SITE_ID), $arRes['BASKET_DATA']['FULL_DISCOUNT_LIST'], $arRes['BASKET_DATA']['APPLIED_DISCOUNT_LIST']); \Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible(); if (count($collections)) { $arRes['BASKET_DATA']['NEED_TO_RELOAD_FOR_GETTING_GIFTS'] = true; } } } } } } unset($arRes['BASKET_DATA']['APPLIED_DISCOUNT_LIST'], $arRes['BASKET_DATA']['FULL_DISCOUNT_LIST']); $arRes["PARAMS"]["QUANTITY_FLOAT"] = isset($_POST["quantity_float"]) && $_POST["quantity_float"] == "Y" ? "Y" : "N"; $APPLICATION->RestartBuffer(); header('Content-Type: application/json; charset=' . LANG_CHARSET); echo CUtil::PhpToJSObject($arRes); die;