Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

stock not deducting


gshutzy

Recommended Posts

when my customers make orders the stock ammount is not being deducted. im wondering if anyone can advise on this as i dont really have a clue where the deduction code would be placed and or if it has anything to do with a variant on the database tables

 

thanks

graham

Link to comment
Share on other sites

It's a setting in your Admin.

 

I don't recall the exact clicks to gert there at the moment.

If I suggest you edit any file(s) make a backup first - I'm not perfect and neither are you.

 

"Given enough impetus a parallelogramatically shaped projectile can egress a circular orifice."

- Me -

 

"Headers already sent" - The definitive help

 

"Cannot redeclare ..." - How to find/fix it

 

SSL Implementation Help

 

Like this post? "Like" it again over there >

Link to comment
Share on other sites

thanks for the replies. ive checked the admin settings and they are

Check stock level true

Subtract stock true

Allow Checkout true

Mark product out of stock Out Of Stock

Stock Re-order level 0

 

can anyone think of a reason the stock is not being deducted?

Link to comment
Share on other sites

Do you have QT Pro installed and if so what payment method are you using?

I am not a professional webmaster or PHP coder by background or training but I will try to help as best I can.

I remember what it was like when I first started with osC. It can be overwhelming.

However, I strongly recommend considering hiring a professional for extensive site modifications, site cleaning, etc.

There are several good pros here on osCommerce. Look around, you'll figure out who they are.

Link to comment
Share on other sites

the payment method is paypal payments standard. i dont know what qt pro is so i dont think i have it installed! would you suggest me installing it. is it an add on?

Link to comment
Share on other sites

just to let you know i am using v2.3. i see alot of add-ons that are suitable for v2.2 but i am never sure if they will work on v2.3. am i able to install v2.2?

Link to comment
Share on other sites

If you get emails generated by the store upon checkout the stock should also deduct as the code is in the same file.

 

If you don't get the store email at checkout then that might explain the problem.

 

Also, if you sell "downloads" (digital products, etc.) the default code doesn't subtract stock on those items.

If I suggest you edit any file(s) make a backup first - I'm not perfect and neither are you.

 

"Given enough impetus a parallelogramatically shaped projectile can egress a circular orifice."

- Me -

 

"Headers already sent" - The definitive help

 

"Cannot redeclare ..." - How to find/fix it

 

SSL Implementation Help

 

Like this post? "Like" it again over there >

Link to comment
Share on other sites

just to let you know i am using v2.3. i see alot of add-ons that are suitable for v2.2 but i am never sure if they will work on v2.3. am i able to install v2.2?

 

QT Pro and PayPal IPN together can cause no stock subtraction issues, unless there's a fix applied. But since you don't have QT Pro, this issue won't apply to you so rule that issue out.

I am not a professional webmaster or PHP coder by background or training but I will try to help as best I can.

I remember what it was like when I first started with osC. It can be overwhelming.

However, I strongly recommend considering hiring a professional for extensive site modifications, site cleaning, etc.

There are several good pros here on osCommerce. Look around, you'll figure out who they are.

Link to comment
Share on other sites

If you get emails generated by the store upon checkout the stock should also deduct as the code is in the same file.

 

If you don't get the store email at checkout then that might explain the problem.

 

Also, if you sell "downloads" (digital products, etc.) the default code doesn't subtract stock on those items.

 

is it possible you could let me know ehere the code is and i can post it and see if you guys can let me know if it is all ok. i have got a few addons so this may have changed the code enough for it to not deduct stock. the items i am selling are actually and not virtual(no downloads).

 

thanks

graham

Link to comment
Share on other sites

The code is in /catalog/checkout_process.php

 

// 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']) . "'");
	}
  }
}

If I suggest you edit any file(s) make a backup first - I'm not perfect and neither are you.

 

"Given enough impetus a parallelogramatically shaped projectile can egress a circular orifice."

- Me -

 

"Headers already sent" - The definitive help

 

"Cannot redeclare ..." - How to find/fix it

 

SSL Implementation Help

 

Like this post? "Like" it again over there >

Link to comment
Share on other sites

i did notice that the 'allow' in admin/configuration/stock was set to true. that is now false and does not aloow anyone to order if out of stock but it still dosent deduct any from the stock qty. i pasted the code that you have above. could there be an underlying problem. i have an add-on that tells me when there is an order pending(send me an email) as this is in the checkout stage i wonder if it is effecting the stock deduction.

Link to comment
Share on other sites

i have noticed that when an order is placed it does not subtract the qty but when i delete the order in admin and check the box for re-stock product it adds the amount.

 

the name of the add-on i mentioned earlier is

Pending Order Email V1.2.2_1

 

it asks me to insert a .php file

catalog\includes\functions

 

this is the code from the file

 

<?php

/*

 

 

pending_order_email v1.2.1

http://www.oscommerce.com/community/contributions,3539

 

Updated by Debi Hazelden, 31st March 2008

http://www.foxwebworks.com

 

Updated by Lukas Havranek, 13th January 2007

http://www.led-store.ch

 

Updated by Darren Casey (14th May 2007)

http://www.php4hosting.com

 

Originally by Jim Bullen Sept. 12, 2005

 

Copyright © 2005 Jim Bullen

http://www.internetcigarsales.com/catalog

 

Released under the GNU General Public License

 

Version History

---------------

v1.2.1 - Added product attributes to email

v1.2 - Added german language, corrections to the handling and e-mail

v1.0.1 - Updated to use Language file

v1.0 - Original Version (Jim Bullen)

*/

 

// lets build the pending email

require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_PENDING_ORDER_EMAIL);

 

$products_ordered = '';

$subtotal = 0;

$total_tax = 0;

 

for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {

 

$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";

 

// start addition

for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {

$products_ordered .= ' - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value'] . "\n";

}

// end addition

 

}

 

$email_order = EMAIL_ORDER_TEXT . ' ' . $insert_id . "\n" .

PENDING_ORDER_SEPERATOR . "\n" .

PENDING_DATE . ": " . ' ' . strftime("%d/%m/%y %T %Z") . "\n" .

PENDING_IP_ADDRESS . ": " . ' ' . $_SERVER['REMOTE_ADDR'] . "\n" .

PENDING_BROWSER ." : " . ' ' . $_SERVER['HTTP_USER_AGENT'] . "\n\n";

 

$email_order .= PENDING_ORDER_SEPERATOR . "\n" .

PENDING_QUANTITY . " ". PENDING_DETAILS . " ". PENDING_ITEM ." ". PENDING_EACH . "\n" .

PENDING_SEPERATOR . "\n" .

$products_ordered .

$order_total_modules->output() . PENDING_NOT_PAID ."\n\n" .

PENDING_ORDER_SEPERATOR . "\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']);

}

 

if ($order->content_type != 'virtual')

{

$email_order .= "\n" . PENDING_SHIPPING_ADDRESS . "\n" .

PENDING_SEPERATOR . "\n" .

tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";

}

 

$email_order .= "\n" . PENDING_BILLING_ADDRESS . "\n" .

PENDING_SEPERATOR . "\n" .

tep_address_label($customer_id, $billto, 0, '', "\n") . "\n" . $order->customer['telephone'] . "\n" . $order->customer['email_address'] . "\n\n";

 

if ($order->info['comments']) {

$email_order .= PENDING_COMMENTS . "\n" .

tep_db_output($order->info['comments']) . "\n\n";

}

 

if (is_object($$payment))

{

$email_order .= PENDING_PAYMENT_METHOD . "\n";

$payment_class = $$payment;

$email_order .= $payment_class->title . "\n\n";

if ($payment_class->email_footer)

{

$email_order .= $payment_class->email_footer . "\n\n";

}

}

 

// send the pending email to the store owner from the customers name and email info

tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], STORE_OWNER_EMAIL_ADDRESS, PENDING_EMAIL_SUBJECT . ' - ' . $payment_class->title , $email_order, $order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address']);

// end email pending order

?>

 

it also asks me to put a php fdile in the languages. i cant really se how this can alter the other modules and code of oscommerse.

 

any ideas?

Link to comment
Share on other sites

If the checkout_process.php file isn't executed in the checkout process then the stock wouldn't be deducted unless coded in elsewhere.

 

If you have some add-on or other code changes that by-pass that file then therein lies the problem.

 

Or code changes to the checkout_process.php could possibly make it by-pass the stock deduction,

If I suggest you edit any file(s) make a backup first - I'm not perfect and neither are you.

 

"Given enough impetus a parallelogramatically shaped projectile can egress a circular orifice."

- Me -

 

"Headers already sent" - The definitive help

 

"Cannot redeclare ..." - How to find/fix it

 

SSL Implementation Help

 

Like this post? "Like" it again over there >

Link to comment
Share on other sites

this is the complete CheckoutProcess.php file. if you wouldnt mind taking a look to let me know if there is a code that skips the deduction.

<?php
/*
 $Id$
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com
 Copyright (c) 2007 osCommerce
 Released under the GNU General Public License
*/
 include('includes/application_top.php');
// 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
 $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 ( ($payment_modules->selected_module != $payment) || ( 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()',
					  '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();
 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);
// initialized for the email confirmation
 $products_ordered = '';
 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']);
    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'];
  }
   }
//------insert customer choosen option eof ----
   $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";
 }
// Discount Code 2.3 - start
 if (MODULE_ORDER_TOTAL_DISCOUNT_STATUS == 'true') {
   if (!empty($discount)) {
  $discount_codes_query = tep_db_query("select discount_codes_id from " . TABLE_DISCOUNT_CODES . " where discount_codes = '" . tep_db_input($sess_discount_code) . "'");
  $discount_codes = tep_db_fetch_array($discount_codes_query);
  tep_db_perform(TABLE_CUSTOMERS_TO_DISCOUNT_CODES, array('customers_id' => $customer_id, 'discount_codes_id' => $discount_codes['discount_codes_id']));
  tep_db_query("update " . TABLE_DISCOUNT_CODES . " set number_of_orders = number_of_orders + 1 where discount_codes_id = '" . (int)$discount_codes['discount_codes_id'] . "'");
  tep_session_unregister('sess_discount_code');
   }
 }
 // Discount Code 2.3 - end
// lets start with the email confirmation
 $email_order = STORE_NAME . "\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";
 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 .= $order->info['payment_method'] . "\n\n";
   if (isset($payment_class->email_footer)) {
  $email_order .= $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);
// 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');
 tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
 require(DIR_WS_INCLUDES . 'application_bottom.php');
?>

Link to comment
Share on other sites

I don't see anything that would stop the stock from being updated.

 

The real question that you still haven't answered is "Does this file get executed during the checkout on your site?"

:unsure:

 

The ways you can tell are:

 

1. The customer gets a store generated email listing what they've ordered.

 

2. You should also get a copy of that email, provided you've correctly configured "Send Extra Order Emails To" in your admin.

If I suggest you edit any file(s) make a backup first - I'm not perfect and neither are you.

 

"Given enough impetus a parallelogramatically shaped projectile can egress a circular orifice."

- Me -

 

"Headers already sent" - The definitive help

 

"Cannot redeclare ..." - How to find/fix it

 

SSL Implementation Help

 

Like this post? "Like" it again over there >

Link to comment
Share on other sites

sorry, i have just bought myself an item and my email address did not get a confirmation email. im not sure if i should. i did not pay for the item just went through the checkout process and stopped when it redirected me to paypal for payment.

 

does this give a little more on what could be the cause.

 

i get an email sent to me because of an add-on. pending order emails.

 

some of my customers have commented on not receiving any emails to confirm an order. so i redid the whole site as i thought that some add-ons i had tried and failed might of been to many code changes so i started a fresh with what i knew i wanted on.

 

thanks for you help on this.

Link to comment
Share on other sites

Best is, you enable temporary the "cash on delivery" payment and go through the complete checkout process. You need also to make sure that you have your email address in the "send extra order emails" in admin

 

The whole email test is just to check if the file checkout_process.php, the one that is deducting the stock, is involved in the checkout routine or bypassed by something else because of your addons

 

Other option would be to add some error into the query that is deducting the stock in checkout_process.php. If you get then an error to the screen during checkout in mean that the file is working.

 

The responsible query is

    tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");

 

You could change the "set" to "sets" and see if you get an error

Link to comment
Share on other sites

  • 2 weeks later...

sorry its been a few days but finally got round to trying the error. i went throught the whole proccess. up to paypal log in screen. i entered the error as you suggested

 

// 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 . " sets 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']) . "'");
		    }
	  }
    }

 

i changed the first 'set' to 'sets'. as i said i went through the ordering process. i have still got a pending order email in my store email address but no order confirmation email in my personal email address. also i did not get an error in the order process.

 

the item was set at 0 qty when i first tried it and it told me that their where o stock. so upto that point i deffinately know it works.

 

any more advise guys?

Link to comment
Share on other sites

If you are using paypal standard i dont think the order will subtract until the customer returns to the site after making the payment. As has been suggested, try using one of the cash on delivery modules or the cheque module, or sign up for a paypal sandbox account, and try using that.

REMEMBER BACKUP, BACKUP AND BACKUP

Link to comment
Share on other sites

it wasnt meant to deduct any stock as i put an error in the php. that was the other option he suggested. i did not get an error.

Link to comment
Share on other sites

it wasnt meant to deduct any stock as i put an error in the php. that was the other option he suggested. i did not get an error.

 

What payment way did you use at that point?

 

The missing error mean that the file didn't made it into the process at all.

 

To know the payment way is important, because some payments use their own checkout_process.php equivalen

Link to comment
Share on other sites

Hi Graham

 

I am well aware of this same problem as well at one of my stores where stock doesn't deduct and email acknolwedgements ahven't been sent. It seems that PayPal Standard is the issue. I have tried it on COD and all works well.

 

http://www.oscommerce.com/forums/topic/384244-stock-isnt-deducting-from-paypal/page__p__1629271#entry1629271 was my contribution. There used to be an add-on for OSCommerce 2.2 that deducted stock, but this seems to be obsolete for 2.3. The only solution I have come across is to change payment provide or upgrade to Express card etc (don't quote me on that though)

 

Hope this helps. I am defintiely subscribing to this thread, because if there is a solution, I for one would like to know about it! ^_^

Debbie Harrison

 

Link to comment
Share on other sites

Archived

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

×
×
  • Create New...