Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

orders_total table not updating


ostowerce

Recommended Posts

Hi,

 

I made a copy of my previous oscommerce installation for a new a bit modified store.

Now for some reason oscommerce is not writing anything in orders_total table when user checks out.

Order is processed fine and they receive confirmation email. The email is of course missing total sum of order and postal fees.

And admin panel show´s no orders also because of that table being empty.

I have added the additional information about the order by hand to the db and it works as normal after that.

I´ve traced the problem to checkout_process.php aroung line 160 where the TABLE_ORDERS_TOTAL should be written, but I´m not sure what could be the problem since nothing seems to be going wrong.

 

I have not modified order_total.php file from wich the $order_totals variable is made.

 

Any help would be appreciated.

Link to comment
Share on other sites

<?php
/*
 $Id: checkout_process.php,v 1.128 2003/05/28 18:00:29 hpdl Exp $
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com
 Copyright (c) 2007 osCommerce
 Released under the GNU General Public License
*/
 require('includes/application_top.php');
 require('includes/classes/http_client.php');
// BOF: WebMakers.com Added: Downloads Controller - Free Shipping
 // Reset $shipping if free shipping is on and weight is not 0
 if (tep_get_configuration_key_value('MODULE_SHIPPING_FREESHIPPER_STATUS') and $cart->show_weight()!=0) {
   tep_session_unregister('shipping');
 }
// EOF: WebMakers.com Added: Downloads Controller - Free Shipping

// if the customer is not logged on, redirect them to the login page
 if (!tep_session_is_registered('customer_id')) {
   $navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
   tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
 }

// if there is nothing in the customers cart, redirect them to the shopping cart page
 if ($cart->count_contents() < 1) {
   tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
 }
// if no shipping method has been selected, redirect the customer to the shipping method selection page
 if (!tep_session_is_registered('shipping') || !tep_session_is_registered('sendto')) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
 }
 if ( (tep_not_null(MODULE_PAYMENT_INSTALLED)) && (!tep_session_is_registered('payment')) ) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
}
// avoid hack attempts during the checkout procedure by checking the internal cartID
 if (isset($cart->cartID) && tep_session_is_registered('cartID')) {
   if ($cart->cartID != $cartID) {
  tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
   }
 }
 include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS);
// load selected payment module
 require(DIR_WS_CLASSES . 'payment.php');
 $payment_modules = new payment($payment);
// load the selected shipping module
 require(DIR_WS_CLASSES . 'shipping.php');
 $shipping_modules = new shipping($shipping);
 require(DIR_WS_CLASSES . 'order.php');
 $order = new order;
// Stock Check
// Muunnettu tarkastamaan jos tuotteella on Pakkauskoko niin tarkistetaan grammamääräisesti

 $any_out_of_stock = false;
 if (STOCK_CHECK == 'true') {
   for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
 if (tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) {
  $any_out_of_stock = true;
 }
   }
   // Out of Stock
   if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) {
  tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
   }
 }
 $payment_modules->update_status();
 if ( ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
 }
 require(DIR_WS_CLASSES . 'order_total.php');
 $order_total_modules = new order_total;
 $order_totals = $order_total_modules->process();
// load the before_process function from the payment modules
 $payment_modules->before_process();
 $sql_data_array = array('customers_id' => $customer_id,
					    'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'],
					    'customers_company' => $order->customer['company'],
					    'customers_street_address' => $order->customer['street_address'],
					    'customers_suburb' => $order->customer['suburb'],
					    'customers_city' => $order->customer['city'],
					    'customers_postcode' => $order->customer['postcode'],
					    'customers_state' => $order->customer['state'],
					    'customers_country' => $order->customer['country']['title'],
					    'customers_telephone' => $order->customer['telephone'],
					    'customers_email_address' => $order->customer['email_address'],
					    'customers_address_format_id' => $order->customer['format_id'],
					    'delivery_name' => trim($order->delivery['firstname'] . ' ' . $order->delivery['lastname']),
					    'delivery_company' => $order->delivery['company'],
					    'delivery_street_address' => $order->delivery['street_address'],
					  'delivery_suburb' => $order->delivery['suburb'],
					  'delivery_city' => $order->delivery['city'],
					  'delivery_postcode' => $order->delivery['postcode'],
					  'delivery_state' => $order->delivery['state'],
					  'delivery_country' => $order->delivery['country']['title'],
					  'delivery_address_format_id' => $order->delivery['format_id'],
					  'billing_name' => $order->billing['firstname'] . ' ' . $order->billing['lastname'],
					  'billing_company' => $order->billing['company'],
					  'billing_street_address' => $order->billing['street_address'],
					  'billing_suburb' => $order->billing['suburb'],
					  'billing_city' => $order->billing['city'],
					  'billing_postcode' => $order->billing['postcode'],
					  'billing_state' => $order->billing['state'],
					  'billing_country' => $order->billing['country']['title'],
					  'billing_address_format_id' => $order->billing['format_id'],
					  'payment_method' => $order->info['payment_method'],
					  'cc_type' => $order->info['cc_type'],
					  'cc_owner' => $order->info['cc_owner'],
					  'cc_number' => $order->info['cc_number'],
					  'cc_expires' => $order->info['cc_expires'],
					  'date_purchased' => 'now()',
					  'last_modified' => 'now()',
					  'orders_status' => $order->info['order_status'],
					  'currency' => $order->info['currency'],
					  'currency_value' => $order->info['currency_value']);
 tep_db_perform(TABLE_ORDERS, $sql_data_array);
 $insert_id = tep_db_insert_id();
[color=#ff0000][b]  for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
   $sql_data_array = array('orders_id' => $insert_id,
					    'title' => $order_totals[$i]['title'],
					    'text' => $order_totals[$i]['text'],
					    'value' => $order_totals[$i]['value'],
					    'class' => $order_totals[$i]['code'],
					    'sort_order' => $order_totals[$i]['sort_order']);
   tep_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array);
 }[/b][/color]
 $customer_notification = (SEND_EMAILS == 'true') ? '1' : '0';
 $sql_data_array = array('orders_id' => $insert_id,
					  'orders_status_id' => $order->info['order_status'],
					  'date_added' => 'now()',
					  'customer_notified' => $customer_notification,
					  'comments' => $order->info['comments']);
 tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);

//  **** 22.11.2007 kgt - discount coupons
 if( tep_session_is_registered( 'coupon' ) && is_object( $order->coupon ) ) {
  $sql_data_array = array( 'coupons_id' => $order->coupon->coupon['coupons_id'],
						 'orders_id' => $insert_id );
  tep_db_perform( TABLE_DISCOUNT_COUPONS_TO_ORDERS, $sql_data_array );
 }
 //end kgt - discount coupons
// initialized for the email confirmation
 $products_ordered = '';
 $subtotal = 0;
 $total_tax = 0;
 for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
// Stock Update - Joao Correia
   if (STOCK_LIMITED == 'true') {
  if (DOWNLOAD_ENABLED == 'true') {
    $stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename
					    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 = '" . tep_get_prid($order->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 = $order->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_query = tep_db_query($stock_query_raw);
  } else {
    $stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
  }
  if (tep_db_num_rows($stock_query) > 0) {
    $stock_values = tep_db_fetch_array($stock_query);
// do not decrement quantities if products_attributes_filename exists
    if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) {
   $stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty'];

 } else {
	  $stock_left = $stock_values['products_quantity'];
    }
    tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
    if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
	  tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
    }
  }
   }
// Update products_ordered (for bestsellers list)
   tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
   $sql_data_array = array('orders_id' => $insert_id,
					    'products_id' => tep_get_prid($order->products[$i]['id']),
					    'products_model' => $order->products[$i]['model'],
					    'products_name' => $order->products[$i]['name'],
					    'products_price' => $order->products[$i]['price'],
					    'final_price' => $order->products[$i]['final_price'],
					    'products_tax' => $order->products[$i]['tax'],
					    'products_quantity' => $order->products[$i]['qty']);
   tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
   $order_products_id = tep_db_insert_id();
//------insert customer choosen option to order--------
   $attributes_exist = '0';
   $products_ordered_attributes = '';
   if (isset($order->products[$i]['attributes'])) {
  $attributes_exist = '1';
  for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
    if (DOWNLOAD_ENABLED == 'true') {
	  $attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename
						   from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
						   left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
						    on pa.products_attributes_id=pad.products_attributes_id
						   where pa.products_id = '" . $order->products[$i]['id'] . "'
						    and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "'
						    and pa.options_id = popt.products_options_id
						    and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "'
						    and pa.options_values_id = poval.products_options_values_id
						    and popt.language_id = '" . $languages_id . "'
						    and poval.language_id = '" . $languages_id . "'";
	  $attributes = tep_db_query($attributes_query);
    } else {
	  $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'");
    }
    $attributes_values = tep_db_fetch_array($attributes);
    /*$sql_data_array = array('orders_id' => $insert_id,
						    'orders_products_id' => $order_products_id,
						    'products_options' => $attributes_values['products_options_name'],
						    'products_options_values' => $attributes_values['products_options_values_name'],
						    'options_values_price' => $attributes_values['options_values_price'],
						    'price_prefix' => $attributes_values['price_prefix']);
	 */
	 // *** clr 030714 update insert query.  changing to use values form $order->products for products_options_values.
	    $sql_data_array = array('orders_id' => $insert_id,
							   'orders_products_id' => $order_products_id,
							   'products_options' => $attributes_values['products_options_name'],
							   'products_options_values' => $order->products[$i]['attributes'][$j]['value'],
							   'options_values_price' => $attributes_values['options_values_price'],
							   'price_prefix' => $attributes_values['price_prefix']);
    tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);
    if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) {
	  $sql_data_array = array('orders_id' => $insert_id,
							  'orders_products_id' => $order_products_id,
							  'orders_products_filename' => $attributes_values['products_attributes_filename'],
							  'download_maxdays' => $attributes_values['products_attributes_maxdays'],
							  'download_count' => $attributes_values['products_attributes_maxcount']);
	  tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
    }
    //$products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
    //clr 030714 changing to use values from $orders->products and adding call to tep_decode_specialchars()
   $products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . tep_decode_specialchars($order->products[$i]['attributes'][$j]['value']);
  }
   }
//------insert customer choosen option eof ----
   $total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']);
   $total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty'];
   $total_cost += $total_products_price;
   $products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n";
 }
  // ******** 22.02.2007 generoi viite
    // $ref= sprintf("%05d", $insert_id);
   // $ref=sprintf("%05d", $order->info['order_id']);
   // $ref=sprintf("%05d", $order->customer['telephone']);
   // $ref=sprintf("%05d", $order->info['order_id']);
    $ref=sprintf("%05d", $order->customer['postcode']);
   // $ref=sprintf("%05d", $order->info['orders_id']);
		  $chmul=array(0,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3);
		  $checksum=0;
		  for($i=1;$i<=strlen($ref);$i++) $checksum+=$ref{strlen($ref)-$i}*$chmul[$i];
		  if ($checksum%10) { $cdigit=10-$checksum%10; } else { $cdigit=0; }
		  if ($checksum%10) { $cdigit=10-$checksum%10; } else { $cdigit=0; }
 $ref.=$cdigit;
   // ***** generoi viite loppuu


// *************** 18.01.2006 PWA alkaa ***********
// PWA
//lets start with the email confirmation
// DDB - 041103 - Add test for PWA : no display of invoice URL if PWA customer
if (!tep_session_is_registered('noaccount'))
{
  $email_order = STORE_NAME . "\n" .
	 EMAIL_KIITOS . "\n" .
			  EMAIL_SEPARATOR . "\n" .
			  EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
			  EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" .
			  EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
  if ($order->info['comments'])
  {
 $email_order .= tep_db_output($order->info['comments']) . "\n\n";
  }
  $email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
			   EMAIL_SEPARATOR . "\n" .
			   $products_ordered .
			   EMAIL_SEPARATOR . "\n";
} else {
  $email_order = STORE_NAME . "\n" .
			  EMAIL_SEPARATOR . "\n" .
			  EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
			  EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
  if ($order->info['comments']) {
 $email_order .= tep_db_output($order->info['comments']) . "\n\n";
  }
  $email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
			   EMAIL_SEPARATOR . "\n" .
			   $products_ordered .
			   EMAIL_SEPARATOR . "\n";
  }
  for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
 $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
  }
  if ($order->content_type != 'virtual') {
 $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
				 EMAIL_SEPARATOR . "\n" .
				 tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
  }
  $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
			   EMAIL_SEPARATOR . "\n" .
			   tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
  if (is_object($$payment)) {
 $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
				 EMAIL_SEPARATOR . "\n";
 $payment_class = $$payment;
 //$email_order .= $payment_class->title . "\n\n";
 //$email_order .= $payment_class->title .= $ref . "\n\n";
   $email_order .= $order->info['payment_method'] . "\n\n";

 if ($payment_class->email_footer) {
  //$email_order .= $payment_class->email_footer . "\n\n";
  // $email_order .= $payment_class->email_footer .$ref. "\n\n";
 $email_order .= EMAIL_VIITE . $ref ."\n".$payment_class->email_footer . "\n\n";

 }
  }
  tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
//end PWA
//************************
// send emails to other people
 if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
   tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
 }
// load the after_process function from the payment modules
 $payment_modules->after_process();
 $cart->reset(true);
// unregister session variables used during checkout
 tep_session_unregister('sendto');
 tep_session_unregister('billto');
 tep_session_unregister('shipping');
 tep_session_unregister('payment');
 tep_session_unregister('comments');
 // **** 22.11.2007 kgt - discount coupons
  tep_session_unregister('coupon');
 //end kgt - discount coupons
 tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
 require(DIR_WS_INCLUDES . 'application_bottom.php');
?>

 

Here´s the whole checkout_process.php I highlighted the database write code with red color. I´m not sure where to continue the search since my other store works and I´ve not modified that part at all.

One other problem might be that I´ve added "Prices for Logged-In Users Only v1" ( http://addons.oscommerce.com/info/8325/v,23 ) for 2.3.1 to my oscommerce. Wich shouldn´t interact with that part of my store.

Thanks for looking in to this.

Link to comment
Share on other sites

<?php
/*
 $Id: checkout_process.php,v 1.128 2003/05/28 18:00:29 hpdl Exp $
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com
 Copyright (c) 2007 osCommerce
 Released under the GNU General Public License
*/
 require('includes/application_top.php');
 require('includes/classes/http_client.php');
// BOF: WebMakers.com Added: Downloads Controller - Free Shipping
 // Reset $shipping if free shipping is on and weight is not 0
 if (tep_get_configuration_key_value('MODULE_SHIPPING_FREESHIPPER_STATUS') and $cart->show_weight()!=0) {
   tep_session_unregister('shipping');
 }
// EOF: WebMakers.com Added: Downloads Controller - Free Shipping
// if the customer is not logged on, redirect them to the login page
 if (!tep_session_is_registered('customer_id')) {
   $navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
   tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
 }
// if there is nothing in the customers cart, redirect them to the shopping cart page
 if ($cart->count_contents() < 1) {
   tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
 }
// if no shipping method has been selected, redirect the customer to the shipping method selection page
 if (!tep_session_is_registered('shipping') || !tep_session_is_registered('sendto')) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
 }
 if ( (tep_not_null(MODULE_PAYMENT_INSTALLED)) && (!tep_session_is_registered('payment')) ) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
}
// avoid hack attempts during the checkout procedure by checking the internal cartID
 if (isset($cart->cartID) && tep_session_is_registered('cartID')) {
   if ($cart->cartID != $cartID) {
	  tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
   }
 }
 include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS);
// load selected payment module
 require(DIR_WS_CLASSES . 'payment.php');
 $payment_modules = new payment($payment);
// load the selected shipping module
 require(DIR_WS_CLASSES . 'shipping.php');
 $shipping_modules = new shipping($shipping);
 require(DIR_WS_CLASSES . 'order.php');
 $order = new order;
// Stock Check
// Muunnettu tarkastamaan jos tuotteella on Pakkauskoko niin tarkistetaan grammamääräisesti
 $any_out_of_stock = false;
 if (STOCK_CHECK == 'true') {
   for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
 if (tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) {
  $any_out_of_stock = true;
 }
   }
   // Out of Stock
   if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) {
	  tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
   }
 }
 $payment_modules->update_status();
 if ( ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
   tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
 }
 require(DIR_WS_CLASSES . 'order_total.php');
 $order_total_modules = new order_total;
 $order_totals = $order_total_modules->process();
// load the before_process function from the payment modules
 $payment_modules->before_process();
 $sql_data_array = array('customers_id' => $customer_id,
											    'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'],
											    'customers_company' => $order->customer['company'],
											    'customers_street_address' => $order->customer['street_address'],
											    'customers_suburb' => $order->customer['suburb'],
											    'customers_city' => $order->customer['city'],
											    'customers_postcode' => $order->customer['postcode'],
											    'customers_state' => $order->customer['state'],
											    'customers_country' => $order->customer['country']['title'],
											    'customers_telephone' => $order->customer['telephone'],
											    'customers_email_address' => $order->customer['email_address'],
											    'customers_address_format_id' => $order->customer['format_id'],
											    'delivery_name' => trim($order->delivery['firstname'] . ' ' . $order->delivery['lastname']),
											    'delivery_company' => $order->delivery['company'],
											    'delivery_street_address' => $order->delivery['street_address'],
											  'delivery_suburb' => $order->delivery['suburb'],
											  'delivery_city' => $order->delivery['city'],
											  'delivery_postcode' => $order->delivery['postcode'],
											  'delivery_state' => $order->delivery['state'],
											  'delivery_country' => $order->delivery['country']['title'],
											  'delivery_address_format_id' => $order->delivery['format_id'],
											  'billing_name' => $order->billing['firstname'] . ' ' . $order->billing['lastname'],
											  'billing_company' => $order->billing['company'],
											  'billing_street_address' => $order->billing['street_address'],
											  'billing_suburb' => $order->billing['suburb'],
											  'billing_city' => $order->billing['city'],
											  'billing_postcode' => $order->billing['postcode'],
											  'billing_state' => $order->billing['state'],
											  'billing_country' => $order->billing['country']['title'],
											  'billing_address_format_id' => $order->billing['format_id'],
											  'payment_method' => $order->info['payment_method'],
											  'cc_type' => $order->info['cc_type'],
											  'cc_owner' => $order->info['cc_owner'],
											  'cc_number' => $order->info['cc_number'],
											  'cc_expires' => $order->info['cc_expires'],
											  'date_purchased' => 'now()',
											  'last_modified' => 'now()',
											  'orders_status' => $order->info['order_status'],
											  'currency' => $order->info['currency'],
											  'currency_value' => $order->info['currency_value']);
 tep_db_perform(TABLE_ORDERS, $sql_data_array);
 //$insert_id = tep_db_insert_id();
 $last_order_id_query = tep_db_query('select max(orders_id) as oid from orders');
 $last_order_id = tep_db_fetch_array($last_order_id_query);
 $insert_id = $last_order_id['oid'];
for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
   $sql_data_array = array('orders_id' => $insert_id,
											    'title' => $order_totals[$i]['title'],
											    'text' => $order_totals[$i]['text'],
											    'value' => $order_totals[$i]['value'],
											    'class' => $order_totals[$i]['code'],
											    'sort_order' => $order_totals[$i]['sort_order']);
   tep_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' => $order->info['order_status'],
											  'date_added' => 'now()',
											  'customer_notified' => $customer_notification,
											  'comments' => $order->info['comments']);
 tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
//  **** 22.11.2007 kgt - discount coupons
 if( tep_session_is_registered( 'coupon' ) && is_object( $order->coupon ) ) {
  $sql_data_array = array( 'coupons_id' => $order->coupon->coupon['coupons_id'],
													 'orders_id' => $insert_id );
  tep_db_perform( TABLE_DISCOUNT_COUPONS_TO_ORDERS, $sql_data_array );
 }
 //end kgt - discount coupons
// initialized for the email confirmation
 $products_ordered = '';
 $subtotal = 0;
 $total_tax = 0;
 for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
// Stock Update - Joao Correia
   if (STOCK_LIMITED == 'true') {
	  if (DOWNLOAD_ENABLED == 'true') {
	    $stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename
											    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 = '" . tep_get_prid($order->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 = $order->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_query = tep_db_query($stock_query_raw);
	  } else {
	    $stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
	  }
	  if (tep_db_num_rows($stock_query) > 0) {
	    $stock_values = tep_db_fetch_array($stock_query);
// do not decrement quantities if products_attributes_filename exists
	    if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) {
   $stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty'];

 } else {
			  $stock_left = $stock_values['products_quantity'];
	    }
	    tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
	    if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
			  tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
	    }
	  }
   }
// Update products_ordered (for bestsellers list)
   tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
   $sql_data_array = array('orders_id' => $insert_id,
											    'products_id' => tep_get_prid($order->products[$i]['id']),
											    'products_model' => $order->products[$i]['model'],
											    'products_name' => $order->products[$i]['name'],
											    'products_price' => $order->products[$i]['price'],
											    'final_price' => $order->products[$i]['final_price'],
											    'products_tax' => $order->products[$i]['tax'],
											    'products_quantity' => $order->products[$i]['qty']);
   tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
   $order_products_id = tep_db_insert_id();
//------insert customer choosen option to order--------
   $attributes_exist = '0';
   $products_ordered_attributes = '';
   if (isset($order->products[$i]['attributes'])) {
	  $attributes_exist = '1';
	  for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
	    if (DOWNLOAD_ENABLED == 'true') {
			  $attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename
													   from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
													   left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
													    on pa.products_attributes_id=pad.products_attributes_id
													   where pa.products_id = '" . $order->products[$i]['id'] . "'
													    and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "'
													    and pa.options_id = popt.products_options_id
													    and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "'
													    and pa.options_values_id = poval.products_options_values_id
													    and popt.language_id = '" . $languages_id . "'
													    and poval.language_id = '" . $languages_id . "'";
			  $attributes = tep_db_query($attributes_query);
	    } else {
			  $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'");
	    }
	    $attributes_values = tep_db_fetch_array($attributes);
	    /*$sql_data_array = array('orders_id' => $insert_id,
													    'orders_products_id' => $order_products_id,
													    'products_options' => $attributes_values['products_options_name'],
													    'products_options_values' => $attributes_values['products_options_values_name'],
													    'options_values_price' => $attributes_values['options_values_price'],
													    'price_prefix' => $attributes_values['price_prefix']);
			 */
			 // *** clr 030714 update insert query.  changing to use values form $order->products for products_options_values.
			    $sql_data_array = array('orders_id' => $insert_id,
															   'orders_products_id' => $order_products_id,
															   'products_options' => $attributes_values['products_options_name'],
															   'products_options_values' => $order->products[$i]['attributes'][$j]['value'],
															   'options_values_price' => $attributes_values['options_values_price'],
															   'price_prefix' => $attributes_values['price_prefix']);
	    tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);
	    if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) {
			  $sql_data_array = array('orders_id' => $insert_id,
															  'orders_products_id' => $order_products_id,
															  'orders_products_filename' => $attributes_values['products_attributes_filename'],
															  'download_maxdays' => $attributes_values['products_attributes_maxdays'],
															  'download_count' => $attributes_values['products_attributes_maxcount']);
			  tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
	    }
	    //$products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
	    //clr 030714 changing to use values from $orders->products and adding call to tep_decode_specialchars()
   $products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . tep_decode_specialchars($order->products[$i]['attributes'][$j]['value']);
	  }
   }
//------insert customer choosen option eof ----
   $total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']);
   $total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty'];
   $total_cost += $total_products_price;
   $products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n";
 }
  // ******** 22.02.2007 generoi viite
	    // $ref= sprintf("%05d", $insert_id);
	   // $ref=sprintf("%05d", $order->info['order_id']);
	   // $ref=sprintf("%05d", $order->customer['telephone']);
	   // $ref=sprintf("%05d", $order->info['order_id']);
	    $ref=sprintf("%05d", $order->customer['postcode']);
	   // $ref=sprintf("%05d", $order->info['orders_id']);
					  $chmul=array(0,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3,1,7,3);
					  $checksum=0;
					  for($i=1;$i<=strlen($ref);$i++) $checksum+=$ref{strlen($ref)-$i}*$chmul[$i];
					  if ($checksum%10) { $cdigit=10-$checksum%10; } else { $cdigit=0; }
					  if ($checksum%10) { $cdigit=10-$checksum%10; } else { $cdigit=0; }
	 $ref.=$cdigit;
   // ***** generoi viite loppuu

// *************** 18.01.2006 PWA alkaa ***********
// PWA
//lets start with the email confirmation
// DDB - 041103 - Add test for PWA : no display of invoice URL if PWA customer
if (!tep_session_is_registered('noaccount'))
{
  $email_order = STORE_NAME . "\n" .
			 EMAIL_KIITOS . "\n" .
							  EMAIL_SEPARATOR . "\n" .
							  EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
							  EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" .
							  EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
  if ($order->info['comments'])
  {
	 $email_order .= tep_db_output($order->info['comments']) . "\n\n";
  }
  $email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
							   EMAIL_SEPARATOR . "\n" .
							   $products_ordered .
							   EMAIL_SEPARATOR . "\n";
} else {
  $email_order = STORE_NAME . "\n" .
							  EMAIL_SEPARATOR . "\n" .
							  EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" .
							  EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
  if ($order->info['comments']) {
	 $email_order .= tep_db_output($order->info['comments']) . "\n\n";
  }
  $email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
							   EMAIL_SEPARATOR . "\n" .
							   $products_ordered .
							   EMAIL_SEPARATOR . "\n";
  }
  for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
	 $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
  }
  if ($order->content_type != 'virtual') {
	 $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
									 EMAIL_SEPARATOR . "\n" .
									 tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
  }
  $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
							   EMAIL_SEPARATOR . "\n" .
							   tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
  if (is_object($$payment)) {
	 $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
									 EMAIL_SEPARATOR . "\n";
	 $payment_class = $$payment;
	 //$email_order .= $payment_class->title . "\n\n";
	 //$email_order .= $payment_class->title .= $ref . "\n\n";
   $email_order .= $order->info['payment_method'] . "\n\n";
	 if ($payment_class->email_footer) {
	  //$email_order .= $payment_class->email_footer . "\n\n";
	  // $email_order .= $payment_class->email_footer .$ref. "\n\n";
	 $email_order .= EMAIL_VIITE . $ref ."\n".$payment_class->email_footer . "\n\n";
	 }
  }
  tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
//end PWA
//************************
// send emails to other people
 if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
   tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
 }
// load the after_process function from the payment modules
 $payment_modules->after_process();
 $cart->reset(true);
// unregister session variables used during checkout
 tep_session_unregister('sendto');
 tep_session_unregister('billto');
 tep_session_unregister('shipping');
 tep_session_unregister('payment');
 tep_session_unregister('comments');
 // **** 22.11.2007 kgt - discount coupons
  tep_session_unregister('coupon');
 //end kgt - discount coupons
 tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
 require(DIR_WS_INCLUDES . 'application_bottom.php');
?>

Link to comment
Share on other sites

if this doesn't make any difference, check your table orders for autoincrement option on orders_id field and write here what you see.

Link to comment
Share on other sites

No effect.

And in orders table the orders_id is auto_incremented.

 

So when I make an order, it writes correctly to orders, orders_products and orders_products_attributes.

And when I manually add correct data to orders_total it works in admin and the user can also see the order after that in his own page.

 

If I don´t do that manually it will give the following error when the user trys to see hes previous orders (I suppose because there´s nothing in order_total by that id)

 

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-10, 10' at line 1
select o.orders_id, o.date_purchased, o.delivery_name, o.billing_name, ot.text as order_total, s.orders_status_name from orders o, orders_total ot, orders_status s where o.customers_id = '52' and o.orders_id = ot.orders_id and ot.class = 'ot_total' and o.orders_status = s.orders_status_id and s.language_id = '4' and s.public_flag = '1' order by orders_id DESC limit -10, 10

Link to comment
Share on other sites

This is your problem:

 

limit -10, 10

 

Older versions of mySQL ignored the negative limit, while newer versions throw an error. This was fixed in a very old upgrade to osCommerce -- i believe it was 2.2RC1. You need to upgrade your code, or better yet start over with 2.3.2 which is compatible with mySQL 5.x.

 

Regards

Jim

See my profile for a list of my addons and ways to get support.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...