Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Bundled products


Recommended Posts

  • Replies 331
  • Created
  • Last Reply

Top Posters In This Topic

chris or anyone,

 

thanks for the contribution and the invoice that looks great. Easy to install.

 

I'd like to add the individual model numbers to that invoice. The sql you are using is a bit too complex for me. Any help from anyone would be great.

 

Any thoughts of how to select product options of the sub products? I know crazy isn't it. <_<

Link to comment
Share on other sites

I create a bundled products, it all seems to work well, apart from when i go to checkout it brings up the following error.

 

1146 - Table '*****.TABLE_PRODUCTS_BUNDLES' doesn't exist

 

select pb.subproduct_id, pb.subproduct_qty, p.products_model, p.products_quantity, p.products_bundle from TABLE_PRODUCTS_BUNDLES pb LEFT JOIN products p ON p.products_id=pb.subproduct_id where pb.bundle_id = '364'

 

 

Does anyone know why this is happening?

 

Thanks

Edited by cdamianou
Link to comment
Share on other sites

Did anyone ever figure out how to alter a bundle?

 

Everytime we try to change an already existing bundle, the changes made do not take effect.

We end up having to delete it and then recreate it, and it takes too long.

 

Was it something to do with this Preview step?

 

Anyone who knows how this is fixed please gimme a shout.

 

ta.

 

CC.

Link to comment
Share on other sites

Anyone have any idea on how to skip the preview page? I know it's in the categories.php but the again isn't everything...I know it's just a case of redirecting a form (or changing the &action= bit) somewhere but don't know exactly which one.

 

Many thanks,

 

Richard

 

PS Is there any option to show the individual product attributes for the bundle sub products? - or a way round it. Sorry to nag...

Link to comment
Share on other sites

  • 2 weeks later...

Actually I am struggling with this too.

I figured the skipping of this process would be simple...

But it aint.

 

Can someone who has completed the skipping of the Preview step drop in the code they used so we can make the same changes?

It is very frustrating having to delete and recreate a bundle when all we want to do is alter one...

 

Thanks all.

Link to comment
Share on other sites

Ok guys, am looking for a definitive answer here now guys, if any of you can be so kind as to help...

 

Apparently we are having a big push on Bundles this coming week, lots of new products etc, now the responsibilty falls to me to be able to get this bundles mod working.

Altho it does work, this bug with not updating when you try to alter a bundle is causing me grief :(

 

I have searched and searched on the bypassing of the preview step an am finding nothing. Could someone please either drop in the code they used to bypass this step (which I feel is a useless part of OSC anyway) or perhaps lets look to modify the bundles code so that it will work using the preview page...

 

I am going over it now and seeing what I can come up with, but in the meantime if ANYONE here can help at all it would be highly appreciated.

 

Ta.

Link to comment
Share on other sites

Erm...

Why oh why does PHP trick me so much? ;)

 

Now to skip the step I seem to have changed the very obvious point of the form, from new_products_preview to update_product

 

This works, but I am a tad dubious that this was too simple, and that I am not skipping other required steps before the update.

 

I will test away and let you know if anything controversial happens, BTW I havent found out if this fixes the bundle edit problem either yet.

Will let you know.

Link to comment
Share on other sites

Short answer, skipping Preview page doesnt fix the Bundle editting problem.

 

I am beginning to this that somewhere on the update the new details are clearly not being passed to the DB.

Will just have to go thru the categories code and find out where it is being missed.

 

Will let ya know... Again... :(

Link to comment
Share on other sites

  • 2 weeks later...

Ok,

Well currently we use the latest version of IE6, all updates run.

It doesnt appear to do this, even if we delete the selected bundles items by removing yes, it doesnt delete anything, so soon as we put "yes" back in, it refills the items with the ones selected when the bundle was created.

So it is leaving the items in the table still it would appear...

 

This is perhaps where it is failing, if it isnt deleting them in order to recreate, then it may not be reaching the recreation stage.

Link to comment
Share on other sites

i have got a pb whith this contribution, when i fill the fields of the bundle wthit the drop zone menu and i do preview then update.

 

When i come back in the card-index product, the fields with the items that compose the bundle, don't exist any more ?? :(

Link to comment
Share on other sites

Hi, hoping for some help - have been trying to get this contribution working and seem to have the same problem as Costas -

 

I create a bundled products, it all seems to work well, apart from when i go to checkout it brings up the following error.

 

1146 - Table '*****.TABLE_PRODUCTS_BUNDLES' doesn't exist

 

select pb.subproduct_id, pb.subproduct_qty, p.products_model, p.products_quantity, p.products_bundle from TABLE_PRODUCTS_BUNDLES pb LEFT JOIN products p ON p.products_id=pb.subproduct_id where pb.bundle_id = '364'

 

the reply to this post from Saffoo was

 

you missed a 'define' statement in one of the language files. double check installation.

 

I am confused as you don't touch the language files as far as I'm aware in the setup - just catalog and catalog/admin

 

I have triple checked my php admin and I definately have this table -

 

I tried another suggestion by Saffoo

 

It seems you already added that column. Just make sure it is there in your database as a 'tinyint' and you are ready to go.

 

Which is contrary to the install instructions which say to make it a tinytext not tinyint

 

ALTER TABLE `yourdatabasenamehere`.`products` ADD `products_bundle` TINYTEXT NOT NULL

So now I don't have any error messages after changing it to a tinyint but I also don't have any bundles either - it is treating my 'bundle' product just like a normal product and when someone buys it the stock is reduced for the bundle - not the individual items - which is obviously wrong.

 

So if I make that one small change - i.e. revert back to "tinyText" in php for the products_bundle - in admin all seems to work fine - I can add the different products - make my bundle and it shows up in my shop with the different products listed o.k. and the bundled pricing showing the savings and all works o.k. until you get to checkout confirmation and then I am right back to my original error:-

 

 

1146 - Table 'scrapbox_osc1.TABLE_PRODUCTS_BUNDLES' doesn't exist

 

select pb.subproduct_id, pb.subproduct_qty, p.products_model, p.products_quantity, p.products_bundle from TABLE_PRODUCTS_BUNDLES pb LEFT JOIN products p ON p.products_id=pb.subproduct_id where pb.bundle_id = '1006'

 

[TEP STOP]

 

Now we know it does exist so I am thinking maybe I went wrong in my checkout_process file

 

so here is the file:-

 

php

/*

  $Id: checkout_process.php,v 1.2.37.2 2004/01/01 14:00:29 Strider Exp $

  $Id: checkout_process.php,v 1.128 2003/07/24 18:00:29 Strider Exp $

  $Id: checkout_process.php,v 1.128 2003/05/28 18:00:29 hpdl Exp $

  $Id: checkout_process.php,v 1.6.2.1 2003/05/03 23:41:23 wilt Exp $

 

  osCommerce, Open Source E-Commerce Solutions

  http://www.oscommerce.com

 

  Copyright © 2003 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 (!tep_session_is_registered('sendto')) {

    tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', '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');

  if ($credit_covers) $payment=''; //ICW added for CREDIT CLASS

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

 

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' => $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 = '';

  $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, products_bundle, 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, products_bundle 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);

    if ($stock_values['products_bundle'] == 'yes') {

  // order item is a bundle and must be separated

  $report_text .= "Bundle found in order : " . tep_get_prid($order->products[$i]['id']) . "<br>\n";

    $bundle_query = tep_db_query("select pb.subproduct_id, pb.subproduct_qty, p.products_model, p.products_quantity, p.products_bundle

          from " . TABLE_PRODUCTS_BUNDLES . " pb

          LEFT JOIN " . TABLE_PRODUCTS . " p

          ON p.products_id=pb.subproduct_id

          where pb.bundle_id = '" . tep_get_prid($order->products[$i]['id']) . "'");

 

  while ($bundle_data = tep_db_fetch_array($bundle_query)) {

    if ($bundle_data['products_bundle'] == "yes") {

    $report_text .= "<br>level 2 bundle found in order :  " . $bundle_data['products_model'] . "<br>";

      $bundle_query_nested = tep_db_query("select pb.subproduct_id, pb.subproduct_qty, p.products_model, p.products_quantity, p.products_bundle

            from " . TABLE_PRODUCTS_BUNDLES . " pb

            LEFT JOIN " . TABLE_PRODUCTS . " p

            ON p.products_id=pb.subproduct_id

            where pb.bundle_id = '" . $bundle_data['subproduct_id'] . "'");

    while ($bundle_data_nested = tep_db_fetch_array($bundle_query_nested)) {

      $stock_left = $bundle_data_nested['products_quantity'] - $bundle_data_nested['subproduct_qty'] * $order->products[$i]['qty'];

      $report_text .= "updating level 2 item " . $bundle_data_nested['products_model'] . " : was " . $bundle_data_nested['products_quantity'] . " and number ordered is " . ($bundle_data_nested['subproduct_qty'] * $order->products[$i]['qty']) . " <br>\n";

      tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . $bundle_data_nested['subproduct_id'] . "'");

    }

    } else {

    $stock_left = $bundle_data['products_quantity'] - $bundle_data['subproduct_qty'] * $order->products[$i]['qty'];

    $report_text .= "updating level 1 item " . $bundle_data['products_model'] . " : was " . $bundle_data['products_quantity'] . " and number ordered is " . ($bundle_data['subproduct_qty'] * $order->products[$i]['qty']) . " <br>\n";

    tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . $bundle_data['subproduct_id'] . "'");

    }

  }

 

    } else {

// order item is normal and should be treated as such

  $report_text .= "Normal product found in order : " . tep_get_prid($order->products[$i]['id']) . "\n";

// 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();

    $order_total_modules->update_credit_account($i);//ICW ADDED FOR CREDIT CLASS SYSTEM

//------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 ----

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

  }

$order_total_modules->apply_credit();//ICW ADDED FOR CREDIT CLASS SYSTEM

// lets start with the email confirmation

  $email_order = STORE_NAME . "\n" .

// additional text message

$email_order .= "\r\nThank you for your order! \r\nWe appreciate your business, we have recorded the following items against your purchase, all products in stock will be despatched immediately payment is received any backordered products will be sent freight free to you upon their arrival. <p></p>If you have any queries about your order or if products recored do not match your records please don't hesitate to contact us by return email.... \r\n" .

// end of additional text message

 

                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 .= $payment_class->title . "\n\n";

    if ($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);

// Version: 02-20-04 (BOF) 02/20/2004 - Low Stock Level Email Author: Emmett (yesUdo.com) and Jai (kynet.co.uk)

 

$warning_stock = STOCK_REORDER_LEVEL;

$current_stock = $stock_left;

 

// Jai @ kynet.co.uk made the following change on 20-02-04

// Dynamic store url - Replaced [' http://www.YOURDOMAIN.com/] with [. HTTP_SERVER . DIR_WS_CATALOG . ']

 

$low_stock_email = '<b>Low stock warning:</b> ' . $order->products[$i]['name'] . "\n" . '<b>Model No.:</b> ' . $order->products[$i]['model'] . "\n" . '<b>Quantity:</b> ' . $stock_left  . "\n" . '<b>Product URL:</b>' . HTTP_SERVER . DIR_WS_CATALOG . 'product_info.php?products_id='. $order->products[$i]['id'] . "\n\n" . '<b>Current Low order limit is ' . $warning_stock . ' units</b>';

$low_stock_subject = 'Low Stock Warning: ' .  $order->products[$i]['name'];

 

if ($current_stock <= $warning_stock) {

  tep_mail(STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, $low_stock_subject, $low_stock_email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS); }

 

// (EOF) 02/20/2004 - Low Stock Level Email Author: Emmett (yesUdo.com) and Jai (kynet.co.uk)

// 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');

if(tep_session_is_registered('credit_covers')) tep_session_unregister('credit_covers');

  $order_total_modules->clear_posts();//ICW ADDED FOR CREDIT CLASS SYSTEM

 

  tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));

 

  require(DIR_WS_INCLUDES . 'application_bottom.php');

?>

 

Sorry to be so long winded but I am really hoping someone can shine some light here????

 

thanks Maria

Link to comment
Share on other sites

It isnt in a language file, you need to define it in application_top or database_filenames or whatever it is called. I use an older version whcih doesnt have database_filenames but you need to define the TABLE_PRODUCTS_BUNDLES in which ever file you have.

Link to comment
Share on other sites

Hi CC,

 

thanks for reply - now the obvious question- how do I 'define' in my

application_top - but you need to define the TABLE_PRODUCTS_BUNDLES in which ever file you have
.

 

'define' is that a step I missed in following the instructions to install or is it something extra?

 

I have a catalog/includes/appliction_top file any help to 'define' my Table_products_bundles would be apprciated.

 

cheers

 

Maria

Link to comment
Share on other sites

Hi Anyone?

 

so as per CC's reply - I tried to 'define' my TABLE_PRODUCTS_BUNDLES in application_top.php and as I don't really know how to do it I tried the following line of code :-

 

define ('TABLE_PRODUCTS_BUNDLES');

 

and when I went back to my site I got the following error

 

Header already started in sessions.php

 

which I presume means my TABLE_PRODUCTS_BUNDLES is already 'defined' somewhere - any help anyone can give would be much appreciated!

 

thanks

 

Maria

Link to comment
Share on other sites

Just look how the others are set out in application_top, it isnt difficult.

 

There are loads of files named like this:

define('TABLE_SESSIONS', 'sessions');

 

You havent actually defined the table.

Your basically telling OSC that when TABLE_PRODUCTS_BUNDLES is called to call the products_bundle from the DB, so you have to tell it the name of the table.

The example above shows you how the "sessions" table in the DB is defined.

Link to comment
Share on other sites

Why this contribution seams to function with scrapart and it's impossible for me to use this contribution :blink:

 

I try to change in my database tinytext by tinyint but i've got the same pb:

 

when i fill the fields of the bundle wthit the drop zone menu and i do preview then update.

When i come back in the card-index product, the fields with the items that compose the bundle, don't exist any more

 

 

lushlongboards use this contrib on his website without any problems !

Link to comment
Share on other sites

Hi there,

 

still tweaking it all myself - but so far I've found out that you can't use the 'copy' function at all - you need to create each 'bundled' product from scratch otherwise it won't work.

 

You also can't really go in and edit it after it has been made - it won't work either - if you need to change something - I've found you have to delete it and start again.

 

It dosn't like editing or copying basically -

 

The list of items that make up the bundle won't show in the admin preview - they will only show when you look at the item in your shop.

 

I have re-installed it a couple of times and the one thing they don't tell you in the instructions that is crucial to get it working is adding this line to a file -

 

define('TABLE_PRODUCTS_BUNDLES',products_bundles);

 

now I added it to my catalog/includes/application_top.php don't know if it is the same file for all versions though.

 

When I changed database tinytext to tinyint my bundles disappeared - so I ignored that information and left it as per the original install instructions as 'tinytext'.

 

I am still having a problem - when someone buys a bundle - it is taking the stock off the individual items but also off the bundled product and when there is not enough of the individual item it is not giving the message to say that is it out of stock at checkout - still trying to figure that out as I did have it once?

 

So basically I found that it is a bit 'tempermental' once your bundled product has been created - don't edit or change it - if you do it breaks somehow?

 

hope this helps a little - still trying to get it working fully myself.!

 

cheers

 

Maria

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...