コード例 #1
0
 public static function DoProcessOrder(&$arOrder, $arOptions, &$arErrors)
 {
     global $DB;
     if (!array_key_exists("COUNT_DISCOUNT_4_ALL_QUANTITY", $arOptions)) {
         $arOptions["COUNT_DISCOUNT_4_ALL_QUANTITY"] = COption::GetOptionString("sale", "COUNT_DISCOUNT_4_ALL_QUANTITY", "N");
     }
     $arIDS = array();
     $rsDiscountIDs = CSaleDiscount::GetDiscountGroupList(array(), array('GROUP_ID' => CUser::GetUserGroup($arOrder["USER_ID"])), false, false, array('DISCOUNT_ID'));
     while ($arDiscountID = $rsDiscountIDs->Fetch()) {
         $arDiscountID['DISCOUNT_ID'] = intval($arDiscountID['DISCOUNT_ID']);
         if (0 < $arDiscountID['DISCOUNT_ID']) {
             $arIDS[] = $arDiscountID['DISCOUNT_ID'];
         }
     }
     if (!empty($arIDS)) {
         $arIDS = array_values(array_unique($arIDS));
         $rsDiscounts = CSaleDiscount::GetList(array("PRIORITY" => "DESC", "SORT" => "ASC"), array('ID' => $arIDS, "LID" => $arOrder["SITE_ID"], "ACTIVE" => "Y", "!>ACTIVE_FROM" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))), "!<ACTIVE_TO" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")))), false, false, array("ID", "PRIORITY", "LAST_DISCOUNT", "UNPACK", "APPLICATION"));
         while ($arDiscount = $rsDiscounts->Fetch()) {
             if (self::__Unpack($arOrder, $arDiscount['UNPACK'])) {
                 self::__ApplyActions($arOrder, $arDiscount['APPLICATION']);
             }
             if ('Y' == $arDiscount['LAST_DISCOUNT']) {
                 break;
             }
         }
         $arOrder["ORDER_PRICE"] = 0;
         $arOrder["ORDER_WEIGHT"] = 0;
         $arOrder["USE_VAT"] = false;
         $arOrder["VAT_RATE"] = 0;
         $arOrder["VAT_SUM"] = 0;
         $arOrder["DISCOUNT_PRICE"] = 0.0;
         $arOrder["DISCOUNT_VALUE"] = $arOrder["DISCOUNT_PRICE"];
         $arOrder["DELIVERY_PRICE"] = $arOrder["PRICE_DELIVERY"];
         foreach ($arOrder['BASKET_ITEMS'] as &$arShoppingCartItem) {
             $arOrder["ORDER_PRICE"] += $arShoppingCartItem["PRICE"] * $arShoppingCartItem["QUANTITY"];
             $arOrder["ORDER_WEIGHT"] += $arShoppingCartItem["WEIGHT"] * $arShoppingCartItem["QUANTITY"];
             if ($arShoppingCartItem["VAT_RATE"] > 0) {
                 $arOrder["USE_VAT"] = true;
                 if ($arShoppingCartItem["VAT_RATE"] > $arOrder["VAT_RATE"]) {
                     $arOrder["VAT_RATE"] = $arShoppingCartItem["VAT_RATE"];
                 }
                 $arOrder["VAT_SUM"] += $arShoppingCartItem["VAT_VALUE"] * $arShoppingCartItem["QUANTITY"];
             }
         }
         if (isset($arShoppingCartItem)) {
             unset($arShoppingCartItem);
         }
     }
 }
