Exemplo n.º 1
0
 public function CheckDiscount($arProduct, $arDiscount)
 {
     if (empty($arProduct) || !is_array($arProduct)) {
         return false;
     }
     if (empty($arDiscount) || !is_array($arDiscount) || !isset($arDiscount['UNPACK'])) {
         return false;
     }
     return CCatalogDiscount::__Unpack($arProduct, $arDiscount['UNPACK']);
 }
Exemplo n.º 2
0
 public function GetDiscountForProduct($arProduct, $arParams = false)
 {
     global $DB;
     $arResult = array();
     $arResultID = array();
     if (is_array($arProduct) && !empty($arProduct)) {
         if (!is_array($arParams)) {
             $arParams = array();
         }
         if (!isset($arProduct['ID'])) {
             $arProduct['ID'] = 0;
         }
         $arProduct['ID'] = intval($arProduct['ID']);
         if (!isset($arProduct['IBLOCK_ID'])) {
             $arProduct['IBLOCK_ID'] = 0;
         }
         $arProduct['IBLOCK_ID'] = intval($arProduct['IBLOCK_ID']);
         if (0 >= $arProduct['IBLOCK_ID']) {
             return $arResult;
         }
         $arFieldsParams = array();
         if (isset($arParams['TIME_ZONE'])) {
             $arFieldsParams['TIME_ZONE'] = $arParams['TIME_ZONE'];
         }
         if (isset($arParams['PRODUCT'])) {
             $arFieldsParams['PRODUCT'] = $arParams['PRODUCT'];
         }
         $boolGenerate = false;
         $arSelect = array("ID", "SITE_ID", "SORT", "NAME", "VALUE_TYPE", "VALUE", "CURRENCY", 'UNPACK');
         if (isset($arParams['DISCOUNT_FIELDS']) && is_array($arParams['DISCOUNT_FIELDS']) && !empty($arParams['DISCOUNT_FIELDS'])) {
             $arSelect = $arParams['DISCOUNT_FIELDS'];
         }
         if (!in_array('UNPACK', $arSelect)) {
             $arSelect[] = 'UNPACK';
         }
         $strDate = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")));
         if (isset($arParams['CURRENT_DATE'])) {
             $strDate = $arParams['CURRENT_DATE'];
         }
         $strRenewal = 'N';
         if (isset($arParams['RENEWAL'])) {
             $strRenewal = $arParams['RENEWAL'];
         } else {
             $rsCatalogs = CCatalog::GetList(array(), array('ID' => $arProduct['IBLOCK_ID']), false, false, array('ID', 'SUBSCRIPTION'));
             if ($arCatalog = $rsCatalogs->Fetch()) {
                 $strRenewal = $arCatalog['SUBSCRIPTION'];
             }
         }
         if ('Y' != $strRenewal) {
             $strRenewal = 'N';
         }
         $arSiteList = array();
         if (isset($arParams['SITE_ID'])) {
             if (!is_array($arParams['SITE_ID'])) {
                 $arParams['SITE_ID'] = array($arParams['SITE_ID']);
             }
             if (!empty($arParams['SITE_ID'])) {
                 $arSiteList = $arParams['SITE_ID'];
             }
         }
         if (empty($arSiteList)) {
             $rsIBlockSites = CIBlock::GetSite($arProduct['IBLOCK_ID']);
             while ($arIBlockSite = $rsIBlockSites->Fetch()) {
                 $arSiteList[] = $arIBlockSite['SITE_ID'];
             }
         }
         $arFilter = array("SITE_ID" => $arSiteList, "TYPE" => DISCOUNT_TYPE_STANDART, "ACTIVE" => "Y", "RENEWAL" => $strRenewal, "+<=ACTIVE_FROM" => $strDate, "+>=ACTIVE_TO" => $strDate, 'COUPON' => '');
         $rsPriceDiscounts = CCatalogDiscount::GetList(array(), $arFilter, false, false, $arSelect);
         while ($arPriceDiscount = $rsPriceDiscounts->Fetch()) {
             if ($arPriceDiscount['COUPON_ACTIVE'] != 'N') {
                 if (!$boolGenerate) {
                     if (!self::__GenerateFields($arProduct, $arFieldsParams)) {
                         return $arResult;
                     }
                     $boolGenerate = true;
                 }
                 if (CCatalogDiscount::__Unpack($arProduct, $arPriceDiscount['UNPACK'])) {
                     unset($arPriceDiscount['UNPACK']);
                     $arResult[] = $arPriceDiscount;
                     $arResultID[] = $arPriceDiscount['ID'];
                 }
             }
         }
         if (isset($arParams['SKU']) && 'Y' == $arParams['SKU']) {
             if (isset($arParams['SKU_PARAMS']) && is_array($arParams['SKU_PARAMS']) && !empty($arParams['SKU_PARAMS'])) {
                 $arSKU = $arParams['SKU_PARAMS'];
             } else {
                 $arSKU = CCatalogSKU::GetInfoByOfferIBlock($arProduct['IBLOCK_ID']);
             }
             if (is_array($arSKU)) {
                 $arParent = array();
                 $arParent['ID'] = 0;
                 $arParent['IBLOCK_ID'] = $arSKU['PRODUCT_IBLOCK_ID'];
                 if (isset($arProduct['PROPERTY_' . $arSKU['SKU_PROPERTY_ID'] . '_VALUE']) && is_array($arProduct['PROPERTY_' . $arSKU['SKU_PROPERTY_ID'] . '_VALUE'])) {
                     $intParentID = intval(current($arProduct['PROPERTY_' . $arSKU['SKU_PROPERTY_ID'] . '_VALUE']));
                     if (0 < $intParentID) {
                         $arParent['ID'] = $intParentID;
                     }
                 }
                 $arParentParams = array();
                 if (isset($arParams['TIME_ZONE'])) {
                     $arParentParams['TIME_ZONE'] = $arParams['TIME_ZONE'];
                 }
                 if (isset($arParams['DISCOUNT_FIELDS'])) {
                     $arParentParams['DISCOUNT_FIELDS'] = $arParams['DISCOUNT_FIELDS'];
                 }
                 $arParentParams['RENEWAL'] = $strRenewal;
                 $arParentParams['SITE_ID'] = $arSiteList;
                 $arParentParams['CURRENT_DATE'] = $strDate;
                 $arDiscountParent = self::GetDiscountForProduct($arParent, $arParentParams);
                 if (!empty($arDiscountParent)) {
                     if (empty($arResult)) {
                         $arResult = $arDiscountParent;
                     } else {
                         foreach ($arDiscountParent as &$arOneParentDiscount) {
                             if (in_array($arOneParentDiscount['ID'], $arResultID)) {
                                 continue;
                             }
                             $arResult[] = $arOneParentDiscount;
                             $arResultID[] = $arOneParentDiscount['ID'];
                         }
                         if (isset($arOneParentDiscount)) {
                             unset($arOneParentDiscount);
                         }
                     }
                 }
             }
         }
     }
     return $arResult;
 }
Exemplo n.º 3
0
	static public function CheckDiscount($arProduct, $arDiscount)
	{
		if (empty($arProduct) || !is_array($arProduct))
			return false;
		if (empty($arDiscount) || !is_array(empty($arDiscount)) || !array_key_exists('UNPACK', $arDiscount))
			return false;
		return CCatalogDiscount::__Unpack($arProduct, $arDiscount['UNPACK']);
	}