/** * 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; }
/** * 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']; } }