/** * * History update, cron usage only * @global CUser $USER * @return boolean */ public static function orderHistory() { global $USER; if (is_object($USER) == false) { $USER = new RetailUser(); } if (!CModule::IncludeModule("iblock")) { self::eventLog('ICrmOrderActions::orderHistory', 'iblock', 'module not found'); return false; } if (!CModule::IncludeModule("sale")) { self::eventLog('ICrmOrderActions::orderHistory', 'sale', 'module not found'); return false; } if (!CModule::IncludeModule("catalog")) { self::eventLog('ICrmOrderActions::orderHistory', 'catalog', 'module not found'); return false; } $api_host = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_HOST_OPTION, 0); $api_key = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_KEY_OPTION, 0); $optionsOrderTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_TYPES_ARR, 0))); $optionsDelivTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_DELIVERY_TYPES_ARR, 0))); $optionsPayTypes = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_TYPES, 0))); $optionsPayStatuses = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_STATUSES, 0))); // --statuses $optionsPayment = array_flip(unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT, 0))); $optionsOrderProps = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_PROPS, 0)); $optionsLegalDetails = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_LEGAL_DETAILS, 0)); $optionsContragentType = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CONTRAGENT_TYPE, 0)); $optionsSitesList = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_SITES_LIST, 0)); $optionsCustomFields = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CUSTOM_FIELDS, 0)); foreach ($optionsOrderProps as $code => $value) { if (isset($optionsLegalDetails[$code])) { $optionsOrderProps[$code] = array_merge($optionsOrderProps[$code], $optionsLegalDetails[$code]); } if (isset($optionsCustomFields[$code])) { $optionsOrderProps[$code] = array_merge($optionsOrderProps[$code], $optionsCustomFields[$code]); } $optionsOrderProps[$code]['location'] = 'LOCATION'; if (array_search('CITY', $optionsOrderProps[$code]) == false) { $optionsOrderProps[$code]['city'] = 'CITY'; } if (array_search('ZIP', $optionsOrderProps[$code]) == false) { $optionsOrderProps[$code]['index'] = 'ZIP'; } } $api = new RetailCrm\RestApi($api_host, $api_key); $dateStart = COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, null); if (is_null($dateStart)) { $dateStart = new \DateTime(); $dateStart = $dateStart->format('Y-m-d H:i:s'); } try { $orderHistory = $api->orderHistory($dateStart); } catch (\RetailCrm\Exception\CurlException $e) { self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::orderHistory::CurlException', $e->getCode() . ': ' . $e->getMessage()); return false; } $orderHistory = isset($orderHistory['orders']) ? $orderHistory['orders'] : array(); $log = new Logger(); $log->write($orderHistory, 'history'); $dateFinish = $api->getGeneratedAt(); if (is_null($dateFinish) || $dateFinish == false) { $dateFinish = new \DateTime(); } $defaultOrderType = 1; $dbOrderTypesList = CSalePersonType::GetList(array(), array("ACTIVE" => "Y")); if ($arOrderTypesList = $dbOrderTypesList->Fetch()) { $defaultOrderType = $arOrderTypesList['ID']; } $GLOBALS['INTARO_CRM_FROM_HISTORY'] = true; foreach ($orderHistory as $order) { if (function_exists('intarocrm_order_pre_persist')) { $order = intarocrm_order_pre_persist($order); } if (!isset($order['externalId'])) { // custom orderType function if (function_exists('intarocrm_set_order_type')) { $orderType = intarocrm_set_order_type($order); if ($orderType) { $optionsOrderTypes[$order['orderType']] = $orderType; } else { $optionsOrderTypes[$order['orderType']] = $defaultOrderType; } } // we dont need new orders without any customers (can check only for externalId) if (!isset($order['customer']['externalId'])) { if (!isset($order['customer']['id'])) { continue; } $registerNewUser = true; if (!isset($order['customer']['email']) || $order['customer']['email'] == '') { $login = $order['customer']['email'] = uniqid('user_' . time()) . '@crm.com'; } else { $dbUser = CUser::GetList($by = 'ID', $sort = 'ASC', array('=EMAIL' => $order['email'])); switch ($dbUser->SelectedRowsCount()) { case 0: $login = $order['customer']['email']; break; case 1: $arUser = $dbUser->Fetch(); $registeredUserID = $arUser['ID']; $registerNewUser = false; break; default: $login = uniqid('user_' . time()) . '@crm.com'; break; } } if ($registerNewUser === true) { $userPassword = uniqid(); $newUser = new CUser(); $arFields = array("NAME" => self::fromJSON($order['customer']['firstName']), "LAST_NAME" => self::fromJSON($order['customer']['lastName']), "EMAIL" => $order['customer']['email'], "LOGIN" => $login, "LID" => "ru", "ACTIVE" => "Y", "PASSWORD" => $userPassword, "CONFIRM_PASSWORD" => $userPassword); $registeredUserID = $newUser->Add($arFields); if ($registeredUserID === false) { self::eventLog('ICrmOrderActions::orderHistory', 'CUser::Register', 'Error register user'); continue; } try { $api->customerFixExternalIds(array(array('id' => $order['customer']['id'], 'externalId' => $registeredUserID))); } catch (\RetailCrm\Exception\CurlException $e) { self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::customerFixExternalIds::CurlException', $e->getCode() . ': ' . $e->getMessage()); continue; } } $order['customer']['externalId'] = $registeredUserID; } // new order $newOrderFields = array('LID' => CSite::GetDefSite(), 'PERSON_TYPE_ID' => isset($optionsOrderTypes[$order['orderType']]) ? $optionsOrderTypes[$order['orderType']] : $defaultOrderType, 'PAYED' => 'N', 'CANCELED' => 'N', 'STATUS_ID' => 'N', 'PRICE' => 0, 'CURRENCY' => CCurrency::GetBaseCurrency(), 'USER_ID' => $order['customer']['externalId'], 'PAY_SYSTEM_ID' => 0, 'PRICE_DELIVERY' => 0, 'DELIVERY_ID' => 0, 'DISCOUNT_VALUE' => 0, 'USER_DESCRIPTION' => ''); if (count($optionsSitesList) > 1 && ($lid = array_search($order['site'], $optionsSitesList))) { $newOrderFields['LID'] = $lid; } $externalId = CSaleOrder::Add($newOrderFields); if (!isset($order['externalId'])) { try { $api->orderFixExternalIds(array(array('id' => $order['id'], 'externalId' => $externalId))); } catch (\RetailCrm\Exception\CurlException $e) { self::eventLog('ICrmOrderActions::orderHistory', 'RetailCrm\\RestApi::orderFixExternalIds::CurlException', $e->getCode() . ': ' . $e->getMessage()); continue; } } $order['externalId'] = $externalId; } if (isset($order['externalId']) && $order['externalId']) { // custom orderType function if (function_exists('intarocrm_set_order_type')) { $orderType = intarocrm_set_order_type($order); if ($orderType) { $optionsOrderTypes[$order['orderType']] = $orderType; } else { $optionsOrderTypes[$order['orderType']] = $defaultOrderType; } } $arFields = CSaleOrder::GetById($order['externalId']); // incorrect order if ($arFields === false || empty($arFields)) { continue; } $LID = $arFields['LID']; $userId = $arFields['USER_ID']; if (isset($order['customer']['externalId']) && !is_null($order['customer']['externalId'])) { $userId = $order['customer']['externalId']; } $rsOrderProps = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID'])); $arUpdateProps = array(); while ($ar = $rsOrderProps->Fetch()) { $prop = CSaleOrderProps::GetByID($ar['ORDER_PROPS_ID']); $arUpdateProps[$ar['CODE']] = array('ID' => $ar['ID'], 'TYPE' => $prop['TYPE'], 'VALUE' => $ar['VALUE']); } $order['fio'] = trim(implode(' ', array(isset($order['lastName']) ? $order['lastName'] : '', isset($order['firstName']) ? $order['firstName'] : '', isset($order['patronymic']) ? $order['patronymic'] : ''))); if (isset($order['delivery']['address']['city'])) { $order['location'] = $order['delivery']['address']['city']; } if (isset($order['orderType']) && isset($optionsOrderTypes[$order['orderType']])) { if (isset($optionsOrderProps[$arFields['PERSON_TYPE_ID']])) { foreach ($optionsOrderProps[$arFields['PERSON_TYPE_ID']] as $code => $value) { if (in_array($code, array_keys($order)) === false && isset($optionsOrderProps[$optionsOrderTypes[$order['orderType']]][$code])) { $order[$code] = $arUpdateProps[$optionsOrderProps[$arFields['PERSON_TYPE_ID']][$code]]['VALUE']; } } } //update ordertype CSaleOrder::Update($order['externalId'], array('PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']])); $arProp = CSaleOrderProps::GetList(array(), array('PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']])); $typeParam = array(); while ($ar = $arProp->Fetch()) { $typeParam[$ar['CODE']] = $ar['CODE']; } foreach (array_diff_key($arUpdateProps, $typeParam) as $code => $param) { if (isset($arUpdateProps[$code])) { CSaleOrderPropsValue::Delete($param['ID']); } } $arFields['PERSON_TYPE_ID'] = $optionsOrderTypes[$order['orderType']]; } array_walk_recursive(self::clearArr($order), 'self::recursiveUpdate', array('update' => $arUpdateProps, 'type' => $arFields['PERSON_TYPE_ID'], 'options' => $optionsOrderProps, 'orderId' => $order['externalId'])); foreach ($order['items'] as $item) { if (isset($item['deleted']) && $item['deleted']) { if ($p = CSaleBasket::GetList(array(), array('ORDER_ID' => $order['externalId'], 'PRODUCT_ID' => $item['id']))->Fetch()) { if (!CSaleBasket::Delete($p['ID'])) { self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Delete', 'Error element delete'); } } else { $prp = CSaleBasket::GetPropsList(array(), array("ORDER_ID" => $order['externalId'], "CODE" => 'ID', "VALUE" => $item['id']))->Fetch(); if (!CSaleBasket::Delete($prp['BASKET_ID'])) { self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Delete', 'Error castom element delete'); } } continue; } if (isset($item['offer']) === false && isset($item['offer']['externalId']) === false) { continue; } $res = CIBlockElement::GetByID($item['offer']['externalId'])->Fetch(); if ($res) { $p = CSaleBasket::GetList(array(), array('ORDER_ID' => $order['externalId'], 'PRODUCT_ID' => $item['offer']['externalId']))->Fetch(); if ($p == false) { $p = CIBlockElement::GetByID($item['offer']['externalId'])->GetNext(); $iblock = CIBlock::GetByID($p['IBLOCK_ID'])->Fetch(); $p['CATALOG_XML_ID'] = $iblock['XML_ID']; $p['PRODUCT_XML_ID'] = $p['XML_ID']; unset($p['XML_ID']); } elseif ($propResult = CSaleBasket::GetPropsList(array(''), array('BASKET_ID' => $p['ID']))) { while ($r = $propResult->Fetch()) { unset($r['ID']); unset($r['BASKET_ID']); $p['PROPS'][] = $r; } } $arProduct = array(); if (isset($item['created']) && $item['created'] == true) { $productPrice = GetCatalogProductPrice($item['offer']['externalId'], COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_BASE_PRICE, 0)); $arProduct = array('FUSER_ID' => $userId, 'ORDER_ID' => $order['externalId'], 'QUANTITY' => $item['quantity'], 'CURRENCY' => $productPrice['CURRENCY'], 'LID' => $LID, 'PRODUCT_ID' => $item['offer']['externalId'], 'PRODUCT_PRICE_ID' => $p['PRODUCT_PRICE_ID'], 'WEIGHT' => $p['WEIGHT'], 'DELAY' => $p['DELAY'], 'CAN_BUY' => $p['CAN_BUY'], 'MODULE' => $p['MODULE'], 'NOTES' => $item['comment'] ?: $p['NOTES'], 'PRODUCT_PROVIDER_CLASS' => $p['PRODUCT_PROVIDER_CLASS'], 'DETAIL_PAGE_URL' => $p['DETAIL_PAGE_URL'], 'CATALOG_XML_ID' => $p['CATALOG_XML_ID'], 'PRODUCT_XML_ID' => $p['PRODUCT_XML_ID'], 'CUSTOM_PRICE' => 'Y'); } if (isset($item['isCanceled']) == false) { if (isset($item['initialPrice']) && $item['initialPrice']) { $arProduct['PRICE'] = (double) $item['initialPrice']; } if (isset($item['discount'])) { $arProduct['DISCOUNT_PRICE'] = $item['discount']; } if (isset($item['discountPercent'])) { $arProduct['DISCOUNT_VALUE'] = $item['discountPercent']; $newPrice = round($arProduct['PRICE'] / 100 * (100 - $arProduct['DISCOUNT_VALUE']), 2); $arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice; } if (isset($item['discount']) || isset($item['discountPercent'])) { $arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE']; } if (isset($item['offer']['name']) && $item['offer']['name']) { $arProduct['NAME'] = self::fromJSON($item['offer']['name']); } $arProduct = self::updateCancelProp($arProduct, 0); } elseif (isset($item['isCanceled'])) { $arProduct['PRICE'] = 0; $arProduct = self::updateCancelProp($arProduct, 1); } if (isset($item['created']) && $item['created'] == true) { if (!Add2BasketByProductID($item['offer']['externalId'], $item['quantity'], $arProduct, $p['PROPS'])) { self::eventLog('ICrmOrderActions::orderHistory', 'Add2BasketByProductID', 'Error element add'); } continue; } if (count($p['PROPS']) > 0) { $arProduct['PROPS'] = $p['PROPS']; } if (isset($item['quantity']) && $item['quantity']) { $arProduct['QUANTITY'] = $item['quantity']; } if (isset($item['offer']['name']) && $item['offer']['name']) { $arProduct['NAME'] = self::fromJSON($item['offer']['name']); } if (!CSaleBasket::Update($p['ID'], $arProduct)) { self::eventLog('ICrmOrderActions::orderHistory', 'CSaleBasket::Update', 'Error element update'); } CSaleBasket::DeleteAll($userId); } else { $arProduct = array(); if (isset($item['created']) && $item['created'] == true) { $arProduct = array('FUSER_ID' => $userId, 'ORDER_ID' => $order['externalId'], 'LID' => $LID, 'NOTES' => $item['comment']); } if (isset($item['isCanceled']) == false) { if (isset($item['initialPrice']) && $item['initialPrice']) { $arProduct['PRICE'] = (double) $item['initialPrice']; } if (isset($item['discount'])) { $arProduct['DISCOUNT_PRICE'] = $item['discount']; } if (isset($item['discountPercent'])) { $arProduct['DISCOUNT_VALUE'] = $item['discountPercent']; $newPrice = round($arProduct['PRICE'] / 100 * (100 - $arProduct['DISCOUNT_VALUE']), 2); $arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice; } if (isset($item['discount']) || isset($item['discountPercent'])) { $arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE']; } if (isset($item['offer']['name']) && $item['offer']['name']) { $arProduct['NAME'] = self::fromJSON($item['offer']['name']); } $arProduct = self::updateCancelProp($arProduct, 0); } elseif (isset($item['isCanceled'])) { $arProduct['PRICE'] = 0; $arProduct = self::updateCancelProp($arProduct, 1); } if (isset($item['quantity']) && $item['quantity']) { $arProduct['QUANTITY'] = $item['quantity']; } if (isset($item['offer']['name']) && $item['offer']['name']) { $arProduct['NAME'] = self::fromJSON($item['offer']['name']); } if (isset($item['created']) && $item['created'] == true) { $iBlocks = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_IBLOCKS, 0)); $iBlock = array_shift($iBlocks); $newSection = new CIBlockSection(); $newSectionFields = array("ACTIVE" => 'N', "IBLOCK_ID" => $iBlock, "NAME" => 'RetailCRM', "CODE" => 'RetailCRM'); $resSection = $newSection->Add($newSectionFields); if (!$resSection) { self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockSection::Add', 'Error castom section add'); continue; } $arLoadProductArray = array("IBLOCK_SECTION_ID" => $resSection, "IBLOCK_ID" => $iBlock, "NAME" => $item['offer']['name'] ? $item['offer']['name'] : 'RetailCrmElement', "CODE" => 'RetailCrmElement', "ACTIVE" => 'Y'); $el = new CIBlockElement(); $PRODUCT_ID = $el->Add($arLoadProductArray, false, false, true); if (!$PRODUCT_ID) { self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockElement::Add', 'Error castom element add'); continue; } if (!CCatalogProduct::Add(array("ID" => $PRODUCT_ID))) { self::eventLog('ICrmOrderActions::orderHistory', 'CCatalogProduct::Add', 'Error product add'); continue; } $arFields = array("PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => COption::GetOptionString(self::$MODULE_ID, self::$CRM_CATALOG_BASE_PRICE, 0), "PRICE" => $item['initialPrice'] ? $item['initialPrice'] : 1, "CURRENCY" => CCurrency::GetBaseCurrency()); if (!CPrice::Add($arFields)) { self::eventLog('ICrmOrderActions::orderHistory', 'CPrice::Add', 'Error price add'); continue; } $Params = array(array('NAME' => 'id', 'CODE' => 'ID', 'VALUE' => $item['offer']['externalId'])); if (!Add2BasketByProductID($PRODUCT_ID, $item['quantity'], $arProduct, $Params)) { self::eventLog('ICrmOrderActions::orderHistory', 'Add2BasketByProductID', 'Error add to basket'); continue; } if (!CIBlockSection::Delete($resSection)) { self::eventLog('ICrmOrderActions::orderHistory', 'CIBlockSection::Delete', 'Error delete section'); continue; } continue; } $prp = CSaleBasket::GetPropsList(array(), array("ORDER_ID" => $order['externalId'], "CODE" => 'ID', "VALUE" => $item['offer']['externalId']))->Fetch(); CSaleBasket::Update($prp['BASKET_ID'], $arProduct); } } if (isset($order['delivery']) === false || isset($order['delivery']['cost']) === false) { $order['delivery']['cost'] = $arFields['PRICE_DELIVERY']; } if (isset($order['summ']) === false || $order['summ'] <= 0) { $order['summ'] = $arFields['PRICE'] - $arFields['PRICE_DELIVERY']; } $wasCanaceled = $arFields['CANCELED'] == 'Y' ? true : false; if (isset($optionsDelivTypes[$order['delivery']['code']])) { $resultDeliveryTypeId = $optionsDelivTypes[$order['delivery']['code']]; } else { $resultDeliveryTypeId = isset($order['delivery']['service']) && isset($order['delivery']['service']['code']) ? reset(explode(":", $arFields['DELIVERY_ID'], 1)) : $arFields['DELIVERY_ID']; } if (isset($order['delivery']['service']) && isset($order['delivery']['service']['code'])) { $deliveryHandler = reset(CSaleDeliveryHandler::GetBySID($resultDeliveryTypeId)->arResult); if (count($deliveryHandler) > 0 && array_key_exists($order['delivery']['service']['code'], $deliveryHandler['PROFILES'])) { $resultDeliveryTypeId = $resultDeliveryTypeId . ':' . $order['delivery']['service']['code']; } } // orderUpdate $arFields = self::clearArr(array('PRICE_DELIVERY' => $order['delivery']['cost'], 'PRICE' => $order['summ'] + (double) $order['delivery']['cost'], 'DATE_MARKED' => $order['markDatetime'], 'USER_ID' => $userId, 'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']], 'DELIVERY_ID' => $resultDeliveryTypeId, 'STATUS_ID' => $optionsPayStatuses[$order['status']], 'REASON_CANCELED' => self::fromJSON($order['statusComment']), 'USER_DESCRIPTION' => self::fromJSON($order['customerComment']), 'COMMENTS' => self::fromJSON($order['managerComment']))); if (isset($order['discount'])) { $arFields['DISCOUNT_VALUE'] = $order['discount']; $arFields['PRICE'] -= $order['discount']; } if (!empty($arFields)) { CSaleOrder::Update($order['externalId'], $arFields); } if (isset($order['status']) && $order['status']) { if (isset($optionsPayStatuses[$order['status']]) && $optionsPayStatuses[$order['status']]) { // set STATUS_ID CSaleOrder::StatusOrder($order['externalId'], $optionsPayStatuses[$order['status']]); if ($wasCanaceled && $optionsPayStatuses[$order['status']] != 'YY') { CSaleOrder::CancelOrder($order['externalId'], "N", $order['statusComment']); } elseif ($optionsPayStatuses[$order['status']] == 'YY') { CSaleOrder::CancelOrder($order['externalId'], "Y", $order['statusComment']); } } } // set PAYED if (isset($order['paymentStatus']) && $order['paymentStatus'] && $optionsPayment[$order['paymentStatus']]) { CSaleOrder::PayOrder($order['externalId'], $optionsPayment[$order['paymentStatus']]); } if (function_exists('intarocrm_order_post_persist')) { intarocrm_order_post_persist($order); } } } if (count($orderHistory) > 0) { COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, $dateFinish->format('Y-m-d H:i:s')); } $GLOBALS['INTARO_CRM_FROM_HISTORY'] = false; return true; }
public static function GetBaseCurrency() { if (!CModule::IncludeModule('currency')) { return false; } $baseCurrencyID = CCurrency::GetBaseCurrency(); if (!isset($baseCurrencyID[0])) { return false; } return self::GetByID($baseCurrencyID); }
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(); } if ($saleModulePermissions != "W") { $arFilterPerms = array("STATUS_PERMS_GROUP_ID" => $GLOBALS["USER"]->GetUserGroupArray(), ">=STATUS_PERMS_PERM_VIEW" => "Y"); } else { $arFilterPerms = array(); }
if ($arCurrentValues['USE_MIN_AMOUNT'] != "N") { $arComponentParameters["PARAMETERS"]["MIN_AMOUNT"] = array("PARENT" => "STORE_SETTINGS", "NAME" => GetMessage("MIN_AMOUNT"), "TYPE" => "STRING", "DEFAULT" => 10); } $arComponentParameters["PARAMETERS"]['STORE_PATH'] = array('PARENT' => 'STORE_SETTINGS', 'NAME' => GetMessage('STORE_PATH'), "TYPE" => "STRING", "DEFAULT" => "/store/#store_id#"); $arComponentParameters["PARAMETERS"]['MAIN_TITLE'] = array('PARENT' => 'STORE_SETTINGS', 'NAME' => GetMessage('MAIN_TITLE'), "TYPE" => "STRING", "DEFAULT" => GetMessage('MAIN_TITLE_VALUE')); } if (!IsModuleInstalled("sale")) { unset($arComponentParameters["PARAMETERS"]["USE_ALSO_BUY"]); unset($arComponentParameters["GROUPS"]["ALSO_BUY_SETTINGS"]); } elseif ($arCurrentValues["USE_ALSO_BUY"] == "Y") { $arComponentParameters["PARAMETERS"]["ALSO_BUY_ELEMENT_COUNT"] = array("PARENT" => "ALSO_BUY_SETTINGS", "NAME" => GetMessage("T_IBLOCK_DESC_ALSO_BUY_ELEMENT_COUNT"), "TYPE" => "STRING", "DEFAULT" => 5); $arComponentParameters["PARAMETERS"]["ALSO_BUY_MIN_BUYES"] = array("PARENT" => "ALSO_BUY_SETTINGS", "NAME" => GetMessage("T_IBLOCK_DESC_ALSO_BUY_MIN_BUYES"), "TYPE" => "STRING", "DEFAULT" => 2); } if (CModule::IncludeModule('catalog') && CModule::IncludeModule('currency')) { $arComponentParameters["PARAMETERS"]['CONVERT_CURRENCY'] = array('PARENT' => 'PRICES', 'NAME' => GetMessage('CP_BC_CONVERT_CURRENCY'), 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'N', 'REFRESH' => 'Y'); if (isset($arCurrentValues['CONVERT_CURRENCY']) && 'Y' == $arCurrentValues['CONVERT_CURRENCY']) { $arCurrencyList = array(); $rsCurrencies = CCurrency::GetList($by = 'SORT', $order = 'ASC'); while ($arCurrency = $rsCurrencies->Fetch()) { $arCurrencyList[$arCurrency['CURRENCY']] = $arCurrency['CURRENCY']; } $arComponentParameters['PARAMETERS']['CURRENCY_ID'] = array('PARENT' => 'PRICES', 'NAME' => GetMessage('CP_BC_CURRENCY_ID'), 'TYPE' => 'LIST', 'VALUES' => $arCurrencyList, 'DEFAULT' => CCurrency::GetBaseCurrency(), "ADDITIONAL_VALUES" => "Y"); } } if (!$OFFERS_IBLOCK_ID) { unset($arComponentParameters["GROUPS"]["OFFERS_SETTINGS"]); } else { $arComponentParameters["PARAMETERS"]["OFFERS_CART_PROPERTIES"] = array("PARENT" => "PRICES", "NAME" => GetMessage("CP_BC_OFFERS_CART_PROPERTIES"), "TYPE" => "LIST", "MULTIPLE" => "Y", "VALUES" => $arProperty_Offers); $arComponentParameters["PARAMETERS"]["OFFERS_SORT_FIELD"] = array("PARENT" => "OFFERS_SETTINGS", "NAME" => GetMessage("CP_BC_OFFERS_SORT_FIELD"), "TYPE" => "LIST", "VALUES" => array("shows" => GetMessage("IBLOCK_SORT_SHOWS"), "sort" => GetMessage("IBLOCK_SORT_SORT"), "timestamp_x" => GetMessage("IBLOCK_SORT_TIMESTAMP"), "name" => GetMessage("IBLOCK_SORT_NAME"), "id" => GetMessage("IBLOCK_SORT_ID"), "active_from" => GetMessage("IBLOCK_SORT_ACTIVE_FROM"), "active_to" => GetMessage("IBLOCK_SORT_ACTIVE_TO")), "ADDITIONAL_VALUES" => "Y", "DEFAULT" => "sort"); $arComponentParameters["PARAMETERS"]["OFFERS_SORT_ORDER"] = array("PARENT" => "OFFERS_SETTINGS", "NAME" => GetMessage("CP_BC_OFFERS_SORT_ORDER"), "TYPE" => "LIST", "VALUES" => $arAscDesc, "DEFAULT" => "asc", "ADDITIONAL_VALUES" => "Y"); }
$arFilter = array("name" => "sharpen", "precision" => $arParams["SHARPEN"]); } $arFileTmp = CFile::ResizeImageGet($arResult['DETAIL_PICTURE'], array("width" => $arParams["DISPLAY_DETAIL_IMG_WIDTH"], "height" => $arParams["DISPLAY_DETAIL_IMG_HEIGHT"]), BX_RESIZE_IMAGE_PROPORTIONAL, true, $arFilter); $arResult['DETAIL_PICTURE_280'] = array('SRC' => $arFileTmp["src"], 'WIDTH' => $arFileTmp["width"], 'HEIGHT' => $arFileTmp["height"]); } if (is_array($arResult['MORE_PHOTO']) && count($arResult['MORE_PHOTO']) > 0) { unset($arResult['DISPLAY_PROPERTIES']['MORE_PHOTO']); foreach ($arResult['MORE_PHOTO'] as $key => $arFile) { $arFilter = ''; if ($arParams["SHARPEN"] != 0) { $arFilter = array("name" => "sharpen", "precision" => $arParams["SHARPEN"]); } $arFileTmp = CFile::ResizeImageGet($arFile, array("width" => $arParams["DISPLAY_MORE_PHOTO_WIDTH"], "height" => $arParams["DISPLAY_MORE_PHOTO_HEIGHT"]), BX_RESIZE_IMAGE_PROPORTIONAL, true, $arFilter); $arFile['PREVIEW_WIDTH'] = $arFileTmp["width"]; $arFile['PREVIEW_HEIGHT'] = $arFileTmp["height"]; $arFile['SRC'] = $arFileTmp['src']; $arResult['MORE_PHOTO'][$key] = $arFile; } } if (CModule::IncludeModule('currency')) { if (isset($arResult['DISPLAY_PROPERTIES']['MINIMUM_PRICE'])) { $arResult['DISPLAY_PROPERTIES']['MINIMUM_PRICE']['DISPLAY_VALUE'] = FormatCurrency($arResult['DISPLAY_PROPERTIES']['MINIMUM_PRICE']['VALUE'], CCurrency::GetBaseCurrency()); } if (isset($arResult['DISPLAY_PROPERTIES']['MAXIMUM_PRICE'])) { $arResult['DISPLAY_PROPERTIES']['MAXIMUM_PRICE']['DISPLAY_VALUE'] = FormatCurrency($arResult['DISPLAY_PROPERTIES']['MAXIMUM_PRICE']['VALUE'], CCurrency::GetBaseCurrency()); } } $this->__component->SetResultCacheKeys(array("DISPLAY_PROPERTIES")); $this->__component->SetResultCacheKeys(array("DETAIL_TEXT")); $this->__component->SetResultCacheKeys(array("CAN_BUY")); //$this->__component->SetResultCacheKeys(array("OFFERS_IDS"));
/** * <p>Метод возвращает параметры наименьшей цены товара productID в количестве quantity для посетителя, входящего в группы пользователей arUserGroups.</p> * * * * * @param int $productID Код товара. * * * * @param $int Приобретаемое количество. * * * * @param quantit $y = 1[ массив групп, которым принадлежит пользователь. Для текущего * пользователя он возвращается методом $USER->GetUserGroupArray() * * * * @param array $arUserGroups = array()[ "Y", если вычисляется для продления товара (продажа контента), "N" в * остальных случаях. * * * * @param string $renewal = "N"[ Массив цен. Если он установлен, то пересчет идет не по ценам из * базы данных, а по ценам из этого массива. Представляет собой * массив ассоциативных массивов с ключами: <ul> <li> <b>ID</b> - код цены;</li> * <li> <b>PRICE</b> - цена;</li> <li> <b>CURRENCY</b> - валюта;</li> <li> <b>CATALOG_GROUP_ID</b> - код * типа цен.</li> </ul> * * * * @param array $arPrices = array()[ Сайт, для которого производится вычисление. Если парамерт равен * <i>false</i>, то берется текущий сайт. * * * * @param string $siteID = false]]]]] * * * * @return array <p>Массив вида:</p><pre class="syntax">array( "PRICE" => * массив_параметров_минимальной_цены, "DISCOUNT_PRICE" => * минимальная_цена_в_базовой_валюте, "DISCOUNT" => * массив_параметров_максимальной_доступной_скидки )</pre><p><b>Обратите * внимание, что</b> <i>DISCOUNT_PRICE</i> это минимальная цена в <b>базовой * валюте</b>. Чтобы перевести эту цену в валюту товара, * необходимо:</p><pre class="syntax">array( $baseCurrency = CCurrency::GetBaseCurrency(); * $arPrice["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arPrice['DISCOUNT_PRICE'], $baseCurrency, * $arPrice["PRICE"]["CURRENCY"]); )</pre><a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * if (!$arPrice || count($arPrice) <= 0) * { * if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $USER->GetUserGroupArray())) * { * $quantity = $nearestQuantity; * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * } * } * echo "<pre>"; * print_r($arPrice); * echo "</pre>"; * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__getoptimalprice.7c16046d.php * @author Bitrix */ public static function GetOptimalPrice($intProductID, $quantity = 1, $arUserGroups = array(), $renewal = "N", $arPrices = array(), $siteID = false, $arDiscountCoupons = false) { global $APPLICATION; $mxResult = true; foreach (GetModuleEvents("catalog", "OnGetOptimalPrice", true) as $arEvent) { $mxResult = ExecuteModuleEventEx($arEvent, array($intProductID, $quantity, $arUserGroups, $renewal, $arPrices, $siteID, $arDiscountCoupons)); if (true !== $mxResult) return $mxResult; } $intProductID = intval($intProductID); if (0 >= $intProductID) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_PRODUCT_ID_ABSENT"), "NO_PRODUCT_ID"); return false; } $quantity = doubleval($quantity); if (0 >= $quantity) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_QUANTITY_ABSENT"), "NO_QUANTITY"); return false; } if (!is_array($arUserGroups) && intval($arUserGroups)."|" == $arUserGroups."|") $arUserGroups = array(intval($arUserGroups)); if (!is_array($arUserGroups)) $arUserGroups = array(); if (!in_array(2, $arUserGroups)) $arUserGroups[] = 2; $rsVAT = CCatalogProduct::GetVATInfo($intProductID); if ($arVAT = $rsVAT->Fetch()) { $arVAT['RATE'] = doubleval($arVAT['RATE'] * 0.01); } else { $arVAT = array('RATE' => 0.0, 'VAT_INCLUDED' => 'N'); } $renewal = (($renewal == "N") ? "N" : "Y"); if (false === $siteID) $siteID = SITE_ID; if (false === $arDiscountCoupons) $arDiscountCoupons = CCatalogDiscountCoupon::GetCoupons(); $strBaseCurrency = CCurrency::GetBaseCurrency(); if (empty($strBaseCurrency)) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_NO_BASE_CURRENCY"), "NO_BASE_CURRENCY"); return false; } $intIBlockID = intval(CIBlockElement::GetIBlockByID($intProductID)); if (0 >= $intIBlockID) { $APPLICATION->ThrowException(str_replace("#ID#", $intProductID, GetMessage('BT_MOD_CATALOG_PROD_ERR_ELEMENT_ID_NOT_FOUND')), "NO_ELEMENT"); return false; } if (!isset($arPrices) || !is_array($arPrices)) $arPrices = array(); if (empty($arPrices)) { $arPrices = array(); $dbPriceList = CPrice::GetListEx( array(), array( "PRODUCT_ID" => $intProductID, "GROUP_GROUP_ID" => $arUserGroups, "GROUP_BUY" => "Y", "+<=QUANTITY_FROM" => $quantity, "+>=QUANTITY_TO" => $quantity ), false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY") ); while ($arPriceList = $dbPriceList->Fetch()) { $arPriceList['ELEMENT_IBLOCK_ID'] = $intIBlockID; $arPrices[] = $arPriceList; } } else { foreach ($arPrices as &$arOnePrice) { $arOnePrice['ELEMENT_IBLOCK_ID'] = $intIBlockID; } if (isset($arOnePrice)) unset($arOnePrice); } if (empty($arPrices)) return false; // $boolDiscountVat = ('N' != COption::GetOptionString('catalog', 'discount_vat', 'Y')); $boolDiscountVat = true; $strDiscSaveApply = COption::GetOptionString('catalog', 'discsave_apply', 'R'); $dblMinPrice = -1; $arMinPrice = array(); $arMinDiscounts = array(); foreach ($arPrices as &$arPriceList) { $arPriceList['VAT_RATE'] = $arVAT['RATE']; $arPriceList['VAT_INCLUDED'] = $arVAT['VAT_INCLUDED']; $arPriceList['ORIG_VAT_INCLUDED'] = $arPriceList['VAT_INCLUDED']; if ($boolDiscountVat) { if ('N' == $arPriceList['VAT_INCLUDED']) { $arPriceList['PRICE'] *= (1 + $arPriceList['VAT_RATE']); $arPriceList['VAT_INCLUDED'] = 'Y'; } } else { if ('Y' == $arPriceList['VAT_INCLUDED']) { $arPriceList['PRICE'] /= (1 + $arPriceList['VAT_RATE']); $arPriceList['VAT_INCLUDED'] = 'N'; } } if ($arPriceList["CURRENCY"] == $strBaseCurrency) $dblCurrentPrice = $arPriceList["PRICE"]; else $dblCurrentPrice = CCurrencyRates::ConvertCurrency($arPriceList["PRICE"], $arPriceList["CURRENCY"], $strBaseCurrency); $arDiscounts = CCatalogDiscount::GetDiscount($intProductID, $intIBlockID, $arPriceList["CATALOG_GROUP_ID"], $arUserGroups, $renewal, $siteID, $arDiscountCoupons); $arDiscSave = array(); $arPriceDiscount = array(); $arResultPrice = array( 'PRICE' => $dblCurrentPrice, 'CURRENCY' => $strBaseCurrency, ); $arDiscountApply = array(); if (!empty($arDiscounts)) { CCatalogProduct::__PrimaryDiscountFilter($arDiscounts, $arPriceDiscount, $arDiscSave, $arResultPrice); if (!empty($arPriceDiscount)) { foreach ($arPriceDiscount as &$arOnePriority) { $boolResultPriority = CCatalogProduct::__CalcOnePriority($arOnePriority, $arDiscountApply, $arResultPrice); if (!$boolResultPriority) { return false; } else { if (isset($arResultPrice['LAST_DISCOUNT']) && 'Y' == $arResultPrice['LAST_DISCOUNT']) break; } } if (isset($arOnePriority)) unset($arOnePriority); } if (!empty($arDiscSave)) { switch($strDiscSaveApply) { case 'R': $arDiscSaveResult = array( 'PRICE' => $dblCurrentPrice, 'CURRENCY' => $strBaseCurrency, ); $arDiscSaveApply = array(); $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscSaveApply, $arDiscSaveResult); if (!$boolResultDiscSave) { return false; } else { if ($arDiscSaveResult['PRICE'] < $arResultPrice['PRICE']) { $arResultPrice = $arDiscSaveResult; $arDiscountApply = $arDiscSaveApply; } } break; case 'A': $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscountApply, $arResultPrice); if (!$boolResultDiscSave) { return false; } break; case 'D': if (empty($arDiscountApply)) { $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscountApply, $arResultPrice); if (!$boolResultDiscSave) { return false; } } break; } } } if (-1 == $dblMinPrice || $dblMinPrice > $arResultPrice['PRICE']) { $dblMinPrice = $arResultPrice['PRICE']; $arMinPrice = $arPriceList; $arMinDiscounts = $arDiscountApply; } } if (isset($arPriceList)) unset($arPriceList); if ($boolDiscountVat) { if ('N' == $arMinPrice['ORIG_VAT_INCLUDED']) { $arMinPrice['PRICE'] /= (1 + $arMinPrice['VAT_RATE']); $arMinPrice['VAT_INCLUDED'] = $arMinPrice['ORIG_VAT_INCLUDED']; } } else { if ('Y' == $arMinPrice['ORIG_VAT_INCLUDED']) { $arMinPrice['PRICE'] *= (1 + $arMinPrice['VAT_RATE']); $arMinPrice['VAT_INCLUDED'] = $arMinPrice['ORIG_VAT_INCLUDED']; } } unset($arMinPrice['ORIG_VAT_INCLUDED']); $dblMinPrice = roundEx($dblMinPrice, CATALOG_VALUE_PRECISION); $arResult = array( 'PRICE' => $arMinPrice, 'DISCOUNT_PRICE' => $dblMinPrice, 'DISCOUNT' => array(), 'DISCOUNT_LIST' => array(), ); if (!empty($arMinDiscounts)) { reset($arMinDiscounts); $arResult['DISCOUNT'] = current($arMinDiscounts); $arResult['DISCOUNT_LIST'] = $arMinDiscounts; } foreach (GetModuleEvents("catalog", "OnGetOptimalPriceResult", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array(&$arResult))===false) return false; } return $arResult; }
/** * Update result user handlers for event OnGetOptimalPrice. * * @param array &$userResult Optimal price array. * @return void */ public static function updateUserHandlerOptimalPrice(&$userResult) { global $APPLICATION; if (empty($userResult) || !is_array($userResult)) { $userResult = false; return; } if (empty($userResult['PRICE']) || !is_array($userResult['PRICE'])) { $userResult = false; return; } if (empty($userResult['RESULT_PRICE']) || !is_array($userResult['RESULT_PRICE'])) { $resultCurrency = CCurrency::GetBaseCurrency(); if (empty($resultCurrency)) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_CATALOG_PROD_ERR_NO_BASE_CURRENCY'), 'NO_BASE_CURRENCY'); $userResult = false; return; } if (self::$usedCurrency !== null) { $resultCurrency = self::$usedCurrency; } $oldDiscountExist = !empty($userResult['DISCOUNT']) && is_array($userResult['DISCOUNT']); if ($oldDiscountExist) { if (empty($userResult['DISCOUNT']['MODULE_ID'])) { $userResult['DISCOUNT']['MODULE_ID'] = 'catalog'; } if ($userResult['DISCOUNT']['CURRENCY'] != $resultCurrency) { Catalog\DiscountTable::convertCurrency($userResult['DISCOUNT'], $resultCurrency); } } if (!isset($userResult['DISCOUNT_LIST']) || !is_array($userResult['DISCOUNT_LIST'])) { $userResult['DISCOUNT_LIST'] = array(); if ($oldDiscountExist) { $userResult['DISCOUNT_LIST'][] = $userResult['DISCOUNT']; } } if (isset($userResult['DISCOUNT_LIST'])) { foreach ($userResult['DISCOUNT_LIST'] as &$discount) { if (empty($discount['MODULE_ID'])) { $discount['MODULE_ID'] = 'catalog'; } if ($discount['CURRENCY'] != $resultCurrency) { Catalog\DiscountTable::convertCurrency($discount, $resultCurrency); } } unset($discount); } $userResult['RESULT_PRICE'] = CCatalogDiscount::calculateDiscountList($userResult['PRICE'], $resultCurrency, $userResult['DISCOUNT_LIST'], self::$optimalPriceWithVat); } else { $userResult['RESULT_PRICE']['BASE_PRICE'] = roundEx($userResult['RESULT_PRICE']['BASE_PRICE'], CATALOG_VALUE_PRECISION); $userResult['RESULT_PRICE']['DISCOUNT'] = roundEx($userResult['RESULT_PRICE']['DISCOUNT'], CATALOG_VALUE_PRECISION); $userResult['RESULT_PRICE']['DISCOUNT_PRICE'] = $userResult['RESULT_PRICE']['BASE_PRICE'] - $userResult['RESULT_PRICE']['DISCOUNT']; $userResult['RESULT_PRICE']['VAT_RATE'] = $userResult['PRICE']['VAT_RATE']; } }
protected function getPrices($productId, $siteId) { $minPrice = 0; $minPriceRUR = 0; $minPriceGroup = 0; $minPriceCurrency = ""; $baseCurrency = \CCurrency::GetBaseCurrency(); $RUR = $this->getRub(); if ($this->xmlData['PRICE'] > 0) { $rsPrices = \CPrice::GetListEx(array(), array('PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => $this->xmlData['PRICE'], 'CAN_BUY' => 'Y', 'GROUP_GROUP_ID' => array(2), '+<=QUANTITY_FROM' => 1, '+>=QUANTITY_TO' => 1)); if ($arPrice = $rsPrices->Fetch()) { if ($arOptimalPrice = \CCatalogProduct::GetOptimalPrice($productId, 1, array(2), 'N', array($arPrice), $siteId)) { $minPrice = $arOptimalPrice['DISCOUNT_PRICE']; $minPriceCurrency = $baseCurrency; $minPriceRUR = \CCurrencyRates::ConvertCurrency($minPrice, $baseCurrency, $RUR); $minPriceGroup = $arOptimalPrice['PRICE']['CATALOG_GROUP_ID']; } } } else { if ($arPrice = \CCatalogProduct::GetOptimalPrice($productId, 1, array(2), 'N', array(), $siteId)) { $minPrice = $arPrice['DISCOUNT_PRICE']; $minPriceCurrency = $baseCurrency; $minPriceRUR = \CCurrencyRates::ConvertCurrency($minPrice, $baseCurrency, $RUR); $minPriceGroup = $arPrice['PRICE']['CATALOG_GROUP_ID']; } } $result = array("MIN" => $minPrice, "MIN_RUB" => $minPriceRUR, "MIN_GROUP" => $minPriceGroup, "MIN_CURRENCY" => $minPriceCurrency); return $result; }
function SubscribeProduct($intProductID, $arRewriteFields = array(), $arProductParams = array()) { global $USER; if (!CCatalog::IsUserExists()) return false; if (!$USER->IsAuthorized()) return false; $intUserID = intval($USER->GetID()); $intProductID = intval($intProductID); if (0 >= $intProductID) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_EMPTY_PRODUCT_ID'), "EMPTY_PRODUCT_ID"); return false; } if (!CModule::IncludeModule("sale")) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_SALE_MODULE'), "NO_SALE_MODULE"); return false; } if (CModule::IncludeModule("statistic") && array_key_exists('SESS_SEARCHER_ID', $_SESSION) && 0 < intval($_SESSION["SESS_SEARCHER_ID"])) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_SESS_SEARCHER'), "SESS_SEARCHER"); return false; } $rsProducts = CCatalogProduct::GetList( array(), array('ID' => $intProductID), false, false, array( 'ID', 'WEIGHT', ) ); if (!($arCatalogProduct = $rsProducts->Fetch())) { $APPLICATION->ThrowException(GetMessage('CATALOG_ERR_NO_PRODUCT'), "NO_PRODUCT"); return false; } $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->Fetch())) return false; $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 = strval(CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID')); if ('' != $strIBlockXmlID) { $arProps[] = array( "NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID ); } $arProps[] = array( "NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"] ); if (!empty($arProductParams) && is_array($arProductParams)) { foreach ($arProductParams as &$arOneProductParams) { $arProps[] = array( "NAME" => $arOneProductParams["NAME"], "CODE" => $arOneProductParams["CODE"], "VALUE" => $arOneProductParams["VALUE"], "SORT" => $arOneProductParams["SORT"], ); } if (isset($arOneProductParams)) unset($arOneProductParams); } $arFields = array( "PRODUCT_ID" => $intProductID, "PRODUCT_PRICE_ID" => $arPrice['PRODUCT_PRICE_ID'], "PRICE" => $arPrice['PRICE'], "CURRENCY" => $arPrice['CURRENCY'], "WEIGHT" => $arCatalogProduct["WEIGHT"], "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, ); 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 (!array_key_exists('NOTIFY_PRODUCT', $_SESSION)) { $_SESSION['NOTIFY_PRODUCT'] = array( $intUserID = array(), ); } elseif (!array_key_exists($intUserID, $_SESSION['NOTIFY_PRODUCT'])) { $_SESSION['NOTIFY_PRODUCT'][$intUserID] = array(); } $_SESSION["NOTIFY_PRODUCT"][$intUserID][$intProductID] = $intProductID; if (CModule::IncludeModule("statistic")) CStatistic::Set_Event("sale2basket", "subscribe", $intProductID); } return $mxBasketID; }
public static function GetBuyersList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array()) { global $DB; if (empty($arSelectFields) || in_array("*", $arSelectFields)) { $arSelectFields = array("ID", "ACTIVE", "LID", "DATE_REGISTER", "LOGIN", "EMAIL", "NAME", "LAST_NAME", "SECOND_NAME", "PERSONAL_PHONE", "USER_ID", "LAST_LOGIN", "TIMESTAMP_X", "PERSONAL_BIRTHDAY", "ORDER_COUNT", "ORDER_SUM", "CURRENCY", "LAST_ORDER_DATE"); } $arFields_m = array("ACTIVE", "LOGIN", "EMAIL", "NAME", "LAST_NAME", "SECOND_NAME", "PERSONAL_PHONE"); $arFields_md = array("LAST_LOGIN", "DATE_REGISTER", "TIMESTAMP_X", "PERSONAL_BIRTHDAY"); $CURRENCY = ""; if (strlen($arFilter["CURRENCY"]) > 0) { $CURRENCY = $arFilter["CURRENCY"]; unset($arFilter["CURRENCY"]); } else { CModule::IncludeModule("currency"); $CURRENCY = CCurrency::GetBaseCurrency(); } $LID = ""; if (strlen($arFilter["LID"]) > 0) { $LID = $arFilter["LID"]; unset($arFilter["LID"]); } else { $rsSites = CSite::GetList($by = "id", $order = "asc", array("ACTIVE" => "Y")); $arSite = $rsSites->Fetch(); $LID = $arSite["ID"]; } $arFields = array("ID" => array("FIELD" => "F.ID", "TYPE" => "int"), "LID" => array("FIELD" => "O1.LID", "TYPE" => "string"), "ORDER_COUNT" => array("FIELD" => "(SELECT COUNT(O3.PRICE) FROM b_sale_order O3 WHERE O3.USER_ID=F.USER_ID AND O3.CURRENCY = '" . $DB->ForSQL($CURRENCY) . "' AND O3.PAYED = 'Y' AND O3.LID = '" . $DB->ForSQL($LID) . "' )", "TYPE" => "double"), "ORDER_SUM" => array("FIELD" => "(SELECT SUM(O3.PRICE) FROM b_sale_order O3 WHERE O3.USER_ID=F.USER_ID AND O3.CURRENCY = '" . $DB->ForSQL($CURRENCY) . "' AND O3.PAYED = 'Y' AND O3.LID = '" . $DB->ForSQL($LID) . "' )", "TYPE" => "double"), "CURRENCY" => array("FIELD" => "O1.CURRENCY", "TYPE" => "string", "FROM" => "LEFT JOIN b_sale_order O1 ON (O1.USER_ID=U.ID AND O1.CURRENCY = '" . $DB->ForSQL($CURRENCY) . "' AND O1.LID = '" . $DB->ForSQL($LID) . "' AND O1.PAYED = 'Y')"), "LAST_ORDER_DATE" => array("FIELD" => "(SELECT MAX(O2.DATE_INSERT) FROM b_sale_order O2 WHERE (O2.USER_ID=F.USER_ID))", "TYPE" => "datetime"), "NAME_SEARCH" => array("FIELD" => "U.NAME, U.LAST_NAME, U.SECOND_NAME, U.EMAIL, U.LOGIN, U.ID", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (U.ID = F.USER_ID)"), "USER_ID" => array("FIELD" => "F.USER_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_user U ON (U.ID = F.USER_ID)"), "GROUPS_ID" => array("FIELD" => "UG.GROUP_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_user_group UG ON (UG.USER_ID = F.USER_ID)")); foreach ($arFields_m as $val) { $arFields[$val] = array("FIELD" => "U." . $val, "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (U.ID = F.USER_ID)"); } foreach ($arFields_md as $val) { $arFields[$val] = array("FIELD" => "U." . $val, "TYPE" => "datetime", "FROM" => "INNER JOIN b_user U ON (U.ID = F.USER_ID)"); } if (!in_array("USER_ID", $arSelectFields)) { $arSelectFields[] = "USER_ID"; } $arFilterH = array(); if (!empty($arFilter)) { foreach ($arFilter as $k => $v) { if (strpos($k, "ORDER_SUM") !== false || strpos($k, "ORDER_COUNT") !== false || strpos($k, "LAST_ORDER_DATE") !== false) { $arFilterH[$k] = $v; unset($arFilter[$k]); } } } if (!empty($arFilterH)) { $arSqlsH = CSaleOrder::PrepareSql($arFields, $arOrder, $arFilterH, false, $arSelectFields); } $arSqls = CSaleOrder::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields); $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]); $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_sale_fuser F " . "\t" . $arSqls["FROM"] . " "; if (strlen($arSqls["WHERE"]) > 0) { $strSql .= "WHERE " . $arSqls["WHERE"] . " "; } $strSql .= "GROUP BY F.USER_ID "; if (strlen($arSqlsH["WHERE"]) > 0) { $strSql .= "HAVING " . $arSqlsH["WHERE"] . " "; } if (strlen($arSqls["ORDERBY"]) > 0) { $strSql .= "ORDER BY " . $arSqls["ORDERBY"] . " "; } // echo "!3!=".htmlspecialcharsbx($strSql)."<br>"; if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) <= 0) { $strSql_tmp = "SELECT COUNT('x') as CNT " . "FROM b_sale_fuser F " . "\t" . $arSqls["FROM"] . " "; if (strlen($arSqls["WHERE"]) > 0) { $strSql_tmp .= "WHERE " . $arSqls["WHERE"] . " "; } $strSql_tmp .= "GROUP BY F.USER_ID "; if (strlen($arSqlsH["WHERE"]) > 0) { $strSql_tmp .= "HAVING " . $arSqlsH["WHERE"] . " "; } // echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>"; $dbRes = $DB->Query($strSql_tmp, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $cnt = $dbRes->SelectedRowsCount(); $dbRes = new CDBResult(); // echo "!2.2!=".htmlspecialcharsbx($strSql)."<br>"; $dbRes->NavQuery($strSql, $cnt, $arNavStartParams); } else { if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0) { $strSql .= "LIMIT " . IntVal($arNavStartParams["nTopCount"]); } // echo "!3!=".htmlspecialcharsbx($strSql)."<br>"; $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } return $dbRes; }
function DoIBlockAfterSave($arg1, $arg2 = false) { $ELEMENT_ID = false; $IBLOCK_ID = false; $OFFERS_IBLOCK_ID = false; $OFFERS_PROPERTY_ID = false; if (CModule::IncludeModule('currency')) { $strDefaultCurrency = CCurrency::GetBaseCurrency(); } //Check for catalog event if (is_array($arg2) && $arg2["PRODUCT_ID"] > 0) { //Get iblock element $rsPriceElement = CIBlockElement::GetList(array(), array("ID" => $arg2["PRODUCT_ID"]), false, false, array("ID", "IBLOCK_ID")); if ($arPriceElement = $rsPriceElement->Fetch()) { $arCatalog = CCatalog::GetByID($arPriceElement["IBLOCK_ID"]); if (is_array($arCatalog)) { //Check if it is offers iblock if ($arCatalog["OFFERS"] == "Y") { //Find product element $rsElement = CIBlockElement::GetProperty($arPriceElement["IBLOCK_ID"], $arPriceElement["ID"], "sort", "asc", array("ID" => $arCatalog["SKU_PROPERTY_ID"])); $arElement = $rsElement->Fetch(); if ($arElement && $arElement["VALUE"] > 0) { $ELEMENT_ID = $arElement["VALUE"]; $IBLOCK_ID = $arCatalog["PRODUCT_IBLOCK_ID"]; $OFFERS_IBLOCK_ID = $arCatalog["IBLOCK_ID"]; $OFFERS_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"]; } } elseif ($arCatalog["OFFERS_IBLOCK_ID"] > 0) { $ELEMENT_ID = $arPriceElement["ID"]; $IBLOCK_ID = $arPriceElement["IBLOCK_ID"]; $OFFERS_IBLOCK_ID = $arCatalog["OFFERS_IBLOCK_ID"]; $OFFERS_PROPERTY_ID = $arCatalog["OFFERS_PROPERTY_ID"]; } else { $ELEMENT_ID = $arPriceElement["ID"]; $IBLOCK_ID = $arPriceElement["IBLOCK_ID"]; $OFFERS_IBLOCK_ID = false; $OFFERS_PROPERTY_ID = false; } } } } elseif (is_array($arg1) && $arg1["ID"] > 0 && $arg1["IBLOCK_ID"] > 0) { //Check if iblock has offers $arOffers = CIBlockPriceTools::GetOffersIBlock($arg1["IBLOCK_ID"]); if (is_array($arOffers)) { $ELEMENT_ID = $arg1["ID"]; $IBLOCK_ID = $arg1["IBLOCK_ID"]; $OFFERS_IBLOCK_ID = $arOffers["OFFERS_IBLOCK_ID"]; $OFFERS_PROPERTY_ID = $arOffers["OFFERS_PROPERTY_ID"]; } } if ($ELEMENT_ID) { static $arPropCache = array(); if (!array_key_exists($IBLOCK_ID, $arPropCache)) { //Check for MINIMAL_PRICE property $rsProperty = CIBlockProperty::GetByID("MINIMUM_PRICE", $IBLOCK_ID); $arProperty = $rsProperty->Fetch(); if ($arProperty) { $arPropCache[$IBLOCK_ID] = $arProperty["ID"]; } else { $arPropCache[$IBLOCK_ID] = false; } } if ($arPropCache[$IBLOCK_ID]) { //Compose elements filter if ($OFFERS_IBLOCK_ID) { $rsOffers = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $OFFERS_IBLOCK_ID, "PROPERTY_" . $OFFERS_PROPERTY_ID => $ELEMENT_ID), false, false, array("ID")); while ($arOffer = $rsOffers->Fetch()) { $arProductID[] = $arOffer["ID"]; } if (!is_array($arProductID)) { $arProductID = array($ELEMENT_ID); } } else { $arProductID = array($ELEMENT_ID); } $minPrice = false; $maxPrice = false; //Get prices $rsPrices = CPrice::GetList(array(), array("PRODUCT_ID" => $arProductID)); while ($arPrice = $rsPrices->Fetch()) { if (CModule::IncludeModule('currency') && $strDefaultCurrency != $arPrice['CURRENCY']) { $arPrice["PRICE"] = CCurrencyRates::ConvertCurrency($arPrice["PRICE"], $arPrice["CURRENCY"], $strDefaultCurrency); } $PRICE = $arPrice["PRICE"]; if ($minPrice === false || $minPrice > $PRICE) { $minPrice = $PRICE; } if ($maxPrice === false || $maxPrice < $PRICE) { $maxPrice = $PRICE; } } //Save found minimal price into property if ($minPrice !== false) { CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array("MINIMUM_PRICE" => $minPrice, "MAXIMUM_PRICE" => $maxPrice)); } } } }
function GetLiveFeedData($site_id = "", $lang = "en") { global $MESS; if (($r = CSaleWS::CheckAuth()) !== False) { return $r; } $saleRight = $GLOBALS["APPLICATION"]->GetGroupRight("sale"); CComponentUtil::__IncludeLang("/bitrix/components/bitrix/webservice.sale/", "/component_1.php", $lang); $arFilter = array(); $server_name = COption::GetOptionString("main", "server_name", $GLOBALS["SERVER_NAME"]); $protocol = CMain::IsHTTPS() ? "https" : "http"; if (strlen($site_id) > 0) { $rsSites = CSite::GetByID($arFields["SITE_ID"]); if ($arSite = $rsSites->Fetch()) { $arFilterLID = array("LID" => $site_id); if (strlen($arSite["SERVER_NAME"]) > 0) { $server_name = $arSite["SERVER_NAME"]; } } $strSiteCurrency = CSaleLang::GetLangCurrency($site_id); } else { $arFilterLID = array(); $strSiteCurrency = CCurrency::GetBaseCurrency(); } if ($saleRight != "W") { $arFilterPerms = array("STATUS_PERMS_GROUP_ID" => $GLOBALS["USER"]->GetUserGroupArray(), ">=STATUS_PERMS_PERM_VIEW" => "Y"); } else { $arFilterPerms = array(); } $d = date("w"); if ($d < 1) { $d = -6; } elseif ($d > 1) { $d = $d - 1; } else { $d = 0; } $BeforeLastWeek_minDate = ConvertTimeStamp(AddToTimeStamp(array("DD" => "-" . (14 + $d)), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $BeforeLastWeek_maxDate = ConvertTimeStamp(AddToTimeStamp(array("DD" => "-" . (7 + $d), "SS" => -1), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $LastWeek_minDate = ConvertTimeStamp(AddToTimeStamp(array("DD" => "-" . (7 + $d)), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $LastWeek_maxDate = ConvertTimeStamp(AddToTimeStamp(array("DD" => "-" . $d, "SS" => -1), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $ThisWeek_minDate = ConvertTimeStamp(AddToTimeStamp(array("DD" => "-" . $d), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $ThisWeek_maxDate = ConvertTimeStamp(mktime(0, 0, 0, date("n"), date("j") + 1, date("Y")), "FULL"); $BeforeYesterday_minDate = ConvertTimeStamp(AddToTimeStamp(array("DD" => "-2"), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $BeforeYesterday_maxDate = ConvertTimeStamp(AddToTimeStamp(array("DD" => "-1", "SS" => -1), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $Yesterday_minDate = ConvertTimeStamp(AddToTimeStamp(array("DD" => "-1"), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $Yesterday_maxDate = ConvertTimeStamp(AddToTimeStamp(array("SS" => -1), mktime(0, 0, 0, date("n"), date("j"), date("Y"))), "FULL"); $Today_minDate = ConvertTimeStamp(mktime(0, 0, 0, date("n"), date("j"), date("Y")), "FULL"); $Today_maxDate = ConvertTimeStamp(mktime(0, 0, 0, date("n"), date("j") + 1, date("Y")), "FULL"); $arDatePeriods = array("BEFORE_LAST_WEEK" => array("MIN_DATE" => $BeforeLastWeek_minDate, "MAX_DATE" => $BeforeLastWeek_maxDate), "LAST_WEEK" => array("MIN_DATE" => $LastWeek_minDate, "MAX_DATE" => $LastWeek_maxDate), "THIS_WEEK" => array("MIN_DATE" => $ThisWeek_minDate, "MAX_DATE" => $ThisWeek_maxDate), "BEFORE_YESTERDAY" => array("MIN_DATE" => $BeforeYesterday_minDate, "MAX_DATE" => $BeforeYesterday_maxDate), "YESTERDAY" => array("MIN_DATE" => $Yesterday_minDate, "MAX_DATE" => $Yesterday_maxDate), "TODAY" => array("MIN_DATE" => $Today_minDate, "MAX_DATE" => $Today_maxDate)); $arStatus1 = array("CREATED" => array("NAME" => GetMessage("BX_WS_SALE_STATUS_1_CREATED"), "DB_FIELD" => "DATE"), "PAID" => array("NAME" => GetMessage("BX_WS_SALE_STATUS_1_PAID"), "DB_FIELD" => "DATE_PAYED"), "CANCELED" => array("NAME" => GetMessage("BX_WS_SALE_STATUS_1_CANCELED"), "DB_FIELD" => "DATE_UPDATE", "Y_FIELD" => "CANCELED"), "ALLOW_DELIVERY" => array("NAME" => GetMessage("BX_WS_SALE_STATUS_1_ALLOW_DELIVERY"), "DB_FIELD" => "DATE_UPDATE", "Y_FIELD" => "ALLOW_DELIVERY")); foreach ($arDatePeriods as $key => $arPeriod) { foreach ($arStatus1 as $status_code => $arStatus) { $arOrderStats[$key][$status_code] = 0; $arOrderStats[$key]["PRICE_" . $status_code] = 0; } foreach ($arStatus1 as $status_code => $arStatus) { if (!is_array($arGadgetParams["ORDERS_STATUS_1"]) || in_array($status_code, $arGadgetParams["ORDERS_STATUS_1"])) { if (array_key_exists("Y_FIELD", $arStatus) && strlen($arStatus["Y_FIELD"]) > 0) { $arFilterYField = array($arStatus["Y_FIELD"] => "Y"); } else { $arFilterYField = array(); } $arFilter = array_merge(array($arStatus["DB_FIELD"] . "_FROM" => $arPeriod["MIN_DATE"], $arStatus["DB_FIELD"] . "_TO" => $arPeriod["MAX_DATE"]), $arFilterLID, $arFilterPerms, $arFilterYField); $dbOrder = CSaleOrder::GetList(array(), $arFilter, array("SUM" => "PRICE", "COUNT" => "ID")); if ($arOrder = $dbOrder->Fetch()) { $arOrderStats[$key][$status_code] = $arOrder["ID"]; $arOrderStats[$key]["PRICE_" . $status_code] = $arOrder["PRICE"]; } } } } $strSaleStat = '<table border="0">'; $strSaleStat .= '<tr><td> </td>'; foreach ($arStatus1 as $status_code => $arStatus) { $strSaleStat .= '<td><b>' . $arStatus["NAME"] . '</b></td>'; } $strSaleStat .= '</tr>'; $strSaleStat .= '<tr><td>' . GetMessage("BX_WS_SALE_TODAY") . '</td>'; foreach ($arStatus1 as $status_code => $arStatus) { $strSaleStat .= '<td align="center">' . intval($arOrderStats["TODAY"][$status_code]) . '</td>'; } $strSaleStat .= '</tr>'; $strSaleStat .= '<tr><td>' . GetMessage("BX_WS_SALE_YESTERDAY") . '</td>'; foreach ($arStatus1 as $status_code => $arStatus) { $strSaleStat .= '<td align="center">' . intval($arOrderStats["YESTERDAY"][$status_code]) . '</td>'; } $strSaleStat .= '</tr>'; $strSaleStat .= '<tr><td>' . GetMessage("BX_WS_SALE_BEFOREYESTERDAY") . '</td>'; foreach ($arStatus1 as $status_code => $arStatus) { $strSaleStat .= '<td align="center">' . intval($arOrderStats["BEFORE_YESTERDAY"][$status_code]) . '</td>'; } $strSaleStat .= '</tr>'; $strSaleStat .= '<tr><td>' . GetMessage("BX_WS_SALE_THISWEEK") . '</td>'; foreach ($arStatus1 as $status_code => $arStatus) { $strSaleStat .= '<td align="center">' . intval($arOrderStats["THIS_WEEK"][$status_code]) . '</td>'; } $strSaleStat .= '</tr>'; $strSaleStat .= '<tr><td>' . GetMessage("BX_WS_SALE_LASTWEEK") . '</td>'; foreach ($arStatus1 as $status_code => $arStatus) { $strSaleStat .= '<td align="center">' . intval($arOrderStats["LAST_WEEK"][$status_code]) . '</td>'; } $strSaleStat .= '</tr>'; $strSaleStat .= '<tr><td>' . GetMessage("BX_WS_SALE_BEFORELASTWEEK") . '</td>'; foreach ($arStatus1 as $status_code => $arStatus) { $strSaleStat .= '<td align="center">' . intval($arOrderStats["BEFORE_LAST_WEEK"][$status_code]) . '</td>'; } $strSaleStat .= '</tr>'; $strSaleStat .= '</table>'; $strSaleStatText = ''; foreach ($arStatus1 as $status_code => $arStatus) { $strSaleStatText .= '#BR#' . $arStatus["NAME"] . '#BR#'; $strSaleStatText .= GetMessage("BX_WS_SALE_TODAY") . ' ' . intval($arOrderStats["TODAY"][$status_code]) . (intval($arOrderStats["TODAY"][$status_code]) > 0 ? ' (' . CurrencyFormat($arOrderStats["TODAY"]["PRICE_" . $status_code], $strSiteCurrency) . ')' : '') . '#BR#'; $strSaleStatText .= GetMessage("BX_WS_SALE_YESTERDAY") . ' ' . intval($arOrderStats["YESTERDAY"][$status_code]) . (intval($arOrderStats["YESTERDAY"][$status_code]) > 0 ? ' (' . CurrencyFormat($arOrderStats["YESTERDAY"]["PRICE_" . $status_code], $strSiteCurrency) . ')' : '') . '#BR#'; $strSaleStatText .= GetMessage("BX_WS_SALE_BEFOREYESTERDAY") . ' ' . intval($arOrderStats["BEFORE_YESTERDAY"][$status_code]) . (intval($arOrderStats["BEFORE_YESTERDAY"][$status_code]) > 0 ? ' (' . CurrencyFormat($arOrderStats["BEFORE_YESTERDAY"]["PRICE_" . $status_code], $strSiteCurrency) . ')' : '') . '#BR#'; $strSaleStatText .= GetMessage("BX_WS_SALE_THISWEEK") . ' ' . intval($arOrderStats["THIS_WEEK"][$status_code]) . (intval($arOrderStats["THIS_WEEK"][$status_code]) > 0 ? ' (' . CurrencyFormat($arOrderStats["THIS_WEEK"]["PRICE_" . $status_code], $strSiteCurrency) . ')' : '') . '#BR#'; $strSaleStatText .= GetMessage("BX_WS_SALE_LASTWEEK") . ' ' . intval($arOrderStats["LAST_WEEK"][$status_code]) . (intval($arOrderStats["LAST_WEEK"][$status_code]) > 0 ? ' (' . CurrencyFormat($arOrderStats["LAST_WEEK"]["PRICE_" . $status_code], $strSiteCurrency) . ')' : '') . '#BR#'; $strSaleStatText .= GetMessage("BX_WS_SALE_BEFORELASTWEEK") . ' ' . intval($arOrderStats["BEFORE_LAST_WEEK"][$status_code]) . (intval($arOrderStats["BEFORE_LAST_WEEK"][$status_code]) > 0 ? ' (' . CurrencyFormat($arOrderStats["BEFORE_LAST_WEEK"]["PRICE_" . $status_code], $strSiteCurrency) . ')' : '') . '#BR#'; } $arResult = array("TITLE" => htmlspecialchars(GetMessage("BX_WS_SALE_LF_TITLE")), "MESSAGE" => htmlspecialchars($strSaleStat), "TEXT_MESSAGE" => htmlspecialchars($strSaleStatText), "URL" => htmlspecialchars($protocol . "://" . $server_name . "/bitrix/admin/sale_stat.php?lang=" . $lang)); return $arResult; }
/* $arrCURRENCY_FROM = $arParams["arrCURRENCY_FROM"]; // массив переводимых валют $CURRENCY_BASE = $arParams["CURRENCY_BASE"]; // валюта, к которой приводятся все значения $RATE_DAY = $arParams["RATE_DAY"]; // дата курсов в формате "Y-m-d" $SHOW_CB = $arParams["SHOW_CB"]; // показывать курсы с ЦБ РФ $CACHE_TIME = $arParams["CACHE_TIME"]; // время кэширования (сек.) */ $CACHE_TIME = IntVal($CACHE_TIME); $CACHE_ID = __FILE__ . md5(serialize($arParams)); $obCache = new CPHPCache(); if ($obCache->StartDataCache($CACHE_TIME, $CACHE_ID, "/")) { if (strlen($CURRENCY_BASE) <= 0) { $CURRENCY_BASE = COption::GetOptionString("sale", "default_currency"); } if (strlen($CURRENCY_BASE) <= 0) { $CURRENCY_BASE = CCurrency::GetBaseCurrency(); } if (strlen($CURRENCY_BASE) <= 0) { $dbCurrency = CCurrency::GetList($by = "SORT", $order = "ASC"); $arCurrency = $dbCurrency->Fetch(); $CURRENCY_BASE = $arCurrency["CURRENCY"]; } if (StrLen($CURRENCY_BASE) > 0) { if (strlen($RATE_DAY) <= 0) { $RATE_DAY_SHOW = GetTime(time(), "SHORT", LANGUAGE_ID); } else { $arRATE_DAY_PARSED = ParseDate($RATE_DAY, "ymd"); $RATE_DAY_SHOW = GetTime(mktime(0, 0, 0, $arRATE_DAY_PARSED[1], $arRATE_DAY_PARSED[0], $arRATE_DAY_PARSED[2]), "D.M.Y", LANGUAGE_ID); } if (count($arrCURRENCY_FROM) > 0) { if ($CURRENCY_BASE == "RUR" && $SHOW_CB == "Y") {
} $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]); if ($this->StartResultCache()) { if (!CModule::IncludeModule("currency")) { $this->AbortResultCache(); ShowError(GetMessage("CURRENCY_MODULE_NOT_INSTALLED")); return; } global $CACHE_MANAGER; $arResult = array(); $arResult["CURRENCY"] = array(); if ('' == $arParams["CURRENCY_BASE"]) { $arParams["CURRENCY_BASE"] = COption::GetOptionString("sale", "default_currency"); } if ('' == $arParams["CURRENCY_BASE"]) { $arParams["CURRENCY_BASE"] = CCurrency::GetBaseCurrency(); } if ('' == $arParams["CURRENCY_BASE"]) { $dbCurrency = CCurrency::GetList($by = "SORT", $order = "ASC"); $arCurrency = $dbCurrency->Fetch(); $arParams["CURRENCY_BASE"] = $arCurrency["CURRENCY"]; } if ('' != $arParams["CURRENCY_BASE"]) { if ('' == $arParams["RATE_DAY"]) { $arResult["RATE_DAY_TIMESTAMP"] = time(); $arResult["RATE_DAY_SHOW"] = ConvertTimeStamp($arResult["RATE_DAY_TIMESTAMP"], 'SHORT'); } else { $arRATE_DAY_PARSED = ParseDateTime($arParams["RATE_DAY"], "YYYY-MM-DD"); $arRATE_DAY_PARSED['YYYY'] = intval($arRATE_DAY_PARSED['YYYY']); if (1901 > $arRATE_DAY_PARSED["YYYY"] || 2038 < $arRATE_DAY_PARSED["YYYY"]) { $arResult["RATE_DAY_TIMESTAMP"] = time();
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $arPrice = array(); if (CModule::IncludeModule("catalog")) { $rsPrice = CCatalogGroup::GetList($v1 = "sort", $v2 = "asc"); while ($arr = $rsPrice->Fetch()) { $arPrice[$arr["NAME"]] = "[" . $arr["NAME"] . "] " . $arr["NAME_LANG"]; } } $arTemplateParameters = array("SHOW_INPUT" => array("NAME" => GetMessage("TP_BST_SHOW_INPUT"), "TYPE" => "CHECKBOX", "DEFAULT" => "Y", "REFRESH" => "Y"), "INPUT_ID" => array("NAME" => GetMessage("TP_BST_INPUT_ID"), "TYPE" => "STRING", "DEFAULT" => "title-search-input"), "CONTAINER_ID" => array("NAME" => GetMessage("TP_BST_CONTAINER_ID"), "TYPE" => "STRING", "DEFAULT" => "title-search"), "PRICE_CODE" => array("PARENT" => "PRICES", "NAME" => GetMessage("TP_BST_PRICE_CODE"), "TYPE" => "LIST", "MULTIPLE" => "Y", "VALUES" => $arPrice), "PREVIEW_TRUNCATE_LEN" => array("PARENT" => "ADDITIONAL_SETTINGS", "NAME" => GetMessage("TP_BST_PREVIEW_TRUNCATE_LEN"), "TYPE" => "STRING", "DEFAULT" => ""), "SHOW_PREVIEW" => array("NAME" => GetMessage("TP_BST_SHOW_PREVIEW"), "TYPE" => "CHECKBOX", "DEFAULT" => "Y", "REFRESH" => "Y")); if (isset($arCurrentValues['SHOW_PREVIEW']) && 'Y' == $arCurrentValues['SHOW_PREVIEW']) { $arTemplateParameters["PREVIEW_WIDTH"] = array("NAME" => GetMessage("TP_BST_PREVIEW_WIDTH"), "TYPE" => "STRING", "DEFAULT" => 75); $arTemplateParameters["PREVIEW_HEIGHT"] = array("NAME" => GetMessage("TP_BST_PREVIEW_HEIGHT"), "TYPE" => "STRING", "DEFAULT" => 75); } if (CModule::IncludeModule('catalog') && CModule::IncludeModule('currency')) { $arTemplateParameters['CONVERT_CURRENCY'] = array('PARENT' => 'PRICES', 'NAME' => GetMessage('TP_BST_CONVERT_CURRENCY'), 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'N', 'REFRESH' => 'Y'); if (isset($arCurrentValues['CONVERT_CURRENCY']) && 'Y' == $arCurrentValues['CONVERT_CURRENCY']) { $arCurrencyList = array(); $rsCurrencies = CCurrency::GetList($by = 'SORT', $order = 'ASC'); while ($arCurrency = $rsCurrencies->Fetch()) { $arCurrencyList[$arCurrency['CURRENCY']] = $arCurrency['CURRENCY']; } $arTemplateParameters['CURRENCY_ID'] = array('PARENT' => 'PRICES', 'NAME' => GetMessage('TP_BST_CURRENCY_ID'), 'TYPE' => 'LIST', 'VALUES' => $arCurrencyList, 'DEFAULT' => CCurrency::GetBaseCurrency(), "ADDITIONAL_VALUES" => "Y"); } }
} $arUsersGroups = array(); $dbGroups = CGroup::GetList($b = "c_sort", $o = "asc", array("ANONYMOUS" => "N")); while ($arGroups = $dbGroups->Fetch()) { $arUsersGroups[] = $arGroups; } $sTableID = "tbl_sale_buyers"; $oSort = new CAdminSorting($sTableID, "LAST_LOGIN", "desc"); $lAdmin = new CAdminList($sTableID, $oSort); $arFilterFields = array("filter_universal", "filter_ID", "filter_login", "filter_mail", "filter_phone", "filter_lid", "find_last_login_1", "filter_mobile", "filter_dateauth", "filter_group", "find_last_login_2", "filter_price_all_from", "filter_price_all_to", "filter_quantity_all_from", "filter_quantity_all_to"); $lAdmin->InitFilter($arFilterFields); /* COLLECTION FILTER */ $arFilter = array(); if (!isset($filter_currency) || $filter_currency == "") { if (CModule::IncludeModule("currency")) { $arFilter["CURRENCY"] = CCurrency::GetBaseCurrency(); $filter_currency = $arFilter["CURRENCY"]; } } else { $arFilter["CURRENCY"] = $filter_currency; } if (!isset($filter_lid) || $filter_lid == "") { $rsSites = CSite::GetList($by2 = "SORT", $order2 = "ASC", array("ACTIVE" => "Y")); $arSite = $rsSites->Fetch(); $arFilter["LID"] = $arSite["ID"]; $filter_lid = $arFilter["LID"]; } else { $arFilter["LID"] = $filter_lid; } if (isset($filter_login)) { $arFilter["LOGIN"] = trim($filter_login);
@fwrite($fp, "<name>".$APPLICATION->ConvertCharset(htmlspecialcharsbx(COption::GetOptionString("main", "site_name", "")), LANG_CHARSET, 'windows-1251')."</name>\n"); @fwrite($fp, "<company>".$APPLICATION->ConvertCharset(htmlspecialcharsbx(COption::GetOptionString("main", "site_name", "")), LANG_CHARSET, 'windows-1251')."</company>\n"); @fwrite($fp, "<url>http://".htmlspecialcharsbx($ar_iblock['SERVER_NAME'])."</url>\n"); $strTmp = "<currencies>\n"; if ($arCurrency = CCurrency::GetByID('RUR')) $RUR = 'RUR'; else $RUR = 'RUB'; $arCurrencyAllowed = array($RUR, 'USD', 'EUR', 'UAH', 'BYR', 'KZT'); $BASE_CURRENCY = CCurrency::GetBaseCurrency(); if (is_array($XML_DATA['CURRENCY'])) { foreach ($XML_DATA['CURRENCY'] as $CURRENCY => $arCurData) { if (in_array($CURRENCY, $arCurrencyAllowed)) { $strTmp.= "<currency id=\"".$CURRENCY."\"" ." rate=\"".($arCurData['rate'] == 'SITE' ? CCurrencyRates::ConvertCurrency(1, $CURRENCY, $RUR) : $arCurData['rate'])."\"" .($arCurData['plus'] > 0 ? ' plus="'.intval($arCurData['plus']).'"' : '') ." />\n"; } } } else {
'QUANTITY' => (int)$ar_res['QUANTITY'] + (int)$bItms[$item['offer']['externalId']]['QUANTITY'] - (int) $item['quantity'], 'QUANTITY_RESERVED' => (int)$ar_res['QUANTITY_RESERVED'] - (int)$bItms[$item['offer']['externalId']]['QUANTITY'] + (int) $item['quantity'], ); $d = CCatalogProduct::Update($item['offer']['externalId'], $arFields); } }//если нет, добавляем else{ $p = CIBlockElement::GetByID($item['offer']['externalId'])->Fetch(); $iblock = CIBlock::GetByID($p['IBLOCK_ID'])->Fetch(); $p['CATALOG_XML_ID'] = $iblock['XML_ID']; $p['PRODUCT_XML_ID'] = $p['XML_ID']; $arProduct = array( 'FUSER_ID' => $userId, 'ORDER_ID' => $order['externalId'], 'QUANTITY' => $item['quantity'], 'CURRENCY' => CCurrency::GetBaseCurrency(), 'LID' => $LID, 'PRODUCT_ID' => $item['offer']['externalId'], 'PRODUCT_PRICE_ID' => $p['PRODUCT_PRICE_ID'], 'WEIGHT' => $p['WEIGHT'], 'DELAY' => $p['DELAY'], 'CAN_BUY' => $p['CAN_BUY'], 'MODULE' => $p['MODULE'], 'NOTES' => $item['comment'] ?: $p['NOTES'], 'PRODUCT_PROVIDER_CLASS' => $p['PRODUCT_PROVIDER_CLASS'], 'DETAIL_PAGE_URL' => $p['DETAIL_PAGE_URL'], 'CATALOG_XML_ID' => $p['CATALOG_XML_ID'], 'PRODUCT_XML_ID' => $p['PRODUCT_XML_ID'], 'CUSTOM_PRICE' => 'Y' ); if (isset($item['initialPrice']) && $item['initialPrice']) {
protected function loadStat(YandexDirectLive $liveEngine, $campaignXmlId, $dateStart, $dateFinish, $skipCurrency = false) { $dateStart = new Date($dateStart); $dateFinish = new Date($dateFinish); $queryData = array("CampaignID" => $campaignXmlId, "StartDate" => $dateStart->format("Y-m-d"), 'EndDate' => $dateFinish->format("Y-m-d"), 'GroupByColumns' => array('clDate', 'clBanner')); $currency = ''; if (!$skipCurrency && Loader::includeModule('currency')) { $baseCurrency = \CCurrency::GetBaseCurrency(); if ($baseCurrency == 'RUR') { $baseCurrency = 'RUB'; } if (in_array($baseCurrency, $liveEngine->allowedCurrency)) { $currency = $baseCurrency; } } if ($currency != '') { $queryData['Currency'] = $currency; } try { $result = $liveEngine->getBannerStats($queryData); $result['Currency'] = $currency; } catch (YandexDirectException $e) { if ($currency != '' && $e->getCode() == YandexDirectLive::ERROR_WRONG_CURRENCY) { $result = static::loadStat($liveEngine, $campaignXmlId, $dateStart, $dateFinish, true); } else { throw $e; } } return $result; }
} } } $sum = 0; $sumHtml = ""; $alertIntervalText = ""; $uptimeRate = 1; if ($bAlert) { if ($uptime !== "") { $uptime = explode("/", $uptime); if ($uptime[0] > 0 && $uptime[1] > 0) { $uptimeRate = $uptime[0] / $uptime[1]; } } if ($uptimeRate < 1 && $saleIncluded) { $base = CCurrency::GetBaseCurrency(); $r = CSaleOrder::GetList(array(), array(">=DATE_INSERT" => ConvertTimeStamp(time() - $monitoring->getInterval() * 24 * 3400, "SHORT")), array("LID", "CURRENCY", "SUM" => "PRICE")); while ($a = $r->fetch()) { $sum += CCurrencyRates::ConvertCurrency($a["PRICE"], $a["CURRENCY"], $base); } $sum *= 1 - $uptimeRate; if ($sum <= 0.0) { $sumHtml = number_format((1 - $uptimeRate) * 100, 2, '.', ' ') . "%"; $alertIntervalText = $intervalLang["uptime"][$monitoring->getInterval()]; } else { $sumHtml = CurrencyFormat($sum, $base); $alertIntervalText = $intervalLang["sale"][$monitoring->getInterval()]; } } elseif ($testCount === 1 && HasMessage("GD_BITRIXCLOUD_MONITOR_" . strtoupper($testAlert->getName()))) { $uptimeRate = 1; $resultText = FormatDate("ddiff", time(), $testAlert->getResult());
//You may customize user card fields to display $arResult['USER_PROPERTY'] = array("UF_DEPARTMENT"); $arIBlocks = array(); $arResult["SEARCH"] = array(); foreach ($arResult["CATEGORIES"] as $category_id => $arCategory) { foreach ($arCategory["ITEMS"] as $i => $arItem) { if (isset($arItem["ITEM_ID"])) { $arResult["SEARCH"][] =& $arResult["CATEGORIES"][$category_id]["ITEMS"][$i]; } } } foreach ($arResult["SEARCH"] as $i => $arItem) { switch ($arItem["MODULE_ID"]) { case "iblock": if (CModule::IncludeModule("catalog")) { $arParams["CURRENCY"] = $arParams["CURRENCY"] ? $arParams["CURRENCY"] : CCurrency::GetBaseCurrency(); $arConvertParams = array('CURRENCY_ID' => $arParams["CURRENCY"]); $ProductPrarams = CCatalogProduct::GetByID($arItem["ITEM_ID"]); //echo $ProductPrarams[VAT_INCLUDED]; $arPrices = CatalogGetPriceTableEx($arItem["ITEM_ID"], 0, array(), 'Y', $arConvertParams); unset($arResult["SEARCH"][$i]["MIN_PRICE"]); unset($arResult["SEARCH"][$i]["PRICES"]); foreach ($arParams["PRICE_CODE"] as $key => $prid) { if ($arPrices["MATRIX"][$prid][0]) { if (isset($arResult["SEARCH"][$i]["MIN_PRICE"])) { if ($arPrices["MATRIX"][$prid][0]["ORIG_DISCOUNT_PRICE"]) { $price_orig_val = $arPrices["MATRIX"][$prid][0]["ORIG_DISCOUNT_PRICE"]; } else { $price_orig_val = $arPrices["MATRIX"][$prid][0]["DISCOUNT_PRICE"]; } if ($arResult["SEARCH"][$i]["MIN_PRICE"]["DISCOUNT_PRICE"] > $price_orig_val) {
unset($strEmptyPreview); $arSKUPropList = array(); $arSKUPropIDs = array(); $arSKUPropKeys = array(); $boolSKU = false; $strBaseCurrency = ''; $boolConvert = isset($arResult['CONVERT_CURRENCY']['CURRENCY_ID']); // $skuPropList = array(); // array("id_catalog" => array(...)) $skuPropIds = array(); // array("id_catalog" => array(...)) $skuPropKeys = array(); // array("id_catalog" => array(...)) if (!$boolConvert) { $strBaseCurrency = CCurrency::GetBaseCurrency(); } $catalogs = array(); foreach ($arResult['CATALOGS'] as $catalog) { $offersCatalogId = (int) $catalog['OFFERS_IBLOCK_ID']; $offersPropId = (int) $catalog['OFFERS_PROPERTY_ID']; $catalogId = (int) $catalog['IBLOCK_ID']; $sku = false; if ($offersCatalogId > 0 && $offersPropId > 0) { $sku = array("IBLOCK_ID" => $offersCatalogId, "SKU_PROPERTY_ID" => $offersPropId, "PRODUCT_IBLOCK_ID" => $catalogId); } if (!empty($sku) && is_array($sku)) { $skuPropList[$catalogId] = CIBlockPriceTools::getTreeProperties($sku, $arParams['OFFER_TREE_PROPS'][$offersCatalogId], array('PICT' => $arEmptyPreview, 'NAME' => '-')); $needValues = array(); CIBlockPriceTools::getTreePropertyValues($skuPropList[$catalogId], $needValues); $skuPropIds[$catalogId] = array_keys($skuPropList[$catalogId]);
public static function GetItemPrices($IBLOCK_ID, $arCatalogPrices, $arItem, $bVATInclude = true, $arCurrencyParams = array(), $USER_ID = 0, $LID = SITE_ID) { $arPrices = array(); if (empty($arCatalogPrices) || !is_array($arCatalogPrices)) { return $arPrices; } global $USER; static $arCurUserGroups = array(); static $strBaseCurrency = ''; if (self::$catalogIncluded === null) self::$catalogIncluded = \Freetrix\Main\Loader::includeModule('catalog'); if (self::$catalogIncluded) { $USER_ID = intval($USER_ID); $intUserID = $USER_ID; if (0 >= $intUserID) $intUserID = $USER->GetID(); if (!isset($arCurUserGroups[$intUserID])) { $arUserGroups = (0 < $USER_ID ? CUser::GetUserGroup($USER_ID) : $USER->GetUserGroupArray()); CatalogClearArray($arUserGroups); $arCurUserGroups[$intUserID] = $arUserGroups; } else { $arUserGroups = $arCurUserGroups[$intUserID]; } $boolConvert = false; $strCurrencyID = ''; if (isset($arCurrencyParams['CURRENCY_ID']) && !empty($arCurrencyParams['CURRENCY_ID'])) { $boolConvert = true; $strCurrencyID = $arCurrencyParams['CURRENCY_ID']; } if (!$boolConvert && '' == $strBaseCurrency) $strBaseCurrency = CCurrency::GetBaseCurrency(); $strMinCode = ''; $boolStartMin = true; $dblMinPrice = 0; $strMinCurrency = ($boolConvert ? $strCurrencyID : $strBaseCurrency); CCatalogDiscountSave::Disable(); foreach($arCatalogPrices as $key => $value) { if($value["CAN_VIEW"] && strlen($arItem["CATALOG_PRICE_".$value["ID"]]) > 0) { // get final price with VAT included. if ($arItem['CATALOG_VAT_INCLUDED'] != 'Y') { $arItem['CATALOG_PRICE_'.$value['ID']] *= (1 + $arItem['CATALOG_VAT'] * 0.01); } // so discounts will include VAT $arDiscounts = CCatalogDiscount::GetDiscount( $arItem["ID"], $arItem["IBLOCK_ID"], array($value["ID"]), $arUserGroups, "N", $LID, array() ); $discountPrice = CCatalogProduct::CountPriceWithDiscount( $arItem["CATALOG_PRICE_".$value["ID"]], $arItem["CATALOG_CURRENCY_".$value["ID"]], $arDiscounts ); // get clear prices WO VAT $arItem['CATALOG_PRICE_'.$value['ID']] /= (1 + $arItem['CATALOG_VAT'] * 0.01); $discountPrice /= (1 + $arItem['CATALOG_VAT'] * 0.01); $vat_value_discount = $discountPrice * $arItem['CATALOG_VAT'] * 0.01; $vat_discountPrice = $discountPrice + $vat_value_discount; $vat_value = $arItem['CATALOG_PRICE_'.$value['ID']] * $arItem['CATALOG_VAT'] * 0.01; $vat_price = $arItem["CATALOG_PRICE_".$value["ID"]] + $vat_value; if ($boolConvert && $strCurrencyID != $arItem["CATALOG_CURRENCY_".$value["ID"]]) { $strOrigCurrencyID = $arItem["CATALOG_CURRENCY_".$value["ID"]]; $dblOrigNoVat = $arItem["CATALOG_PRICE_".$value["ID"]]; $dblNoVat = CCurrencyRates::ConvertCurrency($dblOrigNoVat, $strOrigCurrencyID, $strCurrencyID); $dblVatPrice = CCurrencyRates::ConvertCurrency($vat_price, $strOrigCurrencyID, $strCurrencyID); $dblVatValue = CCurrencyRates::ConvertCurrency($vat_value, $strOrigCurrencyID, $strCurrencyID); $dblDiscountValueNoVat = CCurrencyRates::ConvertCurrency($discountPrice, $strOrigCurrencyID, $strCurrencyID); $dblVatDiscountPrice = CCurrencyRates::ConvertCurrency($vat_discountPrice, $strOrigCurrencyID, $strCurrencyID); $dblDiscountValueVat = CCurrencyRates::ConvertCurrency($vat_value_discount, $strOrigCurrencyID, $strCurrencyID); $arPrices[$key] = array( 'ORIG_VALUE_NOVAT' => $dblOrigNoVat, "VALUE_NOVAT" => $dblNoVat, "PRINT_VALUE_NOVAT" => CCurrencyLang::CurrencyFormat($dblNoVat, $strCurrencyID, true), 'ORIG_VALUE_VAT' => $vat_price, "VALUE_VAT" => $dblVatPrice, "PRINT_VALUE_VAT" => CCurrencyLang::CurrencyFormat($dblVatPrice, $strCurrencyID, true), 'ORIG_VATRATE_VALUE' => $vat_value, "VATRATE_VALUE" => $dblVatValue, "PRINT_VATRATE_VALUE" => CCurrencyLang::CurrencyFormat($dblVatValue, $strCurrencyID, true), 'ORIG_DISCOUNT_VALUE_NOVAT' => $discountPrice, "DISCOUNT_VALUE_NOVAT" => $dblDiscountValueNoVat, "PRINT_DISCOUNT_VALUE_NOVAT" => CCurrencyLang::CurrencyFormat($dblDiscountValueNoVat, $strCurrencyID, true), "ORIG_DISCOUNT_VALUE_VAT" => $vat_discountPrice, "DISCOUNT_VALUE_VAT" => $dblVatDiscountPrice, "PRINT_DISCOUNT_VALUE_VAT" => CCurrencyLang::CurrencyFormat($dblVatDiscountPrice, $strCurrencyID, true), 'ORIG_DISCOUNT_VATRATE_VALUE' => $vat_value_discount, 'DISCOUNT_VATRATE_VALUE' => $dblDiscountValueVat, 'PRINT_DISCOUNT_VATRATE_VALUE' => CCurrencyLang::CurrencyFormat($dblDiscountValueVat, $strCurrencyID, true), 'ORIG_CURRENCY' => $strOrigCurrencyID, "CURRENCY" => $strCurrencyID, ); } else { $strPriceCurrency = $arItem["CATALOG_CURRENCY_".$value["ID"]]; $arPrices[$key] = array( "VALUE_NOVAT" => $arItem["CATALOG_PRICE_".$value["ID"]], "PRINT_VALUE_NOVAT" => CCurrencyLang::CurrencyFormat($arItem["CATALOG_PRICE_".$value["ID"]], $strPriceCurrency, true), "VALUE_VAT" => $vat_price, "PRINT_VALUE_VAT" => CCurrencyLang::CurrencyFormat($vat_price, $strPriceCurrency, true), "VATRATE_VALUE" => $vat_value, "PRINT_VATRATE_VALUE" => CCurrencyLang::CurrencyFormat($vat_value, $strPriceCurrency, true), "DISCOUNT_VALUE_NOVAT" => $discountPrice, "PRINT_DISCOUNT_VALUE_NOVAT" => CCurrencyLang::CurrencyFormat($discountPrice, $strPriceCurrency, true), "DISCOUNT_VALUE_VAT" => $vat_discountPrice, "PRINT_DISCOUNT_VALUE_VAT" => CCurrencyLang::CurrencyFormat($vat_discountPrice, $strPriceCurrency, true), 'DISCOUNT_VATRATE_VALUE' => $vat_value_discount, 'PRINT_DISCOUNT_VATRATE_VALUE' => CCurrencyLang::CurrencyFormat($vat_value_discount, $strPriceCurrency, true), "CURRENCY" => $arItem["CATALOG_CURRENCY_".$value["ID"]], ); } $arPrices[$key]["ID"] = $arItem["CATALOG_PRICE_ID_".$value["ID"]]; $arPrices[$key]["CAN_ACCESS"] = $arItem["CATALOG_CAN_ACCESS_".$value["ID"]]; $arPrices[$key]["CAN_BUY"] = $arItem["CATALOG_CAN_BUY_".$value["ID"]]; $arPrices[$key]['MIN_PRICE'] = 'N'; if ($bVATInclude) { $arPrices[$key]['VALUE'] = $arPrices[$key]['VALUE_VAT']; $arPrices[$key]['PRINT_VALUE'] = $arPrices[$key]['PRINT_VALUE_VAT']; $arPrices[$key]['DISCOUNT_VALUE'] = $arPrices[$key]['DISCOUNT_VALUE_VAT']; $arPrices[$key]['PRINT_DISCOUNT_VALUE'] = $arPrices[$key]['PRINT_DISCOUNT_VALUE_VAT']; } else { $arPrices[$key]['VALUE'] = $arPrices[$key]['VALUE_NOVAT']; $arPrices[$key]['PRINT_VALUE'] = $arPrices[$key]['PRINT_VALUE_NOVAT']; $arPrices[$key]['DISCOUNT_VALUE'] = $arPrices[$key]['DISCOUNT_VALUE_NOVAT']; $arPrices[$key]['PRINT_DISCOUNT_VALUE'] = $arPrices[$key]['PRINT_DISCOUNT_VALUE_NOVAT']; } if (roundEx($arPrices[$key]['VALUE'], 2) == roundEx($arPrices[$key]['DISCOUNT_VALUE'], 2)) { $arPrices[$key]['DISCOUNT_DIFF'] = 0; $arPrices[$key]['DISCOUNT_DIFF_PERCENT'] = 0; $arPrices[$key]['PRINT_DISCOUNT_DIFF'] = CCurrencyLang::CurrencyFormat(0, $arPrices[$key]['CURRENCY'], true); } else { $arPrices[$key]['DISCOUNT_DIFF'] = $arPrices[$key]['VALUE'] - $arPrices[$key]['DISCOUNT_VALUE']; $arPrices[$key]['DISCOUNT_DIFF_PERCENT'] = roundEx(100*$arPrices[$key]['DISCOUNT_DIFF']/$arPrices[$key]['VALUE'], 0); $arPrices[$key]['PRINT_DISCOUNT_DIFF'] = CCurrencyLang::CurrencyFormat($arPrices[$key]['DISCOUNT_DIFF'], $arPrices[$key]['CURRENCY'], true); } if ($value["CAN_VIEW"]) { if ($boolStartMin) { $dblMinPrice = ($boolConvert || ($arPrices[$key]['CURRENCY'] == $strMinCurrency) ? $arPrices[$key]['DISCOUNT_VALUE'] : CCurrencyRates::ConvertCurrency($arPrices[$key]['DISCOUNT_VALUE'], $arPrices[$key]['CURRENCY'], $strMinCurrency) ); $strMinCode = $key; $boolStartMin = false; } else { $dblComparePrice = ($boolConvert || ($arPrices[$key]['CURRENCY'] == $strMinCurrency) ? $arPrices[$key]['DISCOUNT_VALUE'] : CCurrencyRates::ConvertCurrency($arPrices[$key]['DISCOUNT_VALUE'], $arPrices[$key]['CURRENCY'], $strMinCurrency) ); if ($dblMinPrice > $dblComparePrice) { $dblMinPrice = $dblComparePrice; $strMinCode = $key; } } } } } if ('' != $strMinCode) $arPrices[$strMinCode]['MIN_PRICE'] = 'Y'; CCatalogDiscountSave::Enable(); } else { $strMinCode = ''; $boolStartMin = true; $dblMinPrice = 0; foreach($arCatalogPrices as $key => $value) { if($value["CAN_VIEW"]) { $dblValue = round(doubleval($arItem["PROPERTY_".$value["ID"]."_VALUE"]), 2); if ($boolStartMin) { $dblMinPrice = $dblValue; $strMinCode = $key; $boolStartMin = false; } else { if ($dblMinPrice > $dblValue) { $dblMinPrice = $dblValue; $strMinCode = $key; } } $arPrices[$key] = array( "ID" => $arItem["PROPERTY_".$value["ID"]."_VALUE_ID"], "VALUE" => $dblValue, "PRINT_VALUE" => $dblValue." ".$arItem["PROPERTY_".$value["ID"]."_DESCRIPTION"], "DISCOUNT_VALUE" => $dblValue, "PRINT_DISCOUNT_VALUE" => $dblValue." ".$arItem["PROPERTY_".$value["ID"]."_DESCRIPTION"], "CURRENCY" => $arItem["PROPERTY_".$value["ID"]."_DESCRIPTION"], "CAN_ACCESS" => true, "CAN_BUY" => false, 'DISCOUNT_DIFF_PERCENT' => 0, 'DISCOUNT_DIFF' => 0, 'PRINT_DISCOUNT_DIFF' => '0 '.$arItem["PROPERTY_".$value["ID"]."_DESCRIPTION"], "MIN_PRICE" => "N" ); } } if ('' != $strMinCode) $arPrices[$strMinCode]['MIN_PRICE'] = 'Y'; } return $arPrices; }
); if (isset($arCurrentValues['CONVERT_CURRENCY']) && $arCurrentValues['CONVERT_CURRENCY'] == 'Y') { $arCurrencyList = array(); $currencyIterator = CurrencyTable::getList(array( 'select' => array('CURRENCY'), 'order' => array('SORT' => 'ASC') )); while ($currency = $currencyIterator->fetch()) { $arCurrencyList[$currency['CURRENCY']] = $currency['CURRENCY']; } unset($currency, $currencyIterator); $arComponentParameters['PARAMETERS']['CURRENCY_ID'] = array( 'PARENT' => 'PRICES', 'NAME' => GetMessage('CP_BCCR_CURRENCY_ID'), 'TYPE' => 'LIST', 'VALUES' => $arCurrencyList, 'DEFAULT' => CCurrency::GetBaseCurrency(), "ADDITIONAL_VALUES" => "Y", ); } } if(!$OFFERS_IBLOCK_ID) { unset($arComponentParameters["PARAMETERS"]["OFFERS_FIELD_CODE"]); unset($arComponentParameters["PARAMETERS"]["OFFERS_PROPERTY_CODE"]); } ?>
/** * @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; }
__IncludeLang(GetLangFileName($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/currency/lang/", "/currencies_rates.php")); if ($CURRENCY_RIGHT == "D") { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } $RATE = $RATE_CNT = ""; $strError = ""; $port = 80; if (!check_bitrix_sessid()) { $strError = GetMessage("ERROR_SESSID"); } if ($DATE_RATE == "" || !$DB->IsDate($DATE_RATE) || strlen($CURRENCY) < 0) { $strError = GetMessage("ERROR_DATE_RATE"); } if (strlen($strError) <= 0) { //currency $currantCurrancy = CCurrency::GetBaseCurrency(); //select host if ($currantCurrancy == "UAH") { //ukraina $host = "pfsoft.com.ua"; $path = "/service/currency/"; $QUERY_STR = "date=" . $DB->FormatDate($DATE_RATE, CLang::GetDateFormat("SHORT", $lang), "DMY"); } elseif ($currantCurrancy == "BYR") { //belarus $host = "www.nbrb.by"; $path = "/Services/XmlExRates.aspx"; $QUERY_STR = "ondate=" . $DB->FormatDate($DATE_RATE, CLang::GetDateFormat("SHORT", $lang), "Y-M-D"); } else { //all time russia $host = "www.cbr.ru"; $path = "/scripts/XML_daily.asp";
if (isset($arOneItem)) { unset($arOneItem); } $arItems = array_merge($arOrder['BASKET_ITEMS'], $arItems); } $arCompare = $_SESSION[$arParams["NAME"]]; if ($arCompare) { foreach ($arCompare as $ib => $arIblock) { if ($arIblock['ITEMS']) { foreach ($arIblock['ITEMS'] as $id => $arItem) { $arCompare[$ib]['ITEMS'][$id]["DELETE_URL"] = htmlspecialcharsbx($APPLICATION->GetCurPageParam("action=DELETE_FROM_COMPARE_LIST&id=" . $arItem["ID"], array("action", "id"))); } } } } $arResult = array('READY' => $bReady ? "Y" : "N", 'DELAY' => $bDelay ? "Y" : "N", 'NOTAVAIL' => $bNotAvail ? "Y" : "N", 'SUBSCRIBE' => $bSubscribe ? "Y" : "N", 'PRICE' => $allSum, 'COUNT' => $count, 'PRICE_FORMATED' => SaleFormatCurrency($allSum, CCurrency::GetBaseCurrency()), 'ITEMS' => $arItems, 'COMPARE' => $arCompare); if (!function_exists('digital')) { function digital($n, $form1, $form2, $form3) { $n = abs($n) % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) { return $form3; } if ($n1 > 1 && $n1 < 5) { return $form2; } if ($n1 == 1) { return $form1; } return $form3;