ot_coupon.php
来自「Zen Cart是真正的电子商务艺术」· PHP 代码 · 共 440 行 · 第 1/2 页
PHP
440 行
$products = $_SESSION['cart']->get_products();
$foundvalid = true;
if ($foundvalid == true) {
$foundvalid = false;
for ($i=0; $i<sizeof($products); $i++) {
if (is_product_valid($products[$i]['id'], $coupon_result->fields['coupon_id'])) {
$foundvalid = true;
continue;
}
}
}
if (!$foundvalid) {
$this->clear_posts();
}
if (!$foundvalid) zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(TEXT_INVALID_COUPON_PRODUCT . ' ' . $dc_check), 'SSL',true, false));
// JTD - end of additions of missing code to handle coupon product restrictions
$date_query=$db->Execute("select coupon_start_date from " . TABLE_COUPONS . "
where coupon_start_date <= now() and
coupon_code='" . zen_db_prepare_input($dc_check) . "'");
if ($date_query->RecordCount() < 1 ) {
$messageStack->add_session('redemptions', TEXT_INVALID_STARTDATE_COUPON,'caution');
$this->clear_posts();
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL', true, false));
}
$date_query=$db->Execute("select coupon_expire_date from " . TABLE_COUPONS . "
where coupon_expire_date >= now() and
coupon_code='" . zen_db_prepare_input($dc_check) . "'");
if ($date_query->RecordCount() < 1 ) {
$messageStack->add_session('redemptions', TEXT_INVALID_FINISHDATE_COUPON,'caution');
$this->clear_posts();
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL', true, false));
}
$coupon_count = $db->Execute("select coupon_id from " . TABLE_COUPON_REDEEM_TRACK . "
where coupon_id = '" . (int)$coupon_result->fields['coupon_id']."'");
$coupon_count_customer = $db->Execute("select coupon_id from " . TABLE_COUPON_REDEEM_TRACK . "
where coupon_id = '" . $coupon_result->fields['coupon_id']."' and
customer_id = '" . (int)$_SESSION['customer_id'] . "'");
if ($coupon_count->RecordCount() >= $coupon_result->fields['uses_per_coupon'] && $coupon_result->fields['uses_per_coupon'] > 0) {
$messageStack->add_session('redemptions', TEXT_INVALID_USES_COUPON . $coupon_result->fields['uses_per_coupon'] . TIMES ,'caution');
$this->clear_posts();
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL', true, false));
}
if ($coupon_count_customer->RecordCount() >= $coupon_result->fields['uses_per_user'] && $coupon_result->fields['uses_per_user'] > 0) {
$messageStack->add_session('redemptions', sprintf(TEXT_INVALID_USES_USER_COUPON, $dc_check) . $coupon_result->fields['uses_per_user'] . ($coupon_result->fields['uses_per_user'] == 1 ? TIME : TIMES) ,'caution');
$this->clear_posts();
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL', true, false));
}
if ($coupon_result->fields['coupon_type']=='S') {
$coupon_amount = $order->info['shipping_cost'];
} else {
$coupon_amount = $currencies->format($coupon_result->fields['coupon_amount']) . ' ';
}
$_SESSION['cc_id'] = $coupon_result->fields['coupon_id'];
}
// if ($_POST['submit_redeem_coupon_x'] && !$_POST['gv_redeem_code']) zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(TEST_NO_REDEEM_CODE), 'SSL', true, false));
$messageStack->add_session('checkout', TEXT_VALID_COUPON,'success');
}
}
/**
* Enter description here...
*
* @param unknown_type $i
* @return unknown
*/
function update_credit_account($i) {
return false;
}
/**
* Enter description here...
*
*/
function apply_credit() {
global $db, $insert_id;
$cc_id = $_SESSION['cc_id'];
if ($this->deduction !=0) {
$db->Execute("insert into " . TABLE_COUPON_REDEEM_TRACK . "
(coupon_id, redeem_date, redeem_ip, customer_id, order_id)
values ('" . (int)$cc_id . "', now(), '" . $_SERVER['REMOTE_ADDR'] . "', '" . (int)$_SESSION['customer_id'] . "', '" . (int)$insert_id . "')");
}
$_SESSION['cc_id'] = "";
}
/**
* Enter description here...
*
* @param unknown_type $order_total
* @return unknown
*/
function calculate_deductions($order_total) {
global $db, $order, $messageStack;
$tax_address = zen_get_tax_locations();
$od_amount = array();
$orderTotal = $this->get_order_total();
$orderTotalTax = $orderTotal['tax'];
if ($_SESSION['cc_id']) {
$coupon = $db->Execute("select * from " . TABLE_COUPONS . " where coupon_id = '" . (int)$_SESSION['cc_id'] . "'");
$this->coupon_code = $coupon->fields['coupon_code'];
if (($coupon->RecordCount() > 0 && $order_total !=0) || ($coupon->RecordCount() > 0 && $coupon->fields['coupon_type']=='S') ) {
if ($coupon->fields['coupon_minimum_order'] <= $orderTotal['totalFull']) {
if ($coupon->fields['coupon_type']=='S') {
$od_amount['total'] = $_SESSION['shipping']['cost'];
$od_amount['type'] = 'S';
$od_amount['tax'] = $_SESSION['shipping_tax_amount'];
if (isset($_SESSION['shipping_tax_description']) && $_SESSION['shipping_tax_description'] != '') {
$od_amount['tax_groups'][$_SESSION['shipping_tax_description']] = $od_amount['tax'];
}
return $od_amount;
}
if ($coupon->fields['coupon_type'] == 'P') {
$od_amount['total'] = round($order_total*($coupon->fields['coupon_amount']/100), 2);
$od_amount['type'] = 'P';
$ratio = $od_amount['total']/$order_total;
} elseif ($coupon->fields['coupon_type'] == 'F') {
$od_amount['total'] = $coupon->fields['coupon_amount'] * ($order_total>0);
$od_amount['type'] = 'F';
$ratio = $od_amount['total']/$order_total;
}
if ($od_amount['total'] > $order_total) $od_amount['total'] = $order_total;
switch ($this->calculate_tax) {
case 'None':
if ($this->include_tax) {
reset($order->info['tax_groups']);
foreach ($order->info['tax_groups'] as $key=>$value) {
$od_amount['tax_groups'][$key] = $order->info['tax_groups'][$key] * $ratio;
}
}
break;
case 'Standard':
if ($od_amount['total'] >= $order_total) {
$ratio = 1;
}
$adjustedTax = $orderTotalTax * $ratio;
$ratioTax = $adjustedTax/$order->info['tax'];
reset($order->info['tax_groups']);
$tax_deduct = 0;
foreach ($order->info['tax_groups'] as $key=>$value) {
$od_amount['tax_groups'][$key] = $order->info['tax_groups'][$key] * $ratioTax;
$tax_deduct += $od_amount['tax_groups'][$key];
}
$od_amount['tax'] = $tax_deduct;
break;
case 'Credit Note':
$tax_rate = zen_get_tax_rate($this->tax_class);
$od_amount['tax'] = zen_calculate_tax($od_amount['total'], $tax_rate);
$tax_description = zen_get_tax_description($this->tax_class);
$od_amount['tax_groups'][$tax_description] = $od_amount['tax'];
break;
default:
}
}
}
}
return $od_amount;
}
/**
* Enter description here...
*
* @return unknown
*/
function get_order_total() {
global $order;
$order_total_tax = $order->info['tax'];
$order_total = $order->info['total'];
if ($this->include_shipping != 'true') $order_total -= $order->info['shipping_cost'];
if ($this->include_tax != 'true') $order_total -= $order->info['tax'];
$orderTotalFull = $order_total;
$products = $_SESSION['cart']->get_products();
for ($i=0; $i<sizeof($products); $i++) {
if (!is_product_valid($products[$i]['id'], $_SESSION['cc_id'])) {
$order_total -= $products[$i]['final_price'] * $products[$i]['quantity'];
if ($this->include_tax == 'true') {
$products_tax = zen_get_tax_rate($products[$i]['tax_class_id']);
$order_total -= (zen_calculate_tax($products[$i]['final_price'], $products_tax)) * $products[$i]['quantity'];
}
$order_total_tax -= (zen_calculate_tax($products[$i]['final_price'], zen_get_tax_rate($products[$i]['tax_class_id']))) * $products[$i]['quantity'];
}
}
$order_total = array('totalFull'=>$orderTotalFull, 'total'=>$order_total, 'tax'=>$order_total_tax);
return $order_total;
}
/**
* Enter description here...
*
* @return unknown
*/
function check() {
global $db;
if (!isset($this->check)) {
$check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_ORDER_TOTAL_COUPON_STATUS'");
$this->check = $check_query->RecordCount();
}
return $this->check;
}
/**
* Enter description here...
*
* @return unknown
*/
function keys() {
return array('MODULE_ORDER_TOTAL_COUPON_STATUS', 'MODULE_ORDER_TOTAL_COUPON_SORT_ORDER', 'MODULE_ORDER_TOTAL_COUPON_INC_SHIPPING', 'MODULE_ORDER_TOTAL_COUPON_INC_TAX', 'MODULE_ORDER_TOTAL_COUPON_CALC_TAX', 'MODULE_ORDER_TOTAL_COUPON_TAX_CLASS');
}
/**
* Enter description here...
*
*/
function install() {
global $db;
$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('璇ユā鍧楀凡瀹夎
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?