/** * @param \DDelivery\Order\DDeliveryOrder $order * @throws \Bitrix\Main\ArgumentException */ public function onFinishChange($order) { global $APPLICATION; $point = $order->getPoint(); if ($order->type == DDeliverySDK::TYPE_SELF) { $replaceData = array('%1' => $order->cityName, '%2' => $point['address'], '%3' => $point['delivery_company_name'], '%4' => $point['_id'], '%5' => $point['type'] == 1 ? 'Постомат' : 'ПВЗ'); $replaceData = $APPLICATION->ConvertCharsetArray($replaceData, 'UTF-8', SITE_CHARSET); $comment = GetMessage('DDELIVERY_ABOUT_SELF', $replaceData); } else { if ($order->type == DDeliverySDK::TYPE_COURIER) { $replaceData = array('%1' => $order->getFullAddress(), '%2' => $point['delivery_company_name']); $replaceData = $APPLICATION->ConvertCharsetArray($replaceData, 'UTF-8', SITE_CHARSET); $comment = GetMessage('DDELIVERY_ABOUT_COURIER', $replaceData); } else { $comment = 'error'; } } $orderId = $this->formData['bx_order_id']; $params = array('DD_ABOUT' => $comment, 'DD_LOCAL_ID' => $order->localId); $orderDeliveryTableData = OrderDeliveryTable::getList(array('filter' => array('ORDER_ID' => $orderId)))->fetch(); if ($orderDeliveryTableData) { OrderDeliveryTable::update($orderDeliveryTableData['ID'], array('PARAMS' => serialize($params))); } else { OrderDeliveryTable::add(array('ORDER_ID' => $orderId, 'PARAMS' => serialize($params))); } $order = CSaleOrder::GetByID($orderId); $arDeliveryResult = CSaleDeliveryHandler::CalculateFull('ddelivery', 'ddelivery:all', $order, CSaleLang::GetLangCurrency(SITE_ID), SITE_ID); if ($arDeliveryResult['RESULT'] == 'OK') { CSaleOrder::Update($orderId, array('PRICE_DELIVERY' => $arDeliveryResult['VALUE'])); } }
public static function PrepareCurrency4Where($val, $key, $operation, $negative, $field, &$arField, &$arFilter) { $val = DoubleVal($val); $baseSiteCurrency = ""; if (isset($arFilter["LID"]) && strlen($arFilter["LID"]) > 0) $baseSiteCurrency = CSaleLang::GetLangCurrency($arFilter["LID"]); elseif (isset($arFilter["CURRENCY"]) && strlen($arFilter["CURRENCY"]) > 0) $baseSiteCurrency = $arFilter["CURRENCY"]; if (strlen($baseSiteCurrency) <= 0) return False; $strSqlSearch = ""; $dbCurrency = CCurrency::GetList(($by = "sort"), ($order = "asc")); while ($arCurrency = $dbCurrency->Fetch()) { $val1 = roundEx(CCurrencyRates::ConvertCurrency($val, $baseSiteCurrency, $arCurrency["CURRENCY"]), SALE_VALUE_PRECISION); if (strlen($strSqlSearch) > 0) $strSqlSearch .= " OR "; $strSqlSearch .= "(D.ORDER_CURRENCY = '".$arCurrency["CURRENCY"]."' AND "; if ($negative == "Y") $strSqlSearch .= "NOT"; $strSqlSearch .= "(".$field." ".$operation." ".$val1." OR ".$field." IS NULL OR ".$field." = 0)"; $strSqlSearch .= ")"; } return "(".$strSqlSearch.")"; }
public function init() { $this->username = CSalePaySystemAction::GetParamValue("USER"); $this->pwd = CSalePaySystemAction::GetParamValue("PWD"); $this->signature = CSalePaySystemAction::GetParamValue("SIGNATURE"); $this->currency = CSalePaySystemAction::GetParamValue("CURRENCY"); $this->testMode = CSalePaySystemAction::GetParamValue("TEST") == "Y"; $this->notifyUrl = CSalePaySystemAction::GetParamValue("NOTIFY_URL"); if (strlen($this->currency) <= 0) { $this->currency = CSaleLang::GetLangCurrency(SITE_ID); } if ($this->testMode) { $this->domain = "sandbox."; } if (strlen($_REQUEST["token"]) > 0) { $this->token = $_REQUEST["token"]; } if (strlen($_REQUEST["PayerID"]) > 0) { $this->payerId = $_REQUEST["PayerID"]; } $this->version = "98.0"; $dbSite = CSite::GetByID(SITE_ID); $arSite = $dbSite->Fetch(); $this->serverName = $arSite["SERVER_NAME"]; if (strLen($this->serverName) <= 0) { if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0) { $this->serverName = SITE_SERVER_NAME; } else { $this->serverName = COption::GetOptionString("main", "server_name", "www.bitrixsoft.com"); } } $this->serverName = (CMain::IsHTTPS() ? "https" : "http") . "://" . $this->serverName; if (strlen($this->username) <= 0 || strlen($this->username) <= 0 || strlen($this->username) <= 0) { $GLOBALS["APPLICATION"]->ThrowException("CSalePaySystempaypal: init error", "CSalePaySystempaypal_init_error"); return false; } return true; }
protected function prepareDiscountConditions(&$conditions, &$result, &$handlers, $type, $site) { global $APPLICATION; $obCond = null; $result = ''; $handlers = array(); $type = (int) $type; if ($type != self::PREPARE_CONDITIONS && $type != self::PREPARE_ACTIONS || empty($conditions)) { return false; } if (!is_array($conditions)) { if (!CheckSerializedData($conditions)) { if ($type == self::PREPARE_CONDITIONS) { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_SALE_DISC_ERR_BAD_CONDITIONS"), "CONDITIONS"); } else { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_SALE_DISC_ERR_BAD_ACTIONS_EXT"), "ACTIONS"); } return false; } $conditions = unserialize($conditions); if (!is_array($conditions) || empty($conditions)) { if ($type == self::PREPARE_CONDITIONS) { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_SALE_DISC_ERR_BAD_CONDITIONS"), "CONDITIONS"); } else { $APPLICATION->ThrowException(Loc::getMessage("BT_MOD_SALE_DISC_ERR_BAD_ACTIONS_EXT"), "ACTIONS"); } return false; } } if ($type == self::PREPARE_CONDITIONS) { $obCond = new CSaleCondTree(); $boolCond = $obCond->Init(BT_COND_MODE_GENERATE, BT_COND_BUILD_SALE, array('INIT_CONTROLS' => array('SITE_ID' => $site, 'CURRENCY' => CSaleLang::GetLangCurrency($site)))); } else { $obCond = new CSaleActionTree(); $boolCond = $obCond->Init(BT_COND_MODE_GENERATE, BT_COND_BUILD_SALE_ACTIONS, array()); } if (!$boolCond) { return false; } $result = $obCond->Generate($conditions, array('ORDER' => '$arOrder', 'ORDER_FIELDS' => '$arOrder', 'ORDER_PROPS' => '$arOrder[\'PROPS\']', 'ORDER_BASKET' => '$arOrder[\'BASKET_ITEMS\']', 'BASKET' => '$arBasket', 'BASKET_ROW' => '$row')); if ($result == '') { if ($type == self::PREPARE_CONDITIONS) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_DISC_ERR_BAD_CONDITIONS'), 'CONDITIONS'); } else { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_DISC_ERR_BAD_ACTIONS_EXT'), 'ACTIONS'); } return false; } else { $handlers['HANDLERS'] = $obCond->GetConditionHandlers(); $handlers['ENTITY'] = $obCond->GetUsedEntityList(); $handlers['EXECUTE_MODULE'] = $obCond->GetExecuteModule(); } $conditions = serialize($conditions); return true; }
public static function GetControlShow($arParams) { $arControls = static::GetControls(); $arResult = array( 'controlgroup' => true, 'group' => false, 'label' => Loc::getMessage('BT_MOD_SALE_COND_CMP_ORDER_CONTROLGROUP_LABEL'), 'showIn' => static::GetShowIn($arParams['SHOW_IN_GROUPS']), 'children' => array() ); foreach ($arControls as &$arOneControl) { if ('CondSaleOrderSumm' == $arOneControl['ID']) { $arJSControl = array( array( 'id' => 'prefix', 'type' => 'prefix', 'text' => $arOneControl['PREFIX'] ), static::GetLogicAtom($arOneControl['LOGIC']), static::GetValueAtom($arOneControl['JS_VALUE']) ); if (static::$boolInit) { if (isset(static::$arInitParams['CURRENCY'])) { $arJSControl[] = static::$arInitParams['CURRENCY']; } elseif (isset(static::$arInitParams['SITE_ID'])) { $strCurrency = CSaleLang::GetLangCurrency(static::$arInitParams['SITE_ID']); if (!empty($strCurrency)) { $arJSControl[] = $strCurrency; } } } $arOne = array( 'controlId' => $arOneControl['ID'], 'group' => ('Y' == $arOneControl['GROUP']), 'label' => $arOneControl['LABEL'], 'showIn' => static::GetShowIn($arParams['SHOW_IN_GROUPS']), 'control' => $arJSControl ); } else { $arOne = array( 'controlId' => $arOneControl['ID'], 'group' => ('Y' == $arOneControl['GROUP']), 'label' => $arOneControl['LABEL'], 'showIn' => static::GetShowIn($arParams['SHOW_IN_GROUPS']), 'control' => array( array( 'id' => 'prefix', 'type' => 'prefix', 'text' => $arOneControl['PREFIX'] ), static::GetLogicAtom($arOneControl['LOGIC']), static::GetValueAtom($arOneControl['JS_VALUE']) ) ); } if ('CondSaleOrderWeight' == $arOneControl['ID']) { $arOne['control'][] = Loc::getMessage('BT_MOD_SALE_COND_MESS_WEIGHT_UNIT'); } $arResult['children'][] = $arOne; } if (isset($arOneControl)) unset($arOneControl); return $arResult; }
static function DoCalculateOrder($siteId, $userId, $arShoppingCart, $personTypeId, $arOrderPropsValues, $deliveryId, $paySystemId, $arOptions, &$arErrors, &$arWarnings) { $siteId = trim($siteId); if (empty($siteId)) { $arErrors[] = array("CODE" => "PARAM", "TEXT" => GetMessage('SKGO_CALC_PARAM_ERROR')); return null; } $userId = intval($userId); if (!is_array($arShoppingCart) || count($arShoppingCart) <= 0) { $arErrors[] = array("CODE" => "PARAM", "TEXT" => GetMessage('SKGO_SHOPPING_CART_EMPTY')); return null; } $arOrder = array("ORDER_PRICE" => 0, "ORDER_WEIGHT" => 0, "CURRENCY" => CSaleLang::GetLangCurrency($siteId), "WEIGHT_UNIT" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_unit', false, $siteId)), "WEIGHT_KOEF" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_koef', 1, $siteId)), "BASKET_ITEMS" => $arShoppingCart, "SITE_ID" => $siteId, "LID" => $siteId, "USER_ID" => $userId, "USE_VAT" => false, "VAT_RATE" => 0, "VAT_SUM" => 0, "DELIVERY_ID" => false); foreach ($arShoppingCart as $arShoppingCartItem) { if (array_key_exists('CUSTOM_PRICE', $arShoppingCartItem) && 'Y' == $arShoppingCartItem['CUSTOM_PRICE']) { $arShoppingCartItem['DISCOUNT_PRICE'] = $arShoppingCartItem['DEFAULT_PRICE'] - $arShoppingCartItem['PRICE']; if (0 > $arShoppingCartItem['DISCOUNT_PRICE']) { $arShoppingCartItem['DISCOUNT_PRICE'] = 0; } $arShoppingCartItem['DISCOUNT_PRICE_PERCENT'] = $arShoppingCartItem['DISCOUNT_PRICE'] * 100 / $arShoppingCartItem['DEFAULT_PRICE']; if ($arShoppingCartItem["VAT_RATE"] > 0) { $arShoppingCartItem["VAT_VALUE"] = $arShoppingCartItem["PRICE"] / ($arShoppingCartItem["VAT_RATE"] + 1) * $arShoppingCartItem["VAT_RATE"]; } } $arOrder["ORDER_PRICE"] += $arShoppingCartItem["PRICE"] * $arShoppingCartItem["QUANTITY"]; $arOrder["ORDER_WEIGHT"] += $arShoppingCartItem["WEIGHT"] * $arShoppingCartItem["QUANTITY"]; if ($arShoppingCartItem["VAT_RATE"] > 0) { $arOrder["USE_VAT"] = true; if ($arShoppingCartItem["VAT_RATE"] > $arOrder["VAT_RATE"]) { $arOrder["VAT_RATE"] = $arShoppingCartItem["VAT_RATE"]; } $arOrder["VAT_SUM"] += $arShoppingCartItem["VAT_VALUE"] * $arShoppingCartItem["QUANTITY"]; } } foreach (GetModuleEvents("sale", "OnSaleCalculateOrderShoppingCart", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } CSalePersonType::DoProcessOrder($arOrder, $personTypeId, $arErrors); if (count($arErrors) > 0) { return null; } foreach (GetModuleEvents("sale", "OnSaleCalculateOrderPersonType", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } CSaleOrderProps::DoProcessOrder($arOrder, $arOrderPropsValues, $arErrors, $arWarnings); if (count($arErrors) > 0) { return null; } foreach (GetModuleEvents("sale", "OnSaleCalculateOrderProps", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } CSaleDelivery::DoProcessOrder($arOrder, $deliveryId, $arErrors); if (count($arErrors) > 0) { return null; } $arOrder["PRICE_DELIVERY"] = $arOrder["DELIVERY_PRICE"]; foreach (GetModuleEvents("sale", "OnSaleCalculateOrderDelivery", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } CSalePaySystem::DoProcessOrder($arOrder, $paySystemId, $arErrors); if (count($arErrors) > 0) { return null; } foreach (GetModuleEvents("sale", "OnSaleCalculateOrderPaySystem", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } if (!array_key_exists('CART_FIX', $arOptions) || 'Y' != $arOptions['CART_FIX']) { CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors); if (count($arErrors) > 0) { return null; } foreach (GetModuleEvents("sale", "OnSaleCalculateOrderDiscount", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } } CSaleTax::DoProcessOrderBasket($arOrder, $arOptions, $arErrors); if (count($arErrors) > 0) { return null; } foreach (GetModuleEvents("sale", "OnSaleCalculateOrderShoppingCartTax", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } CSaleTax::DoProcessOrderDelivery($arOrder, $arOptions, $arErrors); if (count($arErrors) > 0) { return null; } foreach (GetModuleEvents("sale", "OnSaleCalculateOrderDeliveryTax", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } $arOrder["PRICE"] = $arOrder["ORDER_PRICE"] + $arOrder["DELIVERY_PRICE"] + $arOrder["TAX_PRICE"] - $arOrder["DISCOUNT_PRICE"]; $arOrder["TAX_VALUE"] = $arOrder["USE_VAT"] ? $arOrder["VAT_SUM"] : $arOrder["TAX_PRICE"]; foreach (GetModuleEvents("sale", "OnSaleCalculateOrder", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arOrder)); } return $arOrder; }
echo GetMessage("SOE_NEW_ITEMS"); ?> </a> <?endif;?> <a title="<?php echo GetMessage("SOE_ADD_ITEMS"); ?> " onClick="AddProductSearch(1);" class="adm-btn adm-btn-green adm-btn-add" href="javascript:void(0);"><?php echo GetMessage("SOE_ADD_ITEMS"); ?> </a> </div> <script type="text/javascript"> var currencyBase = '<?php echo CSaleLang::GetLangCurrency($LID); ?> '; var orderWeight = '<?php echo $productWeight; ?> '; var orderPrice = '<?php echo $str_PRICE; ?> '; function fEnableSub() { if (document.getElementById('tbl_sale_order_edit')) document.getElementById('tbl_sale_order_edit').style.zIndex = 10000;
if (!isset($arParams["DISABLE_BASKET_REDIRECT"]) || 'Y' !== $arParams["DISABLE_BASKET_REDIRECT"]) { $arParams["DISABLE_BASKET_REDIRECT"] = "N"; } $bUseAccountNumber = COption::GetOptionString("sale", "account_number_template", "") !== "" ? true : false; $arResult = array("PERSON_TYPE" => array(), "PAY_SYSTEM" => array(), "ORDER_PROP" => array(), "DELIVERY" => array(), "TAX" => array(), "ERROR" => array(), "ORDER_PRICE" => 0, "ORDER_WEIGHT" => 0, "VATE_RATE" => 0, "VAT_SUM" => 0, "bUsingVat" => false, "BASKET_ITEMS" => array(), "BASE_LANG_CURRENCY" => CSaleLang::GetLangCurrency(SITE_ID), "WEIGHT_UNIT" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_unit', false, SITE_ID)), "WEIGHT_KOEF" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_koef', 1, SITE_ID)), "TaxExempt" => array(), "DISCOUNT_PRICE" => 0, "DISCOUNT_PERCENT" => 0, "DELIVERY_PRICE" => 0, "TAX_PRICE" => 0, "PAYED_FROM_ACCOUNT_FORMATED" => false, "ORDER_TOTAL_PRICE_FORMATED" => false, "ORDER_WEIGHT_FORMATED" => false, "ORDER_PRICE_FORMATED" => false, "VAT_SUM_FORMATED" => false, "DELIVERY_SUM" => false, "DELIVERY_PROFILE_SUM" => false, "DELIVERY_PRICE_FORMATED" => false, "DISCOUNT_PERCENT_FORMATED" => false, "PAY_FROM_ACCOUNT" => false, "CURRENT_BUDGET_FORMATED" => false, "USER_ACCOUNT" => false, "DISCOUNTS" => array(), "AUTH" => array(), "HAVE_PREPAYMENT" => false, "PREPAY_PS" => array(), "PREPAY_ADIT_FIELDS" => "", "PREPAY_ORDER_PROPS" => array()); $arUserResult = array("PERSON_TYPE_ID" => false, "PAY_SYSTEM_ID" => false, "DELIVERY_ID" => false, "ORDER_PROP" => false, "DELIVERY_LOCATION" => false, "TAX_LOCATION" => false, "PAYER_NAME" => false, "USER_EMAIL" => false, "PROFILE_NAME" => false, "PAY_CURRENT_ACCOUNT" => false, "CONFIRM_ORDER" => false, "FINAL_STEP" => false, "ORDER_DESCRIPTION" => false, "PROFILE_ID" => false, "PROFILE_CHANGE" => false, "DELIVERY_LOCATION_ZIP" => false); $arResult["DELIVERY_EXTRA"] = isset($_POST["DELIVERY_ID"]) && isset($_POST["DELIVERY_EXTRA"][$_POST["DELIVERY_ID"]]) ? $_POST["DELIVERY_EXTRA"][$_POST["DELIVERY_ID"]] : array(); $arResult["AUTH"]["new_user_registration_email_confirmation"] = COption::GetOptionString("main", "new_user_registration_email_confirmation", "N") == "Y" ? "Y" : "N"; $arResult["AUTH"]["new_user_registration"] = COption::GetOptionString("main", "new_user_registration", "Y") == "Y" ? "Y" : "N"; $arParams["ALLOW_AUTO_REGISTER"] = $arParams["ALLOW_AUTO_REGISTER"] == "Y" ? "Y" : "N"; if ($arParams["ALLOW_AUTO_REGISTER"] == "Y" && ($arResult["AUTH"]["new_user_registration_email_confirmation"] == "Y" || $arResult["AUTH"]["new_user_registration"] == "N")) { $arParams["ALLOW_AUTO_REGISTER"] = "N"; } $arParams["SEND_NEW_USER_NOTIFY"] = $arParams["SEND_NEW_USER_NOTIFY"] == "N" ? "N" : "Y"; $arParams["ALLOW_NEW_PROFILE"] = $arParams["ALLOW_NEW_PROFILE"] == "N" ? "N" : "Y"; $allCurrency = CSaleLang::GetLangCurrency(SITE_ID); if (!$arParams["DELIVERY_NO_SESSION"]) { $arParams["DELIVERY_NO_SESSION"] = "N"; } $arResult["BUYER_STORE"] = ""; if (isset($_POST["BUYER_STORE"])) { $arResult["BUYER_STORE"] = intval($_POST["BUYER_STORE"]); } $arResult["GRID"]["HEADERS"] = array(); $arResult["GRID"]["ROWS"] = array(); // grid product table columns $bIblockEnabled = false; $arResult["GRID"]["DEFAULT_COLUMNS"] = false; if (empty($arParams["PRODUCT_COLUMNS"])) { $arParams["PRODUCT_COLUMNS"] = array("NAME" => GetMessage("SOA_NAME_DEFAULT_COLUMN"), "PROPS" => GetMessage("SOA_PROPS_DEFAULT_COLUMN"), "DISCOUNT_PRICE_PERCENT_FORMATED" => GetMessage("SOA_DISCOUNT_DEFAULT_COLUMN"), "PRICE_FORMATED" => GetMessage("SOA_PRICE_DEFAULT_COLUMN"), "QUANTITY" => GetMessage("SOA_QUANTITY_DEFAULT_COLUMN"), "SUM" => GetMessage("SOA_SUM_DEFAULT_COLUMN")); $arResult["GRID"]["DEFAULT_COLUMNS"] = true;
function GetHandlerCompability($arOrder, $arHandler, $SITE_ID = SITE_ID) { if (!defined('SALE_DH_INITIALIZED')) { CSaleDeliveryHandler::Initialize(); } $currency = CSaleLang::GetLangCurrency($SITE_ID); if ($currency != $arHandler["BASE_CURRENCY"]) { $arOrder["PRICE"] = CCurrencyRates::ConvertCurrency($arOrder["PRICE"], $currency, $arHandler["BASE_CURRENCY"]); } if (is_array($arHandler["PROFILES"])) { $arProfilesList = $arHandler["PROFILES"]; foreach ($arProfilesList as $profile_id => $arProfile) { if (is_array($arProfile["RESTRICTIONS_WEIGHT"])) { if (is_array($arProfile["RESTRICTIONS_WEIGHT"]) && count($arProfile["RESTRICTIONS_WEIGHT"]) > 0) { $arOrder["WEIGHT"] = doubleval($arOrder["WEIGHT"]); if ($arOrder["WEIGHT"] < $arProfile["RESTRICTIONS_WEIGHT"][0] || is_set($arProfile["RESTRICTIONS_WEIGHT"], 1) && Doubleval($arProfile["RESTRICTIONS_WEIGHT"][1]) > 0 && $arOrder["WEIGHT"] > $arProfile["RESTRICTIONS_WEIGHT"][1]) { unset($arProfilesList[$profile_id]); continue; } } if (is_array($arProfile["RESTRICTIONS_SUM"]) && count($arProfile["RESTRICTIONS_SUM"]) > 0) { if ($arOrder["PRICE"] < $arProfile["RESTRICTIONS_SUM"][0] || is_set($arProfile["RESTRICTIONS_SUM"], 1) && Doubleval($arProfile["RESTRICTIONS_SUM"][1]) > 0 && $arOrder["PRICE"] > $arProfile["RESTRICTIONS_SUM"][1]) { unset($arProfilesList[$profile_id]); continue; } } } } if (is_callable($arHandler["COMPABILITY"])) { $arHandlerProfilesList = call_user_func($arHandler["COMPABILITY"], $arOrder, $arHandler["CONFIG"]["CONFIG"]); if (is_array($arHandlerProfilesList)) { foreach ($arProfilesList as $profile_id => $arHandler) { if (!in_array($profile_id, $arHandlerProfilesList)) { unset($arProfilesList[$profile_id]); } } } else { return array(); } } return $arProfilesList; } else { return false; } }
protected function sendEmailNewOrder($newOrderId, $buyer) { global $DB; $strOrderList = ""; $baseLangCurrency = CSaleLang::GetLangCurrency($this->siteId); $orderNew = CSaleOrder::GetByID($newOrderId); $orderNew["BASKET_ITEMS"] = array(); $userEmail = $buyer["email"]; $fio = $buyer["last-name"] . (isset($buyer["first-name"]) ? $buyer["first-name"] : ""); $dbBasketTmp = CSaleBasket::GetList(array("SET_PARENT_ID" => "DESC", "TYPE" => "DESC", "NAME" => "ASC"), array("ORDER_ID" => $newOrderId), false, false, array("ID", "PRICE", "QUANTITY", "NAME")); while ($arBasketTmp = $dbBasketTmp->GetNext()) { $orderNew["BASKET_ITEMS"][] = $arBasketTmp; } $orderNew["BASKET_ITEMS"] = getMeasures($orderNew["BASKET_ITEMS"]); foreach ($orderNew["BASKET_ITEMS"] as $val) { if (CSaleBasketHelper::isSetItem($val)) { continue; } $measure = isset($val["MEASURE_TEXT"]) ? $val["MEASURE_TEXT"] : GetMessage("SALE_YMH_SHT"); $strOrderList .= $val["NAME"] . " - " . $val["QUANTITY"] . " " . $measure . ": " . SaleFormatCurrency($val["PRICE"], $baseLangCurrency); $strOrderList .= "\n"; } //send mail $arFields = array("ORDER_ID" => $orderNew["ACCOUNT_NUMBER"], "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $this->siteId))), "ORDER_USER" => $fio, "PRICE" => SaleFormatCurrency($orderNew["PRICE"], $baseLangCurrency), "BCC" => COption::GetOptionString("sale", "order_email", "order@" . $_SERVER['SERVER_NAME']), "EMAIL" => array("PAYER_NAME" => $fio, "USER_EMAIL" => $userEmail), "ORDER_LIST" => $strOrderList, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@" . $_SERVER['SERVER_NAME']), "DELIVERY_PRICE" => $orderNew["DELIVERY_PRICE"]); $eventName = "SALE_NEW_ORDER"; $bSend = true; foreach (GetModuleEvents("sale", "OnOrderNewSendEmail", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($newOrderId, &$eventName, &$arFields)) === false) { $bSend = false; } } if ($bSend) { $event = new CEvent(); $event->Send($eventName, $this->siteId, $arFields, "N"); } CSaleMobileOrderPush::send("ORDER_CREATED", array("ORDER" => $orderNew)); }
public static function ConvertDiscount($intStep = 100, $intMaxExecutionTime = 15) { global $DBType; global $DB; global $APPLICATION; self::InitStep(); $intStep = intval($intStep); if (0 >= $intStep) { $intStep = 100; } $startConvertTime = getmicrotime(); $obDiscount = new CSaleDiscount(); $strTableName = ''; switch (ToUpper($DBType)) { case 'MYSQL': $strTableName = 'b_catalog_discount'; break; case 'MSSQL': $strTableName = 'B_CATALOG_DISCOUNT'; break; case 'ORACLE': $strTableName = 'B_CATALOG_DISCOUNT'; break; } $intCount = CSaleDiscountConvert::GetCount(); if (0 == $intCount) { } $strStatus = 1 < $intCount ? 'N' : 'Y'; $arBaseCurrencies = array(); $rsSites = CSite::GetList($b = "id", $o = "asc"); while ($arSite = $rsSites->Fetch()) { $arBaseCurrencies[$arSite['ID']] = CSaleLang::GetLangCurrency($arSite['ID']); } CTimeZone::Disable(); $rsDiscounts = CSaleDiscount::GetList(array('ID' => 'ASC'), array('VERSION' => CSaleDiscount::VERSION_OLD), false, array('nTopCount' => $intStep), array('ID', 'SITE_ID', 'MODIFIED_BY', 'TIMESTAMP_X', 'PRICE_FROM', 'PRICE_TO', 'CURRENCY', 'DISCOUNT_VALUE', 'DISCOUNT_TYPE')); while ($arDiscount = $rsDiscounts->Fetch()) { $arFields = array(); $arFields['MODIFIED_BY'] = $arDiscount['MODIFIED_BY']; $arConditions = array('CLASS_ID' => 'CondGroup', 'DATA' => array('All' => 'AND', 'True' => 'True'), 'CHILDREN' => array()); $arActions = array('CLASS_ID' => 'CondGroup', 'DATA' => array('All' => 'AND', 'True' => 'True'), 'CHILDREN' => array()); $boolCurrency = $arDiscount['CURRENCY'] == $arBaseCurrencies[$arDiscount['SITE_ID']]; $strFrom = ''; $strTo = ''; $strValue = ''; $arDiscount['PRICE_FROM'] = doubleval($arDiscount['PRICE_FROM']); $arDiscount['PRICE_TO'] = doubleval($arDiscount['PRICE_TO']); $arDiscount['DISCOUNT_VALUE'] = doubleval($arDiscount['DISCOUNT_VALUE']); if (0 < $arDiscount['PRICE_FROM']) { $dblValue = roundEx($boolCurrency ? $arDiscount['PRICE_FROM'] : CCurrencyRates::ConvertCurrency($arDiscount['PRICE_FROM'], $arDiscount['CURRENCY'], $arBaseCurrencies[$arDiscount['SITE_ID']]), SALE_VALUE_PRECISION); $arConditions['CHILDREN'][] = array('CLASS_ID' => 'CondBsktAmtGroup', 'DATA' => array('logic' => 'EqGr', 'Value' => (string) $dblValue, 'All' => 'AND'), 'CHILDREN' => array()); if (!$boolCurrency) { $arFields['PRICE_FROM'] = $dblValue; } $strFrom = str_replace('#VALUE#', $dblValue . ' ' . $arBaseCurrencies[$arDiscount['SITE_ID']], GetMessage('BT_MOD_SALE_DSC_FORMAT_NAME_FROM')); } if (0 < $arDiscount['PRICE_TO']) { $dblValue = roundEx($boolCurrency ? $arDiscount['PRICE_TO'] : CCurrencyRates::ConvertCurrency($arDiscount['PRICE_TO'], $arDiscount['CURRENCY'], $arBaseCurrencies[$arDiscount['SITE_ID']]), SALE_VALUE_PRECISION); $arConditions['CHILDREN'][] = array('CLASS_ID' => 'CondBsktAmtGroup', 'DATA' => array('logic' => 'EqLs', 'Value' => (string) $dblValue, 'All' => 'AND'), 'CHILDREN' => array()); if (!$boolCurrency) { $arFields['PRICE_TO'] = $dblValue; } $strTo = str_replace('#VALUE#', $dblValue . ' ' . $arBaseCurrencies[$arDiscount['SITE_ID']], GetMessage('BT_MOD_SALE_DSC_FORMAT_NAME_TO')); } if (CSaleDiscount::OLD_DSC_TYPE_PERCENT == $arDiscount['DISCOUNT_TYPE']) { $arActions['CHILDREN'][] = array('CLASS_ID' => 'ActSaleBsktGrp', 'DATA' => array('Type' => 'Discount', 'Value' => (string) roundEx($arDiscount['DISCOUNT_VALUE'], SALE_VALUE_PRECISION), 'Unit' => 'Perc', 'All' => 'AND'), 'CHILDREN' => array()); $strValue = $arDiscount['DISCOUNT_VALUE'] . ' %'; } else { $dblValue = roundEx($boolCurrency ? $arDiscount['DISCOUNT_VALUE'] : CCurrencyRates::ConvertCurrency($arDiscount['DISCOUNT_VALUE'], $arDiscount['CURRENCY'], $arBaseCurrencies[$arDiscount['SITE_ID']]), SALE_VALUE_PRECISION); $arActions['CHILDREN'][] = array('CLASS_ID' => 'ActSaleBsktGrp', 'DATA' => array('Type' => 'Discount', 'Value' => (string) $dblValue, 'Unit' => 'CurAll', 'All' => 'AND'), 'CHILDREN' => array()); if (!$boolCurrency) { $arFields['DISCOUNT_VALUE'] = $dblValue; } $strValue = $dblValue . ' ' . $arBaseCurrencies[$arDiscount['SITE_ID']]; } if ('' != $strFrom || '' != $strTo) { $strName = str_replace(array('#VALUE#', '#FROM#', '#TO#'), array($strValue, $strFrom, $strTo), GetMessage('BT_MOD_SALE_DSC_FORMAT_NAME')); } else { $strName = str_replace('#VALUE#', $strValue, GetMessage('BT_MOD_SALE_DSC_FORMAT_SHORT_NAME')); } $arFields['CONDITIONS'] = $arConditions; $arFields['ACTIONS'] = $arActions; $arFields['NAME'] = $strName; if (!$boolCurrency) { $arFields['CURRENCY'] = $arBaseCurrencies[$arDiscount['SITE_ID']]; } if ('N' == $strStatus) { $arFields['ACTIVE'] = 'N'; } $mxRes = $obDiscount->Update($arDiscount['ID'], $arFields); if (!$mxRes) { self::$intErrors++; $strError = ''; if ($ex = $APPLICATION->GetException()) { $strError = $ex->GetString(); } if (empty($strError)) { $strError = GetMessage(''); } self::$arErrors[] = array('ID' => $arDiscount['ID'], 'NAME' => $strName, 'ERROR' => $strError); } else { $arTimeFields = array('~TIMESTAMP_X' => $DB->CharToDateFunction($arDiscount['TIMESTAMP_X'], "FULL")); $strUpdate = $DB->PrepareUpdate($strTableName, $arTimeFields); if (!empty($strUpdate)) { $strQuery = "UPDATE " . $strTableName . " SET " . $strUpdate . " WHERE ID = " . $arDiscount['ID']; $DB->Query($strQuery, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } self::$intConverted++; self::$intConvertPerStep++; } if ($intMaxExecutionTime > 0 && getmicrotime() - $startConvertTime > $intMaxExecutionTime) { break; } } CTimeZone::Enable(); if ($intMaxExecutionTime > 2 * (getmicrotime() - $startConvertTime)) { self::$intNextConvertPerStep = $intStep * 2; } else { self::$intNextConvertPerStep = $intStep; } self::SaveStep(); }
/** * @param $siteId * @param $userId * @param $arShoppingCart * @param $personTypeId * @param $arOrderPropsValues * @param $deliveryId * @param $paySystemId * @param $arOptions * @param $arErrors * @param $arWarnings * @return array|null */ static function DoCalculateOrder($siteId, $userId, $arShoppingCart, $personTypeId, $arOrderPropsValues, $deliveryId, $paySystemId, $arOptions, &$arErrors, &$arWarnings) { if(!is_array($arOptions)) { $arOptions = array(); } $siteId = trim($siteId); if (empty($siteId)) { $arErrors[] = array("CODE" => "PARAM", "TEXT" => GetMessage('SKGO_CALC_PARAM_ERROR')); return null; } $userId = intval($userId); if (!is_array($arShoppingCart) || (count($arShoppingCart) <= 0)) { $arErrors[] = array("CODE" => "PARAM", "TEXT" => GetMessage('SKGO_SHOPPING_CART_EMPTY')); return null; } // calculate weight for set parent $arParentWeight = array(); foreach ($arShoppingCart as $arItem) { if (CSaleBasketHelper::isSetItem($arItem)) $arParentWeight[$arItem["SET_PARENT_ID"]]["WEIGHT"] += $arItem["WEIGHT"] * $arItem["QUANTITY"]; } foreach ($arShoppingCart as &$arItem) { if (CSaleBasketHelper::isSetParent($arItem) && isset($arParentWeight[$arItem["SET_PARENT_ID"]])) $arItem["WEIGHT"] = $arParentWeight[$arItem["SET_PARENT_ID"]]["WEIGHT"]; } unset($arItem); $currency = isset($arOptions['CURRENCY']) && is_string($arOptions['CURRENCY']) ? $arOptions['CURRENCY'] : ''; if($currency === '') { $currency = CSaleLang::GetLangCurrency($siteId); } $arOrder = array( "ORDER_PRICE" => 0, "ORDER_WEIGHT" => 0, "CURRENCY" => $currency, "WEIGHT_UNIT" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_unit', false, $siteId)), "WEIGHT_KOEF" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_koef', 1, $siteId)), "BASKET_ITEMS" => $arShoppingCart, "SITE_ID" => $siteId, "LID" => $siteId, "USER_ID" => $userId, "USE_VAT" => false, "VAT_RATE" => 0, "VAT_SUM" => 0, "DELIVERY_ID" => false, ); $arOrderPrices = CSaleOrder::CalculateOrderPrices($arShoppingCart); if (sizeof($arOrderPrices)>0 && isset($arOrderPrices['BASKET_ITEMS'])) $arShoppingCart = $arOrderPrices['BASKET_ITEMS']; $arOrder['ORDER_PRICE'] = $arOrderPrices['ORDER_PRICE']; $arOrder['ORDER_WEIGHT'] = $arOrderPrices['ORDER_WEIGHT']; $arOrder['VAT_RATE'] = $arOrderPrices['VAT_RATE']; $arOrder['VAT_SUM'] = $arOrderPrices['VAT_SUM']; $arOrder["USE_VAT"] = ($arOrderPrices['USE_VAT'] == "Y"?true:false); foreach(GetModuleEvents("sale", "OnSaleCalculateOrderShoppingCart", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); CSalePersonType::DoProcessOrder($arOrder, $personTypeId, $arErrors); if (count($arErrors) > 0) return null; foreach(GetModuleEvents("sale", "OnSaleCalculateOrderPersonType", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); CSaleOrderProps::DoProcessOrder($arOrder, $arOrderPropsValues, $arErrors, $arWarnings, $paySystemId, $deliveryId); if (count($arErrors) > 0) return null; foreach(GetModuleEvents("sale", "OnSaleCalculateOrderProps", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); CSaleDelivery::DoProcessOrder($arOrder, $deliveryId, $arErrors); if (count($arErrors) > 0) return null; $arOrder["PRICE_DELIVERY"] = $arOrder["DELIVERY_PRICE"]; foreach(GetModuleEvents("sale", "OnSaleCalculateOrderDelivery", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); CSalePaySystem::DoProcessOrder($arOrder, $paySystemId, $arErrors); if (count($arErrors) > 0) return null; foreach(GetModuleEvents("sale", "OnSaleCalculateOrderPaySystem", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); if (!array_key_exists('CART_FIX', $arOptions) || 'Y' != $arOptions['CART_FIX']) { CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors); if (count($arErrors) > 0) return null; foreach(GetModuleEvents("sale", "OnSaleCalculateOrderDiscount", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); } CSaleTax::DoProcessOrderBasket($arOrder, $arOptions, $arErrors); if (count($arErrors) > 0) return null; foreach(GetModuleEvents("sale", "OnSaleCalculateOrderShoppingCartTax", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); CSaleTax::DoProcessOrderDelivery($arOrder, $arOptions, $arErrors); if (count($arErrors) > 0) return null; foreach(GetModuleEvents("sale", "OnSaleCalculateOrderDeliveryTax", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); $arOrder["PRICE"] = $arOrder["ORDER_PRICE"] + $arOrder["DELIVERY_PRICE"] + $arOrder["TAX_PRICE"] - $arOrder["DISCOUNT_PRICE"]; $arOrder["TAX_VALUE"] = ($arOrder["USE_VAT"] ? $arOrder["VAT_SUM"] : $arOrder["TAX_PRICE"]); foreach(GetModuleEvents("sale", "OnSaleCalculateOrder", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arOrder)); return $arOrder; }
$arParams["PATH_TO_AUTH"] = Trim($arParams["PATH_TO_AUTH"]); if (strlen($arParams["PATH_TO_AUTH"]) <= 0) { $arParams["PATH_TO_AUTH"] = "/auth/"; } $arParams["PAY_FROM_ACCOUNT"] = $arParams["PAY_FROM_ACCOUNT"] == "N" ? "N" : "Y"; $arParams["COUNT_DELIVERY_TAX"] = $arParams["COUNT_DELIVERY_TAX"] == "Y" ? "Y" : "N"; $arParams["ONLY_FULL_PAY_FROM_ACCOUNT"] = $arParams["ONLY_FULL_PAY_FROM_ACCOUNT"] == "Y" ? "Y" : "N"; $arParams["DELIVERY_NO_AJAX"] = $arParams["DELIVERY_NO_AJAX"] == "Y" ? "Y" : "N"; $arParams["USE_PREPAYMENT"] = $arParams["USE_PREPAYMENT"] == 'Y' ? 'Y' : 'N'; $arParams["DISPLAY_IMG_HEIGHT"] = Intval($arParams["DISPLAY_IMG_HEIGHT"]) <= 0 ? 90 : Intval($arParams["DISPLAY_IMG_HEIGHT"]); $arParams["DELIVERY_TO_PAYSYSTEM"] = strlen($arParams["DELIVERY_TO_PAYSYSTEM"]) <= 0 ? "d2p" : trim($arParams["DELIVERY_TO_PAYSYSTEM"]); if (!isset($arParams["DISABLE_BASKET_REDIRECT"]) || 'Y' !== $arParams["DISABLE_BASKET_REDIRECT"]) { $arParams["DISABLE_BASKET_REDIRECT"] = "N"; } $bUseAccountNumber = COption::GetOptionString("sale", "account_number_template", "") !== ""; $arResult = array("PERSON_TYPE" => array(), "PAY_SYSTEM" => array(), "ORDER_PROP" => array(), "DELIVERY" => array(), "TAX" => array(), "ERROR" => array(), "ORDER_PRICE" => 0, "ORDER_WEIGHT" => 0, "VATE_RATE" => 0, "VAT_SUM" => 0, "bUsingVat" => false, "BASKET_ITEMS" => array(), "BASE_LANG_CURRENCY" => CSaleLang::GetLangCurrency(SITE_ID), "WEIGHT_UNIT" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_unit', false, SITE_ID)), "WEIGHT_KOEF" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_koef', 1, SITE_ID)), "TaxExempt" => array(), "DISCOUNT_PRICE" => 0, "DISCOUNT_PERCENT" => 0, "DELIVERY_PRICE" => 0, "TAX_PRICE" => 0, "PAYED_FROM_ACCOUNT_FORMATED" => false, "ORDER_TOTAL_PRICE_FORMATED" => false, "ORDER_WEIGHT_FORMATED" => false, "ORDER_PRICE_FORMATED" => false, "VAT_SUM_FORMATED" => false, "DELIVERY_SUM" => false, "DELIVERY_PROFILE_SUM" => false, "DELIVERY_PRICE_FORMATED" => false, "DISCOUNT_PERCENT_FORMATED" => false, "PAY_FROM_ACCOUNT" => false, "CURRENT_BUDGET_FORMATED" => false, "USER_ACCOUNT" => false, "DISCOUNTS" => array(), "AUTH" => array(), "HAVE_PREPAYMENT" => false, "PREPAY_PS" => array(), "PREPAY_ADIT_FIELDS" => "", "PREPAY_ORDER_PROPS" => array()); $arUserResult = array("PERSON_TYPE_ID" => false, "PAY_SYSTEM_ID" => false, "DELIVERY_ID" => false, "ORDER_PROP" => false, "DELIVERY_LOCATION" => false, "TAX_LOCATION" => false, "PAYER_NAME" => false, "USER_EMAIL" => false, "PROFILE_NAME" => false, "PAY_CURRENT_ACCOUNT" => false, "CONFIRM_ORDER" => false, "FINAL_STEP" => false, "ORDER_DESCRIPTION" => false, "PROFILE_ID" => false, "PROFILE_CHANGE" => false, "DELIVERY_LOCATION_ZIP" => false); $arResult["DELIVERY_EXTRA"] = isset($_POST["DELIVERY_ID"]) && isset($_POST["DELIVERY_EXTRA"][$_POST["DELIVERY_ID"]]) ? $_POST["DELIVERY_EXTRA"][$_POST["DELIVERY_ID"]] : array(); $arResult["AUTH"]["new_user_registration_email_confirmation"] = COption::GetOptionString("main", "new_user_registration_email_confirmation", "N") == "Y" ? "Y" : "N"; $arResult["AUTH"]["new_user_registration"] = COption::GetOptionString("main", "new_user_registration", "Y") == "Y" ? "Y" : "N"; $arParams["ALLOW_AUTO_REGISTER"] = $arParams["ALLOW_AUTO_REGISTER"] == "Y" ? "Y" : "N"; if ($arParams["ALLOW_AUTO_REGISTER"] == "Y" && ($arResult["AUTH"]["new_user_registration_email_confirmation"] == "Y" || $arResult["AUTH"]["new_user_registration"] == "N")) { $arParams["ALLOW_AUTO_REGISTER"] = "N"; } $arParams["SEND_NEW_USER_NOTIFY"] = $arParams["SEND_NEW_USER_NOTIFY"] == "N" ? "N" : "Y"; $arParams["ALLOW_NEW_PROFILE"] = $arParams["ALLOW_NEW_PROFILE"] == "N" ? "N" : "Y"; $allCurrency = $arResult['BASE_LANG_CURRENCY']; if (!$arParams["DELIVERY_NO_SESSION"]) { $arParams["DELIVERY_NO_SESSION"] = "N"; } $arResult["BUYER_STORE"] = "";
protected function __ConvertOldFormat($strAction, &$arFields) { global $APPLICATION; $arMsg = array(); $boolResult = true; $arNeedFields = array('LID', 'CURRENCY', 'DISCOUNT_TYPE', 'DISCOUNT_VALUE', 'PRICE_FROM', 'PRICE_TO'); $arUpdateFields = array('DISCOUNT_VALUE', 'PRICE_FROM', 'PRICE_TO'); $strAction = ToUpper($strAction); if (!array_key_exists('CONDITIONS', $arFields) && !array_key_exists('ACTIONS', $arFields)) { $strSiteCurrency = ''; $boolUpdate = false; if ('UPDATE' == $strAction) { $boolNeedQuery = false; foreach ($arUpdateFields as &$strFieldID) { if (array_key_exists($strFieldID, $arFields)) { $boolUpdate = true; break; } } if (isset($strFieldID)) { unset($strFieldID); } if ($boolUpdate) { foreach ($arNeedFields as &$strFieldID) { if (!array_key_exists($strFieldID, $arFields)) { $boolNeedQuery = true; break; } } if (isset($strFieldID)) { unset($strFieldID); } if ($boolNeedQuery) { $rsDiscounts = CSaleDiscount::GetList(array(), array('ID' => $arFields['ID']), false, false, $arNeedFields); if ($arDiscount = $rsDiscounts->Fetch()) { foreach ($arNeedFields as &$strFieldID) { if (!array_key_exists($strFieldID, $arFields)) { $arFields[$strFieldID] = $arDiscount[$strFieldID]; } } if (isset($strFieldID)) { unset($strFieldID); } } else { $boolUpdate = false; $boolResult = false; $arMsg[] = array('id' => 'ID', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_ABSENT')); } } } } if ('ADD' == $strAction || $boolUpdate) { if (!array_key_exists('LID', $arFields)) { $boolResult = false; $arMsg[] = array('id' => 'LID', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_SITE_ID_ABSENT')); } else { $arFields['LID'] = strval($arFields['LID']); if ('' == $arFields['LID']) { $boolResult = false; $arMsg[] = array('id' => 'LID', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_SITE_ID_ABSENT')); } else { $rsSites = CSite::GetByID($arFields["LID"]); if (!($arSite = $rsSites->Fetch())) { $boolResult = false; $arMsg[] = array('id' => 'LID', 'text' => str_replace("#ID#", $arFields["LID"], GetMessage("SKGD_NO_SITE"))); } else { $strSiteCurrency = CSaleLang::GetLangCurrency($arFields['LID']); } } } if (!array_key_exists('CURRENCY', $arFields)) { $boolResult = false; $arMsg[] = array('id' => 'CURRENCY', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_CURRENCY_ABSENT')); } else { $arFields['CURRENCY'] = strval($arFields['CURRENCY']); if ('' == $arFields['CURRENCY']) { $boolResult = false; $arMsg[] = array('id' => 'CURRENCY', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_CURRENCY_ABSENT')); } else { if (!($arCurrency = CCurrency::GetByID($arFields["CURRENCY"]))) { $boolResult = false; $arMsg[] = array('id' => 'CURRENCY', 'text' => str_replace("#ID#", $arFields["CURRENCY"], GetMessage("SKGD_NO_CURRENCY"))); } } } if (!array_key_exists("DISCOUNT_TYPE", $arFields)) { $boolResult = false; $arMsg[] = array('id' => 'DISCOUNT_TYPE', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_TYPE_ABSENT')); } else { $arFields["DISCOUNT_TYPE"] = strval($arFields["DISCOUNT_TYPE"]); if (CSaleDiscount::OLD_DSC_TYPE_PERCENT != $arFields["DISCOUNT_TYPE"] && CSaleDiscount::OLD_DSC_TYPE_FIX != $arFields["DISCOUNT_TYPE"]) { $boolResult = false; $arMsg[] = array('id' => 'DISCOUNT_TYPE', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_TYPE_BAD')); } } if (!array_key_exists('DISCOUNT_VALUE', $arFields)) { $boolResult = false; $arMsg[] = array('id' => 'DISCOUNT_VALUE', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_VALUE_ABSENT')); } else { $arFields['DISCOUNT_VALUE'] = doubleval(str_replace(',', '.', $arFields['DISCOUNT_VALUE'])); if (0 >= $arFields['DISCOUNT_VALUE']) { $boolResult = false; $arMsg[] = array('id' => 'DISCOUNT_VALUE', 'text' => GetMessage('BT_MOD_SALE_ERR_DSC_VALUE_BAD')); } } if ($boolResult) { $arConditions = array('CLASS_ID' => 'CondGroup', 'DATA' => array('All' => 'AND', 'True' => 'True'), 'CHILDREN' => array()); $arActions = array('CLASS_ID' => 'CondGroup', 'DATA' => array('All' => 'AND', 'True' => 'True'), 'CHILDREN' => array()); $boolCurrency = $arFields['CURRENCY'] == $strSiteCurrency; if (array_key_exists('PRICE_FROM', $arFields)) { $arFields["PRICE_FROM"] = str_replace(",", ".", strval($arFields["PRICE_FROM"])); $arFields["PRICE_FROM"] = doubleval($arFields["PRICE_FROM"]); if (0 < $arFields["PRICE_FROM"]) { $dblValue = roundEx($boolCurrency ? $arFields['PRICE_FROM'] : CCurrencyRates::ConvertCurrency($arFields['PRICE_FROM'], $arFields['CURRENCY'], $strSiteCurrency), SALE_VALUE_PRECISION); $arConditions['CHILDREN'][] = array('CLASS_ID' => 'CondBsktAmtGroup', 'DATA' => array('logic' => 'EqGr', 'Value' => (string) $dblValue, 'All' => 'AND'), 'CHILDREN' => array()); $arFields["PRICE_FROM"] = $dblValue; } } if (array_key_exists('PRICE_TO', $arFields)) { $arFields["PRICE_TO"] = str_replace(",", ".", strval($arFields["PRICE_TO"])); $arFields["PRICE_TO"] = doubleval($arFields["PRICE_TO"]); if (0 < $arFields["PRICE_TO"]) { $dblValue = roundEx($boolCurrency ? $arFields['PRICE_TO'] : CCurrencyRates::ConvertCurrency($arFields['PRICE_TO'], $arFields['CURRENCY'], $strSiteCurrency), SALE_VALUE_PRECISION); $arConditions['CHILDREN'][] = array('CLASS_ID' => 'CondBsktAmtGroup', 'DATA' => array('logic' => 'EqLs', 'Value' => (string) $dblValue, 'All' => 'AND'), 'CHILDREN' => array()); $arFields["PRICE_TO"] = $dblValue; } } if (self::OLD_DSC_TYPE_PERCENT == $arFields['DISCOUNT_TYPE']) { $arActions['CHILDREN'][] = array('CLASS_ID' => 'ActSaleBsktGrp', 'DATA' => array('Type' => 'Discount', 'Value' => (string) roundEx($arFields['DISCOUNT_VALUE'], SALE_VALUE_PRECISION), 'Unit' => 'Perc', 'All' => 'AND'), 'CHILDREN' => array()); } else { $dblValue = roundEx($boolCurrency ? $arFields['DISCOUNT_VALUE'] : CCurrencyRates::ConvertCurrency($arFields['DISCOUNT_VALUE'], $arFields['CURRENCY'], $strSiteCurrency), SALE_VALUE_PRECISION); $arActions['CHILDREN'][] = array('CLASS_ID' => 'ActSaleBsktGrp', 'DATA' => array('Type' => 'Discount', 'Value' => (string) $dblValue, 'Unit' => 'CurAll', 'All' => 'AND'), 'CHILDREN' => array()); $arFields['DISCOUNT_VALUE'] = $dblValue; } $arFields['CONDITIONS'] = $arConditions; $arFields['ACTIONS'] = $arActions; $arFields['CURRENCY'] = $strSiteCurrency; } else { $obError = new CAdminException($arMsg); $APPLICATION->ThrowException($obError); } } } return $boolResult; }
public static function notifyNewOrder($newOrderId, $siteId, $buyerEmail = "", $buyerFio = "") { if (strlen($newOrderId) <= 0) { throw new ArgumentNullException("newOrderId"); } if (strlen($siteId) <= 0) { throw new ArgumentNullException("siteId"); } global $DB; $strOrderList = ""; $baseLangCurrency = \CSaleLang::GetLangCurrency($siteId); $orderNew = \CSaleOrder::GetByID($newOrderId); $orderNew["BASKET_ITEMS"] = array(); $dbBasketTmp = \CSaleBasket::GetList(array("SET_PARENT_ID" => "DESC", "TYPE" => "DESC", "NAME" => "ASC"), array("ORDER_ID" => $newOrderId), false, false, array("ID", "PRICE", "QUANTITY", "NAME")); while ($arBasketTmp = $dbBasketTmp->GetNext()) { $orderNew["BASKET_ITEMS"][] = $arBasketTmp; } $orderNew["BASKET_ITEMS"] = getMeasures($orderNew["BASKET_ITEMS"]); foreach ($orderNew["BASKET_ITEMS"] as $val) { if (\CSaleBasketHelper::isSetItem($val)) { continue; } $measure = isset($val["MEASURE_TEXT"]) ? $val["MEASURE_TEXT"] : GetMessage("SALE_YMH_SHT"); $strOrderList .= $val["NAME"] . " - " . $val["QUANTITY"] . " " . $measure . ": " . SaleFormatCurrency($val["PRICE"], $baseLangCurrency); $strOrderList .= "\n"; } //send mail $arFields = array("ORDER_ID" => $orderNew["ACCOUNT_NUMBER"], "ORDER_DATE" => Date($DB->DateFormatToPHP(\CLang::GetDateFormat("SHORT", $siteId))), "ORDER_USER" => $buyerFio, "PRICE" => SaleFormatCurrency($orderNew["PRICE"], $baseLangCurrency), "BCC" => \COption::GetOptionString("sale", "order_email", "order@" . $_SERVER['SERVER_NAME']), "EMAIL_TO" => array("PAYER_NAME" => $buyerFio, "USER_EMAIL" => $buyerEmail), "ORDER_LIST" => $strOrderList, "SALE_EMAIL" => \COption::GetOptionString("sale", "order_email", "order@" . $_SERVER['SERVER_NAME']), "DELIVERY_PRICE" => $orderNew["DELIVERY_PRICE"]); $eventName = "SALE_NEW_ORDER"; $bSend = true; foreach (GetModuleEvents("sale", "OnOrderNewSendEmail", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($newOrderId, &$eventName, &$arFields)) === false) { $bSend = false; } } $emailSendRes = false; if ($bSend) { $event = new \CEvent(); $emailSendRes = $event->Send($eventName, $siteId, $arFields, "N"); } $pushSendResult = \CSaleMobileOrderPush::send("ORDER_CREATED", array("ORDER" => $orderNew)); return $emailSendRes && $pushSendResult; }
} if ($USER->GetID() <= 0) { $APPLICATION->AuthForm(GetMessage('SPT_ACCESS_DENIED')); return; } if (!is_array($arParams['ALLOWED_CURRENCY'])) { $arParams['ALLOWED_CURRENCY'] = array(); } $arParams['COMISSION'] = round($arParams['COMISSION'], 2); $arParams['CART_PAGE'] = trim($arParams['CART_PAGE']); $arParams['PAY_IMMED'] = isset($arParams['PAY_IMMED']) && $arParams['PAY_IMMED'] == 'Y'; $arResult = array(); $arResult['ACCOUNT'] = array(); $arResult['CURRENCIES'] = array(); $arResult['ERROR'] = ''; $arResult['LANG_CURRENCY'] = CSaleLang::GetLangCurrency(SITE_ID); $arResult['REQUEST_AMOUNT'] = $_REQUEST['amount'] > 0 ? round(str_replace(',', '.', trim($_REQUEST['amount'])), 2) : ''; $arResult['REQUEST_ACCOUNT'] = isset($_REQUEST['account']) ? $_REQUEST['account'] : $arParams['DEFAULT_CURRENCY']; $arResult['REQUEST_PAY_SYSTEM'] = isset($_REQUEST['pay_system']) ? $_REQUEST['pay_system'] : 0; $i = 0; $rsCurrency = CCurrency::GetList($by = 'name', $order = 'desc', LANGUAGE_ID); while ($arCurrency = $rsCurrency->Fetch()) { $arCurrency['ID'] = ++$i; if ($arCurrency['CURRENCY'] != $arResult['LANG_CURRENCY']) { $arCurrency['FACTOR'] = round(CCurrencyRates::GetConvertFactor($arCurrency['CURRENCY'], $arResult['LANG_CURRENCY']), 2); } else { $arCurrency['FACTOR'] = 1; } $arResult['CURRENCIES'][$arCurrency['CURRENCY']] = $arCurrency; if (empty($arParams['ALLOWED_CURRENCY']) || in_array($arCurrency['CURRENCY'], $arParams['ALLOWED_CURRENCY'])) { $arResult['ACCOUNT'][$arCurrency['CURRENCY']] = array();
$strHidden = ''; $strApp = base64_encode(serialize($arDiscount['ACTIONS'])); $tabControl->EndCustomField('ACTIONS', '<input type="hidden" name="ACTIONS" value="' . htmlspecialcharsbx($strApp) . '">' . '<input type="hidden" name="ACTIONS_CHECK" value="' . htmlspecialcharsbx(md5($strApp)) . '">'); $tabControl->AddSection("BT_SALE_DISCOUNT_SECT_COND", GetMessage("BT_SALE_DISCOUNT_SECTIONS_COND_ADD")); $tabControl->BeginCustomField("CONDITIONS", GetMessage('BT_SALE_DISCOUNT_EDIT_FIELDS_COND_ADD') . ":", false); ?> <tr id="tr_CONDITIONS"> <td valign="top" colspan="2"><div id="tree" style="position: relative; z-index: 1;"></div><?php if (!is_array($arDiscount['CONDITIONS'])) { if (CheckSerializedData($arDiscount['CONDITIONS'])) { $arDiscount['CONDITIONS'] = unserialize($arDiscount['CONDITIONS']); } else { $arDiscount['CONDITIONS'] = ''; } } $arCondParams = array('FORM_NAME' => 'sale_discount_form', 'CONT_ID' => 'tree', 'JS_NAME' => 'JSSaleCond', 'INIT_CONTROLS' => array('SITE_ID' => $arDiscount['LID'], 'CURRENCY' => CSaleLang::GetLangCurrency($arDiscount['LID']))); $obCond = new CSaleCondTree(); $boolCond = $obCond->Init(BT_COND_MODE_DEFAULT, BT_COND_BUILD_SALE, $arCondParams); if (!$boolCond) { if ($ex = $APPLICATION->GetException()) { echo $ex->GetString() . "<br>"; } } else { $obCond->Show($arDiscount['CONDITIONS']); } ?> </td> </tr><?php $strHidden = ''; $strCond = base64_encode(serialize($arDiscount['CONDITIONS'])); $tabControl->EndCustomField('CONDITIONS', '<input type="hidden" name="CONDITIONS" value="' . htmlspecialcharsbx($strCond) . '">' . '<input type="hidden" name="CONDITIONS_CHECK" value="' . htmlspecialcharsbx(md5($strCond)) . '">');
/** * @param int $intProductID * @param array $arRewriteFields * @param array $arProductParams * @return bool|int */ function SubscribeProduct($intProductID, $arRewriteFields = array(), $arProductParams = array()) { global $USER, $APPLICATION; if (!CCatalog::IsUserExists()) { return false; } if (!$USER->IsAuthorized()) { return false; } $intUserID = (int) $USER->GetID(); $intProductID = (int) $intProductID; if ($intProductID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_EMPTY_PRODUCT_ID'), "EMPTY_PRODUCT_ID"); return false; } if (!Loader::includeModule("sale")) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (Loader::includeModule("statistic") && isset($_SESSION['SESS_SEARCHER_ID']) && (int) $_SESSION["SESS_SEARCHER_ID"] > 0) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $intProductID), false, false, array('ID', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'TYPE', 'MEASURE', 'SUBSCRIBE')); if (!($arCatalogProduct = $rsProducts->Fetch())) { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } if ($arCatalogProduct['SUBSCRIBE'] == 'N') { $APPLICATION->ThrowException(Loc::getMessage('CATALOG_ERR_NO_SUBSCRIBE'), 'SUBSCRIBE'); return false; } $arCatalogProduct['MEASURE'] = (int) $arCatalogProduct['MEASURE']; $arCatalogProduct['MEASURE_NAME'] = ''; $arCatalogProduct['MEASURE_CODE'] = 0; if ($arCatalogProduct['MEASURE'] <= 0) { $arMeasure = CCatalogMeasure::getDefaultMeasure(true, true); $arCatalogProduct['MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; $arCatalogProduct['MEASURE_CODE'] = $arMeasure['CODE']; } else { $rsMeasures = CCatalogMeasure::getList(array(), array('ID' => $arCatalogProduct['MEASURE']), false, false, array('ID', 'SYMBOL_RUS', 'CODE')); if ($arMeasure = $rsMeasures->GetNext()) { $arCatalogProduct['MEASURE_NAME'] = $arMeasure['~SYMBOL_RUS']; $arCatalogProduct['MEASURE_CODE'] = $arMeasure['CODE']; } } $rsItems = CIBlockElement::GetList(array(), array("ID" => $intProductID, "ACTIVE" => "Y", "ACTIVE_DATE" => "Y", "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R"), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'XML_ID', 'DETAIL_PAGE_URL')); if (!($arProduct = $rsItems->GetNext())) { return false; } $arParentSku = CCatalogSku::GetProductInfo($intProductID, $arProduct['IBLOCK_ID']); if (!empty($arParentSku)) { if (strpos($arProduct["~XML_ID"], '#') === false) { $parentIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'XML_ID'), 'filter' => array('ID' => $arParentSku['ID']))); if ($parent = $parentIterator->fetch()) { $arProduct["~XML_ID"] = $parent['XML_ID'] . '#' . $arProduct["~XML_ID"]; } unset($parent, $parentIterator); } } $arPrice = array('PRICE' => 0.0, 'CURRENCY' => CSaleLang::GetLangCurrency(SITE_ID), 'VAT_RATE' => 0, 'PRODUCT_PRICE_ID' => 0, 'CATALOG_GROUP_NAME' => ''); $arBuyerGroups = $USER->GetUserGroupArray(); $arSubscrPrice = CCatalogProduct::GetOptimalPrice($intProductID, 1, $arBuyerGroups, "N", array(), SITE_ID, array()); if (!empty($arSubscrPrice) && is_array($arSubscrPrice)) { $arPrice['PRICE'] = $arSubscrPrice['DISCOUNT_PRICE']; $arPrice['CURRENCY'] = CCurrency::GetBaseCurrency(); $arPrice['VAT_RATE'] = $arSubscrPrice['PRICE']['VAT_RATE']; $arPrice['PRODUCT_PRICE_ID'] = $arSubscrPrice["PRICE"]["ID"]; $arPrice['CATALOG_GROUP_NAME'] = $arSubscrPrice["PRICE"]["CATALOG_GROUP_NAME"]; } $arProps = array(); $strIBlockXmlID = (string) CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID'); if ($strIBlockXmlID !== '') { $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID); } if (!empty($arProductParams) && is_array($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array("NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"]); } unset($arOneProductParams); } $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"]); $arFields = array("PRODUCT_ID" => $intProductID, "PRODUCT_PRICE_ID" => $arPrice['PRODUCT_PRICE_ID'], "PRICE" => $arPrice['PRICE'], "CURRENCY" => $arPrice['CURRENCY'], "WEIGHT" => $arCatalogProduct["WEIGHT"], "DIMENSIONS" => serialize(array("WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"])), "QUANTITY" => 1, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "N", "SUBSCRIBE" => "Y", "NAME" => $arProduct["~NAME"], "MODULE" => "catalog", "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider", "NOTES" => $arPrice["CATALOG_GROUP_NAME"], "DETAIL_PAGE_URL" => $arProduct["~DETAIL_PAGE_URL"], "CATALOG_XML_ID" => $strIBlockXmlID, "PRODUCT_XML_ID" => $arProduct["~XML_ID"], "PROPS" => $arProps, "TYPE" => $arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : NULL, "MEASURE_NAME" => $arCatalogProduct['MEASURE_NAME'], "MEASURE_CODE" => $arCatalogProduct['MEASURE_CODE'], 'IGNORE_CALLBACK_FUNC' => 'Y'); if (!empty($arRewriteFields) && is_array($arRewriteFields)) { if (array_key_exists('SUBSCRIBE', $arRewriteFields)) { unset($arRewriteFields['SUBSCRIBE']); } if (array_key_exists('CAN_BUY', $arRewriteFields)) { unset($arRewriteFields['CAN_BUY']); } if (array_key_exists('DELAY', $arRewriteFields)) { unset($arRewriteFields['DELAY']); } if (!empty($arRewriteFields)) { $arFields = array_merge($arFields, $arRewriteFields); } } $mxBasketID = CSaleBasket::Add($arFields); if ($mxBasketID) { if (!isset($_SESSION['NOTIFY_PRODUCT'])) { $_SESSION['NOTIFY_PRODUCT'] = array($intUserID = array()); } elseif (!isset($_SESSION['NOTIFY_PRODUCT'][$intUserID])) { $_SESSION['NOTIFY_PRODUCT'][$intUserID] = array(); } $_SESSION["NOTIFY_PRODUCT"][$intUserID][$intProductID] = $intProductID; if (Loader::includeModule("statistic")) { CStatistic::Set_Event("sale2basket", "subscribe", $intProductID); } } return $mxBasketID; }
/** * @param $siteId * @param null $userId * @param $shoppingCart * @param array $options * * @return array */ static function makeOrderArray($siteId, $userId = null, array $shoppingCart, array $options = array()) { // calculate weight for set parent $parentWeight = array(); foreach ($shoppingCart as $item) { if (CSaleBasketHelper::isSetItem($item)) { $parentWeight[$item["SET_PARENT_ID"]]["WEIGHT"] += $item["WEIGHT"] * $item["QUANTITY"]; } } foreach ($shoppingCart as &$item) { if (CSaleBasketHelper::isSetParent($item) && isset($parentWeight[$item["SET_PARENT_ID"]])) { $item["WEIGHT"] = $parentWeight[$item["SET_PARENT_ID"]]["WEIGHT"]; } } unset($item); $currency = isset($options['CURRENCY']) && is_string($options['CURRENCY']) ? $options['CURRENCY'] : ''; if ($currency === '') { $currency = CSaleLang::GetLangCurrency($siteId); } $arOrder = array("ORDER_PRICE" => 0, "ORDER_WEIGHT" => 0, "CURRENCY" => $currency, "WEIGHT_UNIT" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_unit', false, $siteId)), "WEIGHT_KOEF" => htmlspecialcharsbx(COption::GetOptionString('sale', 'weight_koef', 1, $siteId)), "BASKET_ITEMS" => $shoppingCart, "SITE_ID" => $siteId, "LID" => $siteId, "USER_ID" => $userId, "USE_VAT" => false, "VAT_RATE" => 0, "VAT_SUM" => 0, "DELIVERY_ID" => false); if (isset($options["DELIVERY_EXTRA_SERVICES"])) { $arOrder["DELIVERY_EXTRA_SERVICES"] = $options["DELIVERY_EXTRA_SERVICES"]; } $orderPrices = CSaleOrder::CalculateOrderPrices($shoppingCart); $arOrder['ORDER_PRICE'] = $orderPrices['ORDER_PRICE']; $arOrder['ORDER_WEIGHT'] = $orderPrices['ORDER_WEIGHT']; $arOrder['VAT_RATE'] = $orderPrices['VAT_RATE']; $arOrder['VAT_SUM'] = $orderPrices['VAT_SUM']; $arOrder["USE_VAT"] = $orderPrices['USE_VAT'] == "Y"; return $arOrder; }
if ($PERSON_TYPE_ID > 0 && !($arPersonType = CSalePersonType::GetByID($PERSON_TYPE_ID))) { $errorMessage .= GetMessage("SOE_PERSON_NOT_FOUND") . "<br>"; } $STATUS_ID = Trim($STATUS_ID); if (strlen($STATUS_ID) > 0) { if ($saleModulePermissions < "W") { $dbStatusList = CSaleStatus::GetList(array(), array("GROUP_ID" => $GLOBALS["USER"]->GetUserGroupArray(), "PERM_STATUS" => "Y", "ID" => $STATUS_ID), array("ID", "MAX" => "PERM_STATUS"), false, array("ID")); if (!$dbStatusList->Fetch()) { $errorMessage .= str_replace("#STATUS_ID#", $STATUS_ID, GetMessage("SOE_NO_STATUS_PERMS")) . ". "; } } } $CANCELED = $CANCELED == "Y" ? "Y" : "N"; $PAYED = $PAYED == "Y" ? "Y" : "N"; $ALLOW_DELIVERY = $ALLOW_DELIVERY == "Y" ? "Y" : "N"; $BASE_LANG_CURRENCY = CSaleLang::GetLangCurrency($LID); // Basket params $arBasketList = array(); $arOrderPrice = array(); $basketTotalPrice = 0; $arOrderWeight = array(); $basketTotalWeight = 0; $arInd = array(); $ids = array(); $allIDs = array(); $arIDs = explode(",", trim($_POST["BASKET_IDS"])); foreach ($arIDs as $v) { if ($_POST["product_delete_" . $v] != "Y") { $ids[] = $v; } $allIDs[] = $v;
/** * событие вызывается перед отправкой письма о новом заказе * @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; }
function CheckFields($ACTION, &$arFields, $ID = 0) { global $APPLICATION; static $orderList = array(); $ACTION = strtoupper($ACTION); if (array_key_exists('ID', $arFields)) { unset($arFields['ID']); } if ($ACTION != "ADD" && (int) $ID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_ID_ABSENT'), "ID"); return false; } if ('ADD' == $ACTION) { if (!array_key_exists('CUSTOM_PRICE', $arFields)) { $arFields['CUSTOM_PRICE'] = ''; } } if (array_key_exists('CUSTOM_PRICE', $arFields) && 'Y' != $arFields['CUSTOM_PRICE']) { $arFields['CUSTOM_PRICE'] = 'N'; } if (is_set($arFields, "PRODUCT_ID")) { $arFields["PRODUCT_ID"] = IntVal($arFields["PRODUCT_ID"]); } if ((is_set($arFields, "PRODUCT_ID") || $ACTION == "ADD") && IntVal($arFields["PRODUCT_ID"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_PRODUCT_ID_ABSENT'), "PRODUCT_ID"); return false; } if (!array_key_exists('IGNORE_CALLBACK_FUNC', $arFields) || 'Y' != $arFields['IGNORE_CALLBACK_FUNC']) { if (array_key_exists("CALLBACK_FUNC", $arFields) && !empty($arFields["CALLBACK_FUNC"]) || array_key_exists("PRODUCT_PROVIDER_CLASS", $arFields) && !empty($arFields["PRODUCT_PROVIDER_CLASS"])) { /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider(array("MODULE" => $arFields["MODULE"], "PRODUCT_PROVIDER_CLASS" => $arFields["PRODUCT_PROVIDER_CLASS"]))) { $providerParams = array("PRODUCT_ID" => $arFields["PRODUCT_ID"], "QUANTITY" => $arFields["QUANTITY"], "RENEWAL" => $arFields["RENEWAL"], "USER_ID" => isset($arFields["USER_ID"]) ? $arFields["USER_ID"] : 0, "SITE_ID" => isset($arFields["LID"]) ? $arFields["LID"] : false, "BASKET_ID" => $ID); if (isset($arFields['NOTES'])) { $providerParams['NOTES'] = $arFields['NOTES']; } $arPrice = $productProvider::GetProductData($providerParams); unset($providerParams); } else { $arPrice = CSaleBasket::ExecuteCallbackFunction($arFields["CALLBACK_FUNC"], $arFields["MODULE"], $arFields["PRODUCT_ID"], $arFields["QUANTITY"], $arFields["RENEWAL"], $arFields["USER_ID"], $arFields["LID"]); } if (!empty($arPrice) && is_array($arPrice)) { $arFields["PRICE"] = $arPrice["PRICE"]; $arFields["CURRENCY"] = $arPrice["CURRENCY"]; $arFields["CAN_BUY"] = "Y"; $arFields["PRODUCT_PRICE_ID"] = $arPrice["PRODUCT_PRICE_ID"]; $arFields["NOTES"] = $arPrice["NOTES"]; if (!isset($arFields["NAME"])) { $arFields["NAME"] = $arPrice["NAME"]; } } else { $arFields["CAN_BUY"] = "N"; } } } if (is_set($arFields, "PRICE") || $ACTION == "ADD") { $arFields["PRICE"] = str_replace(",", ".", $arFields["PRICE"]); $arFields["PRICE"] = floatval($arFields["PRICE"]); } if (is_set($arFields, "DISCOUNT_PRICE") || $ACTION == "ADD") { $arFields["DISCOUNT_PRICE"] = str_replace(",", ".", $arFields["DISCOUNT_PRICE"]); $arFields["DISCOUNT_PRICE"] = floatval($arFields["DISCOUNT_PRICE"]); } if (is_set($arFields, "VAT_RATE") || $ACTION == "ADD") { $arFields["VAT_RATE"] = str_replace(",", ".", $arFields["VAT_RATE"]); $arFields["VAT_RATE"] = floatval($arFields["VAT_RATE"]); } if ((is_set($arFields, "CURRENCY") || $ACTION == "ADD") && strlen($arFields["CURRENCY"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_CURRENCY_ABSENT'), "CURRENCY"); return false; } if ((is_set($arFields, "LID") || $ACTION == "ADD") && strlen($arFields["LID"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_SITE_ID_ABSENT'), "LID"); return false; } if (is_set($arFields, "ORDER_ID")) { if (!isset($orderList[$arFields["ORDER_ID"]])) { $rsOrders = CSaleOrder::GetList(array(), array('ID' => $arFields["ORDER_ID"]), false, false, array('ID')); if ($arOrder = $rsOrders->Fetch()) { $orderList[$arFields["ORDER_ID"]] = true; } } if (!isset($orderList[$arFields["ORDER_ID"]])) { $APPLICATION->ThrowException(str_replace("#ID#", $arFields["ORDER_ID"], Loc::getMessage("SKGB_NO_ORDER")), "ORDER_ID"); return false; } } if (is_set($arFields, 'CURRENCY')) { $arFields['CURRENCY'] = (string) $arFields['CURRENCY']; if (empty($arFields['CURRENCY'])) { $APPLICATION->ThrowException(str_replace("#ID#", $arFields["CURRENCY"], Loc::getMessage("SKGB_NO_CURRENCY")), "CURRENCY"); return false; } else { if (empty(self::$currencyList)) { $currencyIterator = Currency\CurrencyTable::getList(array('select' => array('CURRENCY'))); while ($currency = $currencyIterator->fetch()) { self::$currencyList[$currency['CURRENCY']] = $currency['CURRENCY']; } } if (!isset(self::$currencyList[$arFields['CURRENCY']])) { $APPLICATION->ThrowException(str_replace("#ID#", $arFields["CURRENCY"], Loc::getMessage("SKGB_NO_CURRENCY")), "CURRENCY"); return false; } } } if (is_set($arFields, "LID")) { $dbSite = CSite::GetByID($arFields["LID"]); if (!$dbSite->Fetch()) { $APPLICATION->ThrowException(str_replace("#ID#", $arFields["LID"], Loc::getMessage("SKGB_NO_SITE")), "LID"); return false; } } if ($ACTION != 'ADD') { $existPrice = array_key_exists('PRICE', $arFields); $existCurrency = array_key_exists('CURRENCY', $arFields) && (string) $arFields['CURRENCY'] != ''; if (!$existPrice || !$existCurrency) { $existSiteId = isset($arFields['LID']) && (string) $arFields['LID'] != ''; if (!$existSiteId) { $select = array('ID', 'LID'); if (!$existPrice) { $select[] = 'PRICE'; } if (!$existCurrency) { $select[] = 'CURRENCY'; } $basketIterator = CSaleBasket::GetList(array(), array('ID' => $ID), false, false, $select); if ($basket = $basketIterator->Fetch()) { if (!$existSiteId) { $arFields['LID'] = $basket['LID']; } if (!$existPrice) { $arFields['PRICE'] = $basket['PRICE']; } if (!$existCurrency) { $arFields['CURRENCY'] = $basket['CURRENCY']; } } unset($basket, $basketIterator, $select); } unset($existSiteId); } unset($existCurrency, $existPrice); } if (!empty($arFields['LID']) && !empty($arFields['CURRENCY'])) { if (!isset(self::$currencySiteList[$arFields['LID']])) { self::$currencySiteList[$arFields['LID']] = CSaleLang::GetLangCurrency($arFields['LID']); } $siteCurrency = self::$currencySiteList[$arFields['LID']]; if ($siteCurrency != $arFields['CURRENCY']) { $arFields["PRICE"] = roundEx(CCurrencyRates::ConvertCurrency($arFields["PRICE"], $arFields["CURRENCY"], $siteCurrency), SALE_VALUE_PRECISION); if (is_set($arFields, "DISCOUNT_PRICE")) { $arFields["DISCOUNT_PRICE"] = roundEx(CCurrencyRates::ConvertCurrency($arFields["DISCOUNT_PRICE"], $arFields["CURRENCY"], $siteCurrency), SALE_VALUE_PRECISION); } $arFields["CURRENCY"] = $siteCurrency; } unset($siteCurrency); } // Changed by Sigurd, 2007-08-16 if (is_set($arFields, "QUANTITY")) { $arFields["QUANTITY"] = floatval($arFields["QUANTITY"]); } if ((is_set($arFields, "QUANTITY") || $ACTION == "ADD") && floatval($arFields["QUANTITY"]) <= 0) { $arFields["QUANTITY"] = 1; } if (is_set($arFields, "DELAY") && $arFields["DELAY"] != "Y") { $arFields["DELAY"] = "N"; } if (is_set($arFields, "CAN_BUY") && $arFields["CAN_BUY"] != "Y") { $arFields["CAN_BUY"] = "N"; } if ((is_set($arFields, "NAME") || $ACTION == "ADD") && strlen($arFields["NAME"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_NAME_ABSENT'), "NAME"); return false; } if ($ACTION == "ADD" && !is_set($arFields, "FUSER_ID")) { $arFields["FUSER_ID"] = CSaleBasket::GetBasketUserID(false); } if ((is_set($arFields, "FUSER_ID") || $ACTION == "ADD") && IntVal($arFields["FUSER_ID"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_FUSER_ID_ABSENT'), "FUSER_ID"); return false; } if (array_key_exists("TYPE", $arFields)) { $arFields["TYPE"] = (int) $arFields["TYPE"]; if ($arFields["TYPE"] != CSaleBasket::TYPE_SET) { unset($arFields["TYPE"]); } } if (array_key_exists('~TYPE', $arFields)) { unset($arFields['~TYPE']); } if (array_key_exists('CATALOG_XML_ID', $arFields)) { $arFields['CATALOG_XML_ID'] = (string) $arFields['CATALOG_XML_ID']; if ($arFields['CATALOG_XML_ID'] === '') { unset($arFields['CATALOG_XML_ID']); if (array_key_exists('~CATALOG_XML_ID', $arFields)) { unset($arFields['~CATALOG_XML_ID']); } } } if (array_key_exists('PROPS', $arFields)) { if (empty($arFields['PROPS']) || !is_array($arFields['PROPS'])) { unset($arFields['PROPS']); } else { $clearPropList = array(); foreach ($arFields['PROPS'] as $basketProperty) { if (empty($basketProperty) || !is_array($basketProperty) || !isset($basketProperty['NAME'])) { continue; } $basketProperty['NAME'] = (string) $basketProperty['NAME']; if ($basketProperty['NAME'] == '') { continue; } $propCode = isset($basketProperty['CODE']) ? (string) $basketProperty['CODE'] : ''; $propValue = isset($basketProperty['VALUE']) ? (string) $basketProperty['VALUE'] : ''; $clearProp = array('NAME' => $basketProperty['NAME'], 'SORT' => isset($basketProperty['SORT']) ? (int) $basketProperty['SORT'] : 100); if ($propCode != '') { $clearProp['CODE'] = $propCode; } if ($propValue != '') { $clearProp['VALUE'] = $propValue; } $clearPropList[] = $clearProp; unset($clearProp, $propValue, $propCode); } unset($basketProperty); if (!empty($clearPropList)) { $arFields['PROPS'] = $clearPropList; } else { unset($arFields['PROPS']); } unset($clearPropList); } } return true; }
function PayUserAccountDeliveryOrderCallback($productID, $userID, $bPaid, $orderID, $quantity = 1) { global $DB; $productID = IntVal($productID); $userID = IntVal($userID); $bPaid = $bPaid ? True : False; $orderID = IntVal($orderID); if ($userID <= 0) { return False; } if ($orderID <= 0) { return False; } if (!($arOrder = CSaleOrder::GetByID($orderID))) { return False; } $baseLangCurrency = CSaleLang::GetLangCurrency($arOrder["LID"]); $arAmount = unserialize(COption::GetOptionString("sale", "pay_amount", 'a:4:{i:1;a:2:{s:6:"AMOUNT";s:2:"10";s:8:"CURRENCY";s:3:"EUR";}i:2;a:2:{s:6:"AMOUNT";s:2:"20";s:8:"CURRENCY";s:3:"EUR";}i:3;a:2:{s:6:"AMOUNT";s:2:"30";s:8:"CURRENCY";s:3:"EUR";}i:4;a:2:{s:6:"AMOUNT";s:2:"40";s:8:"CURRENCY";s:3:"EUR";}}')); if (!array_key_exists($productID, $arAmount)) { return False; } $currentPrice = $arAmount[$productID]["AMOUNT"] * $quantity; $currentCurrency = $arAmount[$productID]["CURRENCY"]; if ($arAmount[$productID]["CURRENCY"] != $baseLangCurrency) { $currentPrice = CCurrencyRates::ConvertCurrency($arAmount[$productID]["AMOUNT"], $arAmount[$productID]["CURRENCY"], $baseLangCurrency) * $quantity; $currentCurrency = $baseLangCurrency; } if (!CSaleUserAccount::UpdateAccount($userID, $bPaid ? $currentPrice : -$currentPrice, $currentCurrency, "MANUAL", $orderID, "Payment to user account")) { return False; } return True; }
function nodeHandler(CDataXML $value) { $value = $value->GetArray(); if(!empty($value[GetMessage("CC_BSC1_DOCUMENT")])) { $value = $value[GetMessage("CC_BSC1_DOCUMENT")]; $arOrder = $this->collectOrderInfo($value); if(!empty($arOrder)) { if(strlen($arOrder["ID"]) <= 0 && strlen($arOrder["ID_1C"]) > 0)//try to search order from 1C { $dbOrder = CSaleOrder::GetList(array("ID" => "DESC"), array("ID_1C" => $arOrder["ID_1C"]), false, false, array("ID", "ID_1C")); if($orderInfo = $dbOrder->Fetch()) { $arOrder["ID"] = $orderInfo["ID"]; } } if(strlen($arOrder["ID"]) > 0) // exists site order { $dbOrder = CSaleOrder::GetList(array(), array("ACCOUNT_NUMBER" => $arOrder["ID"]), false, false, array("ID", "LID", "PERSON_TYPE_ID", "PAYED", "DATE_PAYED", "CANCELED", "DATE_CANCELED", "REASON_CANCELED", "STATUS_ID", "DATE_STATUS", "PAY_VOUCHER_NUM", "PAY_VOUCHER_DATE", "PRICE_DELIVERY", "ALLOW_DELIVERY", "DATE_ALLOW_DELIVERY", "PRICE", "CURRENCY", "DISCOUNT_VALUE", "USER_ID", "PAY_SYSTEM_ID", "DELIVERY_ID", "DATE_INSERT", "DATE_INSERT_FORMAT", "DATE_UPDATE", "USER_DESCRIPTION", "ADDITIONAL_INFO", "COMMENTS", "TAX_VALUE", "DELIVERY_DOC_NUM", "DELIVERY_DOC_DATE", "STORE_ID", "ACCOUNT_NUMBER", "VERSION", "VERSION_1C", "ID_1C")); if($orderInfo = $dbOrder->Fetch()) { if($arOrder["VERSION_1C"] != $orderInfo["VERSION_1C"] || (strlen($orderInfo["VERSION_1C"]) <= 0 || strlen($arOrder["VERSION_1C"]) <= 0)) // skip update if the same version { $arOrderFields = array(); $orderId = $orderInfo["ID"]; CSaleOrderChange::AddRecord($orderId, "ORDER_1C_IMPORT"); if($arOrder["ID_1C"] != $orderInfo["ID_1C"]) $arOrderFields["ID_1C"] = $arOrder["ID_1C"]; $arOrderFields["VERSION_1C"] = $arOrder["VERSION_1C"]; if($orderInfo["PAYED"] != "Y" && $orderInfo["ALLOW_DELIVERY"] != "Y" && $orderInfo["STATUS_ID"] != "F") { $dbOrderTax = CSaleOrderTax::GetList( array(), array("ORDER_ID" => $orderId), false, false, array("ID", "TAX_NAME", "VALUE", "VALUE_MONEY", "CODE", "IS_IN_PRICE") ); $bTaxFound = false; if($arOrderTax = $dbOrderTax->Fetch()) { $bTaxFound = true; if(IntVal($arOrderTax["VALUE_MONEY"]) != IntVal($arOrder["TAX"]["VALUE_MONEY"]) || IntVal($arOrderTax["VALUE"]) != IntVal($arOrder["TAX"]["VALUE"]) || ($arOrderTax["IS_IN_PRICE"] != $arOrder["TAX"]["IS_IN_PRICE"])) { if(IntVal($arOrder["TAX"]["VALUE"])>0) { $arFields = Array( "TAX_NAME" => $arOrder["TAX"]["NAME"], "ORDER_ID" => $orderId, "VALUE" => $arOrder["TAX"]["VALUE"], "IS_PERCENT" => "Y", "IS_IN_PRICE" => $arOrder["TAX"]["IS_IN_PRICE"], "VALUE_MONEY" => $arOrder["TAX"]["VALUE_MONEY"], "CODE" => "VAT1C", "APPLY_ORDER" => "100" ); CSaleOrderTax::Update($arOrderTax["ID"], $arFields); $arOrderFields["TAX_VALUE"] = $arOrder["TAX"]["VALUE_MONEY"]; } else { CSaleOrderTax::Delete($arOrderTax["ID"]); $arOrderFields["TAX_VALUE"] = 0; } } } if(!$bTaxFound) { if(IntVal($arOrder["TAX"]["VALUE"])>0) { $arFields = Array( "TAX_NAME" => $arOrder["TAX"]["NAME"], "ORDER_ID" => $orderId, "VALUE" => $arOrder["TAX"]["VALUE"], "IS_PERCENT" => "Y", "IS_IN_PRICE" => $arOrder["TAX"]["IS_IN_PRICE"], "VALUE_MONEY" => $arOrder["TAX"]["VALUE_MONEY"] ); CSaleOrderTax::Add($arFields); $arOrderFields["TAX_VALUE"] = $arOrder["TAX"]["VALUE_MONEY"]; } } $arShoppingCart = array(); $bNeedUpdate = false; $dbBasket = CSaleBasket::GetList( array("NAME" => "ASC"), array("ORDER_ID" => $orderId), false, false, array( "ID", "QUANTITY", "CANCEL_CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "PRODUCT_PROVIDER_CLASS", "RESERVED", "RESERVE_QUANTITY", "TYPE", "SET_PARENT_ID", "PRICE", "VAT_RATE", "DISCOUNT_PRICE", "PRODUCT_XML_ID", ) ); while ($arBasket = $dbBasket->Fetch()) { $arFields = Array(); if(!empty($arOrder["items"][$arBasket["PRODUCT_XML_ID"]])) { if($arBasket["QUANTITY"] != $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["QUANTITY"]) $arFields["QUANTITY"] = $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["QUANTITY"]; if($arBasket["PRICE"] != $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["PRICE"]) $arFields["PRICE"] = $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["PRICE"]; if($arBasket["VAT_RATE"] != $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["VAT_RATE"]) $arFields["VAT_RATE"] = $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["VAT_RATE"]; if($arBasket["DISCOUNT_PRICE"] != $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["DISCOUNT_PRICE"]) $arFields["DISCOUNT_PRICE"] = $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["DISCOUNT_PRICE"]; if(count($arFields)>0) { $arFields["ID"] = $arBasket["ID"]; if(DoubleVal($arFields["QUANTITY"]) <= 0) $arFields["QUANTITY"] = $arBasket["QUANTITY"]; $bNeedUpdate = true; $arShoppingCart[] = $arFields; } else { $arShoppingCart[] = $arBasket; } //CSaleBasket::Update($arBasket["ID"], $arFields); $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["CHECKED"] = "Y"; } else { if($arOrder["TRAITS"][GetMessage("CC_BSC1_CANCELED")] != "true" && $orderInfo["CANCELED"] == "N") { $bNeedUpdate = true; //CSaleBasket::Delete($arBasket["ID"]); } } } if(!empty($arOrder["items"])) { foreach ($arOrder["items"] as $itemID => $arItem) { if ($arItem["CHECKED"] != "Y") { if ($arItem["TYPE"] == GetMessage("CC_BSC1_ITEM")) { if ($arBasketFields = $this->prepareProduct4Basket($itemID, $arItem, $orderId, $orderInfo)) { $arShoppingCart[] = $arBasketFields; $bNeedUpdate = true; } } elseif ($arItem["TYPE"] == GetMessage("CC_BSC1_SERVICE")) { if (IntVal($arItem["PRICE"]) != IntVal($orderInfo["PRICE_DELIVERY"])) $arOrderFields["PRICE_DELIVERY"] = $arItem["PRICE"]; } } } } if($bNeedUpdate) { $arErrors = array(); CSaleBasket::DoSaveOrderBasket($orderId, $orderInfo["LID"], $orderInfo["USER_ID"], $arShoppingCart, $arErrors); } if(DoubleVal($arOrder["AMOUNT"]) > 0 && $arOrder["AMOUNT"] != $orderInfo["PRICE"]) $arOrderFields["PRICE"] = $arOrder["AMOUNT"]; if(DoubleVal($orderInfo["DISCOUNT_VALUE"]) > 0) $arOrderFields["DISCOUNT_VALUE"] = 0; if(strlen($arOrder["COMMENT"]) > 0 && $arOrder["COMMENT"] != $orderInfo["COMMENTS"]) $arOrderFields["COMMENTS"] = $arOrder["COMMENT"]; $arOrderFields["UPDATED_1C"] = "Y"; if(!empty($arOrderFields)) CSaleOrder::Update($orderId, $arOrderFields); } else { $this->strError .= "\n".GetMessage("CC_BSC1_FINAL_NOT_EDIT", Array("#ID#" => $orderId)); } } $arAditFields = Array(); if($arOrder["TRAITS"][GetMessage("CC_BSC1_CANCELED")] == "true") { if($orderInfo["CANCELED"] == "N") CSaleOrder::CancelOrder($orderInfo["ID"], "Y", $arOrder["COMMENT"]); $arAditFields["UPDATED_1C"] = "Y"; } else { if(strlen($arOrder["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_DATE")])>1) { if($orderInfo["PAYED"]=="N") CSaleOrder::PayOrder($orderInfo["ID"], "Y"); $arAditFields["PAY_VOUCHER_DATE"] = CDatabase::FormatDate(str_replace("T", " ", $arOrder["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_DATE")]), "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANG)); if(strlen($arOrder["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_NUM")])>0) $arAditFields["PAY_VOUCHER_NUM"] = $arOrder["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_NUM")]; $arAditFields["UPDATED_1C"] = "Y"; } if(strlen($arOrder["TRAITS"][GetMessage("CC_BSC1_1C_DELIVERY_DATE")])>1) { if($orderInfo["ALLOW_DELIVERY"]=="N") CSaleOrder::DeliverOrder($orderInfo["ID"], "Y"); $arAditFields["DATE_ALLOW_DELIVERY"] = CDatabase::FormatDate(str_replace("T", " ", $arOrder["TRAITS"][GetMessage("CC_BSC1_1C_DELIVERY_DATE")]), "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANG)); if(strlen($this->arParams["FINAL_STATUS_ON_DELIVERY"])>0 && $orderInfo["STATUS_ID"] != "F" && $orderInfo["STATUS_ID"] != $this->arParams["FINAL_STATUS_ON_DELIVERY"]) CSaleOrder::StatusOrder($orderInfo["ID"], $this->arParams["FINAL_STATUS_ON_DELIVERY"]); $arAditFields["UPDATED_1C"] = "Y"; } } if(count($arAditFields)>0) CSaleOrder::Update($orderInfo["ID"], $arAditFields); } else $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_NOT_FOUND", Array("#ID#" => $arOrder["ID"])); } elseif($this->arParams["IMPORT_NEW_ORDERS"] == "Y") // create new order (ofline 1C) { if(!empty($arOrder["AGENT"]) && strlen($arOrder["AGENT"]["ID"]) > 0) { $arOrder["PERSON_TYPE_ID"] = 0; $arOrder["USER_ID"] = 0; $arErrors = array(); $dbUProp = CSaleOrderUserProps::GetList(array(), array("XML_ID" => $arOrder["AGENT"]["ID"]), false, false, array("ID", "NAME", "USER_ID", "PERSON_TYPE_ID", "XML_ID", "VERSION_1C")); if($arUProp = $dbUProp->Fetch()) { $arOrder["USER_ID"] = $arUProp["USER_ID"]; $arOrder["PERSON_TYPE_ID"] = $arUProp["PERSON_TYPE_ID"]; $arOrder["USER_PROFILE_ID"] = $arUProp["ID"]; $arOrder["USER_PROFILE_VERSION"] = $arUProp["VERSION_1C"]; $dbUPropValue = CSaleOrderUserPropsValue::GetList(array(), array("USER_PROPS_ID" => $arUProp["ID"])); while($arUPropValue = $dbUPropValue->Fetch()) { $arOrder["USER_PROPS"][$arUPropValue["ORDER_PROPS_ID"]] = $arUPropValue["VALUE"]; } } else { if(strlen($arOrder["AGENT"]["ID"]) > 0) { $arAI = explode("#", $arOrder["AGENT"]["ID"]); if(IntVal($arAI[0]) > 0) { $dbUser = CUser::GetByID($arAI[0]); if($arU = $dbUser->Fetch()) { if(htmlspecialcharsback(substr(htmlspecialcharsbx($arU["ID"]."#".$arU["LOGIN"]."#".$arU["LAST_NAME"]." ".$arU["NAME"]." ".$arU["SECOND_NAME"]), 0, 80)) == $arOrder["AGENT"]["ID"]) { $arOrder["USER_ID"] = $arU["ID"]; } } } } if(IntVal($arOrder["USER_ID"]) <= 0) { //create new user $arUser = array( "NAME" => $arOrder["AGENT"]["ITEM_NAME"], "EMAIL" => $arOrder["AGENT"]["CONTACT"]["MAIL_NEW"], ); if (strlen($arUser["NAME"]) <= 0) $arUser["NAME"] = $arOrder["AGENT"]["CONTACT"]["CONTACT_PERSON"]; if (strlen($arUser["EMAIL"]) <= 0) $arUser["EMAIL"] = "buyer".time().GetRandomCode(2)."@".$_SERVER["SERVER_NAME"]; $arOrder["USER_ID"] = CSaleUser::DoAutoRegisterUser($arUser["EMAIL"], $arUser["NAME"], $this->arParams["SITE_NEW_ORDERS"], $arErrors); } } if(empty($this->arPersonTypesIDs)) { $dbPT = CSalePersonType::GetList(array(), array("ACTIVE" => "Y", "LIDS" => $this->arParams["SITE_NEW_ORDERS"])); while($arPT = $dbPT->Fetch()) { $this->arPersonTypesIDs[] = $arPT["ID"]; } } if(empty($this->arExportInfo)) { $dbExport = CSaleExport::GetList(array(), array("PERSON_TYPE_ID" => $this->arPersonTypesIDs)); while($arExport = $dbExport->Fetch()) { $this->arExportInfo[$arExport["PERSON_TYPE_ID"]] = unserialize($arExport["VARS"]); } } if(IntVal($arOrder["PERSON_TYPE_ID"]) <= 0) { foreach($this->arExportInfo as $pt => $value) { if( (($value["IS_FIZ"] == "Y" && $arOrder["AGENT"]["TYPE"] == "FIZ") || ($value["IS_FIZ"] == "N" && $arOrder["AGENT"]["TYPE"] != "FIZ")) ) $arOrder["PERSON_TYPE_ID"] = $pt; } } if(IntVal($arOrder["PERSON_TYPE_ID"]) > 0) { $arAgent = $this->arExportInfo[$arOrder["PERSON_TYPE_ID"]]; foreach($arAgent as $k => $v) { if((strlen($v["VALUE"]) <= 0 || $v["TYPE"] != "PROPERTY") && (empty($arOrder["USER_PROPS"]) || empty($arOrder["USER_PROPS"][$v["VALUE"]]))) unset($arAgent[$k]); } if(IntVal($arOrder["USER_ID"]) > 0) { $orderFields = array( "SITE_ID" => $this->arParams["SITE_NEW_ORDERS"], "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "PAYED" => "N", "CANCELED" => "N", "STATUS_ID" => "N", "PRICE" => $arOrder["AMOUNT"], "CURRENCY" => CSaleLang::GetLangCurrency($this->arParams["SITE_NEW_ORDERS"]), "USER_ID" => $arOrder["USER_ID"], "TAX_VALUE" => doubleval($arOrder["TAX"]["VALUE_MONEY"]), "COMMENTS" => $arOrder["COMMENT"], "BASKET_ITEMS" => array(), "TAX_LIST" => array(), "ORDER_PROP" => array(), ); $arAditFields = array( "EXTERNAL_ORDER" => "Y", "ID_1C" => $arOrder["ID_1C"], "VERSION_1C" => $arOrder["VERSION_1C"], "UPDATED_1C" => "Y", "DATE_INSERT" => CDatabase::FormatDate($arOrder["DATE"]." ".$arOrder["TIME"], "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANG)), ); foreach($arOrder["items"] as $productID => $val) { $orderFields["BASKET_ITEMS"][] = $this->prepareProduct4Basket($productID, $val, false, $orderFields); } if(!empty($arOrder["TAX"])) { $orderFields["TAX_LIST"][] = array( "NAME" => $arOrder["TAX"]["NAME"], "IS_PERCENT" => "Y", "VALUE" => $arOrder["TAX"]["VALUE"], "VALUE_MONEY" => $arOrder["TAX"]["VALUE_MONEY"], "IS_IN_PRICE" => $arOrder["TAX"]["IS_IN_PRICE"], ); } foreach($arAgent as $k => $v) { if(!empty($arOrder["ORDER_PROPS"][$k])) { $orderFields["ORDER_PROP"][$v["VALUE"]] = $arOrder["ORDER_PROPS"][$k]; } if(empty($orderFields["ORDER_PROP"][$v["VALUE"]]) && !empty($arOrder["USER_PROPS"][$v["VALUE"]])) { $orderFields["ORDER_PROP"][$v["VALUE"]] = $arOrder["USER_PROPS"][$v["VALUE"]]; } } if($arOrder["ID"] = CSaleOrder::DoSaveOrder($orderFields, $arAditFields, 0, $arErrors)) { $arAditFields = array("UPDATED_1C" => "Y"); CSaleOrder::Update($arOrder["ID"], $arAditFields); //add/update user profile if(IntVal($arOrder["USER_PROFILE_ID"]) > 0) { if($arOrder["USER_PROFILE_VERSION"] != $arOrder["AGENT"]["VERSION"]) CSaleOrderUserProps::Update($arOrder["USER_PROFILE_ID"], array("VERSION_1C" => $arOrder["AGENT"]["VERSION"], "NAME" => $arOrder["AGENT"]["AGENT_NAME"])); $dbUPV = CSaleOrderUserPropsValue::GetList(array(), array("USER_PROPS_ID" =>$arOrder["USER_PROFILE_ID"])); while($arUPV = $dbUPV->Fetch()) { $arOrder["AGENT"]["PROFILE_PROPS_VALUE"][$arUPV["ORDER_PROPS_ID"]] = array("ID" => $arUPV["ID"], "VALUE" => $arUPV["VALUE"]); } } if(IntVal($arOrder["USER_PROFILE_ID"]) <= 0 || (IntVal($arOrder["USER_PROFILE_ID"]) > 0 && $arOrder["USER_PROFILE_VERSION"] != $arOrder["AGENT"]["VERSION"])) { $dbOrderProperties = CSaleOrderProps::GetList( array("SORT" => "ASC"), array( "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "ACTIVE" => "Y", "UTIL" => "N", "USER_PROPS" => "Y", ), false, false, array("ID", "TYPE", "NAME", "CODE", "USER_PROPS", "SORT", "MULTIPLE") ); while ($arOrderProperties = $dbOrderProperties->Fetch()) { $curVal = $orderFields["ORDER_PROP"][$arOrderProperties["ID"]]; if (strlen($curVal) > 0) { if (IntVal($arOrder["USER_PROFILE_ID"]) <= 0) { $arFields = array( "NAME" => $arOrder["AGENT"]["AGENT_NAME"], "USER_ID" => $arOrder["USER_ID"], "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "XML_ID" => $arOrder["AGENT"]["ID"], "VERSION_1C" => $arOrder["AGENT"]["VERSION"], ); $arOrder["USER_PROFILE_ID"] = CSaleOrderUserProps::Add($arFields); } if(IntVal($arOrder["USER_PROFILE_ID"]) > 0) { $arFields = array( "USER_PROPS_ID" => $arOrder["USER_PROFILE_ID"], "ORDER_PROPS_ID" => $arOrderProperties["ID"], "NAME" => $arOrderProperties["NAME"], "VALUE" => $curVal ); if(empty($arOrder["AGENT"]["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]])) { CSaleOrderUserPropsValue::Add($arFields); } elseif($arOrder["AGENT"]["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]]["VALUE"] != $curVal) { CSaleOrderUserPropsValue::Update($arOrder["AGENT"]["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]]["ID"], $arFields); } } } } } } else { $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_ADD_PROBLEM", Array("#ID#" => $arOrder["ID_1C"])); } } else { $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_USER_PROBLEM", Array("#ID#" => $arOrder["ID_1C"])); if(!empty($arErrors)) { foreach($arErrors as $v) { $this->strError .= "\n".$v["TEXT"]; } } } } else { $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_PERSON_TYPE_PROBLEM", Array("#ID#" => $arOrder["ID_1C"])); } } else { $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_NO_AGENT_ID", Array("#ID#" => $arOrder["ID_1C"])); } } } } elseif($this->arParams["IMPORT_NEW_ORDERS"] == "Y") { $value = $value[GetMessage("CC_BSC1_AGENT")]["#"]; $arAgentInfo = $this->collectAgentInfo($value); if(!empty($arAgentInfo["AGENT"])) { $mode = false; $arErrors = array(); $dbUProp = CSaleOrderUserProps::GetList(array(), array("XML_ID" => $arAgentInfo["AGENT"]["ID"]), false, false, array("ID", "NAME", "USER_ID", "PERSON_TYPE_ID", "XML_ID", "VERSION_1C")); if($arUProp = $dbUProp->Fetch()) { if($arUProp["VERSION_1C"] != $arAgentInfo["AGENT"]["VERSION"]) { $mode = "update"; $arAgentInfo["PROFILE_ID"] = $arUProp["ID"]; $arAgentInfo["PERSON_TYPE_ID"] = $arUProp["PERSON_TYPE_ID"]; } } else { $arUser = array( "NAME" => $arAgentInfo["AGENT"]["ITEM_NAME"], "EMAIL" => $arAgentInfo["AGENT"]["CONTACT"]["MAIL_NEW"], ); if(strlen($arUser["NAME"]) <= 0) $arUser["NAME"] = $arAgentInfo["AGENT"]["CONTACT"]["CONTACT_PERSON"]; $emServer = $_SERVER["SERVER_NAME"]; if(strpos($_SERVER["SERVER_NAME"], ".") === false) $emServer .= ".bx"; if(strlen($arUser["EMAIL"]) <= 0) $arUser["EMAIL"] = "buyer".time().GetRandomCode(2)."@".$emServer; $arAgentInfo["USER_ID"] = CSaleUser::DoAutoRegisterUser($arUser["EMAIL"], $arUser["NAME"], $this->arParams["SITE_NEW_ORDERS"], $arErrors); if(IntVal($arAgentInfo["USER_ID"]) > 0) { $mode = "add"; } else { $this->strError .= "\n".GetMessage("CC_BSC1_AGENT_USER_PROBLEM", Array("#ID#" => $arAgentInfo["AGENT"]["ID"])); if(!empty($arErrors)) { foreach($arErrors as $v) { $this->strError .= "\n".$v["TEXT"]; } } } } if($mode) { if(empty($this->arPersonTypesIDs)) { $dbPT = CSalePersonType::GetList(array(), array("ACTIVE" => "Y", "LIDS" => $this->arParams["SITE_NEW_ORDERS"])); while($arPT = $dbPT->Fetch()) { $this->arPersonTypesIDs[] = $arPT["ID"]; } } if(empty($this->arExportInfo)) { $dbExport = CSaleExport::GetList(array(), array("PERSON_TYPE_ID" => $this->arPersonTypesIDs)); while($arExport = $dbExport->Fetch()) { $this->arExportInfo[$arExport["PERSON_TYPE_ID"]] = unserialize($arExport["VARS"]); } } if(IntVal($arAgentInfo["PERSON_TYPE_ID"]) <= 0) { foreach($this->arExportInfo as $pt => $value) { if(($value["IS_FIZ"] == "Y" && $arAgentInfo["AGENT"]["TYPE"] == "FIZ") || ($value["IS_FIZ"] == "N" && $arAgentInfo["AGENT"]["TYPE"] != "FIZ") ) $arAgentInfo["PERSON_TYPE_ID"] = $pt; } } if(IntVal($arAgentInfo["PERSON_TYPE_ID"]) > 0) { $arAgentInfo["ORDER_PROPS_VALUE"] = array(); $arAgentInfo["PROFILE_PROPS_VALUE"] = array(); $arAgent = $this->arExportInfo[$arAgentInfo["PERSON_TYPE_ID"]]; foreach($arAgent as $k => $v) { if(strlen($v["VALUE"]) <= 0 || $v["TYPE"] != "PROPERTY") unset($arAgent[$k]); } foreach($arAgent as $k => $v) { if(!empty($arAgentInfo["ORDER_PROPS"][$k])) $arAgentInfo["ORDER_PROPS_VALUE"][$v["VALUE"]] = $arAgentInfo["ORDER_PROPS"][$k]; } if (IntVal($arAgentInfo["PROFILE_ID"]) > 0) { CSaleOrderUserProps::Update($arUProp["ID"], array("VERSION_1C" => $arAgentInfo["AGENT"]["VERSION"], "NAME" => $arAgentInfo["AGENT"]["AGENT_NAME"])); $dbUPV = CSaleOrderUserPropsValue::GetList(array(), array("USER_PROPS_ID" => $arAgentInfo["PROFILE_ID"])); while($arUPV = $dbUPV->Fetch()) { $arAgentInfo["PROFILE_PROPS_VALUE"][$arUPV["ORDER_PROPS_ID"]] = array("ID" => $arUPV["ID"], "VALUE" => $arUPV["VALUE"]); } } if(empty($this->arOrderProps[$arAgentInfo["PERSON_TYPE_ID"]])) { $dbOrderProperties = CSaleOrderProps::GetList( array("SORT" => "ASC"), array( "PERSON_TYPE_ID" => $arAgentInfo["PERSON_TYPE_ID"], "ACTIVE" => "Y", "UTIL" => "N", "USER_PROPS" => "Y", ), false, false, array("ID", "TYPE", "NAME", "CODE", "USER_PROPS", "SORT", "MULTIPLE") ); while ($arOrderProperties = $dbOrderProperties->Fetch()) { $this->arOrderProps[$arAgentInfo["PERSON_TYPE_ID"]][] = $arOrderProperties; } } foreach($this->arOrderProps[$arAgentInfo["PERSON_TYPE_ID"]] as $arOrderProperties) { $curVal = $arAgentInfo["ORDER_PROPS_VALUE"][$arOrderProperties["ID"]]; if (strlen($curVal) > 0) { if (IntVal($arAgentInfo["PROFILE_ID"]) <= 0) { $arFields = array( "NAME" => $arAgentInfo["AGENT"]["AGENT_NAME"], "USER_ID" => $arAgentInfo["USER_ID"], "PERSON_TYPE_ID" => $arAgentInfo["PERSON_TYPE_ID"], "XML_ID" => $arAgentInfo["AGENT"]["ID"], "VERSION_1C" => $arAgentInfo["AGENT"]["VERSION"], ); $arAgentInfo["PROFILE_ID"] = CSaleOrderUserProps::Add($arFields); } if(IntVal($arAgentInfo["PROFILE_ID"]) > 0) { $arFields = array( "USER_PROPS_ID" => $arAgentInfo["PROFILE_ID"], "ORDER_PROPS_ID" => $arOrderProperties["ID"], "NAME" => $arOrderProperties["NAME"], "VALUE" => $curVal ); if(empty($arAgentInfo["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]])) { CSaleOrderUserPropsValue::Add($arFields); } elseif($arAgentInfo["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]]["VALUE"] != $curVal) { CSaleOrderUserPropsValue::Update($arAgentInfo["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]]["ID"], $arFields); } } } } } else { $this->strError .= "\n".GetMessage("CC_BSC1_AGENT_PERSON_TYPE_PROBLEM", Array("#ID#" => $arAgentInfo["AGENT"]["ID"])); } } } else { $this->strError .= "\n".GetMessage("CC_BSC1_AGENT_NO_AGENT_ID"); } } }
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule("sale") || !CModule::IncludeModule("currency")) { return false; } $saleModulePermissions = $GLOBALS["APPLICATION"]->GetGroupRight("sale"); if (intval($arGadgetParams["ITEMS_COUNT"]) <= 0 || intval($arGadgetParams["ITEMS_COUNT"]) > 40) { $arGadgetParams["ITEMS_COUNT"] = 10; } if (strlen($arGadgetParams["SITE_ID"]) > 0) { $arGadgetParams["SITE_CURRENCY"] = CSaleLang::GetLangCurrency($arGadgetParams["SITE_ID"]); if (strlen($arGadgetParams["TITLE_STD"]) <= 0) { $rsSites = CSite::GetByID($arGadgetParams["SITE_ID"]); if ($arSite = $rsSites->GetNext()) { $arGadget["TITLE"] .= " / [" . $arSite["ID"] . "] " . $arSite["NAME"]; } } } else { $arGadgetParams["SITE_CURRENCY"] = CCurrency::GetBaseCurrency(); } $arGadgetParams["RND_STRING"] = randString(8); $arOrderStats = array(); $arOrders = array(); $arCurUsed = array(); if (strlen($arGadgetParams["SITE_ID"]) > 0) { $arFilterLID = array("LID" => $arGadgetParams["SITE_ID"]); } else { $arFilterLID = array();
$val = $_REQUEST["FIELDS"][$f_ID]["BASE_RATE_CURRENCY"]; } else { $val = $f_BASE_RATE_CURRENCY; } } $fieldEdit .= "<select name=\"FIELDS[" . $f_ID . "][BASE_RATE_CURRENCY]\">"; foreach ($arCurrencies as $key => $value) { $fieldEdit .= "<option value=\"" . $key . "\"" . ($key == $val ? " selected" : "") . ">" . $value . "</option>"; } $fieldEdit .= "</select>"; $row->AddField("RATE", $fieldValue, $fieldEdit); if ($affiliatePlanType == "N") { $fieldValue = IntVal($f_MIN_PLAN_VALUE) . " " . GetMessage("SAP1_SHT"); } else { if (!array_key_exists($f_SITE_ID, $arBaseLangCurrencies)) { $arBaseLangCurrencies[$f_SITE_ID] = CSaleLang::GetLangCurrency($f_SITE_ID); } $fieldValue = SaleFormatCurrency($f_MIN_PLAN_VALUE, $arBaseLangCurrencies[$f_SITE_ID]); } if ($row->VarsFromForm() && $_REQUEST["FIELDS"]) { $val = $_REQUEST["FIELDS"][$f_ID]["MIN_PLAN_VALUE"]; } else { $val = $f_MIN_PLAN_VALUE; } $fieldEdit = "<input type=\"text\" name=\"FIELDS[" . $f_ID . "][MIN_PLAN_VALUE]\" value=\"" . htmlspecialcharsbx($val) . "\" size=\"7\"> "; $row->AddField("MIN_PLAN_VALUE", $fieldValue, $fieldEdit); $arActions = array(); $arActions[] = array("ICON" => "edit", "TEXT" => GetMessage("SAP1_UPDATE"), "ACTION" => $lAdmin->ActionRedirect("sale_affiliate_plan_edit.php?ID=" . $f_ID . "&lang=" . LANG . GetFilterParams("filter_") . ""), "DEFAULT" => true); if ($saleModulePermissions >= "W") { $arActions[] = array("SEPARATOR" => true); $arActions[] = array("ICON" => "delete", "TEXT" => GetMessage("SAP1_DELETE"), "ACTION" => "if(confirm('" . GetMessage("SAP1_DELETE_CONF") . "')) " . $lAdmin->ActionDoGroup($f_ID, "delete"));
public function getBasketItems() { global $APPLICATION; if (self::$catalogIncluded === null) { self::$catalogIncluded = Loader::includeModule('catalog'); } self::$iblockIncluded = self::$catalogIncluded; CSaleBasket::UpdateBasketPrices(CSaleBasket::GetBasketUserID(), SITE_ID); $bShowReady = false; $bShowDelay = false; $bShowSubscribe = false; $bShowNotAvail = false; $allSum = 0; $allWeight = 0; $allCurrency = CSaleLang::GetLangCurrency(SITE_ID); $allVATSum = 0; $arParents = array(); $arResult["ITEMS"]["AnDelCanBuy"] = array(); $arResult["ITEMS"]["DelDelCanBuy"] = array(); $arResult["ITEMS"]["nAnCanBuy"] = array(); $arResult["ITEMS"]["ProdSubscribe"] = array(); $DISCOUNT_PRICE_ALL = 0; // BASKET PRODUCTS (including measures, ratio, iblock properties data) $arImgFields = array("PREVIEW_PICTURE", "DETAIL_PICTURE"); $arBasketItems = array(); $basketKey = 0; $basketIds = array(); $arSku2Parent = array(); $arSetParentWeight = array(); $arElementId = array(); $dbItems = CSaleBasket::GetList(array("ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"), false, false, array("ID", "NAME", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "DETAIL_PAGE_URL", "NOTES", "CURRENCY", "VAT_RATE", "CATALOG_XML_ID", "PRODUCT_XML_ID", "SUBSCRIBE", "DISCOUNT_PRICE", "PRODUCT_PROVIDER_CLASS", "TYPE", "SET_PARENT_ID")); while ($arItem = $dbItems->GetNext()) { $arItem['PROPS'] = array(); $arBasketItems[$basketKey] = $arItem; $basketIds[$arItem['ID']] =& $arBasketItems[$basketKey]; $basketKey++; if (CSaleBasketHelper::isSetItem($arItem)) { continue; } $arElementId[] = $arItem["PRODUCT_ID"]; } if (!empty($arElementId) && self::$catalogIncluded) { $productList = CCatalogSKU::getProductList($arElementId); if (!empty($productList)) { foreach ($productList as $offerId => $offerInfo) { $offerInfo['PRODUCT_ID'] = $offerInfo['ID']; $arElementId[] = $offerInfo['ID']; $arSku2Parent[$offerId] = $offerInfo['ID']; $arParents[$offerId] = $offerInfo; } unset($offerInfo, $offerId); } unset($productList); // get measures, ratio, sku props data and available quantity $arBasketItems = getMeasures($arBasketItems); $arBasketItems = getRatio($arBasketItems); $arBasketItems = $this->getAvailableQuantity($arBasketItems); $propsIterator = CSaleBasket::GetPropsList(array('BASKET_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'ASC'), array('BASKET_ID' => array_keys($basketIds))); while ($property = $propsIterator->GetNext()) { $property['CODE'] = (string) $property['CODE']; if ($property['CODE'] == 'CATALOG.XML_ID' || $property['CODE'] == 'PRODUCT.XML_ID') { continue; } if (!isset($basketIds[$property['BASKET_ID']])) { continue; } $basketIds[$property['BASKET_ID']]['PROPS'][] = $property; } unset($property, $propsIterator, $basketIds); } // get product properties data $arProductData = getProductProps($arElementId, array_merge(array("ID"), $arImgFields, $this->arCustomSelectFields)); foreach ($arBasketItems as &$arItem) { $quantityIsFloat = false; if (number_format(doubleval($arItem['QUANTITY']), 2, '.', '') != intval($arItem['QUANTITY'])) { $quantityIsFloat = true; } $arItem["QUANTITY"] = $quantityIsFloat === false && $this->quantityFloat != "Y" ? intval($arItem['QUANTITY']) : number_format(doubleval($arItem['QUANTITY']), 2, '.', ''); $arItem["PRICE_VAT_VALUE"] = $arItem["PRICE"] / ($arItem["VAT_RATE"] + 1) * $arItem["VAT_RATE"]; $arItem["PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arItem["PRICE"], $arItem["CURRENCY"], true); $arItem["WEIGHT"] = doubleval($arItem["WEIGHT"]); $arItem["WEIGHT_FORMATED"] = roundEx(doubleval($arItem["WEIGHT"] / $this->weightKoef), SALE_WEIGHT_PRECISION) . " " . $this->weightUnit; if (CSaleBasketHelper::isSetItem($arItem)) { $arSetParentWeight[$arItem["SET_PARENT_ID"]] += $arItem["WEIGHT"] * $arItem["QUANTITY"]; } if (isset($arProductData[$arItem['PRODUCT_ID']]) && is_array($arProductData[$arItem['PRODUCT_ID']])) { foreach ($arProductData[$arItem["PRODUCT_ID"]] as $key => $value) { if (strpos($key, "PROPERTY_") !== false || in_array($key, $arImgFields)) { $arItem[$key] = $value; } } } if (array_key_exists($arItem["PRODUCT_ID"], $arSku2Parent)) { $arFieldsToFill = array_merge($this->arCustomSelectFields, $arImgFields); // fields to be filled with parents' values if empty foreach ($arFieldsToFill as $field) { $fieldVal = in_array($field, $arImgFields) ? $field : $field . "_VALUE"; $parentId = $arSku2Parent[$arItem["PRODUCT_ID"]]; if ((!isset($arItem[$fieldVal]) || isset($arItem[$fieldVal]) && strlen($arItem[$fieldVal]) == 0) && (isset($arProductData[$parentId][$fieldVal]) && !empty($arProductData[$parentId][$fieldVal]))) { $arItem[$fieldVal] = $arProductData[$parentId][$fieldVal]; } } } foreach ($arItem as $key => $value) { if (strpos($key, "PROPERTY_", 0) === 0 && strrpos($key, "_VALUE") == strlen($key) - 6) { $code = str_replace(array("PROPERTY_", "_VALUE"), "", $key); $propData = $this->arIblockProps[$code]; $arItem[$key] = CSaleHelper::getIblockPropInfo($value, $propData); } } $arItem["PREVIEW_PICTURE_SRC"] = ""; if (isset($arItem["PREVIEW_PICTURE"]) && intval($arItem["PREVIEW_PICTURE"]) > 0) { $arImage = CFile::GetFileArray($arItem["PREVIEW_PICTURE"]); if ($arImage) { $arFileTmp = CFile::ResizeImageGet($arImage, array("width" => "110", "height" => "110"), BX_RESIZE_IMAGE_PROPORTIONAL, true); $arItem["PREVIEW_PICTURE_SRC"] = $arFileTmp["src"]; } } $arItem["DETAIL_PICTURE_SRC"] = ""; if (isset($arItem["DETAIL_PICTURE"]) && intval($arItem["DETAIL_PICTURE"]) > 0) { $arImage = CFile::GetFileArray($arItem["DETAIL_PICTURE"]); if ($arImage) { $arFileTmp = CFile::ResizeImageGet($arImage, array("width" => "110", "height" => "110"), BX_RESIZE_IMAGE_PROPORTIONAL, true); $arItem["DETAIL_PICTURE_SRC"] = $arFileTmp["src"]; } } } unset($arItem); // get sku props data if (!empty($arBasketItems) && self::$catalogIncluded && isset($this->offersProps) && !empty($this->offersProps)) { $arBasketItems = $this->getSkuPropsData($arBasketItems, $arParents, $this->offersProps); } // count weight for set parent products foreach ($arBasketItems as &$arItem) { if (CSaleBasketHelper::isSetParent($arItem)) { $arItem["WEIGHT"] = $arSetParentWeight[$arItem["ID"]] / $arItem["QUANTITY"]; $arItem["WEIGHT_FORMATED"] = roundEx(doubleval($arItem["WEIGHT"] / $this->weightKoef), SALE_WEIGHT_PRECISION) . " " . $this->weightUnit; } } if (isset($arItem)) { unset($arItem); } // fill item arrays for old templates foreach ($arBasketItems as &$arItem) { if (CSaleBasketHelper::isSetItem($arItem)) { continue; } $arItem['DISCOUNT_PRICE'] = (double) $arItem['DISCOUNT_PRICE']; $arItem['PRICE'] = (double) $arItem['PRICE']; $arItem['DISCOUNT_PRICE_PERCENT'] = 0; $arItem['DISCOUNT_PRICE_PERCENT_FORMATED'] = ''; $arItem['FULL_PRICE'] = $arItem['PRICE']; if ($arItem['DISCOUNT_PRICE'] > 0) { if ($arItem['DISCOUNT_PRICE'] + $arItem['PRICE'] > 0) { $arItem['DISCOUNT_PRICE_PERCENT'] = $arItem['DISCOUNT_PRICE'] * 100 / ($arItem['DISCOUNT_PRICE'] + $arItem['PRICE']); $arItem['DISCOUNT_PRICE_PERCENT_FORMATED'] = roundEx($arItem['DISCOUNT_PRICE_PERCENT'], SALE_VALUE_PRECISION) . '%'; $arItem['FULL_PRICE'] = $arItem["PRICE"] + $arItem["DISCOUNT_PRICE"]; } } $arItem['FULL_PRICE_FORMATED'] = CCurrencyLang::CurrencyFormat($arItem['FULL_PRICE'], $arItem['CURRENCY'], true); if ($arItem["CAN_BUY"] == "Y" && $arItem["DELAY"] == "N") { $allSum += $arItem["PRICE"] * $arItem["QUANTITY"]; $allWeight += $arItem["WEIGHT"] * $arItem["QUANTITY"]; $allVATSum += roundEx($arItem["PRICE_VAT_VALUE"] * $arItem["QUANTITY"], SALE_VALUE_PRECISION); $bShowReady = true; if ($arItem["DISCOUNT_PRICE"] > 0) { $DISCOUNT_PRICE_ALL += $arItem["DISCOUNT_PRICE"] * $arItem["QUANTITY"]; } $arResult["ITEMS"]["AnDelCanBuy"][] = $arItem; } elseif ($arItem["CAN_BUY"] == "Y" && $arItem["DELAY"] == "Y") { $bShowDelay = true; $arResult["ITEMS"]["DelDelCanBuy"][] = $arItem; } elseif ($arItem["CAN_BUY"] == "N" && $arItem["SUBSCRIBE"] == "Y") { $bShowSubscribe = true; $arResult["ITEMS"]["ProdSubscribe"][] = $arItem; } else { $bShowNotAvail = true; $arItem["NOT_AVAILABLE"] = true; $arResult["ITEMS"]["nAnCanBuy"][] = $arItem; } } unset($arItem); $arResult["ShowReady"] = $bShowReady ? "Y" : "N"; $arResult["ShowDelay"] = $bShowDelay ? "Y" : "N"; $arResult["ShowNotAvail"] = $bShowNotAvail ? "Y" : "N"; $arResult["ShowSubscribe"] = $bShowSubscribe ? "Y" : "N"; $arOrder = array('SITE_ID' => SITE_ID, 'USER_ID' => $GLOBALS["USER"]->GetID(), 'ORDER_PRICE' => $allSum, 'ORDER_WEIGHT' => $allWeight, 'BASKET_ITEMS' => $arResult["ITEMS"]["AnDelCanBuy"]); $arOptions = array('COUNT_DISCOUNT_4_ALL_QUANTITY' => $this->countDiscount4AllQuantity); $arErrors = array(); CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors); if (isset($arOrder['ORDER_PRICE'])) { $roundOrderFields = CSaleOrder::getRoundFields(); foreach ($arOrder as $fieldName => $fieldValue) { if (in_array($fieldName, $roundOrderFields)) { $arOrder[$fieldName] = roundEx($arOrder[$fieldName], SALE_VALUE_PRECISION); } } } if (!empty($arOrder['BASKET_ITEMS']) && is_array($arOrder['BASKET_ITEMS'])) { $arOrder['ORDER_PRICE'] = 0; $roundBasketFields = CSaleBasket::getRoundFields(); foreach ($arOrder['BASKET_ITEMS'] as &$basketItem) { foreach ($basketItem as $fieldName => $fieldValue) { if (in_array($fieldName, $roundBasketFields)) { if (isset($basketItem[$fieldName])) { $basketItem[$fieldName] = roundEx($basketItem[$fieldName], SALE_VALUE_PRECISION); } } } $arOrder['ORDER_PRICE'] += $basketItem['PRICE'] * $basketItem['QUANTITY']; } $arOrder['ORDER_PRICE'] = roundEx($arOrder['ORDER_PRICE'], SALE_VALUE_PRECISION); } $allSum = 0; $allWeight = 0; $allVATSum = 0; $DISCOUNT_PRICE_ALL = 0; $priceWithoutDiscount = 0; foreach ($arOrder["BASKET_ITEMS"] as &$arOneItem) { $allWeight += $arOneItem["WEIGHT"] * $arOneItem["QUANTITY"]; $allSum += $arOneItem["PRICE"] * $arOneItem["QUANTITY"]; if (array_key_exists('VAT_VALUE', $arOneItem)) { $arOneItem["PRICE_VAT_VALUE"] = $arOneItem["VAT_VALUE"]; } $allVATSum += roundEx($arOneItem["PRICE_VAT_VALUE"] * $arOneItem["QUANTITY"], SALE_VALUE_PRECISION); $arOneItem["PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arOneItem["PRICE"], $arOneItem["CURRENCY"], true); $arOneItem["FULL_PRICE"] = $arOneItem["PRICE"] + $arOneItem["DISCOUNT_PRICE"]; $arOneItem["FULL_PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arOneItem["FULL_PRICE"], $arOneItem["CURRENCY"], true); $arOneItem["SUM"] = CCurrencyLang::CurrencyFormat($arOneItem["PRICE"] * $arOneItem["QUANTITY"], $arOneItem["CURRENCY"], true); if (0 < doubleval($arOneItem["DISCOUNT_PRICE"] + $arOneItem["PRICE"])) { $arOneItem["DISCOUNT_PRICE_PERCENT"] = $arOneItem["DISCOUNT_PRICE"] * 100 / ($arOneItem["DISCOUNT_PRICE"] + $arOneItem["PRICE"]); } else { $arOneItem["DISCOUNT_PRICE_PERCENT"] = 0; } $arOneItem["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($arOneItem["DISCOUNT_PRICE_PERCENT"], SALE_VALUE_PRECISION) . "%"; $DISCOUNT_PRICE_ALL += $arOneItem["DISCOUNT_PRICE"] * $arOneItem["QUANTITY"]; } unset($arOneItem); $arResult["ITEMS"]["AnDelCanBuy"] = $arOrder["BASKET_ITEMS"]; // fill grid data (for new templates with custom columns) foreach ($arResult["ITEMS"] as $type => $arItems) { foreach ($arItems as $k => $arItem) { $arResult["GRID"]["ROWS"][$arItem["ID"]] = $arItem; } } $arResult["allSum"] = roundEx($allSum, SALE_VALUE_PRECISION); $arResult["allWeight"] = $allWeight; $arResult["allWeight_FORMATED"] = roundEx(doubleval($allWeight / $this->weightKoef), SALE_WEIGHT_PRECISION) . " " . $this->weightUnit; $arResult["allSum_FORMATED"] = CCurrencyLang::CurrencyFormat($allSum, $allCurrency, true); $arResult["DISCOUNT_PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arResult["DISCOUNT_PRICE"], $allCurrency, true); $arResult["PRICE_WITHOUT_DISCOUNT"] = CCurrencyLang::CurrencyFormat($allSum + $DISCOUNT_PRICE_ALL, $allCurrency, true); if ($this->priceVatShowValue == 'Y') { $arResult["allVATSum"] = roundEx($allVATSum, SALE_VALUE_PRECISION); $arResult["allVATSum_FORMATED"] = CCurrencyLang::CurrencyFormat($allVATSum, $allCurrency, true); $arResult["allSum_wVAT_FORMATED"] = CCurrencyLang::CurrencyFormat(doubleval($arResult["allSum"] - $allVATSum), $allCurrency, true); } $arResult['COUPON_LIST'] = array(); $arResult['COUPON'] = ''; if ($this->hideCoupon != "Y") { $arCoupons = DiscountCouponsManager::get(true, array(), true, true); if (!empty($arCoupons)) { foreach ($arCoupons as &$oneCoupon) { if ($arResult['COUPON'] == '') { $arResult['COUPON'] = $oneCoupon['COUPON']; } if ($oneCoupon['STATUS'] == DiscountCouponsManager::STATUS_NOT_FOUND || $oneCoupon['STATUS'] == DiscountCouponsManager::STATUS_FREEZE) { $oneCoupon['JS_STATUS'] = 'BAD'; } elseif ($oneCoupon['STATUS'] == DiscountCouponsManager::STATUS_NOT_APPLYED || $oneCoupon['STATUS'] == DiscountCouponsManager::STATUS_ENTERED) { $oneCoupon['JS_STATUS'] = 'ENTERED'; } else { $oneCoupon['JS_STATUS'] = 'APPLYED'; } $oneCoupon['JS_CHECK_CODE'] = ''; if (isset($oneCoupon['CHECK_CODE_TEXT'])) { $oneCoupon['JS_CHECK_CODE'] = is_array($oneCoupon['CHECK_CODE_TEXT']) ? implode('<br>', $oneCoupon['CHECK_CODE_TEXT']) : $oneCoupon['CHECK_CODE_TEXT']; } $arResult['COUPON_LIST'][] = $oneCoupon; } unset($oneCoupon); $arResult['COUPON_LIST'] = array_values($arCoupons); } unset($arCoupons); } if (empty($arBasketItems)) { $arResult["ERROR_MESSAGE"] = Loc::getMessage("SALE_EMPTY_BASKET"); } $arResult["DISCOUNT_PRICE_ALL"] = $DISCOUNT_PRICE_ALL; $arResult["DISCOUNT_PRICE_ALL_FORMATED"] = CCurrencyLang::CurrencyFormat($DISCOUNT_PRICE_ALL, $allCurrency, true); if ($this->usePrepayment == "Y") { if (doubleval($arResult["allSum"]) > 0) { $personType = array(); $dbPersonType = CSalePersonType::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array("LID" => SITE_ID, "ACTIVE" => "Y")); while ($arPersonType = $dbPersonType->Fetch()) { $personType[] = $arPersonType["ID"]; } if (!empty($personType)) { $dbPaySysAction = CSalePaySystemAction::GetList(array(), array("PS_ACTIVE" => "Y", "HAVE_PREPAY" => "Y", "PERSON_TYPE_ID" => $personType), false, false, array("ID", "PAY_SYSTEM_ID", "PERSON_TYPE_ID", "NAME", "ACTION_FILE", "RESULT_FILE", "NEW_WINDOW", "PARAMS", "ENCODING", "LOGOTIP")); if ($arPaySysAction = $dbPaySysAction->Fetch()) { CSalePaySystemAction::InitParamarrays(false, false, $arPaySysAction["PARAMS"]); $pathToAction = $_SERVER["DOCUMENT_ROOT"] . $arPaySysAction["ACTION_FILE"]; $pathToAction = str_replace("\\", "/", $pathToAction); while (substr($pathToAction, strlen($pathToAction) - 1, 1) == "/") { $pathToAction = substr($pathToAction, 0, strlen($pathToAction) - 1); } if (file_exists($pathToAction)) { if (is_dir($pathToAction) && file_exists($pathToAction . "/pre_payment.php")) { $pathToAction .= "/pre_payment.php"; } try { include_once $pathToAction; } catch (\Bitrix\Main\SystemException $e) { if ($e->getCode() == CSalePaySystemAction::GET_PARAM_VALUE) { $message = Loc::getMessage("SOA_TEMPL_ORDER_PS_ERROR"); } else { $message = $e->getMessage(); } $arResult["ERROR_MESSAGE"] = $message; } $psPreAction = new CSalePaySystemPrePayment(); if ($psPreAction->init()) { $orderData = array("PATH_TO_ORDER" => $this->pathToOrder, "AMOUNT" => $arResult["allSum"], "BASKET_ITEMS" => $arResult["ITEMS"]["AnDelCanBuy"]); if (!$psPreAction->BasketButtonAction($orderData)) { if ($e = $APPLICATION->GetException()) { $arResult["WARNING_MESSAGE"][] = $e->GetString(); } } $arResult["PREPAY_BUTTON"] = $psPreAction->BasketButtonShow(); } } } } } } return $arResult; }
/** * Returns list of recommended products for specific product. * * @param int $USER_ID User id. * @param string $LID Site id. * @param array $arFilterRecomendet Recomendation filter. * @param string $recomMore Get more. * @param int $cntProductDefault Max count. * @return array */ function GetRecommendetProduct($USER_ID, $LID, $arFilterRecomendet = array(), $recomMore = 'N', $cntProductDefault = 2) { $arRecomendetResult = array(); if (CModule::IncludeModule('catalog') && !empty($arFilterRecomendet)) { $arRecomendet = array(); if (!is_array($arFilterRecomendet)) { $arFilterRecomendet = array($arFilterRecomendet); } Main\Type\Collection::normalizeArrayValuesByInt($arFilterRecomendet); if (empty($arFilterRecomendet)) { return $arRecomendetResult; } $iblockRecommended = array(); $productIterator = Iblock\ElementTable::getList(array('select' => array('ID', 'IBLOCK_ID'), 'filter' => array('@ID' => $arFilterRecomendet, '=ACTIVE' => 'Y'))); while ($product = $productIterator->fetch()) { $product['ID'] = (int) $product['ID']; $product['IBLOCK_ID'] = (int) $product['IBLOCK_ID']; if (!isset($iblockRecommended[$product['IBLOCK_ID']])) { $iblockRecommended[$product['IBLOCK_ID']] = array(); } $iblockRecommended[$product['IBLOCK_ID']][] = $product['ID']; } unset($product, $productIterator); if (empty($iblockRecommended)) { return $arRecomendetResult; } $propertyList = array(); $propertyIterator = Iblock\PropertyTable::getList(array('select' => array('ID', 'IBLOCK_ID'), 'filter' => array('@IBLOCK_ID' => array_keys($iblockRecommended), '=CODE' => 'RECOMMEND', '=PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_ELEMENT))); while ($property = $propertyIterator->fetch()) { $property['ID'] = (int) $property['ID']; $property['IBLOCK_ID'] = (int) $property['IBLOCK_ID']; $propertyList[$property['IBLOCK_ID']] = $property['ID']; } unset($property, $propertyIterator); if (empty($propertyList)) { return $arRecomendetResult; } foreach ($propertyList as $iblockID => $propertyID) { $propertyValue = 'PROPERTY_' . $propertyID; $filter = array('ID' => $iblockRecommended[$iblockID], 'IBLOCK_ID' => $iblockID); $select = array('ID', 'IBLOCK_ID', $propertyValue); $propertyValue .= '_VALUE'; $elementIterator = CIBlockElement::GetList(array(), $filter, false, false, $select); while ($element = $elementIterator->Fetch()) { if (empty($element[$propertyValue])) { continue; } if (is_array($element[$propertyValue])) { foreach ($element[$propertyValue] as &$recId) { $recId = (int) $recId; if ($recId > 0) { $arRecomendet[$recId] = true; } } unset($recId); } else { $recId = (int) $element[$propertyValue]; if ($recId > 0) { $arRecomendet[$recId] = true; } } } } unset($element, $elementIterator, $select, $filter, $propertyValue, $propertyID, $iblockID, $propertyList); if (!empty($arRecomendet)) { $arRecomendet = array_keys($arRecomendet); $arBuyerGroups = CUser::GetUserGroup($USER_ID); $arFilter = array("ID" => $arRecomendet, "ACTIVE" => "Y"); $rsElement = CIBlockElement::GetList(array(), $arFilter, false, false, array("NAME", "ID", "LID", 'IBLOCK_ID', 'IBLOCK_SECTION_ID', "DETAIL_PICTURE", "PREVIEW_PICTURE", "DETAIL_PAGE_URL")); $currentVatMode = CCatalogProduct::getPriceVatIncludeMode(); $currentUseDiscount = CCatalogProduct::getUseDiscount(); CCatalogProduct::setUseDiscount(true); CCatalogProduct::setPriceVatIncludeMode(true); CCatalogProduct::setUsedCurrency(CSaleLang::GetLangCurrency($LID)); $i = 0; while ($arElement = $rsElement->GetNext()) { if (in_array($arElement["ID"], $arFilterRecomendet)) { continue; } if ($recomMore == "N" && $i < $cntProductDefault || $recomMore == "Y") { $arElement["MODULE"] = "catalog"; $arElement["PRODUCT_PROVIDER_CLASS"] = "CCatalogProductProvider"; $arElement["PRODUCT_ID"] = $arElement["ID"]; $arPrice = CCatalogProduct::GetOptimalPrice($arElement["ID"], 1, $arBuyerGroups, "N", array(), $LID, array()); $currentPrice = $arPrice['RESULT_PRICE']['DISCOUNT_PRICE']; $arElement["PRICE"] = $currentPrice; $arElement["CURRENCY"] = $arPrice["RESULT_PRICE"]["CURRENCY"]; $arElement["DISCOUNT_PRICE"] = $arPrice['RESULT_PRICE']['DISCOUNT']; if ($arElement["IBLOCK_ID"] > 0 && $arElement["IBLOCK_SECTION_ID"] > 0) { $arElement["EDIT_PAGE_URL"] = CIBlock::GetAdminElementEditLink($arElement["IBLOCK_ID"], $arElement["PRODUCT_ID"], array("find_section_section" => $arElement["IBLOCK_SECTION_ID"], 'WF' => 'Y')); } $arRecomendetResult[] = $arElement; $i++; } } CCatalogProduct::clearUsedCurrency(); CCatalogProduct::setPriceVatIncludeMode($currentVatMode); CCatalogProduct::setUseDiscount($currentUseDiscount); unset($currentUseDiscount, $currentVatMode); } } return $arRecomendetResult; }
$filter_date_to = date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"))); } $arResult["FILTER"] = array("filter_date_from" => $filter_date_from, "filter_date_to" => $filter_date_to); $arResult["CURRENT_PAGE_PARAM"] = $APPLICATION->GetCurPageParam("", array("filter_date_from", "filter_date_to")); $arResult["CURRENT_PAGE"] = $APPLICATION->GetCurPage(); $arFilter = array("=AFFILIATE_ID" => $arAffiliate["ID"], "=ALLOW_DELIVERY" => "Y", "=CANCELED" => "N", "=LID" => SITE_ID); if (StrLen($filter_date_from) > 0) { $arFilter[">=DATE_ALLOW_DELIVERY"] = Trim($filter_date_from); } if (StrLen($filter_date_to) > 0) { $arFilter["<=DATE_ALLOW_DELIVERY"] = Trim($filter_date_to); } $dbItemsList = \Bitrix\Sale\Internals\OrderTable::getList(array('filter' => $arFilter, 'select' => array("BASKET_NAME" => 'BASKET.NAME', "BASKET_PRODUCT_ID" => 'BASKET.PRODUCT_ID', "BASKET_MODULE" => 'BASKET.MODULE', "BASKET_PRICE" => 'BASKET.PRICE', "BASKET_CURRENCY" => 'BASKET.CURRENCY', "BASKET_DISCOUNT_PRICE" => 'BASKET.DISCOUNT_PRICE', 'BASKET_QUANTITY' => 'SUM_BASKET_QUANTITY'), 'runtime' => array(new \Bitrix\Main\Entity\ExpressionField('SUM_BASKET_QUANTITY', 'SUM(%s)', array('BASKET.QUANTITY'))), 'order' => array("BASKET.MODULE" => "ASC", "BASKET.NAME" => "ASC", "BASKET.PRODUCT_ID" => "ASC"), 'group' => array("BASKET.MODULE", "BASKET.PRODUCT_ID", "BASKET.NAME", "BASKET.PRICE", "BASKET.CURRENCY", "BASKET.DISCOUNT_PRICE"))); $arResult["ROWS"] = False; if ($arItemsList = $dbItemsList->Fetch()) { $affiliateCurrency = CSaleLang::GetLangCurrency(SITE_ID); $currentBasketModule = $arItemsList["BASKET_MODULE"]; $currentBasketProductID = $arItemsList["BASKET_PRODUCT_ID"]; $currentBasketName = $arItemsList["BASKET_NAME"]; $currentQuantity = 0; $currentSum = 0; $totalQuantity = 0; $totalSum = 0; $arResult["ROWS"] = array(); do { if ($currentBasketModule != $arItemsList["BASKET_MODULE"] || $currentBasketProductID != $arItemsList["BASKET_PRODUCT_ID"] || $currentBasketName != $arItemsList["BASKET_NAME"]) { $arResult["ROWS"][] = array("NAME" => htmlspecialcharsex($currentBasketName), "QUANTITY" => $currentQuantity, "SUM" => $currentSum, "CURRENCY" => $affiliateCurrency, "SUM_FORMAT" => SaleFormatCurrency($currentSum, $affiliateCurrency)); $currentBasketModule = $arItemsList["BASKET_MODULE"]; $currentBasketProductID = $arItemsList["BASKET_PRODUCT_ID"]; $currentBasketName = $arItemsList["BASKET_NAME"]; $totalQuantity += $currentQuantity;
/** * @param array $arParams * @return array|false */ public static function OrderProduct($arParams) { $adminSection = defined('ADMIN_SECTION') && ADMIN_SECTION === true; $arParams['RENEWAL'] = isset($arParams['RENEWAL']) && $arParams['RENEWAL'] == 'Y' ? 'Y' : 'N'; $arParams['CHECK_QUANTITY'] = isset($arParams['CHECK_QUANTITY']) && $arParams['CHECK_QUANTITY'] == 'N' ? 'N' : 'Y'; $arParams['CHECK_DISCOUNT'] = isset($arParams['CHECK_DISCOUNT']) && $arParams['CHECK_DISCOUNT'] == 'N' ? 'N' : 'Y'; $arParams['USER_ID'] = isset($arParams['USER_ID']) ? (int) $arParams['USER_ID'] : 0; if ($arParams['USER_ID'] < 0) { $arParams['USER_ID'] = 0; } $arParams['SITE_ID'] = isset($arParams['SITE_ID']) ? $arParams['SITE_ID'] : false; $strSiteID = $arParams['SITE_ID']; $arParams['BASKET_ID'] = (string) (isset($arParams['BASKET_ID']) ? $arParams['BASKET_ID'] : '0'); $arParams['CURRENCY'] = isset($arParams['CURRENCY']) ? Currency\CurrencyManager::checkCurrencyID($arParams['CURRENCY']) : false; if ($arParams['CURRENCY'] === false) { $arParams['CURRENCY'] = CSaleLang::GetLangCurrency($strSiteID ? $strSiteID : SITE_ID); } global $USER; $productID = (int) $arParams['PRODUCT_ID']; $quantity = (double) $arParams['QUANTITY']; $intUserID = (int) $arParams['USER_ID']; $arResult = array(); if ($adminSection) { if ($intUserID == 0) { return $arResult; } if (!($userGroups = static::getHitCache('USER_GROUPS', $intUserID))) { $userGroups = self::getUserGroups($intUserID); static::setHitCache('USER_GROUPS', $intUserID, $userGroups); } if (empty($userGroups)) { return $arResult; } if (!($arProduct = static::getHitCache('IBLOCK_ELEMENT_PERM_N', $productID))) { $dbIBlockElement = CIBlockElement::GetList(array(), array('ID' => $productID, 'ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y', 'CHECK_PERMISSION' => 'N'), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL')); if ($arProduct = $dbIBlockElement->GetNext()) { static::setHitCache('IBLOCK_ELEMENT_PERM_N', $productID, $arProduct); } unset($dbIBlockElement); } if (empty($arProduct) || !is_array($arProduct)) { return $arResult; } $iblockRightByID = null; if (!($iblockRightByID = static::getHitCache('IBLOCK_RIGHT', $arProduct['IBLOCK_ID']))) { if ($iblockRightByID = CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'RIGHTS_MODE')) { static::setHitCache('IBLOCK_RIGHT', $arProduct['IBLOCK_ID'], $iblockRightByID); } } if ($iblockRightByID == 'E') { $proxyUserPermissionKey = $productID . "|" . $intUserID; if (!($arUserRights = static::getHitCache('USER_RIGHT', $proxyUserPermissionKey))) { if ($arUserRights = CIBlockElementRights::GetUserOperations($productID, $intUserID)) { static::setHitCache('USER_RIGHT', $proxyUserPermissionKey, $arUserRights); } } if (empty($arUserRights) || !isset($arUserRights['element_read'])) { return $arResult; } unset($arUserRights); } else { $proxyIblockPermissionKey = $arProduct['IBLOCK_ID'] . "|" . $intUserID; if (!($iblockPermissions = static::getHitCache('IBLOCK_PERM', $proxyIblockPermissionKey))) { if ($iblockPermissions = CIBlock::GetPermission($arProduct['IBLOCK_ID'], $intUserID)) { static::setHitCache('IBLOCK_PERM', $proxyIblockPermissionKey, $iblockPermissions); } } if ($iblockPermissions < 'R') { return $arResult; } } } else { $userGroups = $USER->GetUserGroupArray(); if (!($arProduct = static::getHitCache('IBLOCK_ELEMENT_PERM_Y', $productID))) { $dbIBlockElement = CIBlockElement::GetList(array(), array('ID' => $productID, 'ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y', 'CHECK_PERMISSIONS' => 'Y', 'MIN_PERMISSION' => 'R'), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL')); if ($arProduct = $dbIBlockElement->GetNext()) { static::setHitCache('IBLOCK_ELEMENT_PERM_Y', $productID, $arProduct); } unset($dbIBlockElement); } if (empty($arProduct) || !is_array($arProduct)) { return $arResult; } } if (!($arCatalogProduct = static::getHitCache('CATALOG_PRODUCT', $productID))) { $rsProducts = CCatalogProduct::GetList(array(), array('ID' => $productID), false, false, array('ID', 'CAN_BUY_ZERO', 'QUANTITY_TRACE', 'QUANTITY', 'WEIGHT', 'WIDTH', 'HEIGHT', 'LENGTH', 'BARCODE_MULTI', 'TYPE')); if ($arCatalogProduct = $rsProducts->Fetch()) { static::setHitCache('CATALOG_PRODUCT', $productID, $arCatalogProduct); } unset($rsProducts); } if (!empty($arCatalogProduct) && is_array($arCatalogProduct)) { $arCatalogProduct["QUANTITY"] = (double) $arCatalogProduct["QUANTITY"]; if ($arParams["CHECK_QUANTITY"] == "Y") { if ('Y' != $arCatalogProduct["CAN_BUY_ZERO"] && 'Y' == $arCatalogProduct["QUANTITY_TRACE"] && ($arCatalogProduct["QUANTITY"] <= 0 || $quantity > $arCatalogProduct["QUANTITY"])) { return $arResult; } } } else { return $arResult; } if ($adminSection) { CCatalogDiscountSave::SetDiscountUserID($intUserID); } $productHash = array('MODULE' => 'catalog', 'PRODUCT_ID' => $productID, 'BASKET_ID' => $arParams['BASKET_ID']); $arCoupons = DiscountCouponsManager::getForApply(array(), $productHash, true); if (!empty($arCoupons)) { $arCoupons = array_keys($arCoupons); } $currentVatMode = CCatalogProduct::getPriceVatIncludeMode(); $currentUseDiscount = CCatalogProduct::getUseDiscount(); CCatalogProduct::setUseDiscount($arParams['CHECK_DISCOUNT'] == 'Y'); CCatalogProduct::setPriceVatIncludeMode(true); CCatalogProduct::setUsedCurrency($arParams['CURRENCY']); $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroups, $arParams['RENEWAL'], array(), $adminSection ? $strSiteID : false, $arCoupons); if (empty($arPrice)) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $userGroups)) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $userGroups, $arParams['RENEWAL'], array(), $adminSection ? $strSiteID : false, $arCoupons); } } CCatalogProduct::clearUsedCurrency(); CCatalogProduct::setPriceVatIncludeMode($currentVatMode); CCatalogProduct::setUseDiscount($currentUseDiscount); unset($userGroups, $currentUseDiscount, $currentVatMode); if ($adminSection) { CCatalogDiscountSave::ClearDiscountUserID(); } if (empty($arPrice)) { return $arResult; } $arDiscountList = array(); if (empty($arPrice['DISCOUNT_LIST']) && !empty($arPrice['DISCOUNT']) && is_array($arPrice['DISCOUNT'])) { $arPrice['DISCOUNT_LIST'] = array($arPrice['DISCOUNT']); } if (!empty($arPrice['DISCOUNT_LIST'])) { $appliedCoupons = array(); foreach ($arPrice['DISCOUNT_LIST'] as &$arOneDiscount) { $arOneList = array('ID' => $arOneDiscount['ID'], 'NAME' => $arOneDiscount['NAME'], 'COUPON' => '', 'COUPON_TYPE' => '', 'USE_COUPONS' => isset($arOneDiscount['USE_COUPONS']) ? $arOneDiscount['USE_COUPONS'] : 'N', 'MODULE_ID' => isset($oneDiscount['MODULE_ID']) ? $oneDiscount['MODULE_ID'] : 'catalog', 'TYPE' => $arOneDiscount['TYPE'], 'VALUE' => $arOneDiscount['VALUE'], 'VALUE_TYPE' => $arOneDiscount['VALUE_TYPE'], 'MAX_VALUE' => $arOneDiscount['VALUE_TYPE'] == Catalog\DiscountTable::VALUE_TYPE_PERCENT ? $arOneDiscount['MAX_DISCOUNT'] : 0, 'CURRENCY' => $arOneDiscount['CURRENCY'], 'HANDLERS' => isset($arOneDiscount['HANDLERS']) ? $arOneDiscount['HANDLERS'] : array()); if (!empty($arOneDiscount['COUPON'])) { $arOneList['USE_COUPONS'] = 'Y'; $arOneList['COUPON'] = $arOneDiscount['COUPON']; $arOneList['COUPON_TYPE'] = $arOneDiscount['COUPON_ONE_TIME']; $appliedCoupons[] = $arOneDiscount['COUPON']; } $arDiscountList[] = $arOneList; } unset($arOneList, $arOneDiscount); if (!empty($appliedCoupons)) { $resultApply = DiscountCouponsManager::setApplyByProduct($productHash, $appliedCoupons); } unset($resultApply, $appliedCoupons); } if (empty($arPrice['PRICE']['CATALOG_GROUP_NAME'])) { if (!empty($arPrice['PRICE']['CATALOG_GROUP_ID'])) { $priceName = self::getPriceTitle($arPrice['PRICE']['CATALOG_GROUP_ID']); if ($priceName != '') { $arPrice['PRICE']['CATALOG_GROUP_NAME'] = $priceName; } unset($priceName); } } if (empty($arPrice['RESULT_PRICE']) || !is_array($arPrice['RESULT_PRICE'])) { $arPrice['RESULT_PRICE'] = CCatalogDiscount::calculateDiscountList($arPrice['PRICE'], $arParams['CURRENCY'], $arDiscountList, true); } $arResult = array('PRODUCT_PRICE_ID' => $arPrice['PRICE']['ID'], 'BASE_PRICE' => $arPrice['RESULT_PRICE']['BASE_PRICE'], 'PRICE' => $arPrice['RESULT_PRICE']['DISCOUNT_PRICE'], 'VAT_RATE' => $arPrice['PRICE']['VAT_RATE'], "CURRENCY" => $arPrice['RESULT_PRICE']['CURRENCY'], "WEIGHT" => (double) $arCatalogProduct["WEIGHT"], "DIMENSIONS" => serialize(array("WIDTH" => $arCatalogProduct["WIDTH"], "HEIGHT" => $arCatalogProduct["HEIGHT"], "LENGTH" => $arCatalogProduct["LENGTH"])), "NAME" => $arProduct["~NAME"], "CAN_BUY" => "Y", "DETAIL_PAGE_URL" => $arProduct['~DETAIL_PAGE_URL'], "NOTES" => $arPrice["PRICE"]["CATALOG_GROUP_NAME"], "DISCOUNT_PRICE" => $arPrice['RESULT_PRICE']['DISCOUNT'], "TYPE" => $arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET ? CCatalogProductSet::TYPE_SET : null, "DISCOUNT_VALUE" => $arPrice['RESULT_PRICE']['PERCENT'] > 0 ? $arPrice['RESULT_PRICE']['PERCENT'] . '%' : 0, "DISCOUNT_NAME" => '', "DISCOUNT_COUPON" => '', "DISCOUNT_LIST" => array()); if ($arParams["CHECK_QUANTITY"] == "Y") { $arResult["QUANTITY"] = $quantity; } else { $arResult["QUANTITY"] = $arParams["QUANTITY"]; } if (!empty($arDiscountList)) { $arResult['DISCOUNT_LIST'] = $arDiscountList; } if (!empty($arPrice['DISCOUNT'])) { $arResult['DISCOUNT_NAME'] = '[' . $arPrice['DISCOUNT']['ID'] . '] ' . $arPrice['DISCOUNT']['NAME']; if (!empty($arPrice['DISCOUNT']['COUPON'])) { $arResult['DISCOUNT_COUPON'] = $arPrice['DISCOUNT']['COUPON']; } if (empty($arResult['DISCOUNT_LIST'])) { $arResult['DISCOUNT_LIST'] = array($arPrice['DISCOUNT']); } } $arResult["VAT_INCLUDED"] = "Y"; return $arResult; }