423 lines
23 KiB
PHP
423 lines
23 KiB
PHP
<?php
|
|
/* ----------------------------------------------------------------------
|
|
|
|
MyOOS [Shopsystem]
|
|
https://www.oos-shop.de
|
|
|
|
Copyright (c) 2003 - 2019 by the MyOOS Development Team.
|
|
----------------------------------------------------------------------
|
|
Based on:
|
|
|
|
File: order.php,v 1.29 2003/02/11 21:13:39 dgw_
|
|
----------------------------------------------------------------------
|
|
osCommerce, Open Source E-Commerce Solutions
|
|
http://www.oscommerce.com
|
|
|
|
Copyright (c) 2003 osCommerce
|
|
----------------------------------------------------------------------
|
|
Released under the GNU General Public License
|
|
---------------------------------------------------------------------- */
|
|
|
|
/** ensure this file is being included by a parent file */
|
|
defined( 'OOS_VALID_MOD' ) OR die( 'Direct Access to this location is not allowed.' );
|
|
|
|
class order {
|
|
var $info;
|
|
var $totals;
|
|
var $products;
|
|
var $customer;
|
|
var $delivery;
|
|
var $content_type;
|
|
|
|
public function __construct( $order_id = '') {
|
|
$this->info = array();
|
|
$this->totals = array();
|
|
$this->products = array();
|
|
$this->customer = array();
|
|
$this->delivery = array();
|
|
|
|
if (oos_is_not_null($order_id)) {
|
|
$this->query($order_id);
|
|
} else {
|
|
$this->cart();
|
|
}
|
|
}
|
|
|
|
public function query($order_id) {
|
|
|
|
$order_id = oos_db_prepare_input($order_id);
|
|
$nLanguageID = isset($_SESSION['language_id']) ? intval( $_SESSION['language_id'] ) : DEFAULT_LANGUAGE_ID;
|
|
|
|
// Get database information
|
|
$dbconn =& oosDBGetConn();
|
|
$oostable =& oosDBGetTables();
|
|
|
|
$orderstable = $oostable['orders'];
|
|
$sql = "SELECT customers_id, customers_name, customers_company, customers_street_address,
|
|
customers_city, customers_postcode, customers_state,
|
|
customers_country, customers_telephone, customers_email_address,
|
|
customers_address_format_id, delivery_name, delivery_company,
|
|
delivery_street_address, delivery_city, delivery_postcode,
|
|
delivery_state, delivery_country, delivery_address_format_id, billing_name,
|
|
billing_company, billing_street_address, billing_city,
|
|
billing_postcode, billing_state, billing_country, billing_address_format_id,
|
|
payment_method, currency, currency_value,
|
|
date_purchased, orders_status, last_modified
|
|
FROM $orderstable
|
|
WHERE orders_id = '" . intval($order_id) . "'";
|
|
$order = $dbconn->GetRow($sql);
|
|
|
|
$orders_totaltable = $oostable['orders_total'];
|
|
$sql = "SELECT title, text
|
|
FROM $orders_totaltable
|
|
WHERE orders_id = '" . intval($order_id) . "'
|
|
ORDER BY sort_order";
|
|
$this->totals = $dbconn->GetAll($sql);
|
|
|
|
$orders_totaltable = $oostable['orders_total'];
|
|
$sql = "SELECT text
|
|
FROM $orders_totaltable
|
|
WHERE orders_id = '" . intval($order_id) . "'
|
|
AND class = 'ot_total'";
|
|
$order_total_text = $dbconn->GetOne($sql);
|
|
|
|
$orders_totaltable = $oostable['orders_total'];
|
|
$sql = "SELECT title
|
|
FROM $orders_totaltable
|
|
WHERE orders_id = '" . intval($order_id) . "'
|
|
AND class = 'ot_shipping'";
|
|
$shipping_method_title = $dbconn->GetOne($sql);
|
|
|
|
$orders_statustable = $oostable['orders_status'];
|
|
$sql = "SELECT orders_status_name
|
|
FROM $orders_statustable
|
|
WHERE orders_status_id = '" . $order['orders_status'] . "'
|
|
AND orders_languages_id = '" . intval($nLanguageID) . "'";
|
|
$orders_status_name = $dbconn->GetOne($sql);
|
|
|
|
$this->info = array('currency' => $order['currency'],
|
|
'currency_value' => $order['currency_value'],
|
|
'payment_method' => $order['payment_method'],
|
|
'cc_type' => $order['cc_type'],
|
|
'cc_owner' => $order['cc_owner'],
|
|
'cc_number' => $order['cc_number'],
|
|
'cc_expires' => $order['cc_expires'],
|
|
'date_purchased' => $order['date_purchased'],
|
|
'orders_status' => $orders_status_name,
|
|
'last_modified' => $order['last_modified'],
|
|
'total' => strip_tags($order_total_text),
|
|
'shipping_method' => ((substr($shipping_method_title, -1) == ':') ? substr(strip_tags($shipping_method_title), 0, -1) : strip_tags($shipping_method_title)));
|
|
|
|
$this->customer = array('id' => $order['customers_id'],
|
|
'name' => $order['customers_name'],
|
|
'company' => $order['customers_company'],
|
|
'street_address' => $order['customers_street_address'],
|
|
'city' => $order['customers_city'],
|
|
'postcode' => $order['customers_postcode'],
|
|
'state' => $order['customers_state'],
|
|
'country' => $order['customers_country'],
|
|
'format_id' => $order['customers_address_format_id'],
|
|
'telephone' => $order['customers_telephone'],
|
|
'email_address' => $order['customers_email_address']);
|
|
|
|
$this->delivery = array('name' => $order['delivery_name'],
|
|
'company' => $order['delivery_company'],
|
|
'street_address' => $order['delivery_street_address'],
|
|
'city' => $order['delivery_city'],
|
|
'postcode' => $order['delivery_postcode'],
|
|
'state' => $order['delivery_state'],
|
|
'country' => $order['delivery_country'],
|
|
'format_id' => $order['delivery_address_format_id']);
|
|
|
|
if (empty($this->delivery['name']) && empty($this->delivery['street_address'])) {
|
|
$this->delivery = FALSE;
|
|
}
|
|
|
|
$this->billing = array('name' => $order['billing_name'],
|
|
'company' => $order['billing_company'],
|
|
'street_address' => $order['billing_street_address'],
|
|
'city' => $order['billing_city'],
|
|
'postcode' => $order['billing_postcode'],
|
|
'state' => $order['billing_state'],
|
|
'country' => $order['billing_country'],
|
|
'format_id' => $order['billing_address_format_id']);
|
|
|
|
$index = 0;
|
|
|
|
$orders_productstable = $oostable['orders_products'];
|
|
$sql = "SELECT orders_products_id, products_id, products_name, products_model,
|
|
products_ean, products_serial_number, products_price, products_tax,
|
|
products_quantity, final_price
|
|
FROM $orders_productstable
|
|
WHERE orders_id = '" . intval($order_id) . "'";
|
|
$orders_products_result = $dbconn->Execute($sql);
|
|
while ($orders_products = $orders_products_result->fields) {
|
|
$this->products[$index] = array('qty' => $orders_products['products_quantity'],
|
|
'id' => $orders_products['products_id'],
|
|
'name' => $orders_products['products_name'],
|
|
'model' => $orders_products['products_model'],
|
|
'ean' => $orders_products['products_ean'],
|
|
'serial_number' => $orders_products['products_serial_number'],
|
|
'tax' => $orders_products['products_tax'],
|
|
'price' => $orders_products['products_price'],
|
|
'final_price' => $orders_products['final_price']);
|
|
|
|
$subindex = 0;
|
|
$orders_products_attributestable = $oostable['orders_products_attributes'];
|
|
$sql = "SELECT products_options, products_options_values, options_values_price, price_prefix
|
|
FROM $orders_products_attributestable
|
|
WHERE orders_id = '" . intval($order_id) . "'
|
|
AND orders_products_id = '" . $orders_products['orders_products_id'] . "'";
|
|
$attributes_result = $dbconn->Execute($sql);
|
|
if ($attributes_result->RecordCount()) {
|
|
while ($attributes = $attributes_result->fields) {
|
|
$this->products[$index]['attributes'][$subindex] = array('option' => $attributes['products_options'],
|
|
'value' => $attributes['products_options_values'],
|
|
'prefix' => $attributes['price_prefix'],
|
|
'price' => $attributes['options_values_price']);
|
|
|
|
$subindex++;
|
|
|
|
// Move that ADOdb pointer!
|
|
$attributes_result->MoveNext();
|
|
}
|
|
}
|
|
|
|
$this->info['tax_groups']["{$this->products[$index]['tax']}"] = '1';
|
|
|
|
$index++;
|
|
|
|
// Move that ADOdb pointer!
|
|
$orders_products_result->MoveNext();
|
|
}
|
|
}
|
|
|
|
public function cart() {
|
|
global $oCurrencies, $aUser;
|
|
|
|
$this->content_type = $_SESSION['cart']->get_content_type();
|
|
$nLanguageID = isset($_SESSION['language_id']) ? intval( $_SESSION['language_id'] ) : DEFAULT_LANGUAGE_ID;
|
|
|
|
// Get database information
|
|
$dbconn =& oosDBGetConn();
|
|
$oostable =& oosDBGetTables();
|
|
|
|
$customerstable = $oostable['customers'];
|
|
$address_booktable = $oostable['address_book'];
|
|
$zonestable = $oostable['zones'];
|
|
$countriestable = $oostable['countries'];
|
|
$sql = "SELECT c.customers_firstname, c.customers_lastname, c.customers_telephone, c.customers_email_address,
|
|
ab.entry_company, ab.entry_street_address, ab.entry_postcode, ab.entry_city,
|
|
ab.entry_zone_id, z.zone_name, co.countries_id, co.countries_name, co.countries_iso_code_2,
|
|
co.countries_iso_code_3, co.address_format_id, ab.entry_state
|
|
FROM $customerstable c,
|
|
$address_booktable ab LEFT JOIN
|
|
$zonestable z
|
|
ON (ab.entry_zone_id = z.zone_id) LEFT JOIN
|
|
$countriestable co
|
|
ON (ab.entry_country_id = co.countries_id)
|
|
WHERE c.customers_id = '" . intval($_SESSION['customer_id']) . "' AND
|
|
ab.customers_id = '" . intval($_SESSION['customer_id']) . "' AND
|
|
c.customers_default_address_id = ab.address_book_id";
|
|
$customer_address = $dbconn->GetRow($sql);
|
|
|
|
$address_booktable = $oostable['address_book'];
|
|
$zonestable = $oostable['zones'];
|
|
$countriestable = $oostable['countries'];
|
|
$sql = "SELECT ab.entry_firstname, ab.entry_lastname, ab.entry_company, ab.entry_street_address,
|
|
ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name,
|
|
ab.entry_country_id, c.countries_id, c.countries_name, c.countries_iso_code_2,
|
|
c.countries_iso_code_3, c.address_format_id, ab.entry_state
|
|
FROM $address_booktable ab LEFT JOIN
|
|
$zonestable z
|
|
ON (ab.entry_zone_id = z.zone_id) LEFT JOIN
|
|
$countriestable c ON
|
|
(ab.entry_country_id = c.countries_id)
|
|
WHERE ab.customers_id = '" . intval($_SESSION['customer_id']) . "' AND
|
|
ab.address_book_id = '" . intval($_SESSION['sendto']) . "'";
|
|
$shipping_address = $dbconn->GetRow($sql);
|
|
|
|
$address_booktable = $oostable['address_book'];
|
|
$zonestable = $oostable['zones'];
|
|
$countriestable = $oostable['countries'];
|
|
$sql = "SELECT ab.entry_firstname, ab.entry_lastname, ab.entry_company, ab.entry_street_address,
|
|
ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name,
|
|
ab.entry_country_id, c.countries_id, c.countries_name, c.countries_iso_code_2,
|
|
c.countries_iso_code_3, c.address_format_id, ab.entry_state
|
|
FROM $address_booktable ab LEFT JOIN
|
|
$zonestable z
|
|
ON (ab.entry_zone_id = z.zone_id) LEFT JOIN
|
|
$countriestable c ON
|
|
(ab.entry_country_id = c.countries_id)
|
|
WHERE ab.customers_id = '" . intval($_SESSION['customer_id']) . "' AND
|
|
ab.address_book_id = '" . intval($_SESSION['billto']) . "'";
|
|
$billing_address = $dbconn->GetRow($sql);
|
|
|
|
$class =& $_SESSION['payment'];
|
|
|
|
if ($this->content_type == 'virtual') {
|
|
$tax_address = array('entry_country_id' => $billing_address['entry_country_id'],
|
|
'entry_zone_id' => $billing_address['entry_zone_id']);
|
|
} else {
|
|
$tax_address = array('entry_country_id' => $shipping_address['entry_country_id'],
|
|
'entry_zone_id' => $shipping_address['entry_zone_id']);
|
|
}
|
|
|
|
|
|
$this->info = array('order_status' => DEFAULT_ORDERS_STATUS_ID,
|
|
'currency' => $_SESSION['currency'],
|
|
'currency_value' => $oCurrencies->currencies[$_SESSION['currency']]['value'],
|
|
'payment_method' => $GLOBALS[$class]->title,
|
|
'shipping_method' => $_SESSION['shipping']['title'],
|
|
'shipping_cost' => $_SESSION['shipping']['cost'],
|
|
'comments' => (isset($_SESSION['comments']) ? $_SESSION['comments'] : ''),
|
|
'shipping_class' => ( (strpos($shipping['id'],'_') > 0) ? substr( strrev( strchr(strrev($shipping['id']),'_') ),0,-1) : $shipping['id'] ),
|
|
'payment_class' => $_SESSION['payment'],
|
|
);
|
|
|
|
if (isset($GLOBALS['payment']) && is_object($GLOBALS['payment'])) {
|
|
$this->info['payment_method'] = $GLOBALS['payment']->title;
|
|
|
|
if ( isset($GLOBALS['payment']->order_status) && is_numeric($GLOBALS['payment']->order_status) && ($GLOBALS['payment']->order_status > 0) ) {
|
|
$this->info['order_status'] = $GLOBALS['payment']->order_status;
|
|
}
|
|
}
|
|
|
|
$this->customer = array('firstname' => $customer_address['customers_firstname'],
|
|
'lastname' => $customer_address['customers_lastname'],
|
|
'company' => $customer_address['entry_company'],
|
|
'street_address' => $customer_address['entry_street_address'],
|
|
'city' => $customer_address['entry_city'],
|
|
'postcode' => $customer_address['entry_postcode'],
|
|
'state' => ((oos_is_not_null($customer_address['entry_state'])) ? $customer_address['entry_state'] : $customer_address['zone_name']),
|
|
'zone_id' => $customer_address['entry_zone_id'],
|
|
'country' => array('id' => $customer_address['countries_id'], 'title' => $customer_address['countries_name'], 'iso_code_2' => $customer_address['countries_iso_code_2'], 'iso_code_3' => $customer_address['countries_iso_code_3']),
|
|
'format_id' => $customer_address['address_format_id'],
|
|
'telephone' => $customer_address['customers_telephone'],
|
|
'email_address' => $customer_address['customers_email_address']);
|
|
|
|
$this->delivery = array('firstname' => $shipping_address['entry_firstname'],
|
|
'lastname' => $shipping_address['entry_lastname'],
|
|
'company' => $shipping_address['entry_company'],
|
|
'street_address' => $shipping_address['entry_street_address'],
|
|
'city' => $shipping_address['entry_city'],
|
|
'postcode' => $shipping_address['entry_postcode'],
|
|
'state' => ((oos_is_not_null($shipping_address['entry_state'])) ? $shipping_address['entry_state'] : $shipping_address['zone_name']),
|
|
'zone_id' => $shipping_address['entry_zone_id'],
|
|
'country' => array('id' => $shipping_address['countries_id'], 'title' => $shipping_address['countries_name'], 'iso_code_2' => $shipping_address['countries_iso_code_2'], 'iso_code_3' => $shipping_address['countries_iso_code_3']),
|
|
'country_id' => $shipping_address['entry_country_id'],
|
|
'format_id' => $shipping_address['address_format_id']);
|
|
|
|
|
|
$this->billing = array('firstname' => $billing_address['entry_firstname'],
|
|
'lastname' => $billing_address['entry_lastname'],
|
|
'company' => $billing_address['entry_company'],
|
|
'street_address' => $billing_address['entry_street_address'],
|
|
'city' => $billing_address['entry_city'],
|
|
'postcode' => $billing_address['entry_postcode'],
|
|
'state' => ((oos_is_not_null($billing_address['entry_state'])) ? $billing_address['entry_state'] : $billing_address['zone_name']),
|
|
'country' => array('id' => $billing_address['countries_id'], 'title' => $billing_address['countries_name'], 'iso_code_2' => $billing_address['countries_iso_code_2'], 'iso_code_3' => $billing_address['countries_iso_code_3']),
|
|
'country_id' => $billing_address['entry_country_id'],
|
|
'format_id' => $billing_address['address_format_id']);
|
|
$index = 0;
|
|
$products = $_SESSION['cart']->get_products();
|
|
for ($i=0, $n=sizeof($products); $i<$n; $i++) {
|
|
$this->products[$index] = array('qty' => $products[$i]['quantity'],
|
|
'name' => $products[$i]['name'],
|
|
'essential_characteristics' => $products[$i]['essential_characteristics'],
|
|
'image' => $products[$i]['image'],
|
|
'model' => $products[$i]['model'],
|
|
'ean' => $products[$i]['ean'],
|
|
'tax' => oos_get_tax_rate($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $$tax_address['entry_zone_id']),
|
|
'price' => $products[$i]['price'],
|
|
'final_price' => $products[$i]['price'] + $_SESSION['cart']->attributes_price($products[$i]['id']),
|
|
'weight' => $products[$i]['weight'],
|
|
'towlid' => $products[$i]['towlid'],
|
|
'id' => $products[$i]['id']);
|
|
|
|
if ($products[$i]['attributes']) {
|
|
$subindex = 0;
|
|
reset($products[$i]['attributes']);
|
|
foreach ($products[$i]['attributes'] as $option => $value) {
|
|
|
|
$products_optionstable = $oostable['products_options'];
|
|
$products_options_valuestable = $oostable['products_options_values'];
|
|
$products_attributestable = $oostable['products_attributes'];
|
|
|
|
// if (($option == 4) || ($option == 3)) {
|
|
if ($value == PRODUCTS_OPTIONS_VALUE_TEXT_ID) {
|
|
$sql = "SELECT popt.products_options_name, poval.products_options_values_name,
|
|
pa.options_values_price, pa.price_prefix
|
|
FROM $products_optionstable popt,
|
|
$products_options_valuestable poval,
|
|
$products_attributestable pa
|
|
WHERE
|
|
pa.products_id = '" . oos_db_input($products[$i]['id']) . "' AND
|
|
pa.options_id = '" . oos_db_input($option) . "' AND
|
|
pa.options_id = popt.products_options_id AND
|
|
popt.products_options_languages_id = '" . intval($nLanguageID) . "'";
|
|
} else {
|
|
$sql = "SELECT popt.products_options_name, poval.products_options_values_name,
|
|
pa.options_values_price, pa.price_prefix
|
|
FROM $products_optionstable popt,
|
|
$products_options_valuestable poval,
|
|
$products_attributestable pa
|
|
WHERE pa.products_id = '" . oos_db_input($products[$i]['id']) . "' AND
|
|
pa.options_id = '" . oos_db_input($option) . "' AND
|
|
pa.options_id = popt.products_options_id AND
|
|
pa.options_values_id = '" . oos_db_input($value) . "' AND
|
|
pa.options_values_id = poval.products_options_values_id AND
|
|
popt.products_options_languages_id = '" . intval($nLanguageID) . "' AND
|
|
poval.products_options_values_languages_id = '" . intval($nLanguageID) . "'";
|
|
}
|
|
$attributes = $dbconn->GetRow($sql);
|
|
|
|
if ($value == PRODUCTS_OPTIONS_VALUE_TEXT_ID){
|
|
$attr_value = $products[$i]['attributes_values'][$option];
|
|
} else {
|
|
$attr_value = $attributes['products_options_values_name'];
|
|
}
|
|
$this->products[$index]['attributes'][$subindex] = array('option' => $attributes['products_options_name'],
|
|
'value' => $attr_value,
|
|
'option_id' => $option,
|
|
'value_id' => $value,
|
|
'prefix' => $attributes['price_prefix'],
|
|
'price' => $attributes['options_values_price']);
|
|
$subindex++;
|
|
}
|
|
}
|
|
|
|
$nPrice = $oCurrencies->calculate_price($this->products[$index]['final_price'], $this->products[$index]['tax'], $this->products[$index]['qty']);
|
|
$this->info['subtotal'] += $nPrice;
|
|
|
|
$products_tax = $this->products[$index]['tax'];
|
|
if ($aUser['price_with_tax'] == 1) {
|
|
$this->info['tax'] += $nPrice - ($nPrice / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
|
|
if (isset($this->info['tax_groups']["$products_tax"])) {
|
|
$this->info['tax_groups']["$products_tax"] += $nPrice - ($nPrice / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
|
|
} else {
|
|
$this->info['tax_groups']["$products_tax"] = $nPrice - ($nPrice / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
|
|
}
|
|
} else {
|
|
$this->info['tax'] += ($products_tax / 100) * $nPrice;
|
|
if (isset($this->info['tax_groups']["$products_tax"])) {
|
|
$this->info['tax_groups']["$products_tax"] += ($products_tax / 100) * $nPrice;
|
|
} else {
|
|
$this->info['tax_groups']["$products_tax"] = ($products_tax / 100) * $nPrice;
|
|
}
|
|
}
|
|
|
|
$index++;
|
|
}
|
|
|
|
|
|
|
|
if ($aUser['price_with_tax'] == 1) {
|
|
$this->info['total'] = $this->info['subtotal'] + $this->info['shipping_cost'];
|
|
} else {
|
|
$this->info['total'] = $this->info['subtotal'] + $this->info['tax'] + $this->info['shipping_cost'];
|
|
}
|
|
}
|
|
}
|
|
|