/**
  * Prepare discount before saving.
  *
  * @param array $discount				Discount data.
  * @param array $params					Params.
  * @return array|bool
  */
 public static function prepareData($discount, $params = array())
 {
     if (empty($discount) || empty($discount['ID'])) {
         return false;
     }
     $discountId = (int) $discount['ID'];
     if ($discountId <= 0) {
         return false;
     }
     if (!isset(self::$discountCache[$discountId])) {
         self::$discountCache[$discountId] = false;
         $loadData = self::loadFromDatabase($discountId, $discount);
         if (!empty($loadData)) {
             if ($loadData['CURRENCY'] != $params['CURRENCY']) {
                 Catalog\DiscountTable::convertCurrency($loadData, $params['CURRENCY']);
             }
             self::createSaleAction($loadData, $params);
             $loadData['EDIT_PAGE_URL'] = self::getEditUrl(array('ID' => $discountId, 'TYPE' => $loadData['TYPE']));
             self::$discountCache[$discountId] = $loadData;
         }
     }
     $result = self::$discountCache[$discountId];
     if (empty($result)) {
         return $result;
     }
     if ($result['USE_COUPONS'] == 'Y') {
         if (isset($discount['COUPON'])) {
             $result['COUPON'] = $discount['COUPON'];
         }
     }
     return $result;
 }
Exemple #2
0
 /**
  * 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'];
     }
 }