Skip to content

Instantly share code, notes, and snippets.

@VSeryoga
Created October 29, 2019 13:55
Show Gist options
  • Save VSeryoga/61f30c862d66f36a0eedc782a5b6f6db to your computer and use it in GitHub Desktop.
Save VSeryoga/61f30c862d66f36a0eedc782a5b6f6db to your computer and use it in GitHub Desktop.
Создание заказа Битрикс
<?
<?
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include.php");
?>
<?
use Bitrix\Main\Context,
Bitrix\Currency\CurrencyManager,
Bitrix\Sale\Order,
Bitrix\Sale\Basket,
Bitrix\Sale\Delivery,
Bitrix\Sale\PaySystem;
global $USER;
if(!$USER->isAuthorized()){
return 'Необходима регистрация';
}
$dbRes = \Bitrix\Sale\Property::getList([
'select' => ['ID', 'NAME', 'CODE'],
'filter' => [
'ACTIVE' => 'Y'
],
// 'group' => ['ID'],
'order' => ['ID' => 'DESC']
]);
while ($property = $dbRes->fetch())
{
$arProps[$property['ID']] = $property;
}
$typeOrderSite = false;
if($_REQUEST['ORDER_TYPE'] == 'site' || $_REQUEST['ORDER_TYPE'] == 'mediator'){
$typeOrderSite = true;
}
Bitrix\Main\Loader::includeModule("sale");
Bitrix\Main\Loader::includeModule("catalog");
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite());//->getOrderableItems();
//смена привязки сайта
if(!$typeOrderSite){
foreach ($basket as $basketItem){
if(!in_array($basketItem->getId(), $_REQUEST['PRODUCTS'])){
$basketItem->setFields([
'LID' => 's1',
]);
}
}
}
$basket->save();
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite());
// Допустим некоторые поля приходит в запросе
// $request = Context::getCurrent()->getRequest();
$siteId = Context::getCurrent()->getSite();
$currencyCode = CurrencyManager::getBaseCurrency();
// Создаёт новый заказ
$order = Order::create($siteId, $USER->GetID());
$order->setPersonTypeId(1);
$order->setField('CURRENCY', $currencyCode);
$propertyCollection = $order->getPropertyCollection();
// print_r($propertyCollection->getArray());
foreach ($_REQUEST['USER'] as $key => $field) {
$propId = str_replace('PROP_', '', $key);
//все пихаю в коммент, чтоб сохранить
// $_REQUEST['comment'] .= $arProps[$propId]['NAME'] + ': '.$field;
$somePropValue = $propertyCollection->getItemByOrderPropertyId($propId);
if($somePropValue){
$somePropValue->setValue(iconv('utf-8','windows-1251', $field));
}
// else{
// $propertyValue = $propertyCollection->createItem([
// 'ID' => $propId,
// 'NAME' => $arProps[$propId]['NAME'],
// 'TYPE' => 'STRING',
// 'CODE' => $arProps[$propId]['CODE']
// ]);
// $propertyValue->setField('VALUE', iconv('utf-8','windows-1251', $field));
// $propertyValue = \Bitrix\Sale\PropertyValue::create($propertyCollection, [
// 'ID' => $propId,
// 'NAME' => $arProps[$propId]['NAME'],
// 'TYPE' => 'STRING',
// 'CODE' => $arProps[$propId]['CODE']
// ]);
// $propertyValue->setField('VALUE', 'Свойство_3');
// $propertyCollection->addItem($propertyValue);
// }
}
if ($_REQUEST['comment']) {
$order->setField('USER_DESCRIPTION', iconv('utf-8','windows-1251', $_REQUEST['comment'])); // Устанавливаем поля комментария покупателя
}
$availableBasket = $basket->getOrderableItems();
$order->setBasket($availableBasket);
if($_REQUEST['DELIVERY_ID']){
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
Bitrix\Sale\Delivery\Services\Manager::getObjectById($_REQUEST['DELIVERY_ID'])
);
$shipmentItemCollection = $shipment->getShipmentItemCollection();
foreach ($basket as $basketItem)
{
$item = $shipmentItemCollection->createItem($basketItem);
$item->setQuantity($basketItem->getQuantity());
}
}
// Сохраняем
$order->doFinalAction(true);
$result = $order->save();
$orderId = $order->getId();
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), 's1');//->getOrderableItems();
//Возвращаем привязку к сайту
if(!$typeOrderSite){
foreach ($basket as $basketItem){
$basketItem->setFields([
'LID' => 's2',
]);
}
}
$basket->save();
echo $orderId;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment