📄 order.php
字号:
+ zen_add_tax($this->products[$index]['onetime_charges'], $this->products[$index]['tax']);
$this->info['subtotal'] += $shown_price;
// find product's tax rate and description
$products_tax = $this->products[$index]['tax'];
$products_tax_description = $this->products[$index]['tax_description'];
// calculate the amount of tax "inc"luded in price (used if tax-in pricing is enabled)
$current_row_tax_inc = $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
// calculate the amount of tax for this product (assuming tax is NOT included in the price)
$current_row_tax_exc = zen_round(($products_tax / 100) * $shown_price, $currencies->currencies[$this->info['currency']]['decimal_places']);
if (DISPLAY_PRICE_WITH_TAX == 'true') {
$this->info['tax'] += $current_row_tax_inc;
if (isset($this->info['tax_groups']["$products_tax_description"])) {
$this->info['tax_groups']["$products_tax_description"] += $current_row_tax_inc;
} else {
$this->info['tax_groups']["$products_tax_description"] = $current_row_tax_inc;
}
} else {
// this adds the tax rate for cases where tax is NOT included in the product
$this->info['tax'] += $current_row_tax_exc;
if (isset($this->info['tax_groups']["$products_tax_description"])) {
$this->info['tax_groups']["$products_tax_description"] += $current_row_tax_exc;
} else {
$this->info['tax_groups']["$products_tax_description"] = $current_row_tax_exc;
}
}
$index++;
}
// Update the final total to include tax if not already tax-inc
if (DISPLAY_PRICE_WITH_TAX == 'true') {
$this->info['total'] = $this->info['subtotal'] + $this->info['shipping_cost'];
} else {
$this->info['total'] = $this->info['subtotal'] + $this->info['tax'] + $this->info['shipping_cost'];
}
if ($this->info['total'] == 0) {
if (DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID == 0) {
$this->info['order_status'] = DEFAULT_ORDERS_STATUS_ID;
} else {
$this->info['order_status'] = DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID;
}
}
if (isset($GLOBALS[$class]) && is_object($GLOBALS[$class])) {
if ( isset($GLOBALS[$class]->order_status) && is_numeric($GLOBALS[$class]->order_status) && ($GLOBALS[$class]->order_status > 0) ) {
$this->info['order_status'] = $GLOBALS[$class]->order_status;
}
}
}
function create($zf_ot_modules, $zf_mode = 2) {
global $db;
if ($_SESSION['shipping'] == 'free_free') {
$this->info['shipping_module_code'] = $_SESSION['shipping'];
}
$sql_data_array = array('customers_id' => $_SESSION['customer_id'],
'customers_name' => $this->customer['firstname'] . ' ' . $this->customer['lastname'],
'customers_company' => $this->customer['company'],
'customers_street_address' => $this->customer['street_address'],
'customers_suburb' => $this->customer['suburb'],
'customers_city' => $this->customer['city'],
'customers_postcode' => $this->customer['postcode'],
'customers_state' => $this->customer['state'],
'customers_country' => $this->customer['country']['title'],
'customers_telephone' => $this->customer['telephone'],
'customers_email_address' => $this->customer['email_address'],
'customers_address_format_id' => $this->customer['format_id'],
'delivery_name' => $this->delivery['firstname'] . ' ' . $this->delivery['lastname'],
'delivery_company' => $this->delivery['company'],
'delivery_street_address' => $this->delivery['street_address'],
'delivery_suburb' => $this->delivery['suburb'],
'delivery_city' => $this->delivery['city'],
'delivery_postcode' => $this->delivery['postcode'],
'delivery_state' => $this->delivery['state'],
'delivery_country' => $this->delivery['country']['title'],
'delivery_address_format_id' => $this->delivery['format_id'],
'billing_name' => $this->billing['firstname'] . ' ' . $this->billing['lastname'],
'billing_company' => $this->billing['company'],
'billing_street_address' => $this->billing['street_address'],
'billing_suburb' => $this->billing['suburb'],
'billing_city' => $this->billing['city'],
'billing_postcode' => $this->billing['postcode'],
'billing_state' => $this->billing['state'],
'billing_country' => $this->billing['country']['title'],
'billing_address_format_id' => $this->billing['format_id'],
'payment_method' => (($this->info['payment_module_code'] == '' and $this->info['payment_method'] == '') ? PAYMENT_METHOD_GV : $this->info['payment_method']),
'payment_module_code' => (($this->info['payment_module_code'] == '' and $this->info['payment_method'] == '') ? PAYMENT_MODULE_GV : $this->info['payment_module_code']),
'shipping_method' => $this->info['shipping_method'],
'shipping_module_code' => (strpos($this->info['shipping_module_code'], '_') > 0 ? substr($this->info['shipping_module_code'], 0, strpos($this->info['shipping_module_code'], '_')) : $this->info['shipping_module_code']),
'coupon_code' => $this->info['coupon_code'],
'cc_type' => $this->info['cc_type'],
'cc_owner' => $this->info['cc_owner'],
'cc_number' => $this->info['cc_number'],
'cc_expires' => $this->info['cc_expires'],
'date_purchased' => 'now()',
'orders_status' => $this->info['order_status'],
'order_total' => $this->info['total'],
'order_tax' => $this->info['tax'],
'currency' => $this->info['currency'],
'currency_value' => $this->info['currency_value'],
'ip_address' => $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR']
);
zen_db_perform(TABLE_ORDERS, $sql_data_array);
$insert_id = $db->Insert_ID();
for ($i=0, $n=sizeof($zf_ot_modules); $i<$n; $i++) {
$sql_data_array = array('orders_id' => $insert_id,
'title' => $zf_ot_modules[$i]['title'],
'text' => $zf_ot_modules[$i]['text'],
'value' => $zf_ot_modules[$i]['value'],
'class' => $zf_ot_modules[$i]['code'],
'sort_order' => $zf_ot_modules[$i]['sort_order']);
zen_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array);
}
$customer_notification = (SEND_EMAILS == 'true') ? '1' : '0';
$sql_data_array = array('orders_id' => $insert_id,
'orders_status_id' => $this->info['order_status'],
'date_added' => 'now()',
'customer_notified' => $customer_notification,
'comments' => $this->info['comments']);
zen_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
return($insert_id);
}
function create_add_products($zf_insert_id, $zf_mode = false) {
global $db, $currencies, $order_total_modules, $order_totals, $zco_notifier;
// initialized for the email confirmation
$this->products_ordered = '';
$this->products_ordered_html = '';
$this->subtotal = 0;
$this->total_tax = 0;
// lowstock email report
$this->email_low_stock='';
for ($i=0, $n=sizeof($this->products); $i<$n; $i++) {
// Stock Update - Joao Correia
if (STOCK_LIMITED == 'true') {
if (DOWNLOAD_ENABLED == 'true') {
$stock_query_raw = "select p.products_quantity, pad.products_attributes_filename, p.product_is_always_free_shipping
from " . TABLE_PRODUCTS . " p
left join " . TABLE_PRODUCTS_ATTRIBUTES . " pa
on p.products_id=pa.products_id
left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
on pa.products_attributes_id=pad.products_attributes_id
WHERE p.products_id = '" . zen_get_prid($this->products[$i]['id']) . "'";
// Will work with only one option for downloadable products
// otherwise, we have to build the query dynamically with a loop
$products_attributes = $this->products[$i]['attributes'];
if (is_array($products_attributes)) {
$stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'";
}
$stock_values = $db->Execute($stock_query_raw);
} else {
$stock_values = $db->Execute("select * from " . TABLE_PRODUCTS . " where products_id = '" . zen_get_prid($this->products[$i]['id']) . "'");
}
$zco_notifier->notify('NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_BEGIN');
if ($stock_values->RecordCount() > 0) {
// do not decrement quantities if products_attributes_filename exists
if ((DOWNLOAD_ENABLED != 'true') || $stock_values->fields['product_is_always_free_shipping'] == 2 || (!$stock_values->fields['products_attributes_filename']) ) {
$stock_left = $stock_values->fields['products_quantity'] - $this->products[$i]['qty'];
$this->products[$i]['stock_reduce'] = $this->products[$i]['qty'];
} else {
$stock_left = $stock_values->fields['products_quantity'];
}
// $this->products[$i]['stock_value'] = $stock_values->fields['products_quantity'];
$db->Execute("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . zen_get_prid($this->products[$i]['id']) . "'");
// if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
if ($stock_left < 1) {
// only set status to off when not displaying sold out
if (SHOW_PRODUCTS_SOLD_OUT == '0') {
$db->Execute("update " . TABLE_PRODUCTS . " set products_status = 0 where products_id = '" . zen_get_prid($this->products[$i]['id']) . "'");
}
}
// for low stock email
if ( $stock_left <= STOCK_REORDER_LEVEL ) {
// WebMakers.com Added: add to low stock email
$this->email_low_stock .= 'ID# ' . zen_get_prid($this->products[$i]['id']) . "\t\t" . $this->products[$i]['model'] . "\t\t" . $this->products[$i]['name'] . "\t\t" . ' Qty Left: ' . $stock_left . "\n";
}
}
}
// Update products_ordered (for bestsellers list)
// $db->Execute("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . zen_get_prid($order->products[$i]['id']) . "'");
$db->Execute("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%f', $this->products[$i]['qty']) . " where products_id = '" . zen_get_prid($this->products[$i]['id']) . "'");
$zco_notifier->notify('NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_END');
$sql_data_array = array('orders_id' => $zf_insert_id,
'products_id' => zen_get_prid($this->products[$i]['id']),
'products_model' => $this->products[$i]['model'],
'products_name' => $this->products[$i]['name'],
'products_price' => $this->products[$i]['price'],
'final_price' => $this->products[$i]['final_price'],
'onetime_charges' => $this->products[$i]['onetime_charges'],
'products_tax' => $this->products[$i]['tax'],
'products_quantity' => $this->products[$i]['qty'],
'products_priced_by_attribute' => $this->products[$i]['products_priced_by_attribute'],
'product_is_free' => $this->products[$i]['product_is_free'],
'products_discount_type' => $this->products[$i]['products_discount_type'],
'products_discount_type_from' => $this->products[$i]['products_discount_type_from'],
'products_prid' => $this->products[$i]['id']);
zen_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
$order_products_id = $db->Insert_ID();
$zco_notifier->notify('NOTIFY_ORDER_PROCESSING_CREDIT_ACCOUNT_UPDATE_BEGIN');
$order_total_modules->update_credit_account($i);//ICW ADDED FOR CREDIT CLASS SYSTEM
$zco_notifier->notify('NOTIFY_ORDER_PROCESSING_ATTRIBUTES_BEGIN');
//------insert customer-chosen options to order--------
$attributes_exist = '0';
$this->products_ordered_attributes = '';
if (isset($this->products[$i]['attributes'])) {
$attributes_exist = '1';
for ($j=0, $n2=sizeof($this->products[$i]['attributes']); $j<$n2; $j++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -