function Update($ID, $arFields) { global $DB; $ID = IntVal($ID); if ($ID <= 0) { return False; } $arFields1 = array(); foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!CSaleAffiliateTier::CheckFields("UPDATE", $arFields, $ID)) { return false; } $strUpdate = $DB->PrepareUpdate("b_sale_affiliate_tier", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($strUpdate) > 0) { $strUpdate .= ", "; } $strUpdate .= $key . "=" . $value . " "; } $strSql = "UPDATE b_sale_affiliate_tier SET " . $strUpdate . " WHERE ID = " . $ID . " "; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); unset($GLOBALS["SALE_AFFILIATE_TIER"]["SALE_AFFILIATE_TIER_CACHE_" . $ID]); return $ID; }
public static function Add($arFields) { global $DB; $arFields1 = array(); foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!CSaleAffiliateTier::CheckFields("ADD", $arFields, 0)) { return false; } $arInsert = $DB->PrepareInsert("b_sale_affiliate_tier", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($arInsert[0]) > 0) { $arInsert[0] .= ", "; $arInsert[1] .= ", "; } $arInsert[0] .= $key; $arInsert[1] .= $value; } $strSql = "INSERT INTO b_sale_affiliate_tier(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $ID = IntVal($DB->LastID()); return $ID; }
function CalculateAffiliate($affiliate, $dateFrom = false, $dateTo = false, $datePlanFrom = false, $datePlanTo = false) { global $DB; // Prepare function params - affiliate $arAffiliate = CSaleAffiliate::CheckAffiliateFunc($affiliate); if (!$arAffiliate) { return False; } $db_events = GetModuleEvents("sale", "OnBeforeAffiliateCalculate"); while ($arEvent = $db_events->Fetch()) { if (ExecuteModuleEventEx($arEvent, array(&$arAffiliate, &$dateFrom, &$dateTo, &$datePlanFrom, &$datePlanTo)) === false) { return false; } } $affiliateID = IntVal($arAffiliate["ID"]); if (!$dateFrom || StrLen($dateFrom) <= 0) { if (StrLen($arAffiliate["LAST_CALCULATE"]) > 0) { $dateFrom = $arAffiliate["LAST_CALCULATE"]; } else { $dateFrom = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), mktime(0, 0, 0, 1, 1, 1990)); } } if (!$dateTo || StrLen($dateTo) <= 0) { $dateTo = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time() + CTimeZone::GetOffset()); } // Get affiliate plan $arAffiliatePlan = CSaleAffiliate::SetAffiliatePlan($arAffiliate, $datePlanFrom, $datePlanTo); if (!$arAffiliatePlan) { return False; } if ($arAffiliatePlan && !is_array($arAffiliatePlan)) { return true; } // Get affiliate plan params $arPlanSections = array(); $dbPlanSection = CSaleAffiliatePlanSection::GetList(array(), array("PLAN_ID" => $arAffiliate["PLAN_ID"]), false, false, array("ID", "MODULE_ID", "SECTION_ID", "RATE", "RATE_TYPE", "RATE_CURRENCY")); while ($arPlanSection = $dbPlanSection->Fetch()) { $arPlanSections[$arPlanSection["MODULE_ID"] . $arPlanSection["SECTION_ID"]] = $arPlanSection; } // Get affiliate parents $arAffiliateParents = array(); $affiliateParent = IntVal($arAffiliate["AFFILIATE_ID"]); $count = 0; while ($affiliateParent > 0 && $count < 5) { $dbAffiliateParent = CSaleAffiliate::GetList(array(), array("ID" => $affiliateParent, "ACTIVE" => "Y"), false, false, array("ID", "AFFILIATE_ID")); if ($arAffiliateParent = $dbAffiliateParent->Fetch()) { $count++; $arAffiliateParents[] = $affiliateParent; $affiliateParent = IntVal($arAffiliateParent["AFFILIATE_ID"]); } else { $affiliateParent = 0; } } // Get tier if (!array_key_exists("SALE_AFFILIATE_TIER_TMP_CACHE", $GLOBALS)) { $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"] = array(); } if (!array_key_exists($arAffiliate["SITE_ID"], $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"])) { $dbAffiliateTier = CSaleAffiliateTier::GetList(array(), array("SITE_ID" => $arAffiliate["SITE_ID"]), false, false, array("RATE1", "RATE2", "RATE3", "RATE4", "RATE5")); if ($arAffiliateTier = $dbAffiliateTier->Fetch()) { $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"][$arAffiliate["SITE_ID"]] = array(DoubleVal($arAffiliateTier["RATE1"]), DoubleVal($arAffiliateTier["RATE2"]), DoubleVal($arAffiliateTier["RATE3"]), DoubleVal($arAffiliateTier["RATE4"]), DoubleVal($arAffiliateTier["RATE5"])); } else { $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"][$arAffiliate["SITE_ID"]] = array(0, 0, 0, 0, 0); } } // Orders cicle $affiliateSum = 0; $affiliateCurrency = CSaleLang::GetLangCurrency($arAffiliate["SITE_ID"]); $dbOrders = \Bitrix\Sale\Internals\OrderTable::getList(array('filter' => array("=ALLOW_DELIVERY" => 'Y', ">=DATE_ALLOW_DELIVERY" => $dateFrom, "<DATE_ALLOW_DELIVERY" => $dateTo, "=AFFILIATE_ID" => $affiliateID, "=LID" => $arAffiliate["SITE_ID"], "=CANCELED" => 'N'), 'select' => array("ID", "LID", "PRICE_DELIVERY", "PRICE", "CURRENCY", "TAX_VALUE", "AFFILIATE_ID", "BASKET_QUANTITY" => 'BASKET.QUANTITY', "BASKET_PRODUCT_ID" => 'BASKET.PRODUCT_ID', "BASKET_MODULE" => 'BASKET.MODULE', "BASKET_PRICE" => 'BASKET.PRICE', "BASKET_CURRENCY" => 'BASKET.CURRENCY', "BASKET_DISCOUNT_PRICE" => 'BASKET.DISCOUNT_PRICE'), 'order' => array('ID' => 'ASC'))); $fOrderId = ""; while ($arOrder = $dbOrders->fetch()) { $arProductSections = array(); if (!array_key_exists("SALE_PRODUCT_SECTION_CACHE", $GLOBALS)) { $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] = array(); } if (array_key_exists($arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"], $GLOBALS["SALE_PRODUCT_SECTION_CACHE"])) { $arProductSections = $GLOBALS["SALE_PRODUCT_SECTION_CACHE"][$arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"]]; unset($GLOBALS["SALE_PRODUCT_SECTION_CACHE"][$arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"]]); $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] = $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] + array($arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"] => $arProductSections); } else { if ($arOrder["BASKET_MODULE"] == "catalog") { CModule::IncludeModule("catalog"); $arSku = CCatalogSku::GetProductInfo($arOrder["BASKET_PRODUCT_ID"]); if ($arSku && count($arSku) > 0) { $elementId = $arSku["ID"]; } else { $elementId = $arOrder["BASKET_PRODUCT_ID"]; } $arProductSections = CCatalogProduct::GetProductSections($elementId); } else { $events = GetModuleEvents("sale", "OnAffiliateGetSections"); if ($arEvent = $events->Fetch()) { $arProductSections = ExecuteModuleEventEx($arEvent, array($arOrder["BASKET_MODULE"], $arOrder["BASKET_PRODUCT_ID"])); } } $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] = $GLOBALS["SALE_PRODUCT_SECTION_CACHE"] + array($arOrder["BASKET_MODULE"] . $arOrder["BASKET_PRODUCT_ID"] => $arProductSections); if (count($GLOBALS["SALE_PRODUCT_SECTION_CACHE"]) > 20) { array_shift($GLOBALS["SALE_PRODUCT_SECTION_CACHE"]); } } $realRate = $arAffiliatePlan["BASE_RATE"]; $realRateType = $arAffiliatePlan["BASE_RATE_TYPE"]; $realRateCurrency = $arAffiliatePlan["BASE_RATE_CURRENCY"]; $coountArProd = count($arProductSections); for ($i = 0; $i < $coountArProd; $i++) { if (array_key_exists($arOrder["BASKET_MODULE"] . $arProductSections[$i], $arPlanSections)) { $realRate = $arPlanSections[$arOrder["BASKET_MODULE"] . $arProductSections[$i]]["RATE"]; $realRateType = $arPlanSections[$arOrder["BASKET_MODULE"] . $arProductSections[$i]]["RATE_TYPE"]; $realRateCurrency = $arPlanSections[$arOrder["BASKET_MODULE"] . $arProductSections[$i]]["RATE_CURRENCY"]; break; } } if ($realRateType == "P") { if ($arOrder["CURRENCY"] != $affiliateCurrency) { if (!array_key_exists("SALE_CONVERT_CURRENCY_CACHE", $GLOBALS)) { $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"] = array(); } if (!array_key_exists($arOrder["CURRENCY"] . "-" . $affiliateCurrency, $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"])) { $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"][$arOrder["CURRENCY"] . "-" . $affiliateCurrency] = CCurrencyRates::GetConvertFactor($arOrder["CURRENCY"], $affiliateCurrency); } if ($fOrderId != $arOrder["ID"]) { $affiliateSum += \Bitrix\Sale\PriceMaths::roundPrecision(($arOrder["PRICE"] - $arOrder["PRICE_DELIVERY"]) * $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"][$arOrder["CURRENCY"] . "-" . $affiliateCurrency] * $realRate / 100); $fOrderId = $arOrder["ID"]; } } else { if ($fOrderId != $arOrder["ID"]) { $affiliateSum += \Bitrix\Sale\PriceMaths::roundPrecision(($arOrder["PRICE"] - $arOrder["PRICE_DELIVERY"]) * $realRate / 100); $fOrderId = $arOrder["ID"]; } } } else { if ($realRateCurrency != $affiliateCurrency) { if (!array_key_exists("SALE_CONVERT_CURRENCY_CACHE", $GLOBALS)) { $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"] = array(); } if (!array_key_exists($realRateCurrency . "-" . $affiliateCurrency, $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"])) { $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"][$realRateCurrency . "-" . $affiliateCurrency] = CCurrencyRates::GetConvertFactor($realRateCurrency, $affiliateCurrency); } $affiliateSum += roundEx($realRate * $GLOBALS["SALE_CONVERT_CURRENCY_CACHE"][$realRateCurrency . "-" . $affiliateCurrency], SALE_VALUE_PRECISION); } else { $affiliateSum += roundEx($realRate, SALE_VALUE_PRECISION); } } } $arFields = array("=PENDING_SUM" => "PENDING_SUM + " . $affiliateSum, "LAST_CALCULATE" => $dateTo); $res = CSaleAffiliate::Update($affiliateID, $arFields); if (!$res) { return False; } if ($affiliateSum > 0) { $cnt = min(count($arAffiliateParents), count($GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"][$arAffiliate["SITE_ID"]])); for ($i = 0; $i < $cnt; $i++) { $affiliateSumTmp = roundEx($affiliateSum * $GLOBALS["SALE_AFFILIATE_TIER_TMP_CACHE"][$arAffiliate["SITE_ID"]][$i] / 100, SALE_VALUE_PRECISION); $arFields = array("=PENDING_SUM" => "PENDING_SUM + " . $affiliateSumTmp); CSaleAffiliate::Update($arAffiliateParents[$i], $arFields); } } $events = GetModuleEvents("sale", "OnAfterAffiliateCalculate"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($affiliateID)); } return True; }
} if (strlen($arParams["SET_TITLE"]) <= 0) { $arParams["SET_TITLE"] = "Y"; } if (CModule::IncludeModule("sale")) { if ($arParams["SET_TITLE"] == "Y") { $APPLICATION->SetTitle(GetMessage("SPCAT3_TECH_INSTR")); } if ($GLOBALS["USER"]->IsAuthorized()) { $dbAffiliate = CSaleAffiliate::GetList(array("TRANSACT_DATE" => "ASC"), array("USER_ID" => IntVal($GLOBALS["USER"]->GetID()), "SITE_ID" => SITE_ID), false, false, array("ID", "PLAN_ID", "ACTIVE", "PAID_SUM", "APPROVED_SUM", "PENDING_SUM", "LAST_CALCULATE")); if ($arAffiliate = $dbAffiliate->GetNext()) { if ($arAffiliate["ACTIVE"] == "Y") { $arResult["affiliateParam"] = COption::GetOptionString("sale", "affiliate_param_name", "partner"); ?> <?php $dbAffiliateTier = CSaleAffiliateTier::GetList(array(), array("SITE_ID" => SITE_ID), false, false, array("RATE1", "RATE2", "RATE3", "RATE4", "RATE5")); if (($arAffiliateTier = $dbAffiliateTier->Fetch()) && DoubleVal($arAffiliateTier["RATE1"]) > 0) { $arResult["SHOW_TIER_INFO"] = true; } else { $arResult["SHOW_TIER_INFO"] = false; } $arResult["arAffiliate"] = $arAffiliate; } else { $arResult = false; } $this->IncludeComponentTemplate(); } else { LocalRedirect($arParams["REGISTER_PAGE"] . "?REDIRECT_PAGE=" . UrlEncode($APPLICATION->GetCurPage())); die; } } else {
@set_time_limit(0); $DB->StartTransaction(); if (!CSaleAffiliateTier::Delete($ID)) { $DB->Rollback(); if ($ex = $APPLICATION->GetException()) { $lAdmin->AddGroupError($ex->GetString(), $ID); } else { $lAdmin->AddGroupError(GetMessage("SAT1_ERROR_DELETE"), $ID); } } $DB->Commit(); break; } } } $dbResultList = CSaleAffiliateTier::GetList(array($by => $order), $arFilter, false, false, array("ID", "SITE_ID", "RATE1", "RATE2", "RATE3", "RATE4", "RATE5")); $dbResultList = new CAdminResult($dbResultList, $sTableID); $dbResultList->NavStart(); $lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("SAT1_AFF"))); $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "ID", "default" => true), array("id" => "SITE_ID", "content" => GetMessage("SAT1_SITE"), "sort" => "SITE_ID", "default" => true), array("id" => "RATE1", "content" => GetMessage("SAT1_RATE1"), "sort" => "RATE1", "default" => true), array("id" => "RATE2", "content" => GetMessage("SAT1_RATE2"), "sort" => "RATE2", "default" => true), array("id" => "RATE3", "content" => GetMessage("SAT1_RATE3"), "sort" => "RATE3", "default" => true), array("id" => "RATE4", "content" => GetMessage("SAT1_RATE4"), "sort" => "RATE4", "default" => true), array("id" => "RATE5", "content" => GetMessage("SAT1_RATE5"), "sort" => "RATE5", "default" => true))); $arVisibleColumns = $lAdmin->GetVisibleHeaderColumns(); $arSites = array(); $dbSiteList = CSite::GetList($b = "sort", $o = "asc"); while ($arSite = $dbSiteList->Fetch()) { $arSites[$arSite["LID"]] = "[" . $arSite["LID"] . "] " . $arSite["NAME"]; } while ($arAffiliateTier = $dbResultList->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arAffiliateTier, "sale_affiliate_tier_edit.php?ID=" . $f_ID . "&lang=" . LANG . GetFilterParams("filter_"), GetMessage("SAT1_UPDATE_TIER")); $row->AddField("ID", $f_ID); $row->AddSelectField("SITE_ID", $arSites, array()); $row->AddInputField("RATE1", array("size" => "10"));
if (strlen($errorMessage) <= 0) { if (strlen($apply) <= 0) { LocalRedirect("/bitrix/admin/sale_affiliate_tier.php?lang=" . LANG . GetFilterParams("filter_", false)); } } else { $bVarsFromForm = true; } } require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/prolog.php"; if ($ID > 0) { $APPLICATION->SetTitle(str_replace("#ID#", $ID, GetMessage("SATE1_TITLE_UPDATE"))); } else { $APPLICATION->SetTitle(GetMessage("SATE1_TITLE_ADD")); } require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $dbAffiliateTier = CSaleAffiliateTier::GetList(array(), array("ID" => $ID)); if (!$dbAffiliateTier->ExtractFields("str_")) { $ID = 0; } if ($bVarsFromForm) { $DB->InitTableVarsForEdit("b_sale_affiliate_tier", "", "str_"); } ?> <?php $aMenu = array(array("TEXT" => GetMessage("SATE1_LIST"), "LINK" => "/bitrix/admin/sale_affiliate_tier.php?lang=" . LANG . GetFilterParams("filter_"), "ICON" => "btn_list")); if ($ID > 0) { $aMenu[] = array("SEPARATOR" => "Y"); $aMenu[] = array("TEXT" => GetMessage("SATE1_ADD"), "LINK" => "/bitrix/admin/sale_affiliate_tier_edit.php?lang=" . LANG . GetFilterParams("filter_"), "ICON" => "btn_new"); if ($saleModulePermissions >= "W") { $aMenu[] = array("TEXT" => GetMessage("SATE1_DELETE"), "LINK" => "javascript:if(confirm('" . GetMessage("SATE1_DELETE_CONF") . "')) window.location='/bitrix/admin/sale_affiliate_tier.php?ID=" . $ID . "&action=delete&lang=" . LANG . "&" . bitrix_sessid_get() . "#tb';", "WARNING" => "Y", "ICON" => "btn_delete");