Jump to content
Sign in to follow this  
jferezy

PayPal PayFlow Pro - Tax on Shipping is not transferring to PayPal

Recommended Posts

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.


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.

Share this post


Link to post
Share on other sites

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('', 'cesarrod@usc.edu', 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('', 'cesarrod@usc.edu', 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×