Jump to content
 Explore Products App Shop Support Services App Shop Us
• Checkout
• Login
• Get in touch

osCommerce

The e-commerce.

# [Contribution] QTpro - Quantity Tracking Professional

## Recommended Posts

Has anyone had any luck in getting QT Pro to solve the puzzle I posted a few pages ago?

I did a store for someone who sells bracelets. They sell the bracelets in lots of 10, 25, 50, 100, 1000. I think that attributes are stored as text, which probably leads to the problem.

So, say I have 10,000 bracelets. I'd LOVE to be able to have the quantity actually subtracted from the "type" of bracelet pack ordered. So, if someone ordered one 1,000 pack, the total in stock would go from 10,000 to 9,000.

Anyone have this solved?

#### Share this post

##### Share on other sites

It could be done by setting it up in admin/products_attributes.php

1 under Product Options add PACKS Track Stock? = YES

2 under Option Values Add

PACKS = 10

PACKS = 100

PACKS = 1000

PACKS = 10000

3 under Products Attributes

Add Product Name = Product1 Option Name = PACKS Option Value = 10 Value Price = 10.0000 Prefix = +

Add Product Name = Product1 Option Name = PACKS Option Value = 100 Value Price = 100.0000 Prefix = +

Add Product Name = Product1 Option Name = PACKS Option Value = 1000 Value Price = 1000.0000 Prefix = +

Add Product Name = Product1 Option Name = PACKS Option Value = 10000 Value Price = 10000.0000 Prefix = +

The company will now need to prepack their total stock qty into pack qty ready for shippment to reflect the Attribute qty on the site. So if the total stock is 44000 units then the department will devide the their stock into say:

100 packs of 10 units = 1000 units

10 packs of 100 units = 1000 units

2 packs of 1000 units = 2000 units

4 packs of 10000 units = 40000 units

Total stock 44,000 units

---------

goto Stock Report page in admin

click Product1 which will take you to stock.php?product_id=? in the address bar

In the dropdown list you will see

PACKS Quantity

10 add 100

100 add 10

1000 add 2

10000 add 4

Have fun

Regards

Andrew

#### Share this post

##### Share on other sites

Andyy, I just PM'd you. After further thought, this is how we currently do this. However, what I'm looking for might be a little bit more complicated that how you understood it.

I don't want to have to split up the packs into your 44,000 scenario. Instead, I wish there was a way to just say I have 44,000 of those items, total, but they could be bought in quantities of 10, 100, 1000, 10000, for instance.

This way, the "attribute" would actually be a number that would get subtracted, so, if the customer bought 2x1000 packs, it would subtract 2000. I don't think QT Pro is designed for this, and I may have to go back to the drawing board and have it so the user can just enter the # of items they want to buy, themselves. With that scenario, though, I'd want to figure out a way to force the customer to only buy in certain increments. Anyone ever work something like that out?

It could be done by setting it up in admin/products_attributes.php

1 under Product Options add PACKS Track Stock? = YES

2 under Option Values Add

PACKS = 10

PACKS = 100

PACKS = 1000

PACKS = 10000

3 under Products Attributes

Add Product Name = Product1 Option Name = PACKS Option Value = 10 Value Price = 10.0000 Prefix = +

Add Product Name = Product1 Option Name = PACKS Option Value = 100 Value Price = 100.0000 Prefix = +

Add Product Name = Product1 Option Name = PACKS Option Value = 1000 Value Price = 1000.0000 Prefix = +

Add Product Name = Product1 Option Name = PACKS Option Value = 10000 Value Price = 10000.0000 Prefix = +

The company will now need to prepack their total stock qty into pack qty ready for shippment to reflect the Attribute qty on the site. So if the total stock is 44000 units then the department will devide the their stock into say:

100 packs of 10 units = 1000 units

10 packs of 100 units = 1000 units

2 packs of 1000 units = 2000 units

4 packs of 10000 units = 40000 units

Total stock 44,000 units

---------

goto Stock Report page in admin

click Product1 which will take you to stock.php?product_id=? in the address bar

In the dropdown list you will see

PACKS Quantity

10 add 100

100 add 10

1000 add 2

10000 add 4

Have fun

Regards

Andrew

#### Share this post

##### Share on other sites

Hi, urgently need some kind soul to assist me here.

I just installed OsC and QT PRO. But when I try to add product, I found an error as per below,

HTTP 403 (FORBIDDEN)

You are not authorized to view this page

You might not have permission to view this directory or page using the credentials you supplied.

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

If you believe you should be able to view this directory or page, please try to contact the Web site by using any e-mail address or phone number that may be listed on the localhost home page.

You can click Search to look for information on the Internet.

HTTP Error 403 - Forbidden

Internet Explorer

Can you please assist? What went wrong exactly!

#### Share this post

##### Share on other sites
Hi, urgently need some kind soul to assist me here.

I just installed OsC and QT PRO. But when I try to add product, I found an error as per below,

HTTP 403 (FORBIDDEN)

You are not authorized to view this page

You might not have permission to view this directory or page using the credentials you supplied.

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

If you believe you should be able to view this directory or page, please try to contact the Web site by using any e-mail address or phone number that may be listed on the localhost home page.

You can click Search to look for information on the Internet.

HTTP Error 403 - Forbidden

Internet Explorer

Can you please assist? What went wrong exactly!

did your site run without qtpro?

because I think this is more a problem with your .htaccess or config file in admin.

#### Share this post

##### Share on other sites
did your site run without qtpro?

because I think this is more a problem with your .htaccess or config file in admin.

Yeah, my site functions properly with osC. But when I installed QTpro, that problem occurs.

#### Share this post

##### Share on other sites

One thing I need to clarify for the error I received.

It happens only when I want to assign stock level (no. of stock) for product with particular attributes. So, it is within QT pro functions. My OsC runs properly without QT pro.

Thank you.

Best Regards.

#### Share this post

##### Share on other sites

Sounds like your stock.php form does not seam to read the php self tag

in admin/stock.php

find:

<td><form action="<? echo \$PHP_SELF;?>" method=get>

Changing it to:

<td><form action="#" method=get>

Andrew

#### Share this post

##### Share on other sites
Sounds like your stock.php form does not seam to read the php self tag

in admin/stock.php

find:

<td><form action="<? echo \$PHP_SELF;?>" method=get>

Changing it to:

<td><form action="#" method=get>

Andrew

Millionssss Thanks! I finally got it run!

You are really the kind soul.

Cheers~ for this helpful community!

#### Share this post

##### Share on other sites
Millionssss Thanks! I finally got it run!

You are really the kind soul.

Cheers~ for this helpful community!

Hi all,

i have installed QTpro on a stock MSOsc site and i found two errors when running the programm :

Fatal error: Call to undefined function: checkout_initialization_method() in /home/mabdd/boutique/catalog/shopping_cart.php on line 221

Fatal error: Call to undefined function: calculate_price() in /home/mabdd/boutique/catalog/includes/classes/order.php on line 315

Is something could help me because i don't understand why i have such problems on a stock MS2 version without other contribs ! :blink:

Thank u guys !

Edited by Nicooo

#### Share this post

##### Share on other sites

I do not have that lines in my classes/ order.php.

Which version of qtpro are you running.

#### Share this post

##### Share on other sites

I was wondering if there was a guide other than the manual for using this addon, as I want to know how to use it properly.

#### Share this post

##### Share on other sites

Not that I know of Josh!

Andrew

#### Share this post

##### Share on other sites

I was wondering if anyone had used QTPro and produced a size/colour selection matrix as seen at Boden ?

#### Share this post

##### Share on other sites

Hi,

I'm having real problems merging the changes for QTPro into one of my files, can anyone help?

This is the file is catalog\product_info.php

The file in the QTPro contribution is like this:

```<?php
/*
\$Id: product_info.php 1739 2007-12-20 00:52:16Z hpdl \$

osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/

require('includes/application_top.php');

require(DIR_WS_LANGUAGES . \$language . '/' . FILENAME_PRODUCT_INFO);

\$product_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)\$languages_id . "'");
\$product_check = tep_db_fetch_array(\$product_check_query);
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<base href="<?php echo ((\$request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<script language="javascript"><!--
function popupWindow(url) {
window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,res
izable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,le
ft=150')
}
//--></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="3" cellpadding="3">
<tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
</table></td>
<!-- body_text //-->
<td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_PRODUCT_INFO, tep_get_all_get_params(array('action')) . 'action=add_product')); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">
<?php
if (\$product_check['total'] < 1) {
?>
<tr>
<td><?php new infoBox(array(array('text' => TEXT_PRODUCT_NOT_FOUND))); ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
<tr class="infoBoxContents">
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td align="right"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<?php
} else {
\$product_info_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)\$languages_id . "'");
\$product_info = tep_db_fetch_array(\$product_info_query);

tep_db_query("update " . TABLE_PRODUCTS_DESCRIPTION . " set products_viewed = products_viewed+1 where products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "' and language_id = '" . (int)\$languages_id . "'");

if (\$new_price = tep_get_products_special_price(\$product_info['products_id'])) {
\$products_price = '<s>' . \$currencies->display_price(\$product_info['products_price'], tep_get_tax_rate(\$product_info['products_tax_class_id'])) . '</s> <span class="productSpecialPrice">' . \$currencies->display_price(\$new_price, tep_get_tax_rate(\$product_info['products_tax_class_id'])) . '</span>';
} else {
\$products_price = \$currencies->display_price(\$product_info['products_price'], tep_get_tax_rate(\$product_info['products_tax_class_id']));
}

if (tep_not_null(\$product_info['products_model'])) {
\$products_name = \$product_info['products_name'] . '<br><span class="smallText">[' . \$product_info['products_model'] . ']</span>';
} else {
\$products_name = \$product_info['products_name'];
}
?>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td class="pageHeading" valign="top"><?php echo \$products_name; ?></td>
<td class="pageHeading" align="right" valign="top"><?php echo \$products_price; ?></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td class="main">
<?php
if (tep_not_null(\$product_info['products_image'])) {
//++++ QT Pro: Begin Changed code
?>
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td class="smallText">
<?php
//++++ QT Pro: End Changed Code
?>
<table border="0" cellspacing="0" cellpadding="2" align="right">
<tr>
<td align="center" class="smallText">
<script language="javascript"><!--
document.write('<?php echo '<a href="java script:popupWindow(\\\'' . tep_href_link(FILENAME_POPUP_IMAGE, 'pID=' . \$product_info['products_id']) . '\\\')">' . tep_image(DIR_WS_IMAGES . \$product_info['products_image'], addslashes(\$product_info['products_name']), SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="5" vspace="5"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>');
//--></script>
<noscript>
<?php echo '<a href="' . tep_href_link(DIR_WS_IMAGES . \$product_info['products_image']) . '" target="_blank">' . tep_image(DIR_WS_IMAGES . \$product_info['products_image'], \$product_info['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="5" vspace="5"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>
</noscript>
</td>
</tr>
</table>
<?php
}
?>
<p><?php echo stripslashes(\$product_info['products_description']); ?></p>
<?php
//++++ QT Pro: Begin Changed code
if (tep_not_null(\$product_info['products_image'])) {
?>
</td>
</tr>
</table>
<?php
}
//++++ QT Pro: End Changed Code
\$products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)\$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)\$languages_id . "'");
\$products_attributes = tep_db_fetch_array(\$products_attributes_query);
if (\$products_attributes['total'] > 0) {
//++++ QT Pro: Begin Changed code
\$products_id=(preg_match("/^\d{1,10}(\{\d{1,10}\}\d{1,10})*\$/",\$HTTP_GET_VARS['products_id']) ? \$HTTP_GET_VARS['products_id'] : (int)\$HTTP_GET_VARS['products_id']);
require(DIR_WS_CLASSES . 'pad_' . PRODINFO_ATTRIBUTE_PLUGIN . '.php');
\$class = 'pad_' . PRODINFO_ATTRIBUTE_PLUGIN;
\$pad = new \$class(\$products_id);
echo \$pad->draw();
}

//Display a table with which attributecombinations is on stock to the customer?
if(PRODINFO_ATTRIBUTE_DISPLAY_STOCK_LIST == 'True'): require(DIR_WS_MODULES . "qtpro_stock_table.php"); endif;

//++++ QT Pro: End Changed Code
?>
</td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<?php
\$reviews_query = tep_db_query("select count(*) as count from " . TABLE_REVIEWS . " where products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "'");
\$reviews = tep_db_fetch_array(\$reviews_query);
if (\$reviews['count'] > 0) {
?>
<tr>
<td class="main"><?php echo TEXT_CURRENT_REVIEWS . ' ' . \$reviews['count']; ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<?php
}

if (tep_not_null(\$product_info['products_url'])) {
?>
<tr>
<td class="main"><?php echo sprintf(TEXT_MORE_INFORMATION, tep_href_link(FILENAME_REDIRECT, 'action=url&goto=' . urlencode(\$product_info['products_url']), 'NONSSL', true, false)); ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<?php
}

if (\$product_info['products_date_available'] > date('Y-m-d H:i:s')) {
?>
<tr>
<td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_AVAILABLE, tep_date_long(\$product_info['products_date_available'])); ?></td>
</tr>
<?php
} else {
?>
<tr>
<td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_ADDED, tep_date_long(\$product_info['products_date_added'])); ?></td>
</tr>
<?php
}
?>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
<tr class="infoBoxContents">
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?></td>
<td class="main" align="right"><?php echo tep_draw_hidden_field('products_id', \$product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td>
<?php
if ((USE_CACHE == 'true') && empty(\$SID)) {
echo tep_cache_also_purchased(3600);
} else {
include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
}
}
?>
</td>
</tr>
</table></form></td>
<!-- body_text_eof //-->
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- right_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
<!-- right_navigation_eof //-->
</table></td>
</tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>```

My existing file which has been modified for Ultra Pics looks like this:

```<?php
/*
\$Id: product_info.php,v 1.98 2003/09/02 18:52:33 project3000 Exp \$

osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/

require('includes/application_top.php');

require(DIR_WS_LANGUAGES . \$language . '/' . FILENAME_PRODUCT_INFO);

\$product_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)\$languages_id . "'");
\$product_check = tep_db_fetch_array(\$product_check_query);
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<base href="<?php echo ((\$request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<script type="text/javascript" src="includes/js/prototype.js"></script>
<script type="text/javascript" src="includes/js/scriptaculous.js?load=effects"></script>
<script type="text/javascript" src="includes/js/lightbox.js"></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="3" cellpadding="3">
<tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
</table></td>
<!-- body_text //-->
<td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_PRODUCT_INFO, tep_get_all_get_params(array('action')) . 'action=add_product')); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">
<?php
if (\$product_check['total'] < 1) {
?>
<tr>
<td><?php new infoBox(array(array('text' => TEXT_PRODUCT_NOT_FOUND))); ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
<tr class="infoBoxContents">
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td align="right"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<?php
} else {
// BOF MaxiDVD: Modified For Ultimate Images Pack!
\$product_info_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, p.products_image_med, p.products_image_lrg, p.products_image_sm_1, p.products_image_xl_1, p.products_image_sm_2, p.products_image_xl_2, p.products_image_sm_3, p.products_image_xl_3, p.products_image_sm_4, p.products_image_xl_4, p.products_image_sm_5, p.products_image_xl_5, p.products_image_sm_6, p.products_image_xl_6, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)\$languages_id . "'");
// EOF MaxiDVD: Modified For Ultimate Images Pack!
\$product_info = tep_db_fetch_array(\$product_info_query);

tep_db_query("update " . TABLE_PRODUCTS_DESCRIPTION . " set products_viewed = products_viewed+1 where products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "' and language_id = '" . (int)\$languages_id . "'");

if (\$new_price = tep_get_products_special_price(\$product_info['products_id'])) {
\$products_price = '<s>' . \$currencies->display_price(\$product_info['products_price'], tep_get_tax_rate(\$product_info['products_tax_class_id'])) . '</s> <span class="productSpecialPrice">' . \$currencies->display_price(\$new_price, tep_get_tax_rate(\$product_info['products_tax_class_id'])) . '</span>';
} else {
\$products_price = \$currencies->display_price(\$product_info['products_price'], tep_get_tax_rate(\$product_info['products_tax_class_id']));
}

if (tep_not_null(\$product_info['products_model'])) {
\$products_name = \$product_info['products_name'] . '<br><span class="smallText">[' . \$product_info['products_model'] . ']</span>';
} else {
\$products_name = \$product_info['products_name'];
}
?>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td class="pageHeading" valign="top"><?php echo \$products_name; ?></td>
<td class="pageHeading" align="right" valign="top"><?php echo \$products_price; ?></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td class="main">

<?php
if (tep_not_null(\$product_info['products_image'])) {
?>
<table border="0" cellspacing="0" cellpadding="2" align="right">
<tr>
<td align="center" class="smallText">
<!-- // BOF MaxiDVD: Modified For Ultimate Images Pack! //-->
<?php
if (\$product_info['products_image_med']!='') {
\$new_image = \$product_info['products_image_med'];
\$image_width = MEDIUM_IMAGE_WIDTH;
\$image_height = MEDIUM_IMAGE_HEIGHT;
} else {
\$new_image = \$product_info['products_image'];
\$image_width = SMALL_IMAGE_WIDTH;
\$image_height = SMALL_IMAGE_HEIGHT;}?>
<?php echo '<a href="' . tep_href_link(DIR_WS_IMAGES . \$product_info['products_image_med']) . '" target="_blank" rel="lightbox">' . tep_image(DIR_WS_IMAGES . \$product_info['products_image'], \$product_info['products_name'], \$product_info['products_description'], ULT_THUMB_IMAGE_WIDTH, ULT_THUMB_IMAGE_HEIGHT, 'hspace="1" vspace="1"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>
<!-- // EOF MaxiDVD: Modified For Ultimate Images Pack! //-->

</td>
</tr>
</table>
<?php
}
?>

<p><?php echo stripslashes(\$product_info['products_description']); ?></p>
<?php
\$products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)\$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)\$languages_id . "'");
\$products_attributes = tep_db_fetch_array(\$products_attributes_query);
if (\$products_attributes['total'] > 0) {
?>
<table border="0" cellspacing="0" cellpadding="2">
<tr>
<td class="main" colspan="2"><?php echo TEXT_PRODUCT_OPTIONS; ?></td>
</tr>
<?php
\$products_options_name_query = tep_db_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)\$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)\$languages_id . "' order by popt.products_options_name");
while (\$products_options_name = tep_db_fetch_array(\$products_options_name_query)) {
\$products_options_array = array();
\$products_options_query = tep_db_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov where pa.products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "' and pa.options_id = '" . (int)\$products_options_name['products_options_id'] . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)\$languages_id . "'");
while (\$products_options = tep_db_fetch_array(\$products_options_query)) {
\$products_options_array[] = array('id' => \$products_options['products_options_values_id'], 'text' => \$products_options['products_options_values_name']);
if (\$products_options['options_values_price'] != '0') {
\$products_options_array[sizeof(\$products_options_array)-1]['text'] .= ' (' . \$products_options['price_prefix'] . \$currencies->display_price(\$products_options['options_values_price'], tep_get_tax_rate(\$product_info['products_tax_class_id'])) .') ';
}
}

if (isset(\$cart->contents[\$HTTP_GET_VARS['products_id']]['attributes'][\$products_options_name['products_options_id']])) {
\$selected_attribute = \$cart->contents[\$HTTP_GET_VARS['products_id']]['attributes'][\$products_options_name['products_options_id']];
} else {
\$selected_attribute = false;
}
?>
<tr>
<td class="main"><?php echo \$products_options_name['products_options_name'] . ':'; ?></td>
<td class="main"><?php echo tep_draw_pull_down_menu('id[' . \$products_options_name['products_options_id'] . ']', \$products_options_array, \$selected_attribute); ?></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</td>
</tr>

<?php
// BOF MaxiDVD: Modified For Ultimate Images Pack!
if (ULTIMATE_ADDITIONAL_IMAGES == 'enable') { include(DIR_WS_MODULES . 'additional_images.php'); }
// BOF MaxiDVD: Modified For Ultimate Images Pack!
; ?>

<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<?php
\$reviews_query = tep_db_query("select count(*) as count from " . TABLE_REVIEWS . " r, " . TABLE_REVIEWS_DESCRIPTION . " rd where r.products_id = '" . (int)\$HTTP_GET_VARS['products_id'] . "' and r.reviews_id = rd.reviews_id and rd.languages_id = '" . (int)\$languages_id . "'");
\$reviews = tep_db_fetch_array(\$reviews_query);
if (\$reviews['count'] > 0) {
?>
<tr>
<td class="main"><?php echo TEXT_CURRENT_REVIEWS . ' ' . \$reviews['count']; ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<?php
}

if (tep_not_null(\$product_info['products_url'])) {
?>
<tr>
<td class="main"><?php echo sprintf(TEXT_MORE_INFORMATION, tep_href_link(FILENAME_REDIRECT, 'action=url&goto=' . urlencode(\$product_info['products_url']), 'NONSSL', true, false)); ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<?php
}

if (\$product_info['products_date_available'] > date('Y-m-d H:i:s')) {
?>
<tr>
<td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_AVAILABLE, tep_date_long(\$product_info['products_date_available'])); ?></td>
</tr>
<?php
} else {
?>
<tr>
<td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_ADDED, tep_date_long(\$product_info['products_date_added'])); ?></td>
</tr>
<?php
}
?>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
<tr class="infoBoxContents">
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?></td>
<td class="main" align="right"><?php echo tep_draw_hidden_field('products_id', \$product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td>
<?php
//added for cross -sell
if ( (USE_CACHE == 'true') && !SID) {
echo tep_cache_also_purchased(3600);
include(DIR_WS_MODULES . FILENAME_XSELL_PRODUCTS);
} else {
include(DIR_WS_MODULES . FILENAME_XSELL_PRODUCTS);
include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
}
}
?>
</td>
</tr>
</table></form></td>
<!-- body_text_eof //-->
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- right_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
<!-- right_navigation_eof //-->
</table></td>
</tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>```

