function fn_reward_points_calculate_cart_taxes_pre(&$cart, &$cart_products, &$shipping_rates, &$calculate_taxes, &$auth) { fn_set_hook('reward_points_cart_calculation', $cart_products, $cart, $auth); if (defined('ORDER_MANAGEMENT') && in_array(Registry::get('runtime.mode'), array('update', 'place_order', 'add')) && !isset($cart['points_info']['in_use']['cost'])) { if (isset($cart['deleted_points_info']['in_use']['cost'])) { if ($cart['deleted_points_info']['in_use']['cost'] <= $cart['subtotal_discount']) { $cart['subtotal_discount'] -= $cart['deleted_points_info']['in_use']['cost']; unset($cart['deleted_points_info']); } } } // calculating price in points if (defined('ORDER_MANAGEMENT') && isset($cart['points_info']['in_use']['cost'])) { $cost_covered_by_applied_points = $cart['points_info']['in_use']['cost']; } else { $cost_covered_by_applied_points = 0; } $in_use_total_points = false; if (isset($cart['points_info']['total_price'])) { if (!empty($cart['points_info']['in_use']['points']) && $cart['points_info']['in_use']['points'] <= $cart['points_info']['total_price']) { $in_use_total_points = true; } unset($cart['points_info']['total_price']); } if (Registry::get('addons.reward_points.price_in_points_order_discount') == 'Y' && !empty($cart['subtotal_discount']) && !empty($cart['subtotal'])) { $price_coef = (1 - ($cart['subtotal_discount'] - $cost_covered_by_applied_points) / $cart['subtotal']) * 100 / 100; } else { $price_coef = 1; } foreach ((array) $cart_products as $k => $v) { fn_set_hook('reward_points_calculate_item', $cart_products, $cart, $k, $v); if (!isset($v['exclude_from_calculate'])) { if (isset($cart['products'][$k]['extra']['points_info'])) { unset($cart['products'][$k]['extra']['points_info']); } fn_gather_reward_points_data($cart_products[$k], $auth); if (isset($cart_products[$k]['points_info']['raw_price'])) { $product_price_in_points = $price_coef * $cart_products[$k]['points_info']['raw_price']; $cart['products'][$k]['extra']['points_info']['raw_price'] = $product_price_in_points; $cart['products'][$k]['extra']['points_info']['display_price'] = $cart['products'][$k]['extra']['points_info']['price'] = ceil($product_price_in_points); $cart['points_info']['total_price'] = (isset($cart['points_info']['total_price']) ? $cart['points_info']['total_price'] : 0) + $product_price_in_points; } } } $cart['points_info']['raw_total_price'] = isset($cart['points_info']['total_price']) ? $cart['points_info']['total_price'] : 0; $cart['points_info']['total_price'] = ceil((int) ($cart['points_info']['raw_total_price'] * 100) / 100); if (!empty($cart['points_info']['in_use']['points']) && $cart['points_info']['in_use']['points'] > $cart['points_info']['total_price'] && $in_use_total_points) { $cart['points_info']['in_use']['points'] = $cart['points_info']['total_price']; } if (!empty($cart['points_info']['in_use']) && (Registry::get('runtime.controller') == 'checkout' || defined('ORDER_MANAGEMENT') && in_array(Registry::get('runtime.mode'), array('update', 'place_order', 'add')))) { fn_set_point_payment($cart, $cart_products, $auth); } // calculating reward points if (isset($cart['points_info']['reward'])) { unset($cart['points_info']['reward']); } if (isset($cart['points_info']['additional'])) { $cart['points_info']['reward'] = $cart['points_info']['additional']; unset($cart['points_info']['additional']); } $discount = 0; if (Registry::get('addons.reward_points.reward_points_order_discount') == 'Y' && !empty($cart['subtotal_discount']) && !empty($cart['subtotal'])) { $discount += $cart['subtotal_discount']; } elseif (!empty($cart['points_info']) && !empty($cart['points_info']['in_use']) && !empty($cart['points_info']['in_use']['cost'])) { $discount += $cart['points_info']['in_use']['cost']; } if ($discount && !empty($cart['subtotal'])) { $reward_coef = 1 - $discount / $cart['subtotal']; } else { $reward_coef = 1; } foreach ((array) $cart_products as $k => $v) { fn_set_hook('reward_points_calculate_item', $cart_products, $cart, $k, $v); if (!isset($v['exclude_from_calculate'])) { if (isset($cart_products[$k]['points_info']['reward'])) { $product_reward = $v['amount'] * (!empty($v['product_options']) ? fn_apply_options_modifiers($cart['products'][$k]['product_options'], $cart_products[$k]['points_info']['reward']['raw_amount'], POINTS_MODIFIER_TYPE) : $cart_products[$k]['points_info']['reward']['raw_amount']); $cart['products'][$k]['extra']['points_info']['reward'] = round($product_reward); $cart_reward = round($reward_coef * $product_reward); $cart['points_info']['reward'] = (isset($cart['points_info']['reward']) ? $cart['points_info']['reward'] : 0) + $cart_reward; } } } }
function fn_reward_points_calculate_cart(&$cart, &$cart_products, &$auth) { if (isset($cart['points_info']['reward'])) { unset($cart['points_info']['reward']); } if (isset($cart['points_info']['additional'])) { $cart['points_info']['reward'] = $cart['points_info']['additional']; unset($cart['points_info']['additional']); } if (isset($cart['points_info']['total_price'])) { unset($cart['points_info']['total_price']); } $reward_coef = $price_coef = 1; if (!empty($cart['subtotal_discount']) && !empty($cart['subtotal'])) { $subtotal_discount_coef = 1 - $cart['subtotal_discount'] / $cart['subtotal']; $reward_points_order_discount = Registry::get('addons.reward_points.reward_points_order_discount'); if ($reward_points_order_discount == 'Y') { $reward_coef = $subtotal_discount_coef; } $price_points_order_discount = Registry::get('addons.reward_points.price_in_points_order_discount'); if ($price_points_order_discount == 'Y') { $price_coef = $subtotal_discount_coef; } } if (!empty($cart_products)) { foreach ($cart_products as $k => $v) { if (!isset($product['exclude_from_calculate'])) { if (isset($cart['products'][$k]['extra']['points_info'])) { unset($cart['products'][$k]['extra']['points_info']); } fn_reward_points_get_additional_product_data($cart_products[$k], $auth, true); if (isset($cart_products[$k]['points_info']['reward'])) { $cart['products'][$k]['extra']['points_info']['reward'] = round($reward_coef * $v['amount'] * (!empty($v['product_options']) ? fn_apply_options_modifiers($cart['products'][$k]['product_options'], $cart_products[$k]['points_info']['reward']['raw_amount'], POINTS_MODIFIER_TYPE) : $cart_products[$k]['points_info']['reward']['raw_amount'])); $cart['points_info']['reward'] = (isset($cart['points_info']['reward']) ? $cart['points_info']['reward'] : 0) + $cart['products'][$k]['extra']['points_info']['reward']; } if (isset($cart_products[$k]['points_info']['raw_price'])) { $cart['products'][$k]['extra']['points_info']['price'] = round($price_coef * $cart_products[$k]['points_info']['raw_price']); $cart['points_info']['total_price'] = (isset($cart['points_info']['total_price']) ? $cart['points_info']['total_price'] : 0) + $cart['products'][$k]['extra']['points_info']['price']; } } } } if (!empty($cart['points_info']['in_use']) && (CONTROLLER == 'checkout' || defined('ORDER_MANAGEMENT') && (MODE == 'totals' || MODE == 'summary'))) { fn_set_point_payment($cart, $cart_products, $auth); if (!empty($cart['points_info']['reward']) && !empty($cart['points_info']['in_use']['points'])) { $cart['points_info']['reward'] = round($cart['points_info']['reward'] * (1 - $cart['points_info']['in_use']['points'] / $cart['points_info']['total_price'])); } } }