'; } $bUseCatalog = Loader::includeModule('catalog'); $bUseIblock = $bUseCatalog; IncludeModuleLangFile(__FILE__); ClearVars(); $ID = 0; if (isset($_REQUEST['ID'])) $ID = (int)$_REQUEST['ID']; if ($ID < 0) $ID = 0; $COUNT_RECOM_BASKET_PROD = 2; $arOrderOldTmp = false; define("PROP_COUNT_LIMIT", 21); $arFilter = array( "LID" => LANG, "ID" => "N" ); $str_PRICE = 0; $str_DISCOUNT_VALUE = 0; if ($ID > 0) { $dbOrder = CSaleOrder::GetList( array(), array("ID" => $ID), false, false, array() ); if ($arOrderOldTmp = $dbOrder->ExtractFields("str_")) $arFilter["ID"] = $arOrderOldTmp["STATUS_ID"]; } $arStatusList = false; $arGroupByTmpSt = false; $arUserGroups = $USER->GetUserGroupArray(); $intUserID = (int)$USER->GetID(); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if ($saleModulePermissions < "W") { $arFilter["GROUP_ID"] = $arUserGroups; $arFilter["PERM_UPDATE"] = "Y"; $arGroupByTmpSt = array("ID", "NAME", "MAX" => "PERM_UPDATE"); } $dbStatusList = CSaleStatus::GetList( array(), $arFilter, $arGroupByTmpSt, false, array("ID", "NAME") ); $arStatusList = $dbStatusList->Fetch(); if ($saleModulePermissions == "D" || ($saleModulePermissions < "W" && $arStatusList["PERM_UPDATE"] != "Y")) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); $errorMessage = ""; /*****************************************************************************/ /********************* UTIL AJAX *********************************************/ /*****************************************************************************/ if (CSaleLocation::isLocationProEnabled()) { if (isset($_REQUEST['ACT'])) { $result = array( 'ERRORS' => array(), 'DATA' => array() ); if($_REQUEST['ACT'] == 'GET_LOC_BY_ZIP') { $zip = ''; if (isset($_REQUEST['ZIP'])) $zip = (string)$_REQUEST['ZIP']; if ($zip == '') { $result['ERRORS'] = array('Not found'); } else { $item = Location\Admin\LocationHelper::getLocationsByZip($zip, array('limit' => 1))->fetch(); if (!isset($item['LOCATION_ID'])) $result['ERRORS'] = array('Not found'); else { $siteId = ''; if(!empty($_REQUEST['SITE_ID'])) $siteId = (string)$_REQUEST['SITE_ID']; elseif (defined('SITE_ID')) $siteId = SITE_ID; $result['DATA']['ID'] = (int)$item['LOCATION_ID']; if ($siteId != '') { if (!Location\SiteLocationTable::checkConnectionExists($siteId, $result['DATA']['ID'])) $result['ERRORS'] = array('Found, but not connected'); } } } } elseif($_REQUEST['ACT'] == 'GET_ZIP_BY_LOC') { if(!intval($_REQUEST['LOC'])) $result['ERRORS'] = array('No location id passed'); else { $item = \Bitrix\Sale\Location\LocationTable::getList( array( 'filter' => array( '=ID' => intval($_REQUEST['LOC']), '=EXTERNAL.SERVICE.CODE' => 'ZIP' ), 'select' => array( 'ZIP' => 'EXTERNAL.XML_ID' ) ) )->fetch(); if($item['ZIP'] <> '') { $result['DATA']['ZIP'] = $item['ZIP']; } else { $result['ERRORS'] = array('None were found'); } } } header('Content-Type: application/x-javascript; charset='.LANG_CHARSET); print(CUtil::PhpToJSObject(array( 'result' => empty($result['ERRORS']), 'errors' => $result['ERRORS'], 'data' => $result['DATA'] ), false, false, true)); die(); } } /*****************************************************************************/ /********************* ORDER FUNCTIONS ***************************************/ /*****************************************************************************/ if (isset($_REQUEST['dontsave']) && $_REQUEST['dontsave'] == 'Y') { $intLockUserID = 0; $strLockTime = ''; DiscountCouponsManager::clear(true); if (!CSaleOrder::IsLocked($ID, $intLockUserID, $strLockTime)) CSaleOrder::UnLock($ID); LocalRedirect("sale_order.php?lang=".LANGUAGE_ID.GetFilterParams("filter_", false)); } if ($saleModulePermissions >= "W" && isset($_REQUEST['unlock']) && 'Y' == $_REQUEST['unlock']) { $intLockUserID = 0; $strLockTime = ''; DiscountCouponsManager::clear(true); if (CSaleOrder::IsLocked($ID, $intLockUserID, $strLockTime)) CSaleOrder::UnLock($ID); LocalRedirect("sale_order_new.php?ID=".$ID."&lang=".LANGUAGE_ID.GetFilterParams("filter_", false)); } // include functions require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/general/admin_tool.php"); $callbackList = array( 'CALLBACK_FUNC', 'ORDER_CALLBACK_FUNC', 'CANCEL_CALLBACK_FUNC', 'PAY_CALLBACK_FUNC', 'PRODUCT_PROVIDER_CLASS' ); /*****************************************************************************/ /**************************** SAVE ORDER *************************************/ /*****************************************************************************/ $bVarsFromForm = false; if ( $_SERVER['REQUEST_METHOD'] == 'POST' && check_bitrix_sessid() && $saleModulePermissions >= 'U' && isset($_POST['save_order_data']) && $_POST['save_order_data'] == 'Y' && empty($_POST['dontsave'])) { $ID = intval($ID); $recalcOrder = "N"; $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'Y'); if (defined("SALE_DEBUG") && SALE_DEBUG) CSaleHelper::WriteToLog("order_new.php", array("POST" => $_POST), "ORNW1"); // buyer type, new or existing $btnNewBuyer = "N"; if ($btnTypeBuyer == "btnBuyerNew") $btnNewBuyer = "Y"; $useStores = (isset($_POST["storeCount"]) && intval($_POST["storeCount"]) > 0) ? true : false; if ($LID == '') $errorMessage .= GetMessage("SOE_EMPTY_SITE")."
"; $BASE_LANG_CURRENCY = CSaleLang::GetLangCurrency($LID); $str_PERSON_TYPE_ID = intval($buyer_type_id); if ($str_PERSON_TYPE_ID <= 0) $errorMessage .= GetMessage("SOE_EMPTY_PERS_TYPE")."
"; if (($str_PERSON_TYPE_ID > 0) && !($arPersonType = CSalePersonType::GetByID($str_PERSON_TYPE_ID))) $errorMessage .= GetMessage("SOE_PERSON_NOT_FOUND")."
"; $str_STATUS_ID = trim($STATUS_ID); if ($str_STATUS_ID <> '') { if ($saleModulePermissions < "W") { $dbStatusList = CSaleStatus::GetList( array(), array( "GROUP_ID" => $arUserGroups, "PERM_STATUS" => "Y", "ID" => $str_STATUS_ID ), array("ID", "MAX" => "PERM_STATUS"), false, array("ID") ); if (!$dbStatusList->Fetch()) $errorMessage .= str_replace("#STATUS_ID#", $str_STATUS_ID, GetMessage("SOE_NO_STATUS_PERMS"))."
"; } } $str_PAY_SYSTEM_ID = intval($PAY_SYSTEM_ID); if ($str_PAY_SYSTEM_ID <= 0) $errorMessage .= GetMessage("SOE_PAYSYS_EMPTY")."
"; if (($str_PAY_SYSTEM_ID > 0) && !($arPaySys = CSalePaySystem::GetByID($str_PAY_SYSTEM_ID, $str_PERSON_TYPE_ID))) $errorMessage .= GetMessage("SOE_PAYSYS_NOT_FOUND")."
"; if (empty($_POST["PRODUCT"])) $errorMessage .= GetMessage("SOE_EMPTY_ITEMS")."
"; if (isset($DELIVERY_ID) AND $DELIVERY_ID != "") { $str_DELIVERY_ID = trim($DELIVERY_ID); $PRICE_DELIVERY = floatval($PRICE_DELIVERY); } $arCoupon = (!empty($_POST['COUPON']) ? fGetCoupon($_POST['COUPON']) : array()); if (!empty($arCoupon)) $recalcOrder = "Y"; if (array_key_exists('ADDITIONAL_INFO', $_POST)) { $str_ADDITIONAL_INFO = trim($_POST["ADDITIONAL_INFO"]); } $str_COMMENTS = trim($_POST["COMMENTS"]); if (isset($_POST["btnTypeBuyer"]) && $_POST["btnTypeBuyer"] == "btnBuyerNew") { $user_id = ''; unset($user_profile); } $profileName = ""; if (isset($user_profile) && $user_profile != "" && $btnNewBuyer == "N") $userProfileID = intval($user_profile); //array field send mail $FIO = ""; $rsUser = CUser::GetByID($user_id); if($arUser = $rsUser->Fetch()) { if ($arUser["LAST_NAME"] != "") $FIO .= $arUser["LAST_NAME"]." "; if ($arUser["NAME"] != "") $FIO .= $arUser["NAME"]; } $arUserEmail = array("PAYER_NAME" => $FIO, "USER_EMAIL" => $arUser["EMAIL"]); $BREAK_NAME = isset($_POST["BREAK_NAME"]) ? $_POST["BREAK_NAME"] : ""; if ($BREAK_NAME == GetMessage('NEWO_BREAK_NAME')) $BREAK_NAME = ""; $BREAK_LAST_NAME = isset($_POST["BREAK_LAST_NAME"]) ? $_POST["BREAK_LAST_NAME"] : ""; if ($BREAK_LAST_NAME == GetMessage('NEWO_BREAK_LAST_NAME')) $BREAK_LAST_NAME = ""; $BREAK_SECOND_NAME = isset($_POST["BREAK_SECOND_NAME"]) ? $_POST["BREAK_SECOND_NAME"] : ""; if ($BREAK_SECOND_NAME == GetMessage('NEWO_BREAK_SECOND_NAME')) $BREAK_SECOND_NAME = ""; // checking order properties if ($errorMessage == '') { $arOrderPropsValues = array(); $arPropFilter = array( "PERSON_TYPE_ID" => $str_PERSON_TYPE_ID, "ACTIVE" => "Y" ); if ($str_PAY_SYSTEM_ID != 0) { $arPropFilter["RELATED"]["PAYSYSTEM_ID"] = $str_PAY_SYSTEM_ID; $arPropFilter["RELATED"]["TYPE"] = "WITH_NOT_RELATED"; } if ($str_DELIVERY_ID <> '') { $arPropFilter["RELATED"]["DELIVERY_ID"] = $str_DELIVERY_ID; $arPropFilter["RELATED"]["TYPE"] = "WITH_NOT_RELATED"; } $orderPropList = array(); $orderFileProps = array(); $orderFilePropsValue = array(); $dbOrderProps = CSaleOrderProps::GetList( array("ID" => "ASC"), $arPropFilter, false, false, array("ID", "NAME", "TYPE", "REQUIED", "IS_LOCATION", "IS_EMAIL", "IS_PROFILE_NAME", "IS_PAYER", "IS_LOCATION4TAX", "CODE", "SORT") ); while ($arOrderProps = $dbOrderProps->Fetch()) { $orderPropList[$arOrderProps['ID']] = $arOrderProps; if ($arOrderProps['TYPE'] == 'FILE') $orderFileProps[$arOrderProps['ID']] = $arOrderProps; } if ($crmMode && $ID > 0 && !empty($orderFileProps)) { $rsFileOrderProps = CSaleOrderPropsValue::GetList( array(), array("ORDER_ID" => $ID, 'ORDER_PROPS_ID' => array_keys($orderFileProps)), false, false, array("ID", "ORDER_ID", "ORDER_PROPS_ID", "VALUE") ); while ($oneFileOrderProp = $rsFileOrderProps->Fetch()) { if (!isset($orderFilePropsValue[$oneFileOrderProp['ORDER_PROPS_ID']])) $orderFilePropsValue[$oneFileOrderProp['ORDER_PROPS_ID']] = array(); $oneFileOrderProp['VALUE'] = trim($oneFileOrderProp['VALUE']); if ($oneFileOrderProp['VALUE'] != '') { $orderFilePropsValue[$oneFileOrderProp['ORDER_PROPS_ID']] = explode(', ', $oneFileOrderProp['VALUE']); } } unset($oneFileOrderProp, $rsFileOrderProps); } foreach ($orderPropList as $arOrderProps) { if (!is_array(${"ORDER_PROP_".$arOrderProps["ID"]})) $curVal = trim($_POST["ORDER_PROP_".$arOrderProps["ID"]]); else $curVal = $_POST["ORDER_PROP_".$arOrderProps["ID"]]; if ($arOrderProps["TYPE"] == "LOCATION") { $curVal = $_POST["CITY_ORDER_PROP_".$arOrderProps["ID"]]; $regId = $_POST["REGION_ORDER_PROP_".$arOrderProps["ID"]."CITY_ORDER_PROP_".$arOrderProps["ID"]]; $countryId = $_POST["ORDER_PROP_".$arOrderProps["ID"]."CITY_ORDER_PROP_".$arOrderProps["ID"]]; if (intval($curVal) <= 0 && intval($regId) > 0) { $dbLoc = CSaleLocation::GetList(array(), array("REGION_ID" => $regId, "CITY_ID" => false), false, false, array("ID", "REGION_ID", "CITY_ID")); if($arLoc = $dbLoc->Fetch()) { $curVal = $arLoc["ID"]; } } if(intval($curVal) <= 0 && intval($countryId) > 0) { $dbLoc = CSaleLocation::GetList(array(), array("COUNTRY_ID" => $countryId, "REGION_ID" => false, "CITY_ID" => false), false, false, array("ID", "COUNTRY_ID", "REGION_ID", "CITY_ID")); if($arLoc = $dbLoc->Fetch()) { $curVal = $arLoc["ID"]; } } } if ($arOrderProps["TYPE"] == "FILE") { $curVal = array(); $arReplacedFiles2Delete = array(); if ($crmMode && $ID > 0) { if (isset($orderFilePropsValue[$arOrderProps["ID"]])) { foreach ($orderFilePropsValue[$arOrderProps["ID"]] as $keyFile => $valueFile) { $curVal[] = array('file_id' => $valueFile); } } } else { if (array_key_exists("ORDER_PROP_".$arOrderProps["ID"], $_FILES) && is_array($_FILES["ORDER_PROP_".$arOrderProps["ID"]])) { foreach ($_FILES["ORDER_PROP_".$arOrderProps["ID"]] as $param_name => $arValues) { if (is_array($arValues)) { $i = 0; foreach ($arValues as $nIndex => $val) { if (mb_substr($nIndex, 1) != "undefined") { if (mb_substr($nIndex, 0, 1) == "n" && $val <> '') // if new file is added { $curVal[$i][$param_name] = $val; } else // if there is existing file id already { if (intval($nIndex) > 0) { if ($param_name == "name" && $val == '') // no file replacement { $curVal[$i]["file_id"] = $nIndex; // del flag if (isset($_POST["ORDER_PROP_".$arOrderProps["ID"]."_del"])) { if (array_key_exists($nIndex, $_POST["ORDER_PROP_".$arOrderProps["ID"]."_del"])) $curVal[$i]["del"] = $_POST["ORDER_PROP_".$arOrderProps["ID"]."_del"][$nIndex]; } } elseif ($_FILES["ORDER_PROP_".$arOrderProps["ID"]]["name"][$nIndex] <> '') // replacement file data { $curVal[$i][$param_name] = $val; if (!in_array($nIndex, $arReplacedFiles2Delete)) $arReplacedFiles2Delete[] = $nIndex; } } } } $i++; } } } //delete replaced files foreach ($arReplacedFiles2Delete as $id => $file_id) { $arReplace = array("file_id" => $file_id, "del" => "Y"); $curVal[] = $arReplace; } } } } if ($arOrderProps["IS_PAYER"] == "Y") { if ($curVal == '' && $BREAK_NAME <> '' && $BREAK_LAST_NAME <> '') $curVal = $BREAK_NAME." ".$BREAK_LAST_NAME; } if ($arOrderProps["IS_EMAIL"] == "Y") { $arUserEmail["USER_EMAIL"] = trim($curVal); } if ($arOrderProps["IS_PROFILE_NAME"] == "Y") { $profileName = $curVal; } if ( ($arOrderProps["IS_LOCATION"]=="Y" || $arOrderProps["IS_LOCATION4TAX"]=="Y") && intval($curVal) <= 0 || ($arOrderProps["IS_PROFILE_NAME"]=="Y" || $arOrderProps["IS_PAYER"]=="Y") && $curVal == '' || $arOrderProps["REQUIED"]=="Y" && $arOrderProps["TYPE"]=="LOCATION" && intval($curVal) <= 0 || $arOrderProps["REQUIED"]=="Y" && ($arOrderProps["TYPE"]=="TEXT" || $arOrderProps["TYPE"]=="TEXTAREA" || $arOrderProps["TYPE"]=="RADIO" || $arOrderProps["TYPE"]=="SELECT") && $curVal == '' || ($arOrderProps["REQUIED"]=="Y" && $arOrderProps["TYPE"]=="MULTISELECT" && empty($curVal)) || ($arOrderProps["REQUIED"]=="Y" && $arOrderProps["TYPE"]=="FILE" && empty($curVal)) ) { $errorMessage .= str_replace("#NAME#", $arOrderProps["NAME"], GetMessage("SOE_EMPTY_PROP"))."
"; } if ($arOrderProps["TYPE"] == "MULTISELECT") { $curVal = ""; $countOrderProp = count($_POST["ORDER_PROP_".$arOrderProps["ID"]]); for ($i = 0; $i < $countOrderProp; $i++) { if ($i > 0) $curVal .= ","; $curVal .= $_POST["ORDER_PROP_".$arOrderProps["ID"]][$i]; } } if ($arOrderProps["TYPE"] == "CHECKBOX" && $curVal == '' && $arOrderProps["REQUIED"] != "Y") { $curVal = "N"; } $arOrderPropsValues[$arOrderProps["ID"]] = $curVal; } } //create a new user if ($btnNewBuyer == "Y" && $errorMessage == '') { if ($NEW_BUYER_EMAIL == '') { $emailId = ''; $dbProperties = CSaleOrderProps::GetList( array("ID" => "ASC"), array("PERSON_TYPE_ID" => $str_PERSON_TYPE_ID, "ACTIVE" => "Y", "IS_EMAIL" => "Y", "RELATED" => false), false, false, array("ID") ); while ($arProperties = $dbProperties->Fetch()) { if ($emailId == '') $emailId = $arProperties["ID"]; if ($arProperties["REQUIED"] == "Y") $emailId = $arProperties["ID"]; } $NEW_BUYER_EMAIL = ${"ORDER_PROP_".$emailId}; } if ($NEW_BUYER_EMAIL == '') $errorMessage .= GetMessage("NEWO_BUYER_REG_ERR_MAIL"); //take default value PHONE for register user $dbOrderProps = CSaleOrderProps::GetList( array(), array("PERSON_TYPE_ID" => $str_PERSON_TYPE_ID, "ACTIVE" => "Y", "CODE" => "PHONE", "RELATED" => false), false, false, array("ID") ); $arOrderProps = $dbOrderProps->Fetch(); $NEW_BUYER_PHONE = ""; if (!empty($arOrderProps)) $NEW_BUYER_PHONE = trim($_POST["ORDER_PROP_".$arOrderProps["ID"]]); $NEW_BUYER_NAME = isset($_POST["NEW_BUYER_NAME"]) ? $_POST["NEW_BUYER_NAME"] : ""; $NEW_BUYER_LAST_NAME = isset($_POST["NEW_BUYER_LAST_NAME"]) ? $_POST["NEW_BUYER_LAST_NAME"] : ""; $NEW_BUYER_SECOND_NAME = isset($_POST["NEW_BUYER_SECOND_NAME"]) ? $_POST["NEW_BUYER_SECOND_NAME"] : ""; if ($NEW_BUYER_NAME == "" && $NEW_BUYER_LAST_NAME == "") { $NEW_BUYER_NAME = $BREAK_NAME; $NEW_BUYER_LAST_NAME = $BREAK_LAST_NAME; $NEW_BUYER_SECOND_NAME = $BREAK_SECOND_NAME; } if ($NEW_BUYER_NAME == "" || $NEW_BUYER_LAST_NAME == "") $errorMessage .= GetMessage("NEWO_BUYER_REG_ERR_NAME")."
"; $NEW_BUYER_FIO = $NEW_BUYER_LAST_NAME." ".$NEW_BUYER_NAME." ".$NEW_BUYER_SECOND_NAME; $arUserEmail["PAYER_NAME"] = $NEW_BUYER_FIO; if ($errorMessage == '') { $userRegister = array( "NAME" => $NEW_BUYER_NAME, "LAST_NAME" => $NEW_BUYER_LAST_NAME, "SECOND_NAME" => $NEW_BUYER_SECOND_NAME, "PERSONAL_MOBILE" => $NEW_BUYER_PHONE ); $arPersonal = array("PERSONAL_MOBILE" => $NEW_BUYER_PHONE); $user_id = CSaleUser::DoAutoRegisterUser($NEW_BUYER_EMAIL, $userRegister, $LID, $arErrors, $arPersonal); if (!empty($arErrors)) { foreach($arErrors as $val) $errorMessage .= $val["TEXT"]; } else { $userProfileID = 0; $rsUser = CUser::GetByID($user_id); $arUser = $rsUser->Fetch(); $userNew = str_replace("#FIO#", "(".$arUser["LOGIN"].")".(($arUser["NAME"] != "") ? " ".$arUser["NAME"] : "").(($arUser["LAST_NAME"] != "") ? " ".$arUser["LAST_NAME"] : ""), GetMessage("NEWO_BUYER_REG_OK")); } } } if (!isset($userProfileID)) $profileName = ""; $str_USER_ID = intval($user_id); if ($str_USER_ID <= 0 && $errorMessage == '') { $str_USER_ID = ""; $errorMessage .= GetMessage("SOE_EMPTY_USER")."
"; } elseif ($str_USER_ID > 0 && $errorMessage == '') { $rsUser = CUser::GetByID($str_USER_ID); if (!$rsUser->Fetch()) $errorMessage .= GetMessage("NEWO_ERR_EMPTY_USER")."
"; } // tmp hack to check if any product quantity is not enough to buy before saving data if (isset($_POST["PRODUCT"]) && !empty($_POST["PRODUCT"])) { foreach ($_POST["PRODUCT"] as $key => $val) { if (intval($val["PRODUCT_ID"]) > 0 && $val["MODULE"] == 'catalog' && $bUseCatalog) { if ($arCatalogProduct = CCatalogProduct::GetByID($val["PRODUCT_ID"])) { $dbBasketItems = CSaleBasket::GetList(array(), array("ID" => $val["ID"]), false, false, array('QUANTITY')); $arItems = $dbBasketItems->Fetch(); if (floatval($val["QUANTITY"]) > floatval($arItems["QUANTITY"]) && $arCatalogProduct["CAN_BUY_ZERO"]!="Y" && ($arCatalogProduct["QUANTITY_TRACE"]=="Y") //&& floatval($arCatalogProduct["QUANTITY"])<=0) //TODO - QUANTITY_RESERVED && floatval($val["QUANTITY"] - $arItems["QUANTITY"]) > floatval($arCatalogProduct["QUANTITY"] + $arCatalogProduct["QUANTITY_RESERVED"]) ) { $errorMessage .= str_replace("#NAME#", $val['NAME'], GetMessage("NEWO_ERR_PRODUCT_NULL_BALANCE")); } } } } } // saving if ($errorMessage == '') { $couponsMode = ($ID > 0 ? DiscountCouponsManager::MODE_ORDER : DiscountCouponsManager::MODE_MANAGER); $couponsParams = array( 'userId' => $str_USER_ID ); if ($ID > 0) $couponsParams['orderId'] = $ID; DiscountCouponsManager::init($couponsMode, $couponsParams, false); unset($couponsParams, $couponsMode); if ($isOrderConverted != 'N') { $discountMode = ($ID > 0 ? Sale\Compatible\DiscountCompatibility::MODE_ORDER : Sale\Compatible\DiscountCompatibility::MODE_MANAGER); $discountParams = array( 'SITE_ID' => $LID, 'CURRENCY' => $BASE_LANG_CURRENCY ); if ($ID > 0) $discountParams['ORDER_ID'] = $ID; Sale\Compatible\DiscountCompatibility::init($discountMode, $discountParams); unset($discountParams, $discountMode); } //send new user mail if ($btnNewBuyer == "Y" && $userNew <> '') CUser::SendUserInfo($str_USER_ID, $LID, $userNew, true); $arShoppingCart = array(); $arOrderProductPrice = fGetUserShoppingCart($_POST["PRODUCT"], $LID, $recalcOrder); foreach ($arOrderProductPrice as &$arItem) { if ($arItem['BASKET_ID'] > 0) { $basketIdList[] = $arItem['BASKET_ID']; } else { if (empty($arItem['BASKET_ID']) && empty($arItem['ID'])) { $module = trim($arItem['MODULE']); if (strval($module) != '') { Loader::includeModule($module); } foreach ($callbackList as $callbackName) { $callbackFieldName = (isset($arItem[$callbackName]) ? $arItem[$callbackName] : ''); if ((!isset($callbackFieldName) && strval($callbackFieldName) == "") || (!class_exists($callbackFieldName) && !function_exists($callbackFieldName))) { $arItem[$callbackName] = ''; } } } } $arItem["ID_TMP"] = $arItem["ID"]; unset($arItem["ID"]); } unset($arItem); if (!empty($basketIdList)) { $registry = Sale\Registry::getInstance(Sale\Registry::REGISTRY_TYPE_ORDER); /** @var Sale\Basket $basketClass */ $basketClass = $registry->getBasketClassName(); $basketRes = $basketClass::getList( array( 'filter' => array( '=ID' => $basketIdList ), 'select' => array( 'ID', 'CALLBACK_FUNC', 'ORDER_CALLBACK_FUNC', 'CANCEL_CALLBACK_FUNC', 'PAY_CALLBACK_FUNC', 'PRODUCT_PROVIDER_CLASS' ) ) ); while($data = $basketRes->fetch()) { $basketList[$data['ID']] = $data; } foreach ($arOrderProductPrice as &$itemData) { if (!empty($basketList[$itemData['BASKET_ID']])) { foreach ($callbackList as $callbackName) { $itemData[$callbackName] = $basketList[$itemData['BASKET_ID']][$callbackName]; } } } unset($itemData); } $tmpOrderId = ($ID == 0) ? 0 : $ID; $arOrderOptions = array( 'CART_FIX' => (isset($_REQUEST['CART_FIX']) && 'Y' == $_REQUEST['CART_FIX'] ? 'Y' : 'N') ); if ('Y' == $arOrderOptions['CART_FIX']) { $arShoppingCart = $arOrderProductPrice; } else { $arShoppingCart = CSaleBasket::DoGetUserShoppingCart($LID, $str_USER_ID, $arOrderProductPrice, $arErrors, $arCoupon, $tmpOrderId); } foreach ($arOrderProductPrice as $key => &$arItem) { $arItem["ID"] = $arItem["ID_TMP"]; unset($arItem["ID_TMP"]); //$arShoppingCart[$key]["ID"] = $arItem["ID"]; } unset($arItem); foreach ($arShoppingCart as &$v) { $v["ID"] = $v["ID_TMP"]; unset($v["ID_TMP"]); } unset($v); $arErrors = array(); $arWarnings = array(); if (!empty($arShoppingCart)) { foreach($arOrderProductPrice as $key => $val) { if ($val["NAME"] != $arShoppingCart[$key]["NAME"] AND $val["PRODUCT_ID"] == $arShoppingCart[$key]["PRODUCT_ID"]) $arShoppingCart[$key]["NAME"] = $val["NAME"]; if ($val["NOTES"] != '' && $val["NOTES"] != $arShoppingCart[$key]["NOTES"] AND $val["PRODUCT_ID"] == $arShoppingCart[$key]["PRODUCT_ID"]) $arShoppingCart[$key]["NOTES"] = $val["NOTES"]; } } //order parameters $arOrder = CSaleOrder::DoCalculateOrder( $LID, $str_USER_ID, $arShoppingCart, $str_PERSON_TYPE_ID, $arOrderPropsValues, $str_DELIVERY_ID, $str_PAY_SYSTEM_ID, $arOrderOptions, $arErrors, $arWarnings ); //change delivery price if (floatval($arOrder["DELIVERY_PRICE"]) != $PRICE_DELIVERY) { $arOrder["PRICE"] = ($arOrder["PRICE"] - $arOrder["DELIVERY_PRICE"]) + $PRICE_DELIVERY; $arOrder["DELIVERY_PRICE"] = $PRICE_DELIVERY; $arOrder["PRICE_DELIVERY"] = $PRICE_DELIVERY; } if (!isset($arOrder["TRACKING_NUMBER"]) || $arOrder["TRACKING_NUMBER"] != $TRACKING_NUMBER) $arOrder["TRACKING_NUMBER"] = $TRACKING_NUMBER; if (empty($arShoppingCart) && !empty($arOrderProductPrice)) $errorMessage .= GetMessage('NEWO_ERR_BASKET_NULL')."
"; else { if (!empty($arWarnings)) { foreach ($arWarnings as $val) $errorMessage .= $val["TEXT"]."
"; } if (!empty($arErrors)) { foreach ($arErrors as $val) $errorMessage .= $val["TEXT"]."
"; } } } //prelimenary barcode and store quantity saving if ($errorMessage == '') { // todo: necessary to handle situation with 3 stores - 1, 2, 1 // saving store / barcode data (calculating which records should be deleted / added / updated) $arStoreBarcodeOrderFormData = array(); if ($useStores && (!isset($_POST["ORDER_DEDUCTED"]) || $_POST["ORDER_DEDUCTED"] == "N") && ($DEDUCTED == "Y" || $hasSavedBarcodes)) //not deducted yet { $bErrorFound = false; foreach ($_REQUEST["PRODUCT"] as $basketId => &$arProduct) { if (CSaleBasketHelper::isSetParent($arProduct)) continue; if (!empty($arProduct["STORES"]) && is_array($arProduct["STORES"])) { //check if store info contains all necessary fields foreach ($arProduct["STORES"] as $recId => $arRecord) { if (!isset($arRecord["STORE_ID"]) || intval($arRecord["STORE_ID"]) < 0 || (!isset($arRecord["QUANTITY"])) || intval($arRecord["QUANTITY"]) < 0) { $errorMessage .= GetMessage("NEWO_ERR_STORE_WRONG_INFO_SAVING", array("#PRODUCT_NAME#" => $arProduct["NAME"]))."
"; $bErrorFound = true; break; } } if ($bErrorFound) break; //if array item is in the basket, not newly added product if (isset($arProduct["BASKET_ID"]) && intval($arProduct["BASKET_ID"]) > 0) { if ($arProduct["BARCODE_MULTI"] == "N") //saving only store quantity info { $arStoreSavedRecords = array(); $arStoreFormRecords = array(); $arStoreIDToAdd = array(); // $arStoreIDToDelete = array(); $dbStoreBarcode = CSaleStoreBarcode::GetList( array(), array( "BASKET_ID" => $arProduct["BASKET_ID"], ), false, false, array("ID", "BASKET_ID", "BARCODE", "QUANTITY", "STORE_ID") ); while ($arStoreBarcode = $dbStoreBarcode->GetNext()) { $arStoreSavedRecords[$arStoreBarcode["STORE_ID"]] = $arStoreBarcode; } foreach ($arProduct["STORES"] as $index => $arStore) { $arStoreFormRecords[$arStore["STORE_ID"]] = $arStore; if (!in_array($arStore["STORE_ID"], array_keys($arStoreSavedRecords))) $arStoreIDToAdd[] = $arStore["STORE_ID"]; } // foreach ($arStoreSavedRecords as $index => $arRecord) // { // if (!in_array($arRecord["STORE_ID"], array_keys($arStoreFormRecords))) // $arStoreIDToDelete[$arRecord["ID"]] = $arRecord["STORE_ID"]; // } // // foreach ($arStoreIDToDelete as $id => $storeId) // { // CSaleStoreBarcode::Delete($id); // } /* foreach ($arStoreIDToAdd as $addId) { $arStoreBarcodeFields = array( "BASKET_ID" => $arProduct["BASKET_ID"], "BARCODE" => "", "STORE_ID" => $addId, "QUANTITY" => $arStoreFormRecords[$addId]["QUANTITY"], "CREATED_BY" => (0 < $intUserID ? $intUserID : ""), "MODIFIED_BY" => (0 < $intUserID ? $intUserID : "") ); CSaleStoreBarcode::Add($arStoreBarcodeFields); } foreach ($arStoreSavedRecords as $storeId => $arStoreBarcodeRecord) { if (!in_array($storeId, $arStoreIDToAdd) && !in_array($storeId, $arStoreIDToDelete)) { if ($arStoreBarcodeRecord["QUANTITY"] != $arStoreFormRecords[$arStoreBarcodeRecord["STORE_ID"]]["QUANTITY"]) { CSaleStoreBarcode::Update( $arStoreBarcodeRecord["ID"], array( "QUANTITY" => $arStoreFormRecords[$arStoreBarcodeRecord["STORE_ID"]]["QUANTITY"], "MODIFIED_BY" => (0 < $intUserID ? $intUserID : "") ) ); } } } */ $arProduct["HAS_SAVED_QUANTITY"] = "Y"; } else //BARCODE_MULTI = Y { $arStoreFormRecords = array(); foreach ($arProduct["STORES"] as $index => $arStore) { $arStoreFormRecords[$arStore["STORE_ID"]] = $arStore; } //deleting all previous records /* $dbStoreBarcode = CSaleStoreBarcode::GetList( array(), array( "BASKET_ID" => $arProduct["BASKET_ID"], ), false, false, array("ID", "BASKET_ID", "BARCODE", "QUANTITY", "STORE_ID") ); while ($arStoreBarcode = $dbStoreBarcode->GetNext()) { CSaleStoreBarcode::Delete($arStoreBarcode["ID"]); } */ //adding new values /*foreach ($arStoreFormRecords as $arStoreFormRecord) { if (isset($arStoreFormRecord["BARCODE"]) && isset($arStoreFormRecord["BARCODE_FOUND"])) { foreach ($arStoreFormRecord["BARCODE"] as $barcodeId => $barcodeValue) { //save only non-empty and valid barcodes if (strlen($barcodeValue) > 0 && $arStoreFormRecord["BARCODE_FOUND"][$barcodeId] == "Y") { $arStoreBarcodeFields = array( "BASKET_ID" => $arProduct["BASKET_ID"], "BARCODE" => $barcodeValue, "STORE_ID" => $arStoreFormRecord["STORE_ID"], "QUANTITY" => 1, "CREATED_BY" => (0 < $intUserID ? $intUserID : ""), "MODIFIED_BY" => (0 < $intUserID ? $intUserID : "") ); CSaleStoreBarcode::Add($arStoreBarcodeFields); } } } } */ $arProduct["HAS_SAVED_QUANTITY"] = "Y"; } $arStoreBarcodeOrderFormData[$basketId] = $arProduct["STORES"]; } } } unset($arProduct); } //newly added products info if ($useStores) { foreach ($_REQUEST["PRODUCT"] as $basketId => $arProduct) { if (CSaleBasketHelper::isSetParent($arProduct)) continue; if (isset($arProduct["NEW_PRODUCT"])) $arStoreBarcodeOrderFormData["new".$basketId] = $arProduct["STORES"]; } } } if ($errorMessage == '') { //another order parameters $arAdditionalFields = array( "USER_DESCRIPTION" => $_POST["USER_DESCRIPTION"], "COMMENTS" => $str_COMMENTS, ); if (isset($str_ADDITIONAL_INFO)) { $arAdditionalFields['ADDITIONAL_INFO'] = $str_ADDITIONAL_INFO; } if (!empty($arOrder)) { $arErrors = array(); $OrderNewSendEmail = false; $arOldOrder = CSaleOrder::GetByID($ID); if ($ID <= 0 || $arOldOrder["STATUS_ID"] == $str_STATUS_ID) $arAdditionalFields["STATUS_ID"] = $str_STATUS_ID; if ($isOrderConverted != 'N') { $arAdditionalFields = array_merge($arAdditionalFields, array( 'CANCELED' => (!empty($_POST["CANCELED"]) && trim($_POST["CANCELED"]) == "Y") ? "Y" : "N", 'REASON_CANCELED' => (array_key_exists('REASON_CANCELED', $_POST) && strval(trim($_POST["REASON_CANCELED"])) != "") ? trim($_POST["REASON_CANCELED"]): null, 'PAYED' => (!empty($_POST["PAYED"]) && trim($_POST["PAYED"]) == "Y") ? "Y" : "N", 'PAY_VOUCHER_NUM' => (array_key_exists('PAY_VOUCHER_NUM', $_POST) && strval(trim($_POST["PAY_VOUCHER_NUM"])) != "") ? trim($_POST["PAY_VOUCHER_NUM"]): null, 'PAY_VOUCHER_DATE' => (array_key_exists('PAY_VOUCHER_DATE', $_POST) && strval(trim($_POST["PAY_VOUCHER_DATE"])) != "") ? trim($_POST["PAY_VOUCHER_DATE"]): null, 'PAY_FROM_ACCOUNT' => (array_key_exists('PAY_FROM_ACCOUNT', $_POST) && strval(trim($_POST["PAY_FROM_ACCOUNT"])) != "") ? trim($_POST["PAY_FROM_ACCOUNT"]): null, 'PAY_CURRENT_ACCOUNT' => (array_key_exists('PAY_CURRENT_ACCOUNT', $_POST) && strval(trim($_POST["PAY_CURRENT_ACCOUNT"])) != "") ? trim($_POST["PAY_CURRENT_ACCOUNT"]): null, 'PAY_FROM_ACCOUNT_BACK' => (!empty($_POST["PAY_FROM_ACCOUNT_BACK"]) && trim($_POST["PAY_FROM_ACCOUNT_BACK"]) == "Y") ? "Y" : "N", 'SUM_PAID' => (array_key_exists('SUM_PAID', $_POST) && floatval($_POST["SUM_PAID"]) > 0) ? floatval($_POST["SUM_PAID"]): null, 'ALLOW_DELIVERY' => (!empty($_POST["ALLOW_DELIVERY"]) && trim($_POST["ALLOW_DELIVERY"]) == "Y") ? "Y" : "N", 'DELIVERY_DOC_NUM' => (array_key_exists('DELIVERY_DOC_NUM', $_POST) && strval(trim($_POST["DELIVERY_DOC_NUM"])) != "") ? trim($_POST["DELIVERY_DOC_NUM"]): null, 'DELIVERY_DOC_DATE' => (array_key_exists('DELIVERY_DOC_DATE', $_POST) && strval(trim($_POST["DELIVERY_DOC_DATE"])) != "") ? trim($_POST["DELIVERY_DOC_DATE"]): null, 'MARKED' => (!empty($_POST["MARKED"]) && trim($_POST["MARKED"]) == "Y") ? "Y" : "N", 'REASON_MARKED' => (array_key_exists('REASON_MARKED', $_POST) && strval(trim($_POST["REASON_MARKED"])) != "") ? trim($_POST["REASON_MARKED"]): null, 'DEDUCTED' => (!empty($_POST["DEDUCTED"]) && trim($_POST["DEDUCTED"]) == "Y") ? "Y" : "N", 'REASON_UNDO_DEDUCTED' => (array_key_exists('REASON_UNDO_DEDUCTED', $_POST) && strval(trim($_POST["REASON_UNDO_DEDUCTED"])) != "") ? trim($_POST["REASON_UNDO_DEDUCTED"]): null, 'RESERVED' => (!empty($_POST["RESERVED"]) && trim($_POST["RESERVED"]) == "Y") ? "Y" : "N", )); } $bSaveBarcodes = ($hasSavedBarcodes || $DEDUCTED == "Y") ? true : false; $tmpID = CSaleOrder::DoSaveOrder($arOrder, $arAdditionalFields, $ID, $arErrors, $arCoupon, $arStoreBarcodeOrderFormData, $bSaveBarcodes); //delete from basket if ($tmpID > 0) { foreach($_POST["PRODUCT"] as $key => $val) { if (!isset($val["BASKET_ID"]) && intval($val["BASKET_ID"]) <= 0) { $dbBasket = CSaleBasket::GetList( array(), array( "ORDER_ID" => "NULL", "PRODUCT_ID" => $val["PRODUCT_ID"], "USER_ID" => $str_USER_ID, "LID" => $LID ), false, false, array("ID", "TYPE", "SET_PARENT_ID") ); $arBasket = $dbBasket->Fetch(); if (!empty($arBasket) && !CSaleBasketHelper::isSetItem($arBasket)) CSaleBasket::Delete($arBasket["ID"]); } } } if ($ID <= 0) $OrderNewSendEmail = true; else { if ($arOldOrder["STATUS_ID"] != $str_STATUS_ID) CSaleOrder::StatusOrder($ID, $str_STATUS_ID); } $ID = $tmpID; if ($ID > 0) { $arOrder2Update = array(); if (empty($arErrors)) { $CANCELED = trim($_POST["CANCELED"]); $REASON_CANCELED = trim($_POST["REASON_CANCELED"]); if ($CANCELED != "Y") $CANCELED = "N"; if ($arOldOrder["CANCELED"] != $CANCELED) { $bUserCanCancelOrder = CSaleOrder::CanUserCancelOrder($ID, $arUserGroups, $intUserID); $errorMessageTmp = ""; if (!$bUserCanCancelOrder) { $errorMessageTmp .= GetMessage("SOD_NO_PERMS2CANCEL").". "; } else { if (!CSaleOrder::CancelOrder($ID, $CANCELED, $REASON_CANCELED)) { if ($ex = $APPLICATION->GetException()) { if ($ex->GetID() != "ALREADY_FLAG") $errorMessageTmp .= $ex->GetString(); } else $errorMessageTmp .= GetMessage("ERROR_CANCEL_ORDER").". "; } } if ($errorMessageTmp != "") $arErrors[] = $errorMessageTmp; } else { if($arOldOrder["REASON_CANCELED"] != $REASON_CANCELED) $arOrder2Update["REASON_CANCELED"] = $REASON_CANCELED; } } } if ($ID > 0 AND empty($arErrors)) { //profile saving $str_USER_ID = intval($str_USER_ID); if (isset($userProfileID)) { CSaleOrderUserProps::DoSaveUserProfile($str_USER_ID, $userProfileID, $profileName, $str_PERSON_TYPE_ID, $arOrderPropsValues, $arErrors); } unset($user_profile); //send new order mail if ($OrderNewSendEmail) { $strOrderList = ""; foreach ($arOrder["BASKET_ITEMS"] as $val) { if (CSaleBasketHelper::isSetItem($val)) continue; $measure = (isset($val["MEASURE_TEXT"])) ? $val["MEASURE_TEXT"] : GetMessage("SOA_SHT"); $strOrderList .= $val["NAME"]." - ".$val["QUANTITY"]." ".$measure." x ".SaleFormatCurrency($val["PRICE"], $BASE_LANG_CURRENCY); $strOrderList .= "
"; } $arOrderNew = CSaleOrder::GetByID($ID); //send mail $arFields = array( "ORDER_ID" => $arOrderNew["ACCOUNT_NUMBER"], "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $LID))), "ORDER_USER" => $arUserEmail["PAYER_NAME"], "PRICE" => SaleFormatCurrency($arOrder["PRICE"], $BASE_LANG_CURRENCY), "BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME), "EMAIL" => $arUserEmail["USER_EMAIL"], "ORDER_LIST" => $strOrderList, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME), "DELIVERY_PRICE" => $arOrder["DELIVERY_PRICE"], ); $eventName = "SALE_NEW_ORDER"; $bSend = true; foreach(GetModuleEvents("sale", "OnOrderNewSendEmail", true) as $arEvent) if (ExecuteModuleEventEx($arEvent, array($ID, &$eventName, &$arFields))===false) $bSend = false; if($bSend) { $event = new CEvent; $event->Send($eventName, $LID, $arFields, "N"); } CSaleMobileOrderPush::send("ORDER_CREATED", array("ORDER" => $arOrderNew)); } } else { foreach($arErrors as $val) { if (is_array($val)) $errorMessage .= $val["TEXT"]."
"; else $errorMessage .= $val; } } } elseif (!empty($arErrors)) { foreach($arErrors as $val) { if (is_array($val)) $errorMessage .= $val["TEXT"]."
"; else $errorMessage .= $val; } } else { $errorMessage .= GetMessage("SOE_SAVE_ERROR")."
"; } }//end if save unset($location, $BTN_SAVE_BUYER, $buyertypechange, $userId, $user_id); if ('' == $errorMessage AND $ID > 0) { if ($crmMode) CRMModeOutput($ID); DiscountCouponsManager::clear(true); if (isset($save) AND $save <> '') { CSaleOrder::UnLock($ID); LocalRedirect("/bitrix/admin/sale_order.php?lang=".LANGUAGE_ID."&LID=".urlencode($LID).GetFilterParams("filter_", false)); } if (isset($apply) AND $apply <> '') LocalRedirect("/bitrix/admin/sale_order_new.php?lang=".LANGUAGE_ID."&ID=".$ID."&LID=".urlencode($LID).GetFilterParams("filter_", false)); } if ('' != $errorMessage) $bVarsFromForm = true; } if (!empty($dontsave)) { DiscountCouponsManager::clear(true); CSaleOrder::UnLock($ID); if ($crmMode) CRMModeOutput($ID); LocalRedirect("/bitrix/admin/sale_order.php?lang=".LANGUAGE_ID."&LID=".CUtil::JSEscape($LID)); } /*****************************************************************************/ /************** Processing of requests from the proxy ************************/ /*****************************************************************************/ if ( check_bitrix_sessid() && !empty($_REQUEST['ORDER_AJAX']) && $_REQUEST['ORDER_AJAX'] == 'Y' ) { /* * location */ if (isset($location) && !isset($product) && !isset($locationZip)) { $tmpLocation = ""; ob_start(); CSaleLocation::proxySaleAjaxLocationsComponent( array( "SITE_ID" => $LID, "AJAX_CALL" => "Y", "COUNTRY_INPUT_NAME" => "ORDER_PROP_".$locid, "REGION_INPUT_NAME" => "REGION_ORDER_PROP_".$locid, "CITY_INPUT_NAME" => "CITY_ORDER_PROP_".$locid, "CITY_OUT_LOCATION" => "Y", "ALLOW_EMPTY_CITY" => "Y", "LOCATION_VALUE" => $location, "COUNTRY" => "", "ONCITYCHANGE" => "fChangeLocationCity", ), array( "ID" => $location, "CODE" => "", "JS_CALLBACK" => 'fChangeLocationCity', "SHOW_DEFAULT_LOCATIONS" => 'Y', "JS_CONTROL_GLOBAL_ID" => 'saleOrderNew', ), '', true, 'location-block-wrapper'.(intval($locid) ? ' prop-'.intval($locid) : '') ); $tmpLocation = ob_get_contents(); ob_end_clean(); $arData = array(); if (intval($locid) > 0) { $arData["status"] = "ok"; $arData["prop_id"] = $locid; $arData["location"] = $tmpLocation; } $result = CUtil::PhpToJSObject($arData); CRMModeOutput($result); } /* * change buyer type */ if (isset($buyertypechange)) { if (!isset($ID) OR $ID == "") $ID = ""; if (!isset($paysystemid) OR $paysystemid == "") $paysystemid = ""; $arData = array(); $arData["status"] = "ok"; $arData["buyertype"] = fGetBuyerType($buyertypechange, $LID, $userId, $ID); $arData["buyerdelivery"] = fGetPaySystemsHTML($buyertypechange, $paysystemid); $arLocation = fGetLocationID($buyertypechange); $arData["location_id"] = $arLocation["LOCATION_ID"]; $arData["location_zip_id"] = $arLocation["LOCATION_ZIP_ID"]; $result = CUtil::PhpToJSObject($arData); CRMModeOutput($result); } /* * get locationId for delivery data */ if (isset($persontypeid)) { $persontypeid = intval($persontypeid); $arData = array(); $arLocation = fGetLocationID($persontypeid); $arData["location_id"] = $arLocation["LOCATION_ID"]; $arData["location_zip_id"] = $arLocation["LOCATION_ZIP_ID"]; $result = CUtil::PhpToJSObject($arData); CRMModeOutput($result); } /* * take a list profile and user basket */ if (isset($userId) && isset($buyerType) && (!isset($profileDefault) || $profileDefault == "")) { $id = intval($id); $userId = intval($userId); $oldUserId = 0; if (isset($_POST['oldUserId'])) $oldUserId = (int)$_POST['oldUserId']; if ($oldUserId < 0) $oldUserId = 0; $buyerType = intval($buyerType); $LID = trim($LID); $currency = trim($currency); $couponsMode = ($id > 0 ? DiscountCouponsManager::MODE_ORDER : DiscountCouponsManager::MODE_MANAGER); $couponsParams = array( 'userId' => $userId ); if ($oldUserId != $userId) $couponsParams['oldUserId'] = $oldUserId; if ($id > 0) $couponsParams['orderId'] = $id; DiscountCouponsManager::init($couponsMode, $couponsParams, false); unset($couponsParams, $couponsMode); $arFuserItems = CSaleUser::GetList(array("USER_ID" => $userId)); $fuserId = $arFuserItems["ID"]; $arData = array(); $arErrors = array(); $arData["status"] = "ok"; $arData["userProfileSelect"] = fUserProfile($userId, $buyerType); $arData["userName"] = fGetUserName($userId); $arShoppingCart = CSaleBasket::DoGetUserShoppingCart($LID, $userId, $fuserId, $arErrors, array()); $arShoppingCart = fDeleteDoubleProduct($arShoppingCart, array(), 'N'); $arData["userBasket"] = fGetFormatedProduct($userId, $LID, $arShoppingCart, $currency, 'basket'); $viewedIterator = \Bitrix\Catalog\CatalogViewedProductTable::getList( array( "filter" => array("FUSER_ID" => $fuserId), "select" => array( "ID", "PRODUCT_ID", "LID" => "SITE_ID", "NAME" => "ELEMENT.NAME", "PREVIEW_PICTURE" => "ELEMENT.PREVIEW_PICTURE", "DETAIL_PICTURE" => "ELEMENT.DETAIL_PICTURE", ), "order" => array("DATE_VISIT" => "DESC"), "limit" => 10 ) ); $viewed = array(); while($row = $viewedIterator->fetch()) { $row['MODULE'] = "catalog"; $viewed[$row['PRODUCT_ID']] = $row; } if (!empty($viewed)) { $filter = array("ID" => array_keys($viewed)); $elementIterator = CIBlockElement::GetList(array(), $filter, false, false, array('ID', 'IBLOCK_ID', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'DETAIL_PICTURE')); while ($fields = $elementIterator->GetNext()) { $viewed[$fields['ID']]['DETAIL_PAGE_URL'] = $fields['~DETAIL_PAGE_URL']; if($viewed[$fields['ID']]['PREVIEW_PICTURE'] > 0) { $img = CFile::GetFileArray($viewed[$fields['ID']]['PREVIEW_PICTURE']); if($img) $viewed[$fields['ID']]['PREVIEW_PICTURE'] = $img['SRC']; else $viewed[$fields['ID']]['PREVIEW_PICTURE'] = false; } else { $viewed[$fields['ID']]['PREVIEW_PICTURE'] = false; } if($viewed[$fields['ID']]['DETAIL_PICTURE'] > 0) { $img = CFile::GetFileArray($viewed[$fields['ID']]['DETAIL_PICTURE']); if($img) $viewed[$fields['ID']]['DETAIL_PICTURE'] = $img['SRC']; else $viewed[$fields['ID']]['DETAIL_PICTURE'] = false; } else { $viewed[$fields['ID']]['DETAIL_PICTURE'] = false; } } // Prices $priceIterator = CPrice::getList(array(), array("PRODUCT_ID" => $filter['ID']), false, false, array("PRODUCT_ID", "PRICE", "CURRENCY")); while($price = $priceIterator->fetch()) { if(!isset($viewed[$price['PRODUCT_ID']]['PRICE'])) { $viewed[$price['PRODUCT_ID']]['PRICE'] = $price['PRICE']; $viewed[$price['PRODUCT_ID']]['CURRENCY'] = $price['CURRENCY']; } } } $arViewedResult = fDeleteDoubleProduct($viewed, $arFilterRecommended, 'N'); $arData["viewed"] = fGetFormatedProduct($userId, $LID, $arViewedResult, $currency, 'viewed'); $result = CUtil::PhpToJSObject($arData); CRMModeOutput($result); } /* * profile autocomplete script */ if (isset($userId) AND isset($buyerType) AND isset($profileDefault)) { $userId = intval($userId); $buyerType = intval($buyerType); $profileDefault = intval($profileDefault); $arPropValuesTmp = array(); $userProfile = array(); $userProfile = CSaleOrderUserProps::DoLoadProfiles($userId, $buyerType); if ($profileDefault != "" AND $profileDefault != "0") $arPropValuesTmp = $userProfile[$profileDefault]["VALUES"]; $dbVariants = CSaleOrderProps::GetList( array("SORT" => "ASC"), array( "PERSON_TYPE_ID" => $buyerType, "USER_PROPS" => "Y", "ACTIVE" => "Y", "RELATED" => false ) ); while ($arVariants = $dbVariants->Fetch()) { if (isset($arPropValuesTmp[$arVariants["ID"]])) $arPropValues[$arVariants["ID"]] = $arPropValuesTmp[$arVariants["ID"]]; else $arPropValues[$arVariants["ID"]] = $arVariants["DEFAULT_VALUE"]; if($arVariants["IS_EMAIL"] == "Y" || $arVariants["IS_PAYER"] == "Y") { if($arPropValues[$arVariants["ID"]] == '' && intval($userId) > 0) { $rsUser = CUser::GetByID($userId); if ($arUser = $rsUser->Fetch()) { if($arVariants["IS_EMAIL"] == "Y") $arPropValues[$arVariants["ID"]] = $arUser["EMAIL"]; else { if ($arUser["LAST_NAME"] <> '') $arPropValues[$arVariants["ID"]] .= $arUser["LAST_NAME"]; if ($arUser["NAME"] <> '') $arPropValues[$arVariants["ID"]] .= " ".$arUser["NAME"]; if ($arUser["SECOND_NAME"] <> '' AND $arUser["NAME"] <> '') $arPropValues[$arVariants["ID"]] .= " ".$arUser["SECOND_NAME"]; } } } } } $strPropsList = ""; foreach ($arPropValues as $key => $val) { $key = CUtil::JSEscape(htmlspecialcharsback($key)); $val = CUtil::JSEscape(htmlspecialcharsback($val)); $strPropsList.=($strPropsList <> ''?', ':'').'"'.$key.'": "'.$val.'"'; } if ($strPropsList <> '') { ?>