function AddToBasket($pid, $quantity) { if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")) { $ar_res = CCatalogProduct::GetByIDEx($pid); if ($ar_res) { $result = Add2BasketByProductID($pid, $quantity); // если ошибки - $ex = $APPLICATION->GetException(); if ($result) { $arrSendResult['ERROR'] = 'N'; $arrSendResult['TEXT'] = 'OK'; echo json_encode($arrSendResult); } else { $arrSendResult['ERROR'] = 'Y'; $arrSendResult['TEXT'] = 'Error'; echo json_encode($arrSendResult); } } else { if (Add2BasketByProductID($pid, $quantity)) { $arrSendResult['ERROR'] = 'N'; $arrSendResult['TEXT'] = 'OK'; echo json_encode($arrSendResult); } } } }
function addToBascket($arItems){ $num = 0; foreach($arItems as $item){ $tovar=CCatalogProduct::GetByIDEx($item["ID"]); if(intval($item["COUNT"])<=$tovar["PRODUCT"]["QUANTITY"]&&intval($item["COUNT"])>0){ Add2BasketByProductID($item["ID"],intval($item["COUNT"])); $num++; } } ?> <script> $(".CartLink span").text('(<?php echo $num; ?> )'); $('body,html').animate({scrollTop: 0}, 2); </script> <? }
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; /** * $_GET["action"] = ADD2BASKET or DEL2BASKET or UPDATE2BASKET * $_GET["QUANTITY"] = count products add on basket * $_GET["id"] = id product */ if (CModule::IncludeModule("catalog") && CModule::IncludeModule("sale")) { $action = $_GET["action"]; if ($action == "ADD2BASKET") { $PRODUCT_ID = intval($_GET["id"]); $QUANTITY = intval($_GET["QUANTITY"]); if ($action == "ADD2BASKET" && intval($PRODUCT_ID) > 0 && intval($QUANTITY) > 0) { $arPropItem = getItemCart($arItem["PRODUCT_ID"]); $arProps = array(); $arProps = array(array("NAME" => "Артикул", "CODE" => "ARTIKUL", "VALUE" => $arPropItem["PROPERTY_ARTIKUL_VALUE"], "SORT" => 100), array("NAME" => "Наличие", "CODE" => "DEPOSIT", "VALUE" => $arPropItem["CATALOG_PROP"]["QUANTITY"] < 2 ? "N" : "Y", "SORT" => 200)); if (!Add2BasketByProductID($PRODUCT_ID, $QUANTITY, array(), $arProps)) { exit; } } } elseif ($action == "UPDATE2BASKET") { if (is_array($_GET["items"])) { foreach ($_GET["items"] as $key => $arItems) { $PRODUCT_ID = intval($arItems["id"]); $QUANTITY = intval($arItems["count"]); $arFields = array("QUANTITY" => $QUANTITY); if (!CSaleBasket::Update($PRODUCT_ID, $arFields)) { exit; } } } } elseif ($action == "DEL2BASKET") {
//get props sku $product_properties = array(); $arPropsSku = array(); $arParentSku = CCatalogSku::GetProductInfo($productID); if ($arParentSku && count($arParentSku) > 0) { $dbProduct = CIBlockElement::GetList(array(), array("ID" => $productID), false, false, array('IBLOCK_ID', 'IBLOCK_SECTION_ID')); $arProduct = $dbProduct->Fetch(); $dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK")); while ($arOfferProperties = $dbOfferProperties->Fetch()) { $arPropsSku[] = $arOfferProperties["CODE"]; } $product_properties = CIBlockPriceTools::GetOfferProperties($productID, $arParentSku["IBLOCK_ID"], $arPropsSku); } if (($action == "ADD2BASKET" || $action == "BUY") && $productID > 0) { if (CModule::IncludeModule('catalog')) { Add2BasketByProductID($productID, 1, array(), $product_properties); } if ($action == "BUY") { LocalRedirect($arParams["BASKET_URL"]); } else { LocalRedirect($APPLICATION->GetCurPageParam("", array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"]))); } } } //end add to basket $arViewed = array(); $arViewedId = array(); $db_res = CSaleViewedProduct::GetList(array("DATE_VISIT" => "DESC"), $arFilter, false, array("nTopCount" => $arParams["VIEWED_COUNT"]), array('ID', 'IBLOCK_ID', 'PRICE', 'CURRENCY', 'CAN_BUY', 'PRODUCT_ID', 'DATE_VISIT', 'DETAIL_PAGE_URL', 'DETAIL_PICTURE', 'PREVIEW_PICTURE', 'NAME', 'NOTES')); while ($arItems = $db_res->Fetch()) { $arViewedId[] = $arItems["PRODUCT_ID"]; $arViewed[$arItems["PRODUCT_ID"]] = $arItems;
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } } if ($_REQUEST["is_ajax_call"] === "y") { $sid = $_REQUEST['site_id']; $sid .= ""; define("SITE_ID", $sid); require_once $_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php"; include_once 'iblocks.php'; require_once "lang/" . LANGUAGE_ID . "/template.php"; if ($_REQUEST["add2basket_srch"] === "y") { $APPLICATION->RestartBuffer(); $message = "error"; if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")) { if (Add2BasketByProductID($_REQUEST['id'])) { $message = GetMessage("INBASKET"); } } echo $message; require_once $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_after.php"; die; } } $save_param = new CPHPCache(); if ($_REQUEST["is_ajax_call"] === "y") { $lifetime = 60 * 60 * 24; } else { $lifetime = $arParams['CACHE_TIME'] ? intval($arParams['CACHE_TIME']) : 60 * 60 * 24; if ($this->arParams["CACHE_TYPE"] == "N" || $this->arParams["CACHE_TYPE"] == "A" && COption::getOptionString("main", "component_cache_on", "Y") == "N") { CPHPCache::Clean("cache_wf_prms" . SITE_ID, "/");
$mxResult = CCatalogSku::GetProductInfo($id); if (is_array($mxResult)) { $parentid = $mxResult['ID']; } else { $parentid = $id; } $dbBasketItems = CSaleBasket::GetList(array(), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "DELAY" => 'Y', "LID" => $site, "ORDER_ID" => "NULL"), false, false, array("ID", "PRODUCT_ID")); while ($arItems = $dbBasketItems->Fetch()) { $mxResult = CCatalogSku::GetProductInfo($arItems['PRODUCT_ID']); if (is_array($mxResult) && $mxResult['ID'] == $parentid || $arItems['PRODUCT_ID'] == $parentid) { CSaleBasket::Delete($arItems['ID']); $bool = true; } } if (!$bool) { Add2BasketByProductID($id, 1, array('DELAY' => 'Y'), array()); } } } elseif ($action == 'DELETE_FROM_DELAY' && intval($_REQUEST['id']) > 0) { $dbBasketItems = CSaleBasket::GetList(array(), array("PRODUCT_ID" => $id, "FUSER_ID" => CSaleBasket::GetBasketUserID(), "DELAY" => 'Y', "LID" => $site, "ORDER_ID" => "NULL"), false, false, array("ID")); if ($arItems = $dbBasketItems->Fetch()) { CSaleBasket::Delete($arItems['ID']); } } elseif ($action == 'DELETEALL_FROM_DELAY') { $dbBasketItems = CSaleBasket::GetList(array(), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "DELAY" => 'Y', "LID" => $site, "ORDER_ID" => "NULL"), false, false, array("ID")); while ($arItems = $dbBasketItems->Fetch()) { CSaleBasket::Delete($arItems['ID']); } } elseif ($action == 'DELETEFROMCART' && intval($_REQUEST['id']) > 0) { $dbBasketItems = CSaleBasket::GetList(array(), array("ID" => $id, "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => $site, "ORDER_ID" => "NULL"), false, false, array("ID")); if ($arItems = $dbBasketItems->Fetch()) {
<?php require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; //file_put_contents("test.txt",print_r($_SERVER,true)); $action = strtoupper($_REQUEST["action"]); $id = intval($_REQUEST["id"]); $backurl = $_REQUEST["backurl"]; $quantity = doubleval($_REQUEST["quantity"]); $delay = strtoupper($_REQUEST["delay"]) == "Y" ? true : false; if ($quantity <= 0) { $quantity = 1; } if (CModule::IncludeModule("catalog")) { if (($action == "ADD2BASKET" || $action == "BUY") && $id > 0) { $r_id = Add2BasketByProductID($id, $quantity, array()); if ($delay) { CSaleBasket::Update($r_id, array("DELAY" => "Y")); } // if ajax return some info about cart if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { /* special ajax here */ //header('Content-Type: application/json'); $cntBasketItems = CSaleBasket::GetList(array(), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"), array()); echo "{'id': {$r_id} , 'count': {$cntBasketItems}}"; exit(0); } if ($action == "BUY") { LocalRedirect("/personal/cart"); } if ($backurl) { LocalRedirect($backurl);
/** * событие вызывается перед отправкой письма о новом заказе * @param $orderID * @param $eventName * @param $arFields */ function bxModifySaleMails($order_id, &$eventName, &$arFieldsEmail) { //unset($_SESSION['OnBeforeOrderAddHandler']); //$_SESSION['OnBeforeOrderAddHandler']['bxModifySaleMails']='bxModifySaleMails'; //$_SESSION['OnBeforeOrderAddHandler']['id']=$order_id; //$_SESSION['OnBeforeOrderAddHandler']['arFields']=$arFieldsorder_old; $basket_props=""; $post['INFO']=""; $id_product=array(); if( (CModule::IncludeModule("main")) && (CModule::IncludeModule("iblock")) && (CModule::IncludeModule("catalog")) && (CModule::IncludeModule("sale")) ){ /** * получаем параметры сформировавшегося старого заказа */ $arFieldsorder_old = CSaleOrder::GetByID($order_id); /* echo "<pre>"; var_dump($arFieldsorder_old);die(); echo "</pre>";*/ /** * выборка свойства сформировавшегося заказа по id заказа */ $db_props = CSaleOrderPropsValue::GetOrderProps($order_id); $arFields_props = array(); while ($arProps = $db_props->Fetch()) { $arFields_props_old[$arProps['CODE']]=$arProps; } //_debug($arFields_props_old); /** * выборка из корзины по id заказа * получаем масси id продукта */ $rsUser = CUser::GetByID(CUser::GetID()); $arUser = $rsUser->Fetch(); /*if (!$ORDER_ID = CSaleOrder::Add(array( "LID" => SITE_ID, "PERSON_TYPE_ID" => 1, "PAYED" => "N", "CANCELED" => "N", "STATUS_ID" => "N", "PRICE" => 0, "CURRENCY" => CSaleLang::GetLangCurrency(SITE_ID), "USER_ID" => $arUser['ID'], "PAY_SYSTEM_ID" => $arFieldsorder_old['PAY_SYSTEM_ID'], "PRICE_DELIVERY" => 0, "DELIVERY_ID" => $arFieldsorder_old['DELIVERY_ID'], "DISCOUNT_VALUE" => $arFieldsorder_old['DISCOUNT_VALUE'], "TAX_VALUE" => $arFieldsorder_old['TAX_VALUE'], "USER_DESCRIPTION" => $post['INFO'] ))){ $rows['msg'] = 'Ошибка создания заказа'; $fail = true; }else{ $rows['msg']=$ORDER_ID; //continue; }*/ $dbBasketItems = CSaleBasket::GetList( array("ID" => "ASC"), array( "LID" => SITE_ID, "ORDER_ID" => $order_id ), false, false, array() ); while ($arItem = $dbBasketItems->Fetch()){ $id_product[] = $arItem['PRODUCT_ID']; $products_basket[$arItem['PRODUCT_ID']]=$arItem; } foreach($products_basket as $product){ $price_product+=$product['PRICE']*$product['QUANTITY']; $products_descriptions.=$product['NAME']." - ".$product['QUANTITY']." шт: ".intval($product['PRICE'])." руб <br/>"; } $price_product+=$arFieldsorder_old["PRICE_DELIVERY"]; //$_SESSION['OnBeforeOrderAddHandler']['products_basket']=$products_basket; /** * получаем массив id партнеров из продукта */ //var_dump($id_product);die(); if($id_product){ $id_partner=array(); $partner_product=array(); $arSelect = Array("ID", "NAME","IBLOCK_ID","PROPERTY_PARTNER"); $arFilter = Array("ID"=>$id_product, "ACTIVE"=>"Y"); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); while($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); $partner_product[$arFields['PROPERTY_PARTNER_VALUE']][]=$products_basket[$arFields['ID']]; if($arFields['PROPERTY_PARTNER_VALUE']){ $id_partner[]=$arFields['PROPERTY_PARTNER_VALUE']; } } //$_SESSION['OnBeforeOrderAddHandler']['id_partner']=$id_partner; /** * получаем массив данных партнера */ if($id_partner){ $delivery_sum = null; $arSelect2 = Array("ID", "IBLOCK_ID", "NAME","PROPERTY_*"); $arFilter2 = Array("IBLOCK_ID"=>9, "ACTIVE"=>"Y","ID"=>$id_partner,); $res2 = CIBlockElement::GetList(Array(), $arFilter2, false, false, $arSelect2); /** * eсли в выборке корзине в продуктах больше чем один партнер * то разбиваем заказ по количеству партнеров */ if (intval($res2->SelectedRowsCount())>0){ while($ob2 = $res2->GetNextElement()){ $arFields_partners = $ob2->GetFields(); $arProperties_partners = $ob2->GetProperties(); //_debug($arProperties_partners); //$price_product=0; //$products_descriptions=""; $arEventFields=array(); //echo $arFields_partners['ID']; if($partner_product[$arFields_partners['ID']]){ $i=0; $size_of_productpartner=sizeof($partner_product[$arFields_partners['ID']]); foreach($partner_product[$arFields_partners['ID']] as $key_price=>$item_price){ //_debug($item_price); $quantity=1; /** * формируем новый пустой заказ */ if(!$i){ if (!$ORDER_ID = CSaleOrder::Add(array( "LID" => SITE_ID, "PERSON_TYPE_ID" => 1, "PAYED" => "N", "CANCELED" => "N", "STATUS_ID" => "N", "PRICE" => 0, "CURRENCY" => CSaleLang::GetLangCurrency(SITE_ID), "USER_ID" => $arUser['ID'], "PAY_SYSTEM_ID" => $arFieldsorder_old['PAY_SYSTEM_ID'], "PRICE_DELIVERY" => 0, "DELIVERY_ID" => $arFieldsorder_old['DELIVERY_ID'], "DISCOUNT_VALUE" => $arFieldsorder_old['DISCOUNT_VALUE'], "TAX_VALUE" => $arFieldsorder_old['TAX_VALUE'], "USER_DESCRIPTION" => $post['INFO'] ))){ $rows['msg'] = 'Ошибка создания заказа'; $fail = true; }else{ $rows['msg']=$ORDER_ID; //continue; } } /** * добавляем по id заказа в корзину товары партнера */ if (!Add2BasketByProductID($item_price['PRODUCT_ID'], $item_price['QUANTITY'], array( 'ORDER_ID' => $ORDER_ID, ), $basket_props)) { $rows['err'] = 'Ошибка добавления товара в заказ'; $fail = true; } /*$price_product+=$item_price['PRICE']*$item_price['QUANTITY']; $products_descriptions.=$item_price['NAME']." - ".$item_price['QUANTITY']." шт: ".intval($item_price['PRICE'])." руб <br/>"; */ $i++; /** * обновляем параметры нового заказа на актуальные */ if($size_of_productpartner==$i){ if (!$fail) { $dbBasketItems = CSaleBasket::GetList( array("NAME" => "ASC", "ID" => "ASC"), array( "LID" => SITE_ID, "ORDER_ID" => $ORDER_ID ), false, false, array( "ID", "NAME", "QUANTITY", "CURRENCY", "CAN_BUY", "PRICE", "WEIGHT", "DISCOUNT_PRICE" ) ); $summ = $weight = 0; $strOrderList = ""; $arBasket = array(); while ($arBasketItems = $dbBasketItems->GetNext()) { $strOrderList .= $arBasketItems["NAME"] . " - " . $arBasketItems["QUANTITY"] . " шт на " . SaleFormatCurrency($arBasketItems["PRICE"] * $arBasketItems["QUANTITY"], $arBasketItems["CURRENCY"]); $strOrderList .= "\n"; $rows['summ']=$summ += roundEx($arBasketItems["PRICE"], SALE_VALUE_PRECISION) * DoubleVal($arBasketItems["QUANTITY"]); $weight += doubleval($arBasketItems['WEIGHT']); $arBasket[] = $arBasketItems; } $arOrderForDiscount = array( 'SITE_ID' => SITE_ID, 'USER_ID' => $arUser['ID'], 'ORDER_PRICE' => $summ, 'ORDER_WEIGHT' => $weight, 'BASKET_ITEMS' => $arBasket, ); $arDiscountOptions = array(); $arDiscountErrors = array(); CSaleDiscount::DoProcessOrder($arOrderForDiscount, $arDiscountOptions, $arDiscountErrors); if($_REQUEST['comment']) $arOrderForDiscount['COMMENTS'] = $_REQUEST['comment']; if($arProperties_partners['DOSTAVKA']['VALUE']){ $arOrderForDiscount["PRICE_DELIVERY"] = $arProperties_partners['DOSTAVKA']['VALUE']; $arOrderForDiscount["DELIVERY_ID"] = 3; $summ += intval($arProperties_partners['DOSTAVKA']['VALUE']); $arOrderForDiscount['ORDER_PRICE']=$summ; } $arOrderForDiscount['PRICE_BEFORE'] = $summ; $arOrderForDiscount['PRICE'] = $summ; $arOrderForDiscount['WEIGHT'] = $arOrderForDiscount['ORDER_WEIGHT']; /** * обновляем заказ */ if (!CSaleOrder::Update($ORDER_ID, $arOrderForDiscount)) { $rows['err'] = 'Ошибка расчета цены заказа.'; $fail = true; }else{ /** * перезагружаем свойства заказ из старого */ $db_props_new = CSaleOrderPropsValue::GetOrderProps($ORDER_ID); $arFields_props_new = array(); while ($arProps_new = $db_props_new->Fetch()) { //_debug($arProps_new); foreach($arFields_props_old as $key_props_old=>$item_props_old){ if($arProps_new['CODE']==$key_props_old){ CSaleOrderPropsValue::Update($arProps_new['ID'], array("VALUE"=>$item_props_old['VALUE'])); unset($arFields_props_old[$key_props_old]); } } } if(sizeof($arFields_props_old)>0){ foreach($arFields_props_old as $key_props_old2=>$item_props_old2){ CSaleOrderPropsValue::Add(array( 'NAME' => $item_props_old2['NAME'], 'CODE' => $item_props_old2['CODE'], 'ORDER_PROPS_ID' => $item_props_old2['ORDER_PROPS_ID'], 'ORDER_ID' => $ORDER_ID, 'VALUE' => $item_props_old2['VALUE'] )); } } /** * добавляем в свойство заказа id партнера для дальнейшей фильтрации по партнерским заказам */ CSaleOrderPropsValue::Add(array( 'NAME' => "Привязка по партнеру", 'CODE' => "PATNERID", 'ORDER_PROPS_ID' => 21, 'ORDER_ID' => $ORDER_ID, 'VALUE' => $arFields_partners['ID'] )); //$price_product+=$arProperties_partners['DOSTAVKA']['VALUE']; //$price_product+=$arFieldsorder_old["PRICE_DELIVERY"]; /** * отправляем данные о товаре Партнерам */ if($arFields_partners['NAME']){ //если есть партнер у товара $arEventFields = Array( "ORDER_ID"=> $ORDER_ID, "ORDER_DATE"=> date("d.m.Y H:i:s"), "ORDER_USER"=> $arFields_partners['NAME'], "PRICE"=> $price_product, "EMAIL"=> $arProperties_partners['EMAIL']['VALUE'], "ORDER_LIST"=> $products_descriptions, //"DELIVERY_PRICE"=>$arProperties_partners['DOSTAVKA']['VALUE'] "DELIVERY_PRICE"=>$arFieldsorder_old["PRICE_DELIVERY"] ); $event = new CEvent; $event->SendImmediate("SALE_NEW_ORDERPARTNER", SITE_ID, $arEventFields); } } } // if(!$fail){ // $ar_res_product=CCatalogProduct::GetByID($PRODUCT['ID']); // $arFields_quant = array( // 'QUANTITY' => $ar_res_product['QUANTITY']-1 // ); // CCatalogProduct::Update($PRODUCT['ID'], $arFields_quant); // } } } } } /** * удаляем старый заказ после разбивки на новые */ if($ORDER_ID ){ CSaleOrder::Delete($order_id); } } } $arEventFields = Array( "ORDER_ID" =>$order_id, "ORDER_DATE" =>date("d.m.Y H:i:s"), "ORDER_USER" =>$arUser['NAME'], "PRICE" =>$price_product, "EMAIL" => $arUser['EMAIL'], "ORDER_LIST" =>$products_descriptions, "DELIVERY_PRICE"=>$arFieldsorder_old["PRICE_DELIVERY"] ); $event = new CEvent; $event->SendImmediate("SALE_NEW_BILET", SITE_ID, $arEventFields); } } //$_SESSION['OnBeforeOrderAddHandler']['rows']=$rows; return false; }
<?php require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; ?> <?php if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Если к нам идёт Ajax запрос, то ловим его if (isset($_POST["ajax_filter"]) && $_POST["ajax_filter"] == "y") { if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")) { Add2BasketByProductID($_POST["productId"], 1, array()); $arBasketItems = array(); $productsCount = 0; $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"), false, false, array("ID", "QUANTITY", "PRICE")); while ($arItems = $dbBasketItems->Fetch()) { if (strlen($arItems["CALLBACK_FUNC"]) > 0) { CSaleBasket::UpdatePrice($arItems["ID"], $arItems["QUANTITY"]); $arItems = CSaleBasket::GetByID($arItems["ID"]); } $arBasketItems[] = $arItems; } $productsCount = count($arBasketItems); $summ = 0; for ($i = 0; $i <= $productsCount; $i++) { $summ = $summ + $arBasketItems[$i]["PRICE"] * $arBasketItems[$i]["QUANTITY"]; } // Склонение "товаров" $goods_title = declOfNum($productsCount, array('товар', 'товара', 'товаров')); ?> <span class="hc-icon"><i class="icon-cart"></i></span><span class="hidden-xs">В корзине</span> <b><?php echo $productsCount;
public static function AddProduct ($idProduct, $quantity, $arRewriteFields, $arProductParams, $userId, $currency, $personType, $clearCart) { if (CModule::IncludeModule("catalog")) { global $DB; global $USER; if ($clearCart == "Y" && (int)$idProduct > 0) { CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID()); } if (Add2BasketByProductID( $idProduct, $quantity, $arRewriteFields, $arProductParams)) { // В корзину // Получаю параметры корзины $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "ORDER_ID" => "NULL"), false, false, array("ID", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "NAME")); while ($arItems = $dbBasketItems->Fetch()) { $arBasketItems[] = $arItems; } foreach ($arBasketItems as $valBasketItems) { $productPriceSumm = $productPriceSumm + ((int)$valBasketItems["QUANTITY"]*(int)$valBasketItems["PRICE"]); } $strOrderList = ""; foreach ($arBasketItems as $arItem) { $measureText = (isset($arItem["MEASURE_TEXT"]) && strlen($arItem["MEASURE_TEXT"])) ? $arItem["MEASURE_TEXT"] : GetMessage("SOA_SHT"); $strOrderList .= $arItem["NAME"]." - ".$arItem["QUANTITY"]." ".$measureText.": ".SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]); $strOrderList .= "\n"; } // Создаю заказ $arOrderFields = array( "LID" => SITE_ID, "PERSON_TYPE_ID" => $personType, "PAYED" => "N", "CANCELED" => "N", "STATUS_ID" => "N", "PRICE" => $productPriceSumm, "CURRENCY" => $currency, "USER_ID" => $userId, "USER_DESCRIPTION" => "", "ADDITIONAL_INFO" => "" ); $ORDER_ID = CSaleOrder::Add($arOrderFields); // Привязываем товары из корзины текущего пользователя к заказу CSaleBasket::OrderBasket($ORDER_ID, CSaleBasket::GetBasketUserID(), SITE_ID, false); $rsUser = CUser::GetByID($userId); $arUser = $rsUser->Fetch(); $arFields = Array( "ORDER_ID" => $ORDER_ID, "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", SITE_ID))), "ORDER_USER" => $arUser["NAME"], "PRICE" => $productPriceSumm, "BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME), "EMAIL" => (strlen($arUserResult["USER_EMAIL"])>0 ? $arUserResult["USER_EMAIL"] : $USER->GetEmail()), "ORDER_LIST" => $strOrderList, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME), ); $eventName = "SALE_NEW_ORDER"; $event = new CEvent; $event->Send($eventName, SITE_ID, $arFields, "N"); return $ORDER_ID; } } else { return false; } }
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'; CModule::IncludeModule('sale'); CModule::IncludeModule('catalog'); $cmd = htmlspecialcharsEx($_POST['action']); $elementId = intval($_POST['id']); $count = intval($_POST['quantity']); //Add functional if ($elementId && $cmd == 'ADD2BASKET') { if ($count) { $res = Add2BasketByProductID($elementId, $count, array()); } else { $res = Add2BasketByProductID($elementId, 1, array()); } } //Delete functional /*if($elementId && $cmd == 'delete'){ $res = CSaleBasket::Delete($elementId); } //Update functional if($elementId && $count && $cmd == 'update'){ $arFields = array( 'QUANTITY' => $count ); $res = CSaleBasket::Update($elementId, $arFields); }*/ $APPLICATION->IncludeComponent("bitrix:sale.basket.basket.small", "basket_top", array("PATH_TO_BASKET" => "/personal/basket.php", "PATH_TO_ORDER" => "/personal/order.php", "SHOW_DELAY" => "Y", "SHOW_NOTAVAIL" => "Y", "SHOW_SUBSCRIBE" => "Y"), false); ?>
} } $arrPROPERTY_CODE = is_array($arrPROPERTY_CODE) ? $arrPROPERTY_CODE : array(); $curPagePath = $APPLICATION->GetCurPageParam($SECTION_ID_VARIABLE . "=" . $SECTION_ID, array($PRODUCT_ID_VARIABLE, $ACTION_VARIABLE, $SECTION_ID_VARIABLE)); $USE_PRICE_COUNT = $USE_PRICE_COUNT == "Y" ? "Y" : "N"; $SHOW_PRICE_COUNT = IntVal($SHOW_PRICE_COUNT); $SHOW_PRICE_COUNT = $SHOW_PRICE_COUNT > 0 ? $SHOW_PRICE_COUNT : 1; /************************************************************************* Processing of the Buy link *************************************************************************/ if (array_key_exists($ACTION_VARIABLE, $_REQUEST) && array_key_exists($PRODUCT_ID_VARIABLE, $_REQUEST)) { $action = StrToUpper($_REQUEST[$ACTION_VARIABLE]); $productID = IntVal($_REQUEST[$PRODUCT_ID_VARIABLE]); if (($action == "ADD2BASKET" || $action == "BUY") && $productID > 0) { if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")) { if (Add2BasketByProductID($productID)) { if ($action == "BUY") { LocalRedirect($BASKET_URL); } else { LocalRedirect($curPagePath); } } else { if ($ex = $GLOBALS["APPLICATION"]->GetException()) { $errorMessage .= $ex->GetString(); } else { $errorMessage .= GetMessage("CATALOG_ERROR2BASKET") . "."; } } } } }
<? if (!(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')) { header('HTTP/1.0 403 Forbidden'); die(); } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); global $APPLICATION; $productId = intval($_POST['PRODUCT_ID']); $quantity = intval($_POST['QUANTITY']); if ($productId > 0 && \Bitrix\Main\Loader::includeModule("sale") && \Bitrix\Main\Loader::includeModule("catalog") && $quantity >= 1) { if(!Add2BasketByProductID($productId, $quantity, $arRewriteFields, $product_properties)) { if ($ex = $APPLICATION->GetException()) { $strError = $ex->GetString(); } } } $APPLICATION->IncludeComponent("bitrix:sale.basket.basket.small","small",Array( "PATH_TO_BASKET" => "/basket/", "PATH_TO_ORDER" => "/basket/order.php", "SHOW_DELAY" => "Y", "SHOW_NOTAVAIL" => "Y", "SHOW_SUBSCRIBE" => "Y" ) );
/** * * History update, cron usage only * @global CUser $USER * @return boolean */ public static function orderHistory() { global $USER; if (is_object($USER) == false) { $USER = new RetailUser(); } if (!CModule::IncludeModule("iblock")) { self::eventLog('ICrmOrderActions::orderHistory', 'iblock', 'module not found'); return false; } if (!CModule::IncludeModule("sale")) { self::eventLog('ICrmOrderActions::orderHistory', 'sale', 'module not found'); return false; } if (!CModule::IncludeModule("catalog")) { self::eventLog('ICrmOrderActions::orderHistory', 'catalog', 'module not found'); return false; } $api_host = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_HOST_OPTION, 0); $api_key = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_KEY_OPTION, 0); $optionsOrderTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_TYPES_ARR, 0))); $optionsDelivTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_DELIVERY_TYPES_ARR, 0))); $optionsPayTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_TYPES, 0))); $optionsPayStatuses = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_STATUSES, 0))); // --statuses $optionsPayment = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT, 0))); $optionsOrderProps = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_PROPS, 0)); $optionsLegalDetails = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_LEGAL_DETAILS, 0)); $optionsContragentType = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CONTRAGENT_TYPE, 0)); $optionsSitesList = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_SITES_LIST, 0)); $optionsCustomFields = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CUSTOM_FIELDS, 0)); foreach ($optionsOrderProps as $code => $value) { if (isset($optionsLegalDetails[$code])) { $optionsOrderProps[$code] = array_merge($optionsOrderProps[$code], $optionsLegalDetails[$code]); } if (isset($optionsCustomFields[$code])) { $optionsOrderProps[$code] = array_merge($optionsOrderProps[$code], $optionsCustomFields[$code]); } $optionsOrderProps[$code]['location'] = 'LOCATION'; if (array_search('CITY', $optionsOrderProps[$code]) == false) { $optionsOrderProps[$code]['city'] = 'CITY'; } if (array_search('ZIP', $optionsOrderProps[$code]) == false) { $optionsOrderProps[$code]['index'] = 'ZIP'; } } $api = new RetailCrm\RestApi($api_host, $api_key); $dateStart = COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, null); if (is_null($dateStart)) { $dateStart = new \DateTime(); $dateStart = $dateStart->format('Y-m-d H:i:s'); } try { $orderHistory = $api->orderHistory($dateStart); } catch (\RetailCrm\Exception\CurlException $e) { self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::orderHistory::CurlException', $e->getCode() . ': ' . $e->getMessage()); return false; } $orderHistory = isset($orderHistory['orders']) ? $orderHistory['orders'] : array(); $log = new Logger(); $log->write($orderHistory, 'history'); $dateFinish = $api->getGeneratedAt(); if (is_null($dateFinish) || $dateFinish == false) { $dateFinish = new \DateTime(); } $defaultOrderType = 1; $dbOrderTypesList = CSalePersonType::GetList(array(), array("ACTIVE" => "Y")); if ($arOrderTypesList = $dbOrderTypesList->Fetch()) { $defaultOrderType = $arOrderTypesList['ID']; } $GLOBALS['INTARO_CRM_FROM_HISTORY'] = true; foreach ($orderHistory as $order) { if (function_exists('intarocrm_order_pre_persist')) { $order = intarocrm_order_pre_persist($order); } if (!isset($order['externalId'])) { // custom orderType function if (function_exists('intarocrm_set_order_type')) { $orderType = intarocrm_set_order_type($order); if ($orderType) { $optionsOrderTypes[$order['orderType']] = $orderType; } else { $optionsOrderTypes[$order['orderType']] = $defaultOrderType; } } // we dont need new orders without any customers (can check only for externalId) if (!isset($order['customer']['externalId'])) { if (!isset($order['customer']['id'])) { continue; } $registerNewUser = true; if (!isset($order['customer']['email']) || $order['customer']['email'] == '') { $login = $order['customer']['email'] = uniqid('user_' . time()) . '@crm.com'; } else { $dbUser = CUser::GetList($by = 'ID', $sort = 'ASC', array('=EMAIL' => $order['email'])); switch ($dbUser->SelectedRowsCount()) { case 0: $login = $order['customer']['email']; break; case 1: $arUser = $dbUser->Fetch(); $registeredUserID = $arUser['ID']; $registerNewUser = false; break; default: $login = uniqid('user_' . time()) . '@crm.com'; break; } } if ($registerNewUser === true) { $userPassword = uniqid(); $newUser = new CUser(); $arFields = array("NAME" => self::fromJSON($order['customer']['firstName']), "LAST_NAME" => self::fromJSON($order['customer']['lastName']), "EMAIL" => $order['customer']['email'], "LOGIN" => $login, "LID" => "ru", "ACTIVE" => "Y", "PASSWORD" => $userPassword, "CONFIRM_PASSWORD" => $userPassword); $registeredUserID = $newUser->Add($arFields); if ($registeredUserID === false) { self::eventLog('ICrmOrderActions::orderHistory', 'CUser::Register', 'Error register user'); continue; } try { $api->customerFixExternalIds(array(array('id' => $order['customer']['id'], 'externalId' => $registeredUserID))); } catch (\RetailCrm\Exception\CurlException $e) { self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::customerFixExternalIds::CurlException', $e->getCode() . ': ' . $e->getMessage()); continue; } } $order['customer']['externalId'] = $registeredUserID; } // new order $newOrderFields = array('LID' => CSite::GetDefSite(), 'PERSON_TYPE_ID' => isset($optionsOrderTypes[$order['orderType']]) ? $optionsOrderTypes[$order['orderType']] : $defaultOrderType, 'PAYED' => 'N', 'CANCELED' => 'N', 'STATUS_ID' => 'N', 'PRICE' => 0, 'CURRENCY' => CCurrency::GetBaseCurrency(), 'USER_ID' => $order['customer']['externalId'], 'PAY_SYSTEM_ID' => 0, 'PRICE_DELIVERY' => 0, 'DELIVERY_ID' => 0, 'DISCOUNT_VALUE' => 0, 'USER_DESCRIPTION' => ''); if (count($optionsSitesList) > 1 && ($lid = array_search($order['site'], $optionsSitesList))) { $newOrderFields['LID'] = $lid; } $externalId = CSaleOrder::Add($newOrderFields); if (!isset($order['externalId'])) { try { $api->orderFixExternalIds(array(array('id' => $order['id'], 'externalId' => $externalId))); } catch (\RetailCrm\Exception\CurlException $e) { self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::orderFixExternalIds::CurlException', $e->getCode() . ': ' . $e->getMessage()); continue; } } $order['externalId'] = $externalId; } if (isset($order['externalId']) && $order['externalId']) { // custom orderType function if (function_exists('intarocrm_set_order_type')) { $orderType = intarocrm_set_order_type($order); if ($orderType) { $optionsOrderTypes[$order['orderType']] = $orderType; } else { $optionsOrderTypes[$order['orderType']] = $defaultOrderType; } } $arFields = CSaleOrder::GetById($order['externalId']); // incorrect order if ($arFields === false || empty($arFields)) { continue; } $LID = $arFields['LID']; $userId = $arFields['USER_ID']; if (isset($order['customer']['externalId']) && !is_null($order['customer']['externalId'])) { $userId = $order['customer']['externalId']; } $rsOrderProps = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID'])); $arUpdateProps = array(); while ($ar = $rsOrderProps->Fetch()) { $prop = CSaleOrderProps::GetByID($ar['ORDER_PROPS_ID']); $arUpdateProps[$ar['CODE']] = array('ID' => $ar['ID'], 'TYPE' => $prop['TYPE'], 'VALUE' => $ar['VALUE']); } $order['fio'] = trim(implode(' ', array(isset($order['lastName']) ? $order['lastName'] : '', isset($order['firstName']) ? $order['firstName'] : '', isset($order['patronymic']) ? $order['patronymic'] : ''))); if (isset($order['delivery']['address']['city'])) { $order['location'] = $order['delivery']['address']['city']; } if (isset($order['orderType']) && isset($optionsOrderTypes[$order['orderType']])) { if (isset($optionsOrderProps[$arFields['PERSON_TYPE_ID']])) { foreach ($optionsOrderProps[$arFields['PERSON_TYPE_ID']] as $code => $value) { if (in_array($code, array_keys($order)) === false && isset($optionsOrderProps[$optionsOrderTypes[$order['orderType']]][$code])) { $order[$code] = $arUpdateProps[$optionsOrderProps[$arFields['PERSON_TYPE_ID']][$code]]['VALUE']; } } } //update ordertype CSaleOrder::Update($order['externalId'], array('PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']])); $arProp = CSaleOrderProps::GetList(array(), array('PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']])); $typeParam = array(); while ($ar = $arProp->Fetch()) { $typeParam[$ar['CODE']] = $ar['CODE']; } foreach (array_diff_key($arUpdateProps, $typeParam) as $code => $param) { if (isset($arUpdateProps[$code])) { CSaleOrderPropsValue::Delete($param['ID']); } } $arFields['PERSON_TYPE_ID'] = $optionsOrderTypes[$order['orderType']]; } array_walk_recursive(self::clearArr($order), 'self::recursiveUpdate', array('update' => $arUpdateProps, 'type' => $arFields['PERSON_TYPE_ID'], 'options' => $optionsOrderProps, 'orderId' => $order['externalId'])); foreach ($order['items'] as $item) { if (isset($item['deleted']) && $item['deleted']) { if ($p = CSaleBasket::GetList(array(), array('ORDER_ID' => $order['externalId'], 'PRODUCT_ID' => $item['id']))->Fetch()) { if (!CSaleBasket::Delete($p['ID'])) { self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Delete', 'Error element delete'); } } else { $prp = CSaleBasket::GetPropsList(array(), array("ORDER_ID" => $order['externalId'], "CODE" => 'ID', "VALUE" => $item['id']))->Fetch(); if (!CSaleBasket::Delete($prp['BASKET_ID'])) { self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Delete', 'Error castom element delete'); } } continue; } if (isset($item['offer']) === false && isset($item['offer']['externalId']) === false) { continue; } $res = CIBlockElement::GetByID($item['offer']['externalId'])->Fetch(); if ($res) { $p = CSaleBasket::GetList(array(), array('ORDER_ID' => $order['externalId'], 'PRODUCT_ID' => $item['offer']['externalId']))->Fetch(); if ($p == false) { $p = CIBlockElement::GetByID($item['offer']['externalId'])->GetNext(); $iblock = CIBlock::GetByID($p['IBLOCK_ID'])->Fetch(); $p['CATALOG_XML_ID'] = $iblock['XML_ID']; $p['PRODUCT_XML_ID'] = $p['XML_ID']; unset($p['XML_ID']); } elseif ($propResult = CSaleBasket::GetPropsList(array(''), array('BASKET_ID' => $p['ID']))) { while ($r = $propResult->Fetch()) { unset($r['ID']); unset($r['BASKET_ID']); $p['PROPS'][] = $r; } } $arProduct = array(); if (isset($item['created']) && $item['created'] == true) { $productPrice = GetCatalogProductPrice($item['offer']['externalId'], COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_BASE_PRICE, 0)); $arProduct = array('FUSER_ID' => $userId, 'ORDER_ID' => $order['externalId'], 'QUANTITY' => $item['quantity'], 'CURRENCY' => $productPrice['CURRENCY'], 'LID' => $LID, 'PRODUCT_ID' => $item['offer']['externalId'], 'PRODUCT_PRICE_ID' => $p['PRODUCT_PRICE_ID'], 'WEIGHT' => $p['WEIGHT'], 'DELAY' => $p['DELAY'], 'CAN_BUY' => $p['CAN_BUY'], 'MODULE' => $p['MODULE'], 'NOTES' => $item['comment'] ?: $p['NOTES'], 'PRODUCT_PROVIDER_CLASS' => $p['PRODUCT_PROVIDER_CLASS'], 'DETAIL_PAGE_URL' => $p['DETAIL_PAGE_URL'], 'CATALOG_XML_ID' => $p['CATALOG_XML_ID'], 'PRODUCT_XML_ID' => $p['PRODUCT_XML_ID'], 'CUSTOM_PRICE' => 'Y'); } if (isset($item['isCanceled']) == false) { if (isset($item['initialPrice']) && $item['initialPrice']) { $arProduct['PRICE'] = (double) $item['initialPrice']; } if (isset($item['discount'])) { $arProduct['DISCOUNT_PRICE'] = $item['discount']; } if (isset($item['discountPercent'])) { $arProduct['DISCOUNT_VALUE'] = $item['discountPercent']; $newPrice = round($arProduct['PRICE'] / 100 * (100 - $arProduct['DISCOUNT_VALUE']), 2); $arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice; } if (isset($item['discount']) || isset($item['discountPercent'])) { $arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE']; } if (isset($item['offer']['name']) && $item['offer']['name']) { $arProduct['NAME'] = self::fromJSON($item['offer']['name']); } $arProduct = self::updateCancelProp($arProduct, 0); } elseif (isset($item['isCanceled'])) { $arProduct['PRICE'] = 0; $arProduct = self::updateCancelProp($arProduct, 1); } if (isset($item['created']) && $item['created'] == true) { if (!Add2BasketByProductID($item['offer']['externalId'], $item['quantity'], $arProduct, $p['PROPS'])) { self::eventLog('ICrmOrderActions::orderHistory', 'Add2BasketByProductID', 'Error element add'); } continue; } if (count($p['PROPS']) > 0) { $arProduct['PROPS'] = $p['PROPS']; } if (isset($item['quantity']) && $item['quantity']) { $arProduct['QUANTITY'] = $item['quantity']; } if (isset($item['offer']['name']) && $item['offer']['name']) { $arProduct['NAME'] = self::fromJSON($item['offer']['name']); } if (!CSaleBasket::Update($p['ID'], $arProduct)) { self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Update', 'Error element update'); } CSaleBasket::DeleteAll($userId); } else { $arProduct = array(); if (isset($item['created']) && $item['created'] == true) { $arProduct = array('FUSER_ID' => $userId, 'ORDER_ID' => $order['externalId'], 'LID' => $LID, 'NOTES' => $item['comment']); } if (isset($item['isCanceled']) == false) { if (isset($item['initialPrice']) && $item['initialPrice']) { $arProduct['PRICE'] = (double) $item['initialPrice']; } if (isset($item['discount'])) { $arProduct['DISCOUNT_PRICE'] = $item['discount']; } if (isset($item['discountPercent'])) { $arProduct['DISCOUNT_VALUE'] = $item['discountPercent']; $newPrice = round($arProduct['PRICE'] / 100 * (100 - $arProduct['DISCOUNT_VALUE']), 2); $arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice; } if (isset($item['discount']) || isset($item['discountPercent'])) { $arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE']; } if (isset($item['offer']['name']) && $item['offer']['name']) { $arProduct['NAME'] = self::fromJSON($item['offer']['name']); } $arProduct = self::updateCancelProp($arProduct, 0); } elseif (isset($item['isCanceled'])) { $arProduct['PRICE'] = 0; $arProduct = self::updateCancelProp($arProduct, 1); } if (isset($item['quantity']) && $item['quantity']) { $arProduct['QUANTITY'] = $item['quantity']; } if (isset($item['offer']['name']) && $item['offer']['name']) { $arProduct['NAME'] = self::fromJSON($item['offer']['name']); } if (isset($item['created']) && $item['created'] == true) { $iBlocks = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_IBLOCKS, 0)); $iBlock = array_shift($iBlocks); $newSection = new CIBlockSection(); $newSectionFields = array("ACTIVE" => 'N', "IBLOCK_ID" => $iBlock, "NAME" => 'RetailCRM', "CODE" => 'RetailCRM'); $resSection = $newSection->Add($newSectionFields); if (!$resSection) { self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockSection::Add', 'Error castom section add'); continue; } $arLoadProductArray = array("IBLOCK_SECTION_ID" => $resSection, "IBLOCK_ID" => $iBlock, "NAME" => $item['offer']['name'] ? $item['offer']['name'] : 'RetailCrmElement', "CODE" => 'RetailCrmElement', "ACTIVE" => 'Y'); $el = new CIBlockElement(); $PRODUCT_ID = $el->Add($arLoadProductArray, false, false, true); if (!$PRODUCT_ID) { self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockElement::Add', 'Error castom element add'); continue; } if (!CCatalogProduct::Add(array("ID" => $PRODUCT_ID))) { self::eventLog('ICrmOrderActions::orderHistory', 'CCatalogProduct::Add', 'Error product add'); continue; } $arFields = array("PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_BASE_PRICE, 0), "PRICE" => $item['initialPrice'] ? $item['initialPrice'] : 1, "CURRENCY" => CCurrency::GetBaseCurrency()); if (!CPrice::Add($arFields)) { self::eventLog('ICrmOrderActions::orderHistory', 'CPrice::Add', 'Error price add'); continue; } $Params = array(array('NAME' => 'id', 'CODE' => 'ID', 'VALUE' => $item['offer']['externalId'])); if (!Add2BasketByProductID($PRODUCT_ID, $item['quantity'], $arProduct, $Params)) { self::eventLog('ICrmOrderActions::orderHistory', 'Add2BasketByProductID', 'Error add to basket'); continue; } if (!CIBlockSection::Delete($resSection)) { self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockSection::Delete', 'Error delete section'); continue; } continue; } $prp = CSaleBasket::GetPropsList(array(), array("ORDER_ID" => $order['externalId'], "CODE" => 'ID', "VALUE" => $item['offer']['externalId']))->Fetch(); CSaleBasket::Update($prp['BASKET_ID'], $arProduct); } } if (isset($order['delivery']) === false || isset($order['delivery']['cost']) === false) { $order['delivery']['cost'] = $arFields['PRICE_DELIVERY']; } if (isset($order['summ']) === false || $order['summ'] <= 0) { $order['summ'] = $arFields['PRICE'] - $arFields['PRICE_DELIVERY']; } $wasCanaceled = $arFields['CANCELED'] == 'Y' ? true : false; if (isset($optionsDelivTypes[$order['delivery']['code']])) { $resultDeliveryTypeId = $optionsDelivTypes[$order['delivery']['code']]; } else { $resultDeliveryTypeId = isset($order['delivery']['service']) && isset($order['delivery']['service']['code']) ? reset(explode(":", $arFields['DELIVERY_ID'], 1)) : $arFields['DELIVERY_ID']; } if (isset($order['delivery']['service']) && isset($order['delivery']['service']['code'])) { $deliveryHandler = reset(CSaleDeliveryHandler::GetBySID($resultDeliveryTypeId)->arResult); if (count($deliveryHandler) > 0 && array_key_exists($order['delivery']['service']['code'], $deliveryHandler['PROFILES'])) { $resultDeliveryTypeId = $resultDeliveryTypeId . ':' . $order['delivery']['service']['code']; } } // orderUpdate $arFields = self::clearArr(array('PRICE_DELIVERY' => $order['delivery']['cost'], 'PRICE' => $order['summ'] + (double) $order['delivery']['cost'], 'DATE_MARKED' => $order['markDatetime'], 'USER_ID' => $userId, 'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']], 'DELIVERY_ID' => $resultDeliveryTypeId, 'STATUS_ID' => $optionsPayStatuses[$order['status']], 'REASON_CANCELED' => self::fromJSON($order['statusComment']), 'USER_DESCRIPTION' => self::fromJSON($order['customerComment']), 'COMMENTS' => self::fromJSON($order['managerComment']))); if (isset($order['discount'])) { $arFields['DISCOUNT_VALUE'] = $order['discount']; $arFields['PRICE'] -= $order['discount']; } if (!empty($arFields)) { CSaleOrder::Update($order['externalId'], $arFields); } if (isset($order['status']) && $order['status']) { if (isset($optionsPayStatuses[$order['status']]) && $optionsPayStatuses[$order['status']]) { // set STATUS_ID CSaleOrder::StatusOrder($order['externalId'], $optionsPayStatuses[$order['status']]); if ($wasCanaceled && $optionsPayStatuses[$order['status']] != 'YY') { CSaleOrder::CancelOrder($order['externalId'], "N", $order['statusComment']); } elseif ($optionsPayStatuses[$order['status']] == 'YY') { CSaleOrder::CancelOrder($order['externalId'], "Y", $order['statusComment']); } } } // set PAYED if (isset($order['paymentStatus']) && $order['paymentStatus'] && $optionsPayment[$order['paymentStatus']]) { CSaleOrder::PayOrder($order['externalId'], $optionsPayment[$order['paymentStatus']]); } if (function_exists('intarocrm_order_post_persist')) { intarocrm_order_post_persist($order); } } } if (count($orderHistory) > 0) { COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, $dateFinish->format('Y-m-d H:i:s')); } $GLOBALS['INTARO_CRM_FROM_HISTORY'] = false; return true; }
//foreach ($allproducts as $product) { $product = intval($_REQUEST["productid"]); //$product = intval($_POST["add2basket"]); //проверим $res = CIBlockElement::GetByID($product); if ($ar_res = $res->GetNext()) { $arProps = array(); $PRODUCT = $ar_res; $ar_res = CPrice::GetBasePrice($PRODUCT[ID]); $price = $ar_res["PRICE"]; if (intval($price) == 0) { $price = 0; $arFields = array("PRODUCT_ID" => $PRODUCT[ID], "QUANTITY" => $quantity, "PRODUCT_XML_ID" => $PRODUCT[ID], "PRICE" => $price, "CURRENCY" => "RUB", "LID" => "s1", "NAME" => $PRODUCT[NAME]); $basket_id = CSaleBasket::Add($arFields); $arItem = CSaleBasket::GetByID($basket_id); if ($arItem["QUANTITY"] != $quantity) { $arFields = array("QUANTITY" => $arItem["QUANTITY"] + $quantity); CSaleBasket::Update($basket_id, $arFields); } } else { $basket_id = Add2BasketByProductID($product, $quantity); } } } break; case "update": $arFields = array("QUANTITY" => $_REQUEST["quantity"]); CSaleBasket::Update($_REQUEST["id"], $arFields); break; } $APPLICATION->IncludeComponent("bitrix:sale.basket.basket.small", "hiding_basket", array("PATH_TO_BASKET" => "/personal/basket.php", "PATH_TO_ORDER" => "/personal/order.php", "SHOW_DELAY" => "Y", "SHOW_NOTAVAIL" => "Y", "SHOW_SUBSCRIBE" => "Y"), false);
<?php require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; ?> <?php CModule::IncludeModule("sale"); CModule::IncludeModule("catalog"); /* Addition of the goods in a basket at addition in a basket */ if ($_POST["ajaxaddid"] && $_POST["ajaxaction"] == 'add') { Add2BasketByProductID($_POST["ajaxaddid"], 1, array()); $arFields = array("QUANTITY" => $_POST["ajaxbasketcount"]); CSaleBasket::Update($_POST["ajaxbasketcountid"], $arFields); } /* Changes of quantity of the goods after receipt of inquiry from a small basket */ if ($_POST["ajaxbasketcountid"] && $_POST["ajaxbasketcount"] && $_POST["ajaxaction"] == 'update') { $arFields = array("QUANTITY" => $_POST["ajaxbasketcount"]); CSaleBasket::Update($_POST["ajaxbasketcountid"], $arFields); } ?> <?php $APPLICATION->IncludeComponent("bitrix:sale.basket.basket.line", "agray_basket_line_template", array("COMPONENT_TEMPLATE" => ".default", "PATH_TO_BASKET" => SITE_DIR . "personal/cart/", "PATH_TO_PERSONAL" => SITE_DIR . "personal/", "PATH_TO_PROFILE" => SITE_DIR . "personal/", "PATH_TO_REGISTER" => SITE_DIR . "login/", "POSITION_FIXED" => "N", "SHOW_AUTHOR" => "N", "SHOW_EMPTY_VALUES" => "Y", "SHOW_NUM_PRODUCTS" => "Y", "SHOW_PERSONAL_LINK" => "N", "SHOW_PRODUCTS" => "N", "SHOW_TOTAL_PRICE" => "Y")); ?>
if ($_SERVER["REQUEST_METHOD"] == "POST" && strlen($_POST["action"]) > 0 && check_bitrix_sessid()) { $APPLICATION->RestartBuffer(); switch ($_POST["action"]) { case "catalogSetAdd2Basket": if (is_array($_POST["set_ids"])) { foreach ($_POST["set_ids"] as $itemID) { $product_properties = true; if (!empty($_POST["setOffersCartProps"])) { $product_properties = CIBlockPriceTools::GetOfferProperties($itemID, $_POST["iblockId"], $_POST["setOffersCartProps"]); } $ratio = 1; if ($_POST["itemsRatio"][$itemID]) { $ratio = $_POST["itemsRatio"][$itemID]; } if (intval($itemID)) { Add2BasketByProductID(intval($itemID), $ratio, array("LID" => $_POST["lid"]), $product_properties); } } } break; case "ajax_recount_prices": if (strlen($_POST["currency"]) > 0) { $arPices = array("formatSum" => "", "formatOldSum" => "", "formatDiscDiffSum" => ""); if ($_POST["sumPrice"]) { $arPices["formatSum"] = FormatCurrency($_POST["sumPrice"], $_POST["currency"]); } if ($_POST["sumOldPrice"] && $_POST["sumOldPrice"] != $_POST["sumPrice"]) { $arPices["formatOldSum"] = FormatCurrency($_POST["sumOldPrice"], $_POST["currency"]); } if ($_POST["sumDiffDiscountPrice"]) { $arPices["formatDiscDiffSum"] = FormatCurrency($_POST["sumDiffDiscountPrice"], $_POST["currency"]);
$productID = (int) $_REQUEST[$arParams["PRODUCT_ID_VARIABLE"]]; if (($action == "COMPARE_ADD2BASKET" || $action == "COMPARE_BUY") && $productID > 0) { if (Loader::includeModule("sale") && Loader::includeModule("catalog")) { $QUANTITY = 1; $product_properties = array(); if (is_array($arParams["OFFERS_CART_PROPERTIES"])) { foreach ($arParams["OFFERS_CART_PROPERTIES"] as $i => $pid) { if ($pid === "") { unset($arParams["OFFERS_CART_PROPERTIES"][$i]); } } if (!empty($arParams["OFFERS_CART_PROPERTIES"])) { $product_properties = CIBlockPriceTools::GetOfferProperties($productID, $arParams["IBLOCK_ID"], $arParams["OFFERS_CART_PROPERTIES"]); } } if (Add2BasketByProductID($productID, $QUANTITY, $product_properties)) { if ($action == "COMPARE_BUY") { LocalRedirect($arParams["BASKET_URL"]); } else { LocalRedirect($APPLICATION->GetCurPageParam("", array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"]))); } } else { if ($ex = $APPLICATION->GetException()) { $strError = $ex->GetString(); } else { $strError = GetMessage("CATALOG_ERROR2BASKET") . "."; } } } } }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (CModule::IncludeModule("catalog")) { $ajaxResult = array(); if (IntVal($_REQUEST["PRODUCT_ID"]) > 0) { $itemId = Add2BasketByProductID(IntVal($_REQUEST["PRODUCT_ID"])); if ($itemId !== false) { $arInfo = CIBlockElement::GetByID(IntVal($_REQUEST["PRODUCT_ID"]))->GetNext(); $strImageStorePath = COption::GetOptionString("main", "upload_dir", "upload"); $imageId = empty($arInfo["DETAIL_PICTURE"]) ? $arInfo["PREVIEW_PICTURE"] : $arInfo["DETAIL_PICTURE"]; if (!empty($imageId)) { $sPath = CFile::GetByID($imageId)->GetNext(); $sPath = "/" . $strImageStorePath . "/" . $sPath["SUBDIR"] . "/" . $sPath["FILE_NAME"]; } else { $sPath = ""; } $ajaxResult["MSG"]["NAME"] = $arInfo["NAME"]; $ajaxResult["MSG"]["URL"] = $arInfo["DETAIL_PAGE_URL"]; $ajaxResult["MSG"]["IMG"] = $sPath; } else { $ajaxResult["MSG"] = "Ошибка добавления товара в корзину"; } echo json_encode($ajaxResult); } }
<?php define("NO_KEEP_STATISTIC", true); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; //wishlist - добавление в отложеные $action = $_REQUEST["action"]; $BASKET_ID = $PRODUCT_ID = $_REQUEST["ID"]; $bResult = false; if (CModule::IncludeModule("catalog") && CModule::IncludeModule("sale")) { if ($action == "LIKE" && IntVal($PRODUCT_ID) > 0) { $bResult = Add2BasketByProductID($PRODUCT_ID, 1, array("DELAY" => "Y"), array()); } elseif ($action == "DISLIKE" && intval($BASKET_ID) > 0) { $bResult = CSaleBasket::Delete($BASKET_ID); } elseif ($action == "DISLIKE" && strtolower($BASKET_ID) == "all") { $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "ORDER_ID" => "NULL", "DELAY" => "Y"), false, false, array("ID", "PRODUCT_ID", "DELAY")); while ($arItems = $dbBasketItems->Fetch()) { echo '<pre>'; print_r($arItems); echo '</pre>'; //if($arItems["DELAY"] == "Y"){ $bResult = CSaleBasket::Delete($arItems["ID"]); //} } } $APPLICATION->RestartBuffer(); if (!$bResult) { die("FAIL"); } else { die("OK"); } }
} } else { $strError = GetMessage("CATALOG_ERROR2BASKET") . "."; } } if (is_array($arParams["OFFERS_CART_PROPERTIES"])) { foreach ($arParams["OFFERS_CART_PROPERTIES"] as $i => $pid) { if ($pid === "") { unset($arParams["OFFERS_CART_PROPERTIES"][$i]); } } if (!empty($arParams["OFFERS_CART_PROPERTIES"])) { $product_properties = CIBlockPriceTools::GetOfferProperties($productID, $arParams["IBLOCK_ID"], $arParams["OFFERS_CART_PROPERTIES"]); } } if (!$strError && Add2BasketByProductID($productID, $QUANTITY, $product_properties)) { if ($action == "BUY") { LocalRedirect($arParams["BASKET_URL"]); } else { LocalRedirect($APPLICATION->GetCurPageParam("", array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"]))); } } else { if ($ex = $GLOBALS["APPLICATION"]->GetException()) { $strError = $ex->GetString(); } else { $strError = GetMessage("CATALOG_ERROR2BASKET") . "."; } } } } }
/** * Process Puy Product. * * @param int $productID * @param float $quantity * @param array $values * @param array $arRewriteFields * @throws void|Bitrix\Main\SystemException */ protected function addProductToBasket($productID, $quantity, $values = array(), $arRewriteFields = array()) { $productProperties = array(); $productID = (int) $productID; $intProductIBlockID = (int) CIBlockElement::GetIBlockByID($productID); if ($intProductIBlockID > 0) { $productCatalogInfo = CCatalogSKU::getInfoByIblock($intProductIBlockID); $isOffer = CCatalogSKU::TYPE_OFFERS == $productCatalogInfo['CATALOG_TYPE']; if ($this->arParams['ADD_PROPERTIES_TO_BASKET'] == 'Y') { // Is not offer if (!$isOffer) { // Props not empty if (!empty($this->arParams['CART_PROPERTIES'][$intProductIBlockID])) { $productProperties = CIBlockPriceTools::CheckProductProperties($intProductIBlockID, $productID, $this->arParams['CART_PROPERTIES'][$intProductIBlockID], $values, $this->arParams['PARTIAL_PRODUCT_PROPERTIES'] == 'Y'); if (!is_array($productProperties)) { throw new SystemException(Loc::getMessage("CVP_PARTIAL_BASKET_PROPERTIES_ERROR")); } } } else { if (!empty($this->arParams['CART_PROPERTIES'][$intProductIBlockID])) { $productProperties = CIBlockPriceTools::GetOfferProperties($productID, $productCatalogInfo['PRODUCT_IBLOCK_ID'], $this->arParams['CART_PROPERTIES'][$intProductIBlockID]); } } } if (0 >= $quantity) { $rsRatios = CCatalogMeasureRatio::getList(array(), array('PRODUCT_ID' => $productID), false, false, array('PRODUCT_ID', 'RATIO')); if ($arRatio = $rsRatios->Fetch()) { $intRatio = (int) $arRatio['RATIO']; $dblRatio = (double) $arRatio['RATIO']; $quantity = $dblRatio > $intRatio ? $dblRatio : $intRatio; } } if (0 >= $quantity) { $quantity = 1; } } else { throw new SystemException(Loc::getMessage('CVP_CATALOG_PRODUCT_NOT_FOUND') . "."); } if (!Add2BasketByProductID($productID, $quantity, $arRewriteFields, $productProperties)) { throw new SystemException(Loc::getMessage("CVP_CATALOG_ERROR2BASKET") . "."); } }
if (0 >= $QUANTITY) { $QUANTITY = 1; } } else { $strError = GetMessage('CATALOG_PRODUCT_NOT_FOUND'); $successfulAdd = false; } $notifyOption = COption::GetOptionString("sale", "subscribe_prod", ""); $arNotify = unserialize($notifyOption); $arRewriteFields = array(); if ($action == "SUBSCRIBE_PRODUCT" && $arNotify[SITE_ID]['use'] == 'Y') { $arRewriteFields["SUBSCRIBE"] = "Y"; $arRewriteFields["CAN_BUY"] = "N"; } if ($successfulAdd) { if (!Add2BasketByProductID($productID, $QUANTITY, $arRewriteFields, $product_properties)) { if ($ex = $APPLICATION->GetException()) { $strError = $ex->GetString(); } else { $strError = GetMessage("CATALOG_ERROR2BASKET"); } $successfulAdd = false; } } if ($addByAjax) { if ($successfulAdd) { $addResult = array('STATUS' => 'OK', 'MESSAGE' => GetMessage('CATALOG_SUCCESSFUL_ADD_TO_BASKET')); } else { $addResult = array('STATUS' => 'ERROR', 'MESSAGE' => $strError); } $APPLICATION->RestartBuffer();
<?php if (CModule::IncludeModule("sale")) { $ar_res = CCatalogProduct::GetByIDEx($pid); if ($ar_res) { $result = Add2BasketByProductID($pid, $quantity, array(array("NAME" => $ar_res['PROPERTIES']['COLOR']['NAME'], "VALUE" => $ar_res['PROPERTIES']['COLOR']['VALUE']), array("NAME" => $ar_res['PROPERTIES']['SIZE']['NAME'], "VALUE" => $ar_res['PROPERTIES']['SIZE']['VALUE']))); if ($result) { echo 'OK'; } else { echo "Error"; } } else { $result = Add2BasketByProductID($pid, $quantity); echo "OK"; } }