jferezy Posted August 15, 2009 Share Posted August 15, 2009 Hello, I have the module working - thank you very much. I had to make some modifications because the PNREF number was not coming into my orders as the old version - but that has been addressed. I am running into an issues for tax on shipping going into PayPal. Here is my situation: The orders outside my tax zones go in correctly. Once someone orders within a tax zone, we tax the shipping. The tax amount going into paypal is only the tax of the products, not the shipping. I have moy Order Total set up correctly - in fact the orders look correct in my orders table and reports. The totals in PayPal Manager do not match the orders in oscommerce when there is tax involved. Any information on how to correct this would be great. The problem now is that we need to re-post to PayPal (the full amount) and the customers are rightfully getting angry because the money is being held for 30 days I think. Thanks! Jason Quote Link to comment Share on other sites More sharing options...
mustang62 Posted August 18, 2009 Share Posted August 18, 2009 I have the module working - thank you very much. I had to make some modifications because the PNREF number was not coming into my orders as the old version - but that has been addressed. I am running into an issues for tax on shipping going into PayPal. Here is my situation: The orders outside my tax zones go in correctly. Once someone orders within a tax zone, we tax the shipping. The tax amount going into paypal is only the tax of the products, not the shipping. I have moy Order Total set up correctly - in fact the orders look correct in my orders table and reports. The totals in PayPal Manager do not match the orders in oscommerce when there is tax involved. Any information on how to correct this would be great. The problem now is that we need to re-post to PayPal (the full amount) and the customers are rightfully getting angry because the money is being held for 30 days I think. Thanks! Jason Hi Jason, I have the same problem with Payflow Pro. The taxes for the shipping costs are the only amount not going thru. The oscommerce invoice indicates the correct total but the gateway and credit card transaction shows less. I have previously asked on this forum but no answer yet. I also inquired directly at the Payflow gateway forum and they think it may be an incorrect code in the AMT field. I looked in the paypal_payflow_pro.php file for this code but not sure if the code is right or wrong. 'FREIGHTAMT' => round($order->info['shipping_cost'], 2), 'TAXAMT' => round($order->info['tax'], 2), 'AMT' => round($order->info['total'], 2), Unfortunately I am not familiar with this payment module so I'm lost. I hope someone more knowledgeable with this module can point us in the right direction. If I find something I'll post it here. Quote Link to comment Share on other sites More sharing options...
Paul Loeb Posted February 9, 2010 Share Posted February 9, 2010 Hello, I am having this same issue. Were you ever able to resolve it? Please let me know. Thanks, Paul Hi Jason, I have the same problem with Payflow Pro. The taxes for the shipping costs are the only amount not going thru. The oscommerce invoice indicates the correct total but the gateway and credit card transaction shows less. I have previously asked on this forum but no answer yet. I also inquired directly at the Payflow gateway forum and they think it may be an incorrect code in the AMT field. I looked in the paypal_payflow_pro.php file for this code but not sure if the code is right or wrong. 'FREIGHTAMT' => round($order->info['shipping_cost'], 2), 'TAXAMT' => round($order->info['tax'], 2), 'AMT' => round($order->info['total'], 2), Unfortunately I am not familiar with this payment module so I'm lost. I hope someone more knowledgeable with this module can point us in the right direction. If I find something I'll post it here. Quote Link to comment Share on other sites More sharing options...
dynamoeffects Posted February 10, 2010 Share Posted February 10, 2010 It's probably due to the before_process() method being called before the order_totals modules. In your checkout_process.php file, see if this line: $order_totals = $order_total_modules->process(); appears before or after this line: $payment_modules->before_process(); You want it to appear before. Quote Please use the forums for support! I am happy to help you here, but I am unable to offer free technical support over instant messenger or e-mail. Link to comment Share on other sites More sharing options...
Paul Loeb Posted February 11, 2010 Share Posted February 11, 2010 Brian, thanks for your help. It appears before as it should. Do you have any other ideas? I am attaching my checkout_process.php file. Thanks Paul <?php /* $Id: checkout_process.php,v 1.128 2003/05/28 18:00:29 hpdl Exp $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ //print_r($_REQUEST); include('includes/application_top.php'); // die("Term: $current_school_term"); // 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); // Get the school's region $tmpquery = tep_db_query("SELECT school_service_facility FROM school WHERE school_id=$school_id"); $tmp = tep_db_fetch_array($tmpquery); $school_region = $tmp['school_service_facility']; if ($school_region == 'N') { $reply_address = EMAIL_CONTACT_NORTH; } else { $reply_address = EMAIL_CONTACT_SOUTH; } // load selected payment module require(DIR_WS_CLASSES . 'payment.php'); $payment_modules = new payment($payment); //MVS start // load the selected shipping module if (($total_weight > 0 ) || (SELECT_VENDOR_SHIPPING == 'true')){ include(DIR_WS_CLASSES . 'vendor_shipping.php'); } elseif (($total_weight > 0 ) || (SELECT_VENDOR_SHIPPING == 'false')){ include(DIR_WS_CLASSES . 'shipping.php'); } $shipping_modules = new shipping($shipping); //MVS End require(DIR_WS_CLASSES . 'order.php'); $order = new order; // VN REMOVE - THIS ALLOWS TESTING WITH DAVID AKWIMBI'S ACCOUNT OR VIK'S ACCOUNT AND TEST CC NUM // If an order has a zero dollar sum, use this to skip credit card processing if (($order->info['total'] == 0) || ( (($customer_id == 22) || ($customer_id == 402) || ($customer_id == 166) || ($customer_id == 412) || ($customer_id == 840 /*Cesar's ID*/ ) || ($customer_id == 560 /* MHerz's ID*/) || ($customer_id == 593)) && ($order->info['cc_number'] == '4111111111111111')) ) { // We are skipping credit card processing for David Akwimbi, Viken Nokhoudian, Demo01 using test card number $trx_type = 'A'; $auth_response_code = '0'; $auth_pnref = 'VN' . date('YmdHis'); $auth_resp_msg = 'Approved'; } else { // load the before_process function from the payment modules, process the credit card $payment_modules->before_process(); /* Here to end of Customer ID check added to CustomPublishing by Matt Herz 1-16-09 */ // Viken - get the raw trx code $trx_type = ""; if (is_object($$payment)) { $payment_class = $$payment; if($payment_class->code == "payflowpro") { $trx_type = $payment_class->get_trx_type(); } else { $trx_type = 'XX'; } } // Viken - get the response code $auth_response_code = ""; if (is_object($$payment)) { $payment_class = $$payment; if($payment_class->code == "payflowpro") { $auth_response_code = $payment_class->get_response_code(); } else { $auth_response_code = 'XX'; } } // Added by Sameer - get the pnref $auth_pnref = ""; if (is_object($$payment)) { $payment_class = $$payment; if($payment_class->code == "payflowpro") { $auth_pnref = $payment_class->get_auth_pnref(); } else { $auth_pnref = "Oops!!!"; } } // Added by Sameer - get the response msg $auth_resp_msg = ""; if (is_object($$payment)) { $payment_class = $$payment; if($payment_class->code == "payflowpro") { $auth_resp_msg = $payment_class->get_resp_msg(); } else { $auth_resp_msg = "Oops!!!"; } } } // End customer_id check require(DIR_WS_CLASSES . 'order_total.php'); $order_total_modules = new order_total; $order_totals = $order_total_modules->process(); //if(!($order_totals[1]['title'])) // echo "no title"; // die(); $media_type = $order->products['media_type']; // If order only contains downloadable products, set status to Shipped if ($order->content_type == 'virtual') { $order->info['order_status'] = 3; } $cc_number = $order->info['cc_number']; if (strlen($cc_number) < 4) { $cc_number = "****************"; } else { $cc_number = str_repeat("*", strlen($cc_number) - 4) . substr($cc_number, -4); } $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_number' => $cc_number, //'cc_expires' => $order->info['cc_expires'], 'cc_expires' => '', 'date_purchased' => 'now()', 'orders_status' => $order->info['order_status'], 'orders_status_change' => 'now()', // VN 'currency' => $order->info['currency'], 'currency_value' => $order->info['currency_value'], //'currency_value' => $_POST['AMT'], 'school_id' => $school_id, 'term' => $current_school_term, 'content_type' => $order->content_type); tep_db_perform(TABLE_ORDERS, $sql_data_array); $insert_id = tep_db_insert_id(); // Added by Viken - insert record into transaction history (Code by Vik, added by Matt 1-16-09) $querystring = "INSERT INTO transaction (trans_date, orders_id, payment_method, trx_type, cc_type, cc_number, result, pnref_auth, respmsg_auth, amount) VALUES (NOW(), '$insert_id', '" . $order->info['payment_method'] . "', '$trx_type', '" . $order->info['cc_type'] . "', '" . substr($order->info['cc_number'], (strlen($order->info['cc_number']) - 4), 4) . "', '$auth_response_code', '$auth_pnref', '$auth_resp_msg', '" . $_POST['AMT'] . "')"; tep_db_query($querystring); //print_r($sql_data_array); //echo "<br/><br/><br/>" . $querystring; //print_r($order_totals); //die("Testing"); 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'], 'last_modified' => '1'); tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); //MVS - added insert for new orders_shipping table $shipping_array = array(); $shipping_array = $shipping['vendor']; if($shipping_array){ // while (list($vendors_id, $shipping_data) = each($shipping_array)) { foreach ($shipping_array as $vendors_id => $shipping_data) { if($school_region == 'N') $vendors_id = 1; else if ($school_region == 'S') $vendors_id = 3; //die("Id is ".$vendors_id); $vendors_query = tep_db_query("select vendors_name from " . TABLE_VENDORS . " where vendors_id = '" . (int)$vendors_id . "'" ); $vendors_name = 'Unknown'; if ($vendors = tep_db_fetch_array($vendors_query)) { $vendors_name = $vendors['vendors_name']; } $shipping_method_array = explode ('_', $shipping_data['id']); if ($shipping_method_array[0] == 'fedex1') { $shipping_method = 'Federal Express'; } elseif ($shipping_method_array[0] == 'upsxml') { $shipping_method = 'UPS'; } elseif ($shipping_method_array[0] == 'usps') { $shipping_method = 'USPS'; } else { $shipping_method = $shipping_method_array[0]; } $sql_data_array = array('orders_id' => $insert_id, 'vendors_id' => $vendors_id, 'shipping_module' => $shipping_method, 'shipping_method' => $shipping_data['title'], 'shipping_cost' => $shipping_data['cost'], 'shipping_tax' => $shipping_data['ship_tax'], 'vendors_name' => $vendors_name, 'vendor_order_sent' => 'no' ); tep_db_perform(TABLE_ORDERS_SHIPPING, $sql_data_array); } } //MVS End // 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, pad.products_attributes_filename FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa ON p.products_id=pa.products_id LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad ON pa.products_attributes_id=pad.products_attributes_id WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"; // Will work with only one option for downloadable products // otherwise, we have to build the query dynamically with a loop $products_attributes = $order->products[$i]['attributes']; if (is_array($products_attributes)) { $stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'"; } $stock_query = tep_db_query($stock_query_raw); } else { $stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); } if (tep_db_num_rows($stock_query) > 0) { $stock_values = tep_db_fetch_array($stock_query); // do not decrement quantities if products_attributes_filename exists if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) { $stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty']; } else { $stock_left = $stock_values['products_quantity']; } tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) { tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); } } } // Update products_ordered (for bestsellers list) tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); //MVS start - added 'vendors_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'], 'vendors_id' => $order->products[$i]['vendors_id'], 'products_fxf_efollett' => $order->products[$i]['products_fxf_efollett'], 'uniq_order' => $insert_id, 'date_funds_captured' => 'now()' ); //MVS end //print_r($sql_data_array); //die(); tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array); $order_products_id = tep_db_insert_id(); //------insert customer chosen 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'])) { $cmd = "SELECT p.products_id, p.lists_id, l.listid, l.needKey from products_to_lists as p, user_groups_names as l where p.products_id=".(int)$order->products[$i]['id']." and p.lists_id=l.listid and l.needKey='Yes'"; $check_needkey_query = tep_db_query($cmd); if(tep_db_num_rows($check_needkey_query) > 0){ $userKey = $_POST['keyVal']; $result = tep_db_fetch_array($check_needkey_query); $user = $order->customer['email_address']; $exist_cmd = "SELECT * from reader_keys WHERE reader_key = '".$userKey."' and listid = ".$result['listid']; $exist = tep_db_query($exist_cmd); if(tep_db_num_rows($exist)>0){ //key exists, now we check if there is an email address attached $user_row = tep_db_fetch_array($exist); if($user_row['mail']==''){//does not exist, we need to add and continue //tep_redirect(tep_href_link(FILENAME_CHECKOUT_CONFIRMATION, 'payment=payflow&success=0', 'SSL'));//we can continue //here is where we will add the email address to table for the corresponding key $update_cmd = "UPDATE reader_keys SET mail = '".$user."' WHERE reader_key ='".$userKey."' and listid=".$result['listid']; tep_db_query($update_cmd); } else{ //exists, need to go back tep_redirect(tep_href_link(FILENAME_CHECKOUT_CONFIRMATION, 'payment=payflow&success=1', 'SSL'));//key is already entered } } else{//key does not exist tep_redirect(tep_href_link(FILENAME_CHECKOUT_CONFIRMATION, 'payment=payflow&success=2', 'SSL'));//key does not exist } } if ($attributes_values['products_attributes_filename'] == 'EFOLLETT') { // Get the efollet files for this Product $tmpquery = tep_db_query('SELECT kts_id, is_downloadable, expiration_months FROM products_efollett WHERE products_id = ' . (int)$order->products[$i]['id']); // Loop through files, insert into Customer Downloadables while ($tmprow = tep_db_fetch_array($tmpquery)) { tep_db_query("INSERT INTO customers_download_efollett (customers_id, kts_id, products_id, downloads_remaining, orders_id, expiration_months, created_date, is_downloadable) VALUES ($customer_id, " . $tmprow['kts_id'] . ',' . (int)$order->products[$i]['id'] . ", '2','$insert_id', '" . $tmprow['expiration_months'] . "', NOW(), ".$tmprow['is_downloadable'].")"); } } else { $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 chosen 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; //MVS begin if (SELECT_VENDOR_EMAIL_OPTION == 'false') { $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"; } } if (SELECT_VENDOR_EMAIL_OPTION == 'true') { $order_id = $insert_id; require(DIR_WS_INCLUDES . 'vendor_order_data.php'); } function vendors_email($vendors_id, $oID, $status, $vendor_order_sent) { $vendor_order_sent = false; $debug='no'; $vendor_order_sent = 'no'; $index2 = 0; //let's get the Vendors $vendor_data_query = tep_db_query("select v.vendors_id, v.vendors_name, v.vendors_email, v.vendors_contact, v.vendor_add_info, v.vendor_street, v.vendor_city, v.vendor_state, v.vendors_zipcode, v.vendor_country, v.account_number, v.vendors_status_send, os.shipping_module, os.shipping_method, os.shipping_cost, os.shipping_tax, os.vendor_order_sent from " . TABLE_VENDORS . " v, " . TABLE_ORDERS_SHIPPING . " os where v.vendors_id=os.vendors_id and v.vendors_id='" . $vendors_id . "' and os.orders_id='" . (int)$oID . "' and v.vendors_status_send='" . $status . "'"); while ($vendor_order = tep_db_fetch_array($vendor_data_query)) { $vendor_products[$index2] = array('Vid' => $vendor_order['vendors_id'], 'Vname' => $vendor_order['vendors_name'], 'Vemail' => $vendor_order['vendors_email'], 'Vcontact' => $vendor_order['vendors_contact'], 'Vaccount' => $vendor_order['account_number'], 'Vstreet' => $vendor_order['vendor_street'], 'Vcity' => $vendor_order['vendor_city'], 'Vstate' => $vendor_order['vendor_state'], 'Vzipcode' => $vendor_order['vendors_zipcode'], 'Vcountry' => $vendor_order['vendor_country'], 'Vaccount' => $vendor_order['account_number'], 'Vinstructions' => $vendor_order['vendor_add_info'], 'Vmodule' => $vendor_order['shipping_module'], 'Vmethod' => $vendor_order['shipping_method']); if ($debug == 'yes') { echo 'The vendor query: ' . $vendor_order['vendors_id'] . '<br>'; } $index = 0; $vendor_orders_products_query = tep_db_query("select o.orders_id, o.orders_products_id, o.products_model, o.products_id, o.products_quantity, o.products_name, p.vendors_id, p.vendors_prod_comments, p.vendors_prod_id, p.vendors_product_price from " . TABLE_ORDERS_PRODUCTS . " o, " . TABLE_PRODUCTS . " p where p.vendors_id='" . (int)$vendor_order['vendors_id'] . "' and o.products_id=p.products_id and o.orders_id='" . $oID . "' order by o.products_name"); while ($vendor_orders_products = tep_db_fetch_array($vendor_orders_products_query)) { $vendor_products[$index2]['vendor_orders_products'][$index] = array( 'Pqty' => $vendor_orders_products['products_quantity'], 'Pname' => $vendor_orders_products['products_name'], 'Pmodel' => $vendor_orders_products['products_model'], 'Pprice' => $vendor_orders_products['products_price'], 'Pvendor_name' => $vendor_orders_products['vendors_name'], 'Pcomments' => $vendor_orders_products['vendors_prod_comments'], 'PVprod_id' => $vendor_orders_products['vendors_prod_id'], 'PVprod_price' => $vendor_orders_products['vendors_product_price'], 'spacer' => '-'); //MVS end if ($debug == 'yes') { echo 'The products query: ' . $vendor_orders_products['products_name'] . '<br>'; } $subindex = 0; $vendor_attributes_query = tep_db_query("select products_options, products_options_values, options_values_price, price_prefix from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$oID . "' and orders_products_id = '" . (int)$vendor_orders_products['orders_products_id'] . "'"); if (tep_db_num_rows($vendor_attributes_query)) { while ($vendor_attributes = tep_db_fetch_array($vendor_attributes_query)) { $vendor_products[$index2]['vendor_orders_products'][$index]['vendor_attributes'][$subindex] = array('option' => $vendor_attributes['products_options'], 'value' => $vendor_attributes['products_options_values'], 'prefix' => $vendor_attributes['price_prefix'], 'price' => $vendor_attributes['options_values_price']); $subindex++; } } $index++; } $index2++; // let's build the email // Get the delivery address $delivery_address_query = tep_db_query("select distinct delivery_company, delivery_name, delivery_street_address, delivery_city, delivery_state, delivery_postcode from " . TABLE_ORDERS . " where orders_id='" . $oID ."'") ; $vendor_delivery_address_list = tep_db_fetch_array($delivery_address_query); if ($debug == 'yes') { echo 'The number of vendors: ' . sizeof($vendor_products) . '<br>'; } $email=''; for ($l=0, $m=sizeof($vendor_products); $l<$m; $l++) { $vendor_country = tep_get_country_name($vendor_products[$l]['Vcountry']); $order_number= $oID; $vendors_id=$vendor_products[$l]['Vid']; //die('Region: '.$school_region.' ID: '.$vendors_id); $the_email=$vendor_products[$l]['Vemail']; $the_name=$vendor_products[$l]['Vname']; $the_contact=$vendor_products[$l]['Vcontact']; $email= '<b>To: ' . $the_contact . ' <br>' . $the_name . '<br>' . $the_email . '<br>' . $vendor_products[$l]['Vstreet'] .'<br>' . $vendor_products[$l]['Vcity'] .', ' . $vendor_products[$l]['Vstate'] .' ' . $vendor_products[$l]['Vzipcode'] . ' ' . $vendor_country . '<br>' . '<br>' . EMAIL_SEPARATOR . '<br>' . 'Special Comments or Instructions: ' . $vendor_products[$l]['Vinstructions'] .'<br>' . '<br>' . EMAIL_SEPARATOR . '<br>' . 'From: ' . STORE_OWNER . '<br>' . STORE_NAME_ADDRESS . '<br>' . 'Accnt #: ' . $vendor_products[$l]['Vaccount'] . '<br>' . EMAIL_SEPARATOR . '<br>' . EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . '<br>' . EMAIL_SEPARATOR . '<br>' . '<br> Shipping Method: ' . $vendor_products[$l]['Vmodule'] . ' -- ' . $vendor_products[$l]['Vmethod'] . '<br>' . EMAIL_SEPARATOR . '<br>' . '<br>Dropship deliver to:<br>' . $vendor_delivery_address_list['delivery_company'] .'<br>' . $vendor_delivery_address_list['delivery_name'] .'<br>' . $vendor_delivery_address_list['delivery_street_address'] .'<br>' . $vendor_delivery_address_list['delivery_city'] .', ' . $vendor_delivery_address_list['delivery_state'] . ' ' . $vendor_delivery_address_list['delivery_postcode'] . '<br><br>' ; $email = $email . '<table width="75%" border=1 cellspacing="0" cellpadding="3"> <tr><td>Qty:</td><td>Product Name:</td><td>Item Code/Number:</td><td>Product Model:</td><td>Per Unit Price:</td><td>Item Comments: </td></tr>'; for ($i=0, $n=sizeof($vendor_products[$l]['vendor_orders_products']); $i<$n; $i++) { $product_attribs =''; if (isset($vendor_products[$l]['vendor_orders_products'][$i]['vendor_attributes']) && (sizeof($vendor_products[$l]['vendor_orders_products'][$i]['vendor_attributes']) > 0)) { for ($j = 0, $k = sizeof($vendor_products[$l]['vendor_orders_products'][$i]['vendor_attributes']); $j < $k; $j++) { $product_attribs .= ' ' . $vendor_products[$l]['vendor_orders_products'][$i]['vendor_attributes'][$j]['option'] . ': ' . $vendor_products[$l]['vendor_orders_products'][$i]['vendor_attributes'][$j]['value'] . '<br>'; } } $email = $email . '<tr><td> ' . $vendor_products[$l]['vendor_orders_products'][$i]['Pqty'] . '</td><td> ' . $vendor_products[$l]['vendor_orders_products'][$i]['Pname'] . '<br> <i>Option<br> ' . $product_attribs . '</td><td> ' . $vendor_products[$l]['vendor_orders_products'][$i]['PVprod_id'] . '</td><td> ' . $vendor_products[$l]['vendor_orders_products'][$i]['Pmodel'] . '</td><td> ' . $vendor_products[$l]['vendor_orders_products'][$i]['PVprod_price'] . '</td><td>' . $vendor_products[$l]['vendor_orders_products'][$i]['Pcomments'] . '</b></td></tr>'; } } $email = $email . '</table><br><HR><br>'; tep_mail($the_name, $the_email, EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID , $email . '<br>', STORE_NAME, STORE_OWNER_EMAIL_ADDRESS) ; $vendor_order_sent = 'yes'; tep_db_query("update " . TABLE_ORDERS_SHIPPING . " set vendor_order_sent = '" . tep_db_input($vendor_order_sent) . "' where orders_id = '" . (int)$oID . "' and vendors_id = '" . (int)$vendors_id . "'"); if ($debug == 'yes') { echo 'The $email(including headers:<br>Vendor Email Addy' . $the_email . '<br>Vendor Name' . $the_name . '<br>Vendor Contact' . $the_contact . '<br>Body--<br>' . $email . '<br>'; } } return true; } //MVS end // lets start with the email confirmation $email_order = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" . // EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n"; if ($order->info['comments']) { $email_order .= tep_db_output($order->info['comments']) . "\n\n"; } $email_order .= EMAIL_TEXT_PRODUCTS . "\n" . EMAIL_SEPARATOR . "\n" . $products_ordered . EMAIL_SEPARATOR . "\n"; for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) { $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n"; } if ($order->content_type != 'virtual') { $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" . EMAIL_SEPARATOR . "\n" . tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n"; } $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" . EMAIL_SEPARATOR . "\n" . tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n"; if (is_object($$payment)) { $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" . EMAIL_SEPARATOR . "\n"; $payment_class = $$payment; $email_order .= $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, $reply_address); // send emails to other people //if (SEND_EXTRA_ORDER_EMAILS_TO != '') {tep_mail('', '[email protected]', EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, $reply_address);} if (SEND_EXTRA_ORDER_EMAILS_TO != '') { $email_of_admins = SEND_EXTRA_ORDER_EMAILS_TO . "," . $reply_address; tep_mail('', $reply_address, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, $reply_address); //tep_mail('', '[email protected]', EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, $reply_address); } //MVS start if (SELECT_VENDOR_EMAIL_WHEN == 'Catalog' || SELECT_VENDOR_EMAIL_WHEN == 'Both') { $status=$order->info['order_status']; if (isset($status)) { $order_sent_query = tep_db_query("select vendor_order_sent, vendors_id from " . TABLE_ORDERS_SHIPPING . " where orders_id = '" . $insert_id . "'"); while ($order_sent_data = tep_db_fetch_array($order_sent_query)) { $order_sent_ckeck = $order_sent_data['vendor_order_sent']; $vendors_id = $order_sent_data['vendors_id']; if ($order_sent_ckeck == 'no') { $status=''; $oID=$insert_id; $vendor_order_sent = false; $status=$order->info['order_status']; vendors_email($vendors_id, $oID, $status, $vendor_order_sent); }// if order check }// while }// if isset // echo 'Email sent? ' . $vendor_order_sent . '<br>'; }// if enabled //MVS end this file is complete // load the after_process function from the payment modules $payment_modules->after_process(); $cart->reset(true); // unregister session variables used during checkout tep_session_unregister('sendto'); tep_session_unregister('billto'); tep_session_unregister('shipping'); tep_session_unregister('payment'); tep_session_unregister('comments'); tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL')); require(DIR_WS_INCLUDES . 'application_bottom.php'); ?> It's probably due to the before_process() method being called before the order_totals modules. In your checkout_process.php file, see if this line: $order_totals = $order_total_modules->process(); appears before or after this line: $payment_modules->before_process(); You want it to appear before. Quote Link to comment Share on other sites More sharing options...
Paul Loeb Posted February 18, 2010 Share Posted February 18, 2010 I still haven't found a solution. Any other thoughts? Thanks Paul Quote 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.