Пример #1
0
 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;
 }
Пример #2
0
 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;
 }
Пример #3
0
 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;
 }
Пример #4
0
}
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 {
Пример #5
0
                @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"] . "]&nbsp;" . $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"));
Пример #6
0
    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");