コード例 #2
0
$arDefaultValues = array('LID' => '', 'NAME' => '', 'CURRENCY' => '', 'DISCOUNT_VALUE' => '', 'DISCOUNT_TYPE' => 'P', 'ACTIVE' => 'Y', 'SORT' => '100', 'ACTIVE_FROM' => '', 'ACTIVE_TO' => '', 'PRIORITY' => 1, 'LAST_DISCOUNT' => 'Y', 'CONDITIONS' => '', 'XML_ID' => '', 'ACTIONS' => '');
if (isset($_REQUEST['LID'])) {
    $arDefaultValues['LID'] = trim($_REQUEST['LID']);
}
if ('' == $arDefaultValues['LID']) {
    $arDefaultValues['LID'] = 's1';
}
$arSelect = array_merge(array('ID'), array_keys($arDefaultValues));
$arDiscount = array();
$arDiscountGroupList = array();
$rsDiscounts = CSaleDiscount::GetList(array(), array("ID" => $ID), false, false, $arSelect);
if (!($arDiscount = $rsDiscounts->Fetch())) {
    $ID = 0;
    $arDiscount = $arDefaultValues;
} else {
    $rsDiscountGroups = CSaleDiscount::GetDiscountGroupList(array(), array('DISCOUNT_ID' => $ID), false, false, array('GROUP_ID'));
    while ($arDiscountGroup = $rsDiscountGroups->Fetch()) {
        $arDiscountGroupList[] = intval($arDiscountGroup['GROUP_ID']);
    }
}
if ($bVarsFromForm) {
    if ($boolCondParseError || $boolActParseError) {
        $mxTempo = $arDiscount['CONDITIONS'];
        $mxTempo2 = $arDiscount['ACTIONS'];
        $arDiscount = $arFields;
        if ($boolCondParseError) {
            $arDiscount['CONDITIONS'] = $mxTempo;
        }
        if ($boolActParseError) {
            $arDiscount['ACTIONS'] = $mxTempo2;
        }
コード例 #3
0
ファイル: discount.php プロジェクト: rasuldev/torino
 public static function DoProcessOrder(&$arOrder, $arOptions, &$arErrors)
 {
     global $DB;
     $arIDS = array();
     $rsDiscountIDs = CSaleDiscount::GetDiscountGroupList(array(), array('GROUP_ID' => CUser::GetUserGroup($arOrder['USER_ID'])), false, false, array('DISCOUNT_ID'));
     while ($arDiscountID = $rsDiscountIDs->Fetch()) {
         $arDiscountID['DISCOUNT_ID'] = (int) $arDiscountID['DISCOUNT_ID'];
         if (0 < $arDiscountID['DISCOUNT_ID']) {
             $arIDS[$arDiscountID['DISCOUNT_ID']] = true;
         }
     }
     if (!empty($arIDS)) {
         if (isset($arOrder['BASKET_ITEMS']) && !empty($arOrder['BASKET_ITEMS']) && is_array($arOrder['BASKET_ITEMS'])) {
             $arExtend = array('catalog' => array('fields' => true, 'props' => true));
             foreach (GetModuleEvents('sale', 'OnExtendBasketItems', true) as $arEvent) {
                 ExecuteModuleEventEx($arEvent, array(&$arOrder['BASKET_ITEMS'], $arExtend));
             }
             foreach ($arOrder['BASKET_ITEMS'] as &$arOneItem) {
                 if (array_key_exists('PRODUCT_PROVIDER_CLASS', $arOneItem) && empty($arOneItem['PRODUCT_PROVIDER_CLASS']) && array_key_exists('CALLBACK_FUNC', $arOneItem) && empty($arOneItem['CALLBACK_FUNC'])) {
                     if (isset($arOneItem['DISCOUNT_PRICE'])) {
                         $arOneItem['PRICE'] += $arOneItem['DISCOUNT_PRICE'];
                         $arOneItem['DISCOUNT_PRICE'] = 0;
                     }
                 }
             }
             if (isset($arOneItem)) {
                 unset($arOneItem);
             }
         }
         $arIDS = array_keys($arIDS);
         if (empty(self::$cacheDiscountHandlers)) {
             self::$cacheDiscountHandlers = CSaleDiscount::getDiscountHandlers($arIDS);
         } else {
             $needDiscountHandlers = array();
             foreach ($arIDS as &$discountID) {
                 if (!isset(self::$cacheDiscountHandlers[$discountID])) {
                     $needDiscountHandlers[] = $discountID;
                 }
             }
             unset($discountID);
             if (!empty($needDiscountHandlers)) {
                 $discountHandlersList = CSaleDiscount::getDiscountHandlers($needDiscountHandlers);
                 if (!empty($discountHandlersList)) {
                     foreach ($discountHandlersList as $discountID => $discountHandlers) {
                         self::$cacheDiscountHandlers[$discountID] = $discountHandlers;
                     }
                     unset($discountHandlers, $discountID);
                 }
                 unset($discountHandlersList);
             }
             unset($needDiscountHandlers);
         }
         $strDate = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")));
         CTimeZone::Disable();
         $rsDiscounts = CSaleDiscount::GetList(array('PRIORITY' => 'DESC', 'SORT' => 'ASC', 'ID' => 'ASC'), array('ID' => $arIDS, 'LID' => $arOrder['SITE_ID'], 'ACTIVE' => 'Y', '!>ACTIVE_FROM' => $strDate, '!<ACTIVE_TO' => $strDate), false, false, array('ID', 'PRIORITY', 'SORT', 'LAST_DISCOUNT', 'UNPACK', 'APPLICATION'));
         CTimeZone::Enable();
         $discountApply = array();
         $resultDiscountList = array();
         $resultDiscountKeys = array();
         $resultDiscountIndex = 0;
         while ($arDiscount = $rsDiscounts->Fetch()) {
             if (!isset($discountApply[$arDiscount['ID']])) {
                 $discountApply[$arDiscount['ID']] = true;
                 $applyFlag = true;
                 if (isset(self::$cacheDiscountHandlers[$arDiscount['ID']])) {
                     $moduleList = self::$cacheDiscountHandlers[$arDiscount['ID']]['MODULES'];
                     if (!empty($moduleList)) {
                         foreach ($moduleList as &$moduleID) {
                             if (!isset(self::$usedModules[$moduleID])) {
                                 self::$usedModules[$moduleID] = Loader::includeModule($moduleID);
                             }
                             if (!self::$usedModules[$moduleID]) {
                                 $applyFlag = false;
                                 break;
                             }
                         }
                         unset($moduleID);
                     }
                     unset($moduleList);
                 }
                 if ($applyFlag && self::__Unpack($arOrder, $arDiscount['UNPACK'])) {
                     $oldOrder = $arOrder;
                     self::__ApplyActions($arOrder, $arDiscount['APPLICATION']);
                     $discountResult = self::getDiscountResult($oldOrder, $arOrder, false);
                     if (!empty($discountResult)) {
                         $resultDiscountList[$resultDiscountIndex] = array('ID' => $arDiscount['ID'], 'PRIORITY' => $arDiscount['PRIORITY'], 'SORT' => $arDiscount['SORT'], 'LAST_DISCOUNT' => $arDiscount['LAST_DISCOUNT'], 'UNPACK' => $arDiscount['UNPACK'], 'APPLICATION' => $arDiscount['APPLICATION'], 'RESULT' => $discountResult, 'HANDLERS' => self::$cacheDiscountHandlers[$arDiscount['ID']]);
                         $resultDiscountKeys[$arDiscount['ID']] = $resultDiscountIndex;
                         $resultDiscountIndex++;
                         if ($arDiscount['LAST_DISCOUNT'] == 'Y') {
                             break;
                         }
                     }
                     unset($discountResult);
                 }
             }
         }
         unset($arDiscount, $rsDiscounts);
         if ($resultDiscountIndex > 0) {
             $rsDiscounts = CSaleDiscount::GetList(array(), array('ID' => array_keys($resultDiscountKeys)), false, false, array('ID', 'NAME', 'CONDITIONS', 'ACTIONS'));
             while ($arDiscount = $rsDiscounts->Fetch()) {
                 $arDiscount['ID'] = (int) $arDiscount['ID'];
                 if (isset($resultDiscountKeys[$arDiscount['ID']])) {
                     $key = $resultDiscountKeys[$arDiscount['ID']];
                     $resultDiscountList[$key]['NAME'] = $arDiscount['NAME'];
                     $resultDiscountList[$key]['CONDITIONS'] = $arDiscount['CONDITIONS'];
                     $resultDiscountList[$key]['ACTIONS'] = $arDiscount['ACTIONS'];
                 }
             }
         }
         $arOrder["ORDER_PRICE"] = 0;
         $arOrder["ORDER_WEIGHT"] = 0;
         $arOrder["USE_VAT"] = false;
         $arOrder["VAT_RATE"] = 0;
         $arOrder["VAT_SUM"] = 0;
         $arOrder["DISCOUNT_PRICE"] = 0.0;
         $arOrder["DISCOUNT_VALUE"] = $arOrder["DISCOUNT_PRICE"];
         $arOrder["DELIVERY_PRICE"] = $arOrder["PRICE_DELIVERY"];
         foreach ($arOrder['BASKET_ITEMS'] as &$arShoppingCartItem) {
             if (!CSaleBasketHelper::isSetItem($arShoppingCartItem)) {
                 $arOrder["ORDER_PRICE"] += doubleval($arShoppingCartItem["PRICE"]) * doubleval($arShoppingCartItem["QUANTITY"]);
                 $arOrder["ORDER_WEIGHT"] += $arShoppingCartItem["WEIGHT"] * $arShoppingCartItem["QUANTITY"];
                 $arShoppingCartItem["PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arShoppingCartItem["PRICE"], $arShoppingCartItem["CURRENCY"], true);
                 $arShoppingCartItem["DISCOUNT_PRICE_PERCENT"] = $arShoppingCartItem["DISCOUNT_PRICE"] * 100 / ($arShoppingCartItem["DISCOUNT_PRICE"] + $arShoppingCartItem["PRICE"]);
                 $arShoppingCartItem["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($arShoppingCartItem["DISCOUNT_PRICE_PERCENT"], SALE_VALUE_PRECISION) . "%";
                 if ($arShoppingCartItem["VAT_RATE"] > 0) {
                     $arOrder["USE_VAT"] = true;
                     if ($arShoppingCartItem["VAT_RATE"] > $arOrder["VAT_RATE"]) {
                         $arOrder["VAT_RATE"] = $arShoppingCartItem["VAT_RATE"];
                     }
                     $arOrder["VAT_SUM"] += $arShoppingCartItem["VAT_VALUE"] * $arShoppingCartItem["QUANTITY"];
                 }
             }
         }
         if (isset($arShoppingCartItem)) {
             unset($arShoppingCartItem);
         }
     }
 }
コード例 #4
0
ファイル: discount.php プロジェクト: ASDAFF/bxApiDocs
	public static function DoProcessOrder(&$arOrder, $arOptions, &$arErrors)
	{
		global $DB;

		$arIDS = array();
		$rsDiscountIDs = CSaleDiscount::GetDiscountGroupList(
			array(),
			array('GROUP_ID' => CUser::GetUserGroup($arOrder["USER_ID"])),
			false,
			false,
			array('DISCOUNT_ID')
		);
		while ($arDiscountID = $rsDiscountIDs->Fetch())
		{
			$arDiscountID['DISCOUNT_ID'] = intval($arDiscountID['DISCOUNT_ID']);
			if (0 < $arDiscountID['DISCOUNT_ID'])
				$arIDS[$arDiscountID['DISCOUNT_ID']] = true;
		}

		if (!empty($arIDS))
		{
			if (array_key_exists('BASKET_ITEMS', $arOrder) && !empty($arOrder['BASKET_ITEMS']) && is_array($arOrder['BASKET_ITEMS']))
			{
				$arExtend = array(
					'catalog' => array(
						'fields' => true,
						'props' => true,
					),
				);
				foreach (GetModuleEvents("sale", "OnExtendBasketItems", true) as $arEvent)
				{
					ExecuteModuleEventEx($arEvent, array(&$arOrder['BASKET_ITEMS'], $arExtend));
				}
			}

			$arIDS = array_keys($arIDS);
			$rsDiscounts = CSaleDiscount::GetList(
				array("PRIORITY" => "DESC", "SORT" => "ASC"),
				array(
					'ID' => $arIDS,
					"LID" => $arOrder["SITE_ID"],
					"ACTIVE" => "Y",
					"!>ACTIVE_FROM" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))),
					"!<ACTIVE_TO" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))),
				),
				false,
				false,
				array("ID", "PRIORITY", "LAST_DISCOUNT", "UNPACK", "APPLICATION")
			);

			while ($arDiscount = $rsDiscounts->Fetch())
			{
				if (self::__Unpack($arOrder, $arDiscount['UNPACK']))
				{
					self::__ApplyActions($arOrder, $arDiscount['APPLICATION']);
					if ('Y' == $arDiscount['LAST_DISCOUNT'])
						break;
				}
			}

			$arOrder["ORDER_PRICE"] = 0;
			$arOrder["ORDER_WEIGHT"] = 0;
			$arOrder["USE_VAT"] = false;
			$arOrder["VAT_RATE"] = 0;
			$arOrder["VAT_SUM"] = 0;
			$arOrder["DISCOUNT_PRICE"] = 0.0;
			$arOrder["DISCOUNT_VALUE"] = $arOrder["DISCOUNT_PRICE"];
			$arOrder["DELIVERY_PRICE"] = $arOrder["PRICE_DELIVERY"];

			foreach ($arOrder['BASKET_ITEMS'] as &$arShoppingCartItem)
			{
				$arOrder["ORDER_PRICE"] += $arShoppingCartItem["PRICE"] * $arShoppingCartItem["QUANTITY"];
				$arOrder["ORDER_WEIGHT"] += $arShoppingCartItem["WEIGHT"] * $arShoppingCartItem["QUANTITY"];

				if ($arShoppingCartItem["VAT_RATE"] > 0)
				{
					$arOrder["USE_VAT"] = true;
					if ($arShoppingCartItem["VAT_RATE"] > $arOrder["VAT_RATE"])
						$arOrder["VAT_RATE"] = $arShoppingCartItem["VAT_RATE"];

					$arOrder["VAT_SUM"] += $arShoppingCartItem["VAT_VALUE"] * $arShoppingCartItem["QUANTITY"];
				}
			}
			if (isset($arShoppingCartItem))
				unset($arShoppingCartItem);
		}
	}