bebe cash 59 Posted September 5, 2010 Share Posted September 5, 2010 Sorry ! in post #299, i have forgotten a modification into catalog/admin/get_1_free.php: ?> <tr><form name="new_get_1_free" <?php echo 'action="' . tep_href_link(FILENAME_GET_1_FREE, tep_get_all_get_params(array('action', 'info', 'fID')) . 'action=' . $form_action, 'NONSSL') . '"'; ?> method="POST" ,enctype="multipart/form-data"> <?php if ($form_action == 'update') echo tep_draw_hidden_field('get_1_free_id', $_GET['fID']); ?> editing is now forbidden --> new post ! Good night ! Quote Version OSCOM CE Phoenix v1.0.5.9 + french language (v1.0.5.8 & Merge pull request #955 from gburton/1.0.5.9 php 7.1.3 MySQL 5.7.17 local with easyphp adds on: shipping spu common browser: Chrome Shop multishop 2.2 with many addons. Link to comment Share on other sites More sharing options...
bebe cash 59 Posted September 5, 2010 Share Posted September 5, 2010 Hi All There is a fantastic addition to this add on by dmordred in the contributions page. It puts a link on the main product - to the free product and it works great. However, it would be nice to be able to display a message in the free product description page that links to the main product? At the moment, I can't see how to do this. Any suggestions? Thanks YES ! Modify catalog/product_info.php to obtain: <?php // start Get 1 Free // Is this product gratos somewhere ? $get_1_free_query = tep_db_query("select products_id, products_free_id, get_1_free_sheduled_date, get_1_free_expires_date from " . TABLE_GET_1_FREE . " where products_free_id = '" . (int)$product_info['products_id'] . "' and get_1_free_sheduled_date < now() and (get_1_free_expires_date > now() or get_1_free_expires_date = 0 ) and status = '1'" ); // Yes ? give his name if (tep_db_num_rows($get_1_free_query) > 0) { $free_product = tep_db_fetch_array($get_1_free_query); $query_gratos= tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id='".$free_product['products_id']."' and language_id = '" . (int)$languages_id . "'"); $genere_gratos=tep_db_fetch_array($query_gratos); echo TEXT_GET_1_FREE_GRATOS.$genere_gratos['products_name'].'<br>'; } // Display promotional text if this product qualifies for free product(s) $get_1_free_query = tep_db_query("select pd.products_name, and catalog/includes/languages/<your language>/product_info.php define ('TEXT_GET_1_FREE_GRATOS','Voyez notre offre avec : '); ?> 2 problems remain: What happens when more that one product is offered with this one ? How make a link to the promoted product: rewriting causes an infinite loop when i use echo'<a href="'.tep_href_link( PRODUCT_INFO, $free_product['products_id']).'">'.TEXT_GET_1_FREE_GRATOS.$genere_gratos['products_name'].'</a><br>'; ( code by memory - verify) I wait your anserws ! bebe cash 59 Quote Version OSCOM CE Phoenix v1.0.5.9 + french language (v1.0.5.8 & Merge pull request #955 from gburton/1.0.5.9 php 7.1.3 MySQL 5.7.17 local with easyphp adds on: shipping spu common browser: Chrome Shop multishop 2.2 with many addons. Link to comment Share on other sites More sharing options...
bebe cash 59 Posted September 6, 2010 Share Posted September 6, 2010 Sorry ! in post #299, i have forgotten a modification into catalog/admin/get_1_free.php: ?> <tr><form name="new_get_1_free" <?php echo 'action="' . tep_href_link(FILENAME_GET_1_FREE, tep_get_all_get_params(array('action', 'info', 'fID')) . 'action=' . $form_action, 'NONSSL') . '"'; ?> method="POST" ,enctype="multipart/form-data"> <?php if ($form_action == 'update') echo tep_draw_hidden_field('get_1_free_id', $_GET['fID']); ?> editing is now forbidden --> new post ! Good night ! Hi All! Hey ! my memory dump give errors ! Table get_1_free must be modified to have some place for sheduled_date: in your base execute SQL: ALTER TABLE `get_1_free` ADD `get_1_free_sheduled_date` DATETIME NULL DEFAULT NULL AFTER `get_1_free_last_modified` Sorry one more time ! The end Quote Version OSCOM CE Phoenix v1.0.5.9 + french language (v1.0.5.8 & Merge pull request #955 from gburton/1.0.5.9 php 7.1.3 MySQL 5.7.17 local with easyphp adds on: shipping spu common browser: Chrome Shop multishop 2.2 with many addons. Link to comment Share on other sites More sharing options...
bebe cash 59 Posted September 6, 2010 Share Posted September 6, 2010 YES ! Modify catalog/product_info.php to obtain: <?php // start Get 1 Free // Is this product gratos somewhere ? $get_1_free_query = tep_db_query("select products_id, products_free_id, get_1_free_sheduled_date, get_1_free_expires_date from " . TABLE_GET_1_FREE . " where products_free_id = '" . (int)$product_info['products_id'] . "' and get_1_free_sheduled_date < now() and (get_1_free_expires_date > now() or get_1_free_expires_date = 0 ) and status = '1'" ); // Yes ? give his name if (tep_db_num_rows($get_1_free_query)>0){ echo TEXT_GET_1_FREE_GRATOS .'<ul>'; while ($free_product = tep_db_fetch_array($get_1_free_query)) { $query_gratos= tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id='".$free_product['products_id']."' and language_id = '" . (int)$languages_id . "'"); $genere_gratos=tep_db_fetch_array($query_gratos); echo '<li>'.'<a href="'.tep_href_link(FILENAME_PRODUCT_INFO,'products_id='.$free_product['products_id']).'">'.$genere_gratos['products_name'].'</a>'.'</li>'; } echo '</ul>'; } // Display promotional text if this product qualifies for free product(s) Note that this code give ALL the items that can receive this same gratis product and a link to the info page that the customer choises. This codes are very useful when a contrib as Salemaker contraries the installation of qproduct I wait your anserws ! bebe cash 59 Quote Version OSCOM CE Phoenix v1.0.5.9 + french language (v1.0.5.8 & Merge pull request #955 from gburton/1.0.5.9 php 7.1.3 MySQL 5.7.17 local with easyphp adds on: shipping spu common browser: Chrome Shop multishop 2.2 with many addons. Link to comment Share on other sites More sharing options...
ramon.cutanda Posted December 5, 2010 Share Posted December 5, 2010 Hi, This Christmas we would like to let our customers choose one free product of their choise from whithin an specific category. The thing is: - The customer should be able to receive ONE product for free from a category of our choice. Just one free product per purchase. - It's not a buy one product and get 1 product free, but buy ANY product and get 1 product, of their choice, from a whole category for free. - In any other case those free products have a price. That's it. ONE is free but if the customers adds more products from that categorie those should be charged. We wondered if any of you would be willing to develop the Get-1-free mod to suit our needs. We would be willing to pay for that mod and we would be ready to share the contribution once the job has been done. Anyone interested, please, PM me. Thanks in advance, Kind regards. Quote Link to comment Share on other sites More sharing options...
Dive Right In Scuba Posted December 13, 2010 Share Posted December 13, 2010 Anybody know how to get the Buy One get one to show up under the Specials tab? Seeing as it is a "Sale" it would be great if that could also show up when someone Clicks on the "Specials". So if there is a product that is buy one get on free, a customer can see that promo when they look at other Sales items. Quote Link to comment Share on other sites More sharing options...
♥kymation Posted December 13, 2010 Author Share Posted December 13, 2010 Specials are triggered by an entry in the specials database table. You could add your product there as well, but that would be extra work and probably cause some undesirable side effects (strikeout price, for one.) It would be better to modify the specials box and the specials page to check the get_1_free table as well, then combine the results. Regards Jim Quote See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
liz0 Posted December 23, 2010 Share Posted December 23, 2010 (edited) I have a question about Get SAME free item as the item they purchased - How can I check stock on shopping cart page in this case? Say I have 5 items in-stock, and they can buy one get one free. Currently if I input 5 as purchased qty, the free item shows as 1, which ends up 6 totally. And I can check out from that point. The stock check is by product id, but when 2 items are the same but show in 2 different rows, the same id will repeat twice in the array and both can pass the stock check, since 6 and 1 are both <= 5. Another interesting thing I found is, if I bought 1 item in the cart, it shows 1 free item; but if I want to change qty in the cart, say buy 2, the qty stays same (1) if I do this change in the PURCHASED item qty box; but if do it in FREE ITEM qty box, it works - buy becomes 2, and free is still 1 (I have limited free to 1). Same thing if I want to decrease the qty that I buy. I have to change qty in free item qty box instead of buy qty box... which would definately confuses my customers. Any fix for these 2 issues? Thanks a bunch! I really want to make this great mod to work! Edited December 23, 2010 by liz0 Quote Link to comment Share on other sites More sharing options...
♥kymation Posted December 23, 2010 Author Share Posted December 23, 2010 That is a known bug in stock checking. There is no fix at this time. I haven't seen the quantity change bug that you mentioned. I'll have to take a look at that when I get the time. Which will probably be next year. Regards Jim Quote See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
andy_1984 Posted January 7, 2011 Share Posted January 7, 2011 i have some questions about this, its what i want but not sure if it can do the following: 1. can the free product be specified by the admin (customer buys 30,000 flyers and gets 1 x A1 Poster free added to their cart) 2. can the customer remove the free product without having to reduce the quantity of there initial order 3. do you think it would be easy enough for me to modify this code to add the free product based on an attributes value rather than the products quantity ? thanks, - Andy Quote Link to comment Share on other sites More sharing options...
andy_1984 Posted January 7, 2011 Share Posted January 7, 2011 forget point 2 i never read the readme correctly Quote Link to comment Share on other sites More sharing options...
♥kymation Posted January 7, 2011 Author Share Posted January 7, 2011 1. Yes. 2. You already answered. 3. Depends on your level of expertise with PHP and osCommerce. It can certainly be done, but it involves changes to the cart class. Regards Jim andy_1984 1 Quote See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
Snowy_River Posted January 11, 2011 Share Posted January 11, 2011 Hello, I am looking for an add-on that will allow customers to get a discount on a third item (for example), if two other items are purchased. These can't need to all be the same item, as the store that this is for sells entirely one-of-a-kind merchandise. It looks like this add-on is close, but 1) can it handle a discount value instead of a zero value? 2) Early on there were a lot of people who were asking if it could be any item, not just multiples of one item; did that ever get implemented? If this add-on isn't suited to my purposes, does anyone know of one that is a better fit? (I haven't spotted one in my searches of the community add-ons... at least not yet.) Thanks! Quote Link to comment Share on other sites More sharing options...
andy_1984 Posted January 11, 2011 Share Posted January 11, 2011 thanks for replying Jim im installing this contribution now but it appears there are files missing from "BUG FIX: wrong free product count in the includesclasses/shopping_cart.php" on the contribution page. in the install it says catalog/admin/includes/functions/get_1_free.php but there is no folder "functions" i cant find it in some of the earlier updates either ? Quote Link to comment Share on other sites More sharing options...
♥kymation Posted January 11, 2011 Author Share Posted January 11, 2011 I support Version 1.3 dated 21 Nov 2007. I have no idea if anything after that has any value. Regards Jim Quote See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
andy_1984 Posted January 12, 2011 Share Posted January 12, 2011 i went ahead with the install and all seems to be ok without that file missing in the install.txt Quote Link to comment Share on other sites More sharing options...
andy_1984 Posted January 12, 2011 Share Posted January 12, 2011 before i asked if its easy enough to add the free product based on an attributes value. i use an attribute called quantity as my quantities are 5,000 6,000, 10,000 (didnt want an editable user input) so i created a function to check the quantity value and changed the get1free function in includes/classes/shopping_cart.php i only had to change 1 line in this function: $products_quantity = $this->contents[$products_id]['qty']; change to $products_quantity = $this->get_atrribute_quantity(); this works great and adds the product but i am unable to remove the free product, i suspect it is removing it but when the shopping cart page reloads its adding it again. do you have any suggestions ? Quote Link to comment Share on other sites More sharing options...
♥kymation Posted January 12, 2011 Author Share Posted January 12, 2011 Get 1 Free was designed to add the free product automatically. This may make it impossible to remove the free product without removing the qualification for the free product. Regards Jim Quote See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
andy_1984 Posted January 13, 2011 Share Posted January 13, 2011 just read your description of the contribution again my appologies i read it wrong, again. im blaming late nights and lack of sleep >_< no worries though, ill create another function to ask the customer if they want the product or not. if yes then add product if not dont add product and add another field to the customers basket "wants_free_product" yes/no and have the get1free function checking this to stop it from adding automatically. thanks for the response & the contribution :thumbsup: Quote Link to comment Share on other sites More sharing options...
Guest Posted March 14, 2011 Share Posted March 14, 2011 (edited) This addon is fantastic! Edited March 14, 2011 by TCDK Quote Link to comment Share on other sites More sharing options...
Guest Posted March 14, 2011 Share Posted March 14, 2011 This addon is fantastic! Hmm, something diden't work right... What I would have written, was: Is it possible, that instead of the product is added in the cart, as another product, it will add the free products under the bought product, like it was a product attribute - Or something else. The problem for me, is that if the customer would like to delete the product in the cart, the customer will have to write "0" in both the bought product, and the free product, to get it out of the cart. It would be smarter, that if the customer just delete the bought product, it also will remove the free product. Possible? Quote Link to comment Share on other sites More sharing options...
Guest Posted July 5, 2011 Share Posted July 5, 2011 I have spent he last two days trying to get this to work. I have the admin side working and the message on the product info page but the free product does not show up in the cart. I have added the extra get 1 free mods and have been through the forum and the extra changes to this contribution. Can anyone help? I am using rc2.2a with php 5. Quote Link to comment Share on other sites More sharing options...
♥kymation Posted July 5, 2011 Author Share Posted July 5, 2011 You've made an error in the installation. It's most likely in the shopping cart class file. Check all of your edits carefully by comparing your files to the ones supplied in the Get 1 Free package. Regards Jim Quote See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
Guest Posted July 5, 2011 Share Posted July 5, 2011 Hi Jim, Here is my modified class/shopping_cart.php file. I have used winmerge to compare the two files and checked it with webuilder. No syntax errors found. I also use MVs but you wrote that so it blends fine with Get 1 Free. Please have a look and let me know what you see. I've tried everything. <?php /* $Id: shopping_cart.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 */ class shoppingCart { var $contents, $total, $weight, $cartID, $content_type; function shoppingCart() { $this->reset(); } function restore_contents() { global $customer_id; if (!tep_session_is_registered('customer_id')) return false; // insert current cart contents in database if (is_array($this->contents)) { reset($this->contents); while (list($products_id, ) = each($this->contents)) { $qty = $this->contents[$products_id]['qty']; $product_query = tep_db_query("select products_id from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'"); if (!tep_db_num_rows($product_query)) { tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . tep_db_input($qty) . "', '" . date('Ymd') . "')"); if (isset($this->contents[$products_id]['attributes'])) { reset($this->contents[$products_id]['attributes']); while (list($option, $value) = each($this->contents[$products_id]['attributes'])) { tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . (int)$option . "', '" . (int)$value . "')"); } } } else { tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . tep_db_input($qty) . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'"); } } } // reset per-session cart contents, but not the database contents $this->reset(false); $products_query = tep_db_query("select products_id, customers_basket_quantity from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "'"); while ($products = tep_db_fetch_array($products_query)) { $this->contents[$products['products_id']] = array('qty' => $products['customers_basket_quantity']); // attributes $attributes_query = tep_db_query("select products_options_id, products_options_value_id from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products['products_id']) . "'"); while ($attributes = tep_db_fetch_array($attributes_query)) { $this->contents[$products['products_id']]['attributes'][$attributes['products_options_id']] = $attributes['products_options_value_id']; } } $this->cleanup(); } function reset($reset_database = false) { global $customer_id; $this->contents = array(); $this->total = 0; $this->weight = 0; $this->content_type = false; if (tep_session_is_registered('customer_id') && ($reset_database == true)) { tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "'"); tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "'"); } unset($this->cartID); if (tep_session_is_registered('cartID')) tep_session_unregister('cartID'); } function add_cart($products_id, $qty = '1', $attributes = '', $notify = true) { global $new_products_id_in_cart, $customer_id; $products_id_string = tep_get_uprid($products_id, $attributes); $products_id = tep_get_prid($products_id_string); if (defined('MAX_QTY_IN_CART') && (MAX_QTY_IN_CART > 0) && ((int)$qty > MAX_QTY_IN_CART)) { $qty = MAX_QTY_IN_CART; } $attributes_pass_check = true; if (is_array($attributes)) { reset($attributes); while (list($option, $value) = each($attributes)) { if (!is_numeric($option) || !is_numeric($value)) { $attributes_pass_check = false; break; } } } if (is_numeric($products_id) && is_numeric($qty) && ($attributes_pass_check == true)) { $check_product_query = tep_db_query("select products_status from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'"); $check_product = tep_db_fetch_array($check_product_query); if (($check_product !== false) && ($check_product['products_status'] == '1')) { if ($notify == true) { $new_products_id_in_cart = $products_id; tep_session_register('new_products_id_in_cart'); } if ($this->in_cart($products_id_string)) { $this->update_quantity($products_id_string, $qty, $attributes); } else { $this->contents[$products_id_string] = array('qty' => (int)$qty); // insert into database if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$qty . "', '" . date('Ymd') . "')"); if (is_array($attributes)) { reset($attributes); while (list($option, $value) = each($attributes)) { $this->contents[$products_id_string]['attributes'][$option] = $value; // insert into database if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$option . "', '" . (int)$value . "')"); } } } $this->cleanup(); // assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure $this->cartID = $this->generate_cart_id(); } } } function update_quantity($products_id, $quantity = '', $attributes = '') { global $customer_id; $products_id_string = tep_get_uprid($products_id, $attributes); $products_id = tep_get_prid($products_id_string); if (defined('MAX_QTY_IN_CART') && (MAX_QTY_IN_CART > 0) && ((int)$quantity > MAX_QTY_IN_CART)) { $quantity = MAX_QTY_IN_CART; } $attributes_pass_check = true; if (is_array($attributes)) { reset($attributes); while (list($option, $value) = each($attributes)) { if (!is_numeric($option) || !is_numeric($value)) { $attributes_pass_check = false; break; } } } if (is_numeric($products_id) && isset($this->contents[$products_id_string]) && is_numeric($quantity) && ($attributes_pass_check == true)) { $this->contents[$products_id_string] = array('qty' => (int)$quantity); // update database if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . (int)$quantity . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "'"); if (is_array($attributes)) { reset($attributes); while (list($option, $value) = each($attributes)) { $this->contents[$products_id_string]['attributes'][$option] = $value; // update database if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " set products_options_value_id = '" . (int)$value . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "' and products_options_id = '" . (int)$option . "'"); } } } } function cleanup() { global $customer_id; reset($this->contents); while (list($key,) = each($this->contents)) { if ($this->contents[$key]['qty'] < 1) { unset($this->contents[$key]); // remove from database if (tep_session_is_registered('customer_id')) { tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'"); tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'"); } } } } function count_contents() { // get total number of items in cart $total_items = 0; if (is_array($this->contents)) { reset($this->contents); while (list($products_id, ) = each($this->contents)) { $total_items += $this->get_quantity($products_id); // Get 1 free // If this product qualifies for free product(s) add in the number of free products if (is_array ($free_product = $this->get1free ($products_id))) { $total_items += $free_product['quantity']; } // end Get 1 free } } return $total_items; } function get_quantity($products_id) { if (isset($this->contents[$products_id])) { return $this->contents[$products_id]['qty']; } else { return 0; } } function in_cart($products_id) { if (isset($this->contents[$products_id])) { return true; } else { return false; } } function remove($products_id) { global $customer_id; unset($this->contents[$products_id]); // remove from database if (tep_session_is_registered('customer_id')) { tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'"); tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'"); } // Get 1 free // If this product qualifies for free product(s) remove the free products if (is_array ($free_product = $this->get1free ($products_id))) { $pid = (int)$free_product['id']; unset($this->contents[$pid]); // remove from database if (tep_session_is_registered('customer_id')) { tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($pid) . "'"); tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($pid) . "'"); } } // end Get 1 free // assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure $this->cartID = $this->generate_cart_id(); return $debug; } function remove_all() { $this->reset(); } function get_product_id_list() { $product_id_list = ''; if (is_array($this->contents)) { reset($this->contents); while (list($products_id, ) = each($this->contents)) { $product_id_list .= ', ' . $products_id; } } return substr($product_id_list, 2); } function calculate() { global $currencies; $this->total = 0; $this->weight = 0; if (!is_array($this->contents)) return 0; reset($this->contents); while (list($products_id, ) = each($this->contents)) { $qty = $this->contents[$products_id]['qty']; // products price $product_query = tep_db_query("select products_id, products_price, products_tax_class_id, products_weight from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'"); if ($product = tep_db_fetch_array($product_query)) { $prid = $product['products_id']; $products_tax = tep_get_tax_rate($product['products_tax_class_id']); $products_price = $product['products_price']; $products_weight = $product['products_weight']; $specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'"); if (tep_db_num_rows ($specials_query)) { $specials = tep_db_fetch_array($specials_query); $products_price = $specials['specials_new_products_price']; } $this->total += $currencies->calculate_price($products_price, $products_tax, $qty); $this->weight += ($qty * $products_weight); // Get 1 free // If this product qualifies for free product(s) add in the total weight of free products if (is_array ($free_product = $this->get1free ($products_id))) { $this->weight += $free_product['quantity'] * $free_product['weight']; } // end Get 1 free } // attributes price if (isset($this->contents[$products_id]['attributes'])) { reset($this->contents[$products_id]['attributes']); while (list($option, $value) = each($this->contents[$products_id]['attributes'])) { $attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$prid . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'"); $attribute_price = tep_db_fetch_array($attribute_price_query); if ($attribute_price['price_prefix'] == '+') { $this->total += $currencies->calculate_price($attribute_price['options_values_price'], $products_tax, $qty); } else { $this->total -= $currencies->calculate_price($attribute_price['options_values_price'], $products_tax, $qty); } } } } } ////// //MVS Start // New method to provide cost, weight, quantity, and product IDs by vendor ////// //Output array structure (example): //shoppingcart Object //( // [vendor_shipping] => array // ( // [0] => array //Number is the vendor_id // ( // [weight] => 22.59 // [cost] => 12.95 // [qty] => 2 // [products_id] => array // ( // [0] => 12 // [1] => 47 // ) // ) // [12] => array // ( // [weight] => 32.74 // [cost] => 109.59 // [qty] => 5 // [products_id] => array // ( // [0] => 2 // [1] => 3 // [2] => 37 // [3] => 49 // ) // ) // ) //) function vendor_shipping() { if (!is_array($this->contents)) return 0; //Cart is empty $this->vendor_shipping = array(); //Initialize the output array reset($this->contents); // and reset the input array foreach ($this->contents as $products_id => $value) { //$value is never used $quantity = $this->contents[$products_id]['qty']; //mod IndvShip, added products_ship_price $products_query = tep_db_query("select products_id, products_price, products_ship_price, products_tax_class_id, products_weight, vendors_id from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'" ); if ($products = tep_db_fetch_array($products_query)) { $products_price = $products['products_price']; //mod IndvShip $products_ship_price = $products['products_ship_price']; $products_weight = $products['products_weight']; $vendors_id = ($products['vendors_id'] <= 0) ? 1 : $products['vendors_id']; $products_tax = tep_get_tax_rate($products['products_tax_class_id']); //Find special prices (if any) $specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$products_id . "' and status = '1'" ); if (tep_db_num_rows ($specials_query)) { $specials = tep_db_fetch_array($specials_query); $products_price = $specials['specials_new_products_price']; } //Add values to the output array $this->vendor_shipping[$vendors_id]['weight'] += ($quantity * $products_weight); $this->vendor_shipping[$vendors_id]['cost'] += tep_add_tax($products_price, $products_tax) * $quantity; $this->vendor_shipping[$vendors_id]['qty'] += $quantity; //mod IndvShip $this->vendor_shipping[$vendors_id]['ship_cost'] += ($quantity * $products_ship_price); $this->vendor_shipping[$vendors_id]['products_id'][] = $products_id; //There can be more than one product } // Add/subtract attributes prices (if any) if (isset($this->contents[$products_id]['attributes'])) { reset($this->contents[$products_id]['attributes']); foreach ($this->contents[$products_id]['attributes'] as $option => $value) { $attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$products_id . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'"); $attribute_price = tep_db_fetch_array($attribute_price_query); if ($attribute_price['price_prefix'] == '+') { $this->vendor_shipping[$vendors_id]['cost'] += $quantity * tep_add_tax($attribute_price['options_values_price'], $products_tax); } else { $this->vendor_shipping[$vendors_id]['cost'] -= $quantity * tep_add_tax($attribute_price['options_values_price'], $products_tax); } } } } return $this->vendor_shipping; } //MVS End function attributes_price($products_id) { $attributes_price = 0; if (isset($this->contents[$products_id]['attributes'])) { reset($this->contents[$products_id]['attributes']); while (list($option, $value) = each($this->contents[$products_id]['attributes'])) { $attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$products_id . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'"); $attribute_price = tep_db_fetch_array($attribute_price_query); if ($attribute_price['price_prefix'] == '+') { $attributes_price += $attribute_price['options_values_price']; } else { $attributes_price -= $attribute_price['options_values_price']; } } } return $attributes_price; } //MVS - added function to only retrieve specific vendors products function get_vendors_products($vendor) { global $languages_id; if (!is_array($this->contents)) return false; $products_array = array(); reset($this->contents); while (list($products_id, ) = each($this->contents)) { $products_query = tep_db_query("select p.products_id, pd.products_name, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_length, p.products_width, p.products_height, p.products_ready_to_ship, p.products_tax_class_id, v.vendors_id, v.vendors_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_VENDORS . " v where p.products_id = '" . (int)$products_id . "' and pd.products_id = p.products_id and v.vendors_id = '" . $vendor . "' and p.vendors_id = '" . $vendor . "' and pd.language_id = '" . (int)$languages_id . "'"); //upsxml dimensions end //MVS end if ($products = tep_db_fetch_array($products_query)) { $prid = $products['products_id']; $products_price = $products['products_price']; $specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'"); if (tep_db_num_rows($specials_query)) { $specials = tep_db_fetch_array($specials_query); $products_price = $specials['specials_new_products_price']; } $products_array[] = array('id' => $products_id, 'name' => $products['products_name'], 'qproduct' => '', 'model' => $products['products_model'], 'image' => $products['products_image'], 'price' => $products_price, 'quantity' => $this->contents[$products_id]['qty'], 'weight' => $products['products_weight'], //upsxml dimensions start 'length' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_length']), 'width' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_width']), 'height' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_height']), 'ready_to_ship' => $products['products_ready_to_ship'], //upsxml dimensions end 'final_price' => ($products_price + $this->attributes_price($products_id)), 'tax_class_id' => $products['products_tax_class_id'], //MVS start 'vendors_id' => $products['vendors_id'], 'vendors_name' => $products['vendors_name'], //MVS end 'attributes' => (isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : '')); // Get 1 free if (is_array ($free_product = $this->get1free ($products_id))) { // Add the free product to the shopping cart (Customer cannot alter this) $products_array[] = array('id' => $free_product['id'], 'name' => $free_product['name'], 'qproduct' => '<br><span class="stockWarning">Free with <b>' . $products['products_name'] . '</b> purchase</span>', 'model' => $free_product['model'], 'image' => $free_product['image'], 'price' => 0, 'quantity' => $free_product['quantity'], 'weight' => $free_product['weight'], 'final_price' => 0, 'tax_class_id' => $products['products_tax_class_id'], 'attributes' => '', 'free' => 1 ); } //if (is_array // end Get 1 free } } return $products_array; } //MVS - upsxml end function get_products() { global $languages_id; if (!is_array($this->contents)) return false; $products_array = array(); reset($this->contents); while (list($products_id, ) = each($this->contents)) { //MVS //upsxml dimensions - added p.products_length, p.products_width, p.products_height, p.products_ready_to_ship, $products_query = tep_db_query("select p.products_id, pd.products_name, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_length, p.products_width, p.products_height, p.products_ready_to_ship, p.products_tax_class_id, v.vendors_id, v.vendors_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_VENDORS . " v where p.products_id = '" . (int)$products_id . "' and pd.products_id = p.products_id and v.vendors_id = p.vendors_id and pd.language_id = '" . (int)$languages_id . "'"); if ($products = tep_db_fetch_array($products_query)) { $prid = $products['products_id']; $products_price = $products['products_price']; $specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'"); if (tep_db_num_rows($specials_query)) { $specials = tep_db_fetch_array($specials_query); $products_price = $specials['specials_new_products_price']; } $products_array[] = array('id' => $products_id, 'name' => $products['products_name'], 'model' => $products['products_model'], 'image' => $products['products_image'], 'price' => $products_price, 'quantity' => $this->contents[$products_id]['qty'], 'weight' => $products['products_weight'], //upsxml dimensions start 'length' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_length']), 'width' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_width']), 'height' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_height']), //uspxml dimensions end 'ready_to_ship' => $products['products_ready_to_ship'], 'final_price' => ($products_price + $this->attributes_price($products_id)), 'tax_class_id' => $products['products_tax_class_id'], //MVS start 'vendors_id' => $products['vendors_id'], 'vendors_name' => $products['vendors_name'], //MVS end 'attributes' => (isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : '')); } } return $products_array; } function show_total() { $this->calculate(); return $this->total; } function show_weight() { $this->calculate(); return $this->weight; } function generate_cart_id($length = 5) { return tep_create_random_value($length, 'digits'); } function get_content_type() { $this->content_type = false; if ( (DOWNLOAD_ENABLED == 'true') && ($this->count_contents() > 0) ) { reset($this->contents); while (list($products_id, ) = each($this->contents)) { if (isset($this->contents[$products_id]['attributes'])) { reset($this->contents[$products_id]['attributes']); while (list(, $value) = each($this->contents[$products_id]['attributes'])) { $virtual_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad where pa.products_id = '" . (int)$products_id . "' and pa.options_values_id = '" . (int)$value . "' and pa.products_attributes_id = pad.products_attributes_id"); $virtual_check = tep_db_fetch_array($virtual_check_query); if ($virtual_check['total'] > 0) { switch ($this->content_type) { case 'physical': $this->content_type = 'mixed'; return $this->content_type; break; default: $this->content_type = 'virtual'; break; } } else { switch ($this->content_type) { case 'virtual': $this->content_type = 'mixed'; return $this->content_type; break; default: $this->content_type = 'physical'; break; } } } } else { switch ($this->content_type) { case 'virtual': $this->content_type = 'mixed'; return $this->content_type; break; default: $this->content_type = 'physical'; break; } } } } else { $this->content_type = 'physical'; } return $this->content_type; } function unserialize($broken) { for(reset($broken);$kv=each($broken);) { $key=$kv['key']; if (gettype($this->$key)!="user function") $this->$key=$kv['value']; } } // start Get 1 Free function get1free ($products_id) { global $languages_id; $get_1_free_query = tep_db_query("select products_free_id, products_free_quantity, products_qualify_quantity, products_multiple, get_1_free_expires_date from " . TABLE_GET_1_FREE . " where products_id = '" . (int)$products_id . "' and status = '1'"); if (tep_db_num_rows($get_1_free_query) > 0) { $get_1_free = tep_db_fetch_array($get_1_free_query); //Check that the offer has not expired //MNK bugfix 13.08.2007 if (($get_1_free['get_1_free_expires_date'] <= date('Y-m-d H:i:s')) && ($get_1_free['get_1_free_expires_date'] != '0000-00-00 00:00:00')) { //offer has expired, so update the database and return false tep_db_query("update " . TABLE_GET_1_FREE . " set status = '0', date_status_change = now() where products_id = '" . (int)$products_id . "'"); return false; } else { // Offer is valid, so check if the quantity qualifies $products_quantity = $this->contents[$products_id]['qty']; if ($products_quantity >= $get_1_free['products_qualify_quantity']) { // Qualifies, so get the quantity of free products $free_quantity = 1; if ($get_1_free['products_multiple'] > 1) { //BOF fischo bugfix 10.04.2009 //$free_quantity = floor ($products_quantity / $get_1_free['products_qualify_quantity']); $free_quantity = floor ($products_quantity / $get_1_free['products_qualify_quantity']) * $get_1_free['products_free_quantity']; //EOF fischo bugfix 10.04.2009 if ($free_quantity > $get_1_free['products_multiple']) { $free_quantity = $get_1_free['products_multiple']; } } // Get the info on the free product $products_free_query = tep_db_query("select pd.products_name, p.products_model,p.products_image,p.products_weight from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$get_1_free['products_free_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'"); $products_free = tep_db_fetch_array($products_free_query); // Return an array of free product values $output = array ( 'id' => $get_1_free['products_free_id'], 'quantity' => $free_quantity, 'name' => $products_free['products_name'], 'model' => $products_free['products_model'], 'image' => $products_free['products_image'], 'weight' => $products_free['products_weight']); return $output; } //if ($products_quantity } //else }//if (tep_db_num_rows // offer was not valid (disabled or expired) return false; }//function // end Get 1 Free // get_products_for_packaging is a special function for split product support in the class packing // assumes that you have added the sql for upsxml, which adds the table products_split function get_products_for_packaging() { if (!is_array($this->contents)) return false; $products_array = array(); // get the list of product information $products = $this->get_products(); // cycle through list foreach ($products as $product) { $split_query = tep_db_query("select * from " . TABLE_PRODUCTS_SPLIT . " where products_id = " . (int)$product['id']); // is this a split product? if (tep_db_num_rows($split_query) > 0) { // save the total prices of the split product $product_price = $product['price']; $product_final_price = $product['final_price']; while ($split_info = tep_db_fetch_array($split_query)) { // for each piece of the product replace only the information that is unique to the piece // other information from the product will remain unchanged $product['weight'] = $split_info['products_weight']; $product['length'] = $split_info['products_length']; $product['width'] = $split_info['products_width']; $product['height'] = $split_info['products_height']; $product['ready_to_ship'] = $split_info['products_ready_to_ship']; $product['price'] = round(($split_info['value_fraction'] * $product_price), 4); $product['final_price'] = round(($split_info['value_fraction'] * $product_final_price), 4); // save the updated product piece $products_array[] = $product; } // end while } else { // not a split product, save it directly $products_array[] = $product; } } // end foreach return $products_array; } } ?> Quote Link to comment Share on other sites More sharing options...
♥kymation Posted July 5, 2011 Author Share Posted July 5, 2011 I don't see anything there. Either I missed it or the error is somewhere else. Regards Jim Quote See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.