Jump to content
  • Checkout
  • Login
  • Get in touch


The e-commerce.


  • Content count

  • Joined

  • Last visited

Profile Information

  • Real Name
    Rick Hawkey
  1. Marcel, In answer to the birthdays contribution, I am assuming that this is the birthday contribution located here http://www.oscommerce.com/community/contributions,2547. If it is the same contribution it will need some overhaul to make it work on the new oscommerce snapshot. As far as clients are concerned I am always interested in new work and projects. Feel free to pm me if you have a request or need anything at all. And I'll see what I can do to help. Good luck, Rhawke
  2. Honestly, I have a site I use for my testing grounds that I plan on redesigning completely here soon and opening up for business again. I quit working on it and running it for a long time while I completed my degree in database design and C#/programming. It has well over 7000 products, all of which I can change fairly easily using csv files and phpmyadmin. Now I am a full time web developer and I specialize in developing highly customized oscommerce and similar type sites. I just started my business but I am already getting a lot of work and requests for the same. I also use easy populate, it is good for loading the products into the system, but seriously as far as attributes go, my suggestion is to spend some time getting to know MySql and phpmyadmin, and simply open the attributes tables involved, and use the export feature of phpmyadmin to download a csv file with the tables laid out and use that file to enter in all your attributes and stuff. it is a bit more difficult at first because here you are using the database product id numbers and attribute numbers instead of names (unless you create custom database views), but in the end if you want to maintain a very up to date website this is my version(opinion) of the best bet. As far as where do you stop.... I don't believe in limitations, however I think the line should be drawn when you start to sacrifice your customers ability to use the site quickly and easily by over complicating their lives with gadgets and gizmos that you haven't proven they need by asking first and that you haven't proven are truly going to increase your bottom line. just because you think it will be "cool" doesn't make it the right thing to do. By the way, I'm a Canadian.. you know those cute huggable chubby guys that drink a lot of beer and say eh? Guilty! Rhawke
  3. isabellaspassion, Ok, I think I have an idea on what happened here as well that is keeping you from seeing the PROD INFO (QTPro) in admin. There is also another SQL file provided in the files you need to install QTPRO. This file inserts a bunch of values into the configuration table you need in order to operate QTPRO from the admin. The file you need is called config.sql and you use it the same way you did the last one. I hope that solves your troubles and good luck!
  4. Hello isabellaspassion, This is just a quick idea here, have you checked your database to see if that column in fact exists? It would seem that the program can not find it when it goes to insert the new option. Use phpmyadmin if you have it and double check to see that you installed the sql queries that qtpro supplied as part of the install process. Let us know how that goes. Rhawke
  5. Hello sunrise99, I am "thinking" what has happened here is that your client has deleted the attribute combination from the product attributes section, doing this has removed it from the stock.php page drop down selections and so now the only way to remove that item from the database is by using an sql query on the database table products_stock or... if you have phpmyadmin, navigate to the products_stock table, find the correct entry for that product attribute combination and delete that row from the database manually. If that is the case, then I suggest you instruct your client from now on to use the stock button (stock.php) to remove attribute selections from the products rather than use product attributes, hopefully that will prevent this from occuring again and make their lives a little easier. In case anyone has some spare time.... HA ..a future modification to this contribution might be to fix this scenario and have it so when a product attribute is removed/deleted from the product attributes page, any combination existing on stock.php that uses that attribute is also deleted. Of course a validation check against product_stock should be made so that a person is either forced to zero out the quantities on stock.php first or the program automatically sets all quantities to zero before deleting the attribute from the product_attributes/options table would be a good idea. (hope that makes sense). I hope the above solves the problem for you Sunrise99, let us know please. Rhawke
  6. Hello Sunrise99 I am not sure if this will resolve your issue but, did your client remove the OLD Large value from the stock.php page by going to products/categories, choosing the product and the clicking the stock button for that product? In there you set the attribute quantity for large to zero and it should remove that attribute quantity from the database thus removing it from the stock report. I tested this on my own site and it did in fact remove it from the report. Good Luck, Rhawke
  7. 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
  8. 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
  9. 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
  10. Rhawke

    Mirapay and Oscommerce

    **IMPORTANT -- THIS IS NOT A WORKING MODULE AT THIS TIME -- DO NOT USE AS IS** I am trying to create a module for Mirapay for oscommerce. My php experience is just passed the novice stage. i do understand programming fundementals and am a C# developer. 1: I do not think my hash code is being calculated correctly. 2: I am not sure Mirapay is accepting the form using the php method tep_draw_hidden_field('xxxx', $this->$xxxx); Below you will find the code I have been working on, if there is a better way to do this, or anyone has ideas on what's wrong, please by all means constructive criticism and tips are very welcome! thanks in advance. Basically what I have done here is take the paypal module and adapt it to Mirapay. class mirapay { var $code, $title, $description, $enabled; // class constructor function mirapay() { global $order; $this->code = 'mirapay'; $this->title = MODULE_PAYMENT_MIRAPAY_TEXT_TITLE; $this->description = MODULE_PAYMENT_MIRAPAY_TEXT_DESCRIPTION; $this->sort_order = MODULE_PAYMENT_MIRAPAY_SORT_ORDER; $this->enabled = ((MODULE_PAYMENT_MIRAPAY_STATUS == 'True') ? true : false); if ((int)MODULE_PAYMENT_MIRAPAY_ORDER_STATUS_ID > 0) { $this->order_status = MODULE_PAYMENT_MIRAPAY_ORDER_STATUS_ID; } if (is_object($order)) $this->update_status(); $this->form_action_url = '(this is the link to the mirapay website secure credit card processing area)'; } // class methods function update_status() { global $order; if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_MIRAPAY_ZONE > 0) ) { $check_flag = false; $check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_MIRAPAY_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id"); while ($check = tep_db_fetch_array($check_query)) { if ($check['zone_id'] < 1) { $check_flag = true; break; } elseif ($check['zone_id'] == $order->billing['zone_id']) { $check_flag = true; break; } } if ($check_flag == false) { $this->enabled = false; } } } function javascript_validation() { return false; } function selection() { return array('id' => $this->code, 'module' => $this->title); } function pre_confirmation_check() { return false; } function confirmation() { return false; } function process_button() { global $order, $currencies, $currency, $customer_id; if (MODULE_PAYMENT_MIRAPAY_CURRENCY == 'Selected Currency') { $my_currency = $currency; } else { $my_currency = substr(MODULE_PAYMENT_MIRAPAY_CURRENCY, 5); } if (!in_array($my_currency, array('CAD', 'EUR', 'GBP', 'JPY', 'USD'))) { $my_currency = 'USD'; } //this section is for declaring the variables being sent to MiraPay and for debugging $password = MODULE_PAYMENT_MIRAPAY_PASSWORD;//fao mirapay password echo "\$password: $password <br>";//debug $amount = $order->info['total'];//the total of the order including tax echo "\$amount: $amount <br>";//debug $mtid = $customer_id . date('YmdHis');//$order_id;//the order id echo "\$mtid: $mtid <br>";//debug $mkey = md5($mtid.$amount.$password);// the hash key echo "\$mkey: $mkey <br>";//debug $email = $order->customer['email_address']; echo "\$email: $email <br>";//debug $merchantID = MODULE_PAYMENT_MIRAPAY_MERCHANTID; echo "\$merchantID: $merchantID <br>";//debug $successUrl = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL'); echo "\$successUrl: $successUrl <br>";//debug $failUrl = tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'); echo "\$failUrl: $failUrl <br>";//debug*/ //end variables and debugging $process_button_string = tep_draw_hidden_field('MTID', $this->$mtid) . tep_draw_hidden_field('Merchant_ID', $this->$merchantID) . tep_draw_hidden_field('MKEY', $this->$mkey) . tep_draw_hidden_field('Amount1', $this->$amount) . tep_draw_hidden_field('SuccessURL', $this->$successUrl) . tep_draw_hidden_field('FailURL', $this->$failUrl) . tep_draw_hidden_field('EMail', $this->$email); return $process_button_string; } function before_process() { return false; } function after_process() { return false; } function output_error() { return false; } function check() { if (!isset($this->_check)) { $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_MIRAPAY_STATUS'"); $this->_check = tep_db_num_rows($check_query); } return $this->_check; } function install() { tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable MiraPaY Module', 'MODULE_PAYMENT_MIRAPAY_STATUS', 'True', 'Do you want to accept MiraPaY payments?', '6', '0', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())"); //state the merchant id for mirapay tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Merchant ID', 'MODULE_PAYMENT_MIRAPAY_MERCHANTID', '(***merchant id goes here***)', 'This is the Merchant ID provided to you by MiraPay', '6', '0', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Password', 'MODULE_PAYMENT_MIRAPAY_PASSWORD', '(**Password goes here**)', 'The password for the MiraPay service', '6', '0', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Transaction Currency', 'MODULE_PAYMENT_MIRAPAY_CURRENCY', 'Selected Currency', 'The currency to use for credit card transactions', '6', '0', 'tep_cfg_select_option(array(\'Selected Currency\',\'Only USD\',\'Only CAD\',\'Only EUR\',\'Only GBP\',\'Only JPY\'), ', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort order of display.', 'MODULE_PAYMENT_MIRAPAY_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '0', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Payment Zone', 'MODULE_PAYMENT_MIRAPAY_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '2', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Set Order Status', 'MODULE_PAYMENT_MIRAPAY_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '0', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())"); } function remove() { tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')"); } function keys() { return array('MODULE_PAYMENT_MIRAPAY_STATUS', 'MODULE_PAYMENT_MIRAPAY_MERCHANTID', 'MODULE_PAYMENT_MIRAPAY_PASSWORD', 'MODULE_PAYMENT_MIRAPAY_CURRENCY', 'MODULE_PAYMENT_MIRAPAY_ZONE', 'MODULE_PAYMENT_MIRAPAY_ORDER_STATUS_ID', 'MODULE_PAYMENT_MIRAPAY_SORT_ORDER'); } } ?>