I'm afraid my php skills are just not good enough to be able to work out this merge - can anyone help me?

Thanks

#### Share this post

##### Share on other sites

Did anyone figure out how to make QTPRO work with PAYPAL IPN yet??

[The problem with Attribute Stock not decreasing]

Regards,

dan

#### Share this post

##### Share on other sites

There are 2 settings to make in your paypal account to get things working

Go to your paypal account and login to your business account

When you have logged in, follow these instructions

PayPal Settings

#### Share this post

##### Share on other sites

Cant Install Properly.

Ok, I am trying to install this to a fresh copy of OSC, and everything seems ok, but I get errors on admin/categories.php

Fatal error: Call to undefined function: tep_hide_session_id() in /home/sites/mywebsite/public_html/admin/categories.php on line 746

The regular page doesn't show up, but just that line, and the menu on the left.

I am assuming I have installed it wrong.

Following the install manual I think I MAY have gone wrong here.

# Alter the database tables with the QT Pro new_install.sql script

* Using PHPmyadmin, click on your store database, click on the SQL tab, enter the location of the QT Pro new_install.sql script and click go

* Or using the command line "mysql storedb < new_install.sql". Make sure you specify the path to the QT Pro folder if needed.

# Load the configuration data for QT Pro using the config.sql script using the PHPmyadmin or the command line as for new_install.sql

Not entirely sure what this means so I just went to phpmyadmin

And clicked import then 'browsed' the files and clicked GO. new_install.sql first then repeated for the other.

Thanks in advance

Edited by Jan Zonjee

#### Share this post

##### Share on other sites

Ive installed the QTpro everything works fine as far as setting stock numbers on individual sizes goes, but when a purchase is made the stock never updates(decreases). I am currently using Paypal IPN as my checkout processing...Don't know where to look or what to change to make Paypal communicate to the right setting to deduct an item, please help.

#### Share this post

##### Share on other sites

hey guys iam also having the same problem.. installed qtpro on oscmmerce rc2 site and its not subtracting the stock. It works fine when an order is placed with credit card but it doesnt work when order is placed by PayPal Website Payments Standard . its the payment option that came with rc2..

so any help is greatly apprecaited

thankyou

#### Share this post

##### Share on other sites

Hi All,

I am attempting to use the contribution QTPRO to display three sequenced drop down boxes, one of which should be showing a different price for each attribute that populates into that specific pull down. The overall goal is to not have a price for the product at all, but rather to use that pull down box to allow the customer to choose an option, and therefor set the price sent to the cart.

The problem is, although the structure for the individual prices are there, they all show up as "optionName (+\$0)" I added a dollar sign to that string and the prices weren't showing up regardless of the \$ I added. I checked the database and the table does contain the price I assigned using products_attributes.php. And I looked through the sql query on pad_base.php and it seems to be calling the required information from that table, yet it does not seem to want to display it in the product_info.php page.

if anyone has any suggestions, or perhaps even a fix for this, please let me know what I'm obviously missing :)

I am using QTPRO version qtpro4.4b (for osC2.2 rc2a) and everything else in the installation appears to be working correctly so far.

I do have Product Attrib Sort v1.0 installed and the forum for that is located here: http://forums.oscommerce.com/index.php?showtopic=68003

Thanks for your time,

Rhawke

#### Share this post

##### Share on other sites

can someone please explain how to efficiently use this addon.

On my shop I have many different shoes, tents clothes etc is different colours and sizes.

can someone please just bullet point some key points for me thankyou!

#### Share this post

##### Share on other sites

Hello,

I have QTPro installed and it works great, except for a big problem.

I have my installation set to NOT display the shopping cart after adding a product, so customers never get to product_info.php where the contriution does its magic.

Is there anyway to have the QTPro functionality appear on the main catalog page? For example, here index.php?cat=27

I appreciate your help on this.

-Lou

#### Share this post

##### Share on other sites
Hi All,

I am attempting to use the contribution QTPRO to display three sequenced drop down boxes, one of which should be showing a different price for each attribute that populates into that specific pull down. The overall goal is to not have a price for the product at all, but rather to use that pull down box to allow the customer to choose an option, and therefor set the price sent to the cart.

The problem is, although the structure for the individual prices are there, they all show up as "optionName (+\$0)" I added a dollar sign to that string and the prices weren't showing up regardless of the \$ I added. I checked the database and the table does contain the price I assigned using products_attributes.php. And I looked through the sql query on pad_base.php and it seems to be calling the required information from that table, yet it does not seem to want to display it in the product_info.php page.

if anyone has any suggestions, or perhaps even a fix for this, please let me know what I'm obviously missing :)

I am using QTPRO version qtpro4.4b (for osC2.2 rc2a) and everything else in the installation appears to be working correctly so far.

I do have Product Attrib Sort v1.0 installed and the forum for that is located here: http://forums.oscommerce.com/index.php?showtopic=68003

Thanks for your time,

Rhawke

Ok, I haven't solved the problem yet for Paypal IPN V2.3.3 and Qtpro v4.4b not updating my attributes stock levels in the product_stock table. What I ended up settling for was to revert to paypal IPN v1.3 which is unfortunate but necessary. I will continue to see if I can work out in the code what the heck is causing this to not work and maybe I'll get lucky enough to create a fix so we can use the most up to date versions of both contributions.

So again, if you are having trouble with stock not updating after a successful sale using paypal ipn v2.3.3 and qtpro V4.4b then you may also have to revert to paypal v1.3 for now.

good Luck,

Rhawke

#### Share this post

##### Share on other sites
can someone please explain how to efficiently use this addon.

On my shop I have many different shoes, tents clothes etc is different colours and sizes.

can someone please just bullet point some key points for me thankyou!

Hello Phixon,

Basically, the key points of using this contribution are to allow you the following:

1. Add quantities to product attributes: for example if you have a t-shirt, and it comes in red, blue and green. You can set a quantity for each color. ie.. 2 red, 1 blue and 5 green. As each color sells out it will be removed from the color drop down box and the remaining colors with quantities can still be sold.

2. Sequencing drop down boxes: this allows you to force customers to choose certain options of a product before checking out. for example.. if you have a t-shirt they must choose a size before the color drop down box beomes available, depending on the size chosen, the colors that are in stock for that size are then populated into the drop down box for the customer to choose from. The customer can not add this t-shirt to the cart until they have made their size and color selections.

3. Multiple drop down boxes allow you to have several deifferent options available all at once.

4. radio boxes: this allows you to have radio box choices on your product_info.php page where visitors can select one or the other or all of the boxes at your discretion.

the only other thing I haven't mentioned I can think of is a bit complicated to explain, but there is the option for sequenced drop down boxes of setting a quantity for each combination of choices you create, so for example if you create a sequence of t-shirt-x-large-blue and give that combination a quantity of 20, then you have made 20 xlarge blue t-shirts available for sale on your site.

I hope all that makes some sense to you and makes this contrib a bit more appealing,

Rhawke

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account

## Sign in

Already have an account? Sign in here.

Sign In Now

×