Attached Files |
usps_to_sqe_incommerce.patch [^] (21,728 bytes) 2010-09-22 13:53
[Show Content]
Index: admin_templates/orders/orders_edit_shipping.tpl
===================================================================
--- admin_templates/orders/orders_edit_shipping.tpl (revision 13946)
+++ admin_templates/orders/orders_edit_shipping.tpl (working copy)
@@ -69,12 +69,9 @@
<inp2:ord_SaveWarning name="grid_save_warning"/>
-<inp2:m_if check="m_Recall" name="usps_errors">
- <inp2:m_RenderElement design="form_message" pass_params="1">
- <inp2:m_Recall name="usps_errors" />
- <inp2:m_RemoveVar name="usps_errors"/>
- </inp2:m_RenderElement>
-</inp2:m_if>
+<inp2:m_RenderElement design="form_message" id="sqe_error" style="display: none;" pass_params="1">
+
+</inp2:m_RenderElement>
<inp2:ord_ErrorWarning name="form_error_warning"/>
@@ -241,4 +238,13 @@
<input type="hidden" name="to_tab" value="Shipping">
<input type="hidden" name="check_shipping_address" value="true" />
+<inp2:m_if check="m_Recall" name="sqe_error">
+ <script type="text/javascript">
+ var $error_table = $('#sqe_error');
+ $('td:first', $error_table).html('<inp2:m_Recall name="sqe_error" js_escape="1"/>');
+ $error_table.show();
+ <inp2:m_RemoveVar name="sqe_error"/>
+ </script>
+</inp2:m_if>
+
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: admin_templates/orders/orders_toship_list.tpl
===================================================================
--- admin_templates/orders/orders_toship_list.tpl (revision 13936)
+++ admin_templates/orders/orders_toship_list.tpl (working copy)
@@ -62,13 +62,15 @@
</tbody>
</table>
-<inp2:m_DefineElement name="usps_errors">
- Order: <inp2:m_Param name="order_number"/>. USPS error: <inp2:m_Param name="error_description"/><br/>
+<inp2:m_DefineElement name="sqe_error_element">
+ Order: <inp2:m_Param name="order_number"/>. Error: <inp2:m_Param name="error_description"/><br/>
</inp2:m_DefineElement>
-<inp2:m_RenderElement design="form_message" pass_params="1">
- <inp2:ord_PrintUSPSErrors render_as="usps_errors" />
-</inp2:m_RenderElement>
+<inp2:m_if check="m_Recall" name="sqe_errors">
+ <inp2:m_RenderElement design="form_message" pass_params="1">
+ <inp2:ord_PrintSQEErrors render_as="sqe_error_element" />
+ </inp2:m_RenderElement>
+</inp2:m_if>
<inp2:m_RenderElement name="grid" PrefixSpecial="ord.toship" IdField="OrderId" grid="Default"/>
<script type="text/javascript">
Index: units/orders/orders_event_handler.php
===================================================================
--- units/orders/orders_event_handler.php (revision 13936)
+++ units/orders/orders_event_handler.php (working copy)
@@ -1796,12 +1796,23 @@
case 'OnMassOrderShip':
case 'OnOrderShip':
- $ret = Array();
+ $ret = Array ();
+ $shipping_info = $object->GetDBField('ShippingInfo');
+ if ($shipping_info) {
+ $quote_engine_collector =& $this->Application->recallObject('ShippingQuoteCollector');
+ /* @var $quote_engine_collector ShippingQuoteCollector */
+
+ $shipping_info = unserialize($shipping_info);
+ $shipping_quote_engine = $quote_engine_collector->GetClassByType($shipping_info, 1);
+ }
+
// try to create usps order
- if ( $object->GetDBField('ShippingType') == 0 && strpos($object->GetDBField('ShippingInfo'), 'USPS')) {
- $ses_usps_erros = Array();
- $ret = $this->MakeUSPSOrder($object);
+ if (($object->GetDBField('ShippingType') == 0) && ($shipping_quote_engine !== false)) {
+ $shipping_quote_engine =& $this->Application->recallObject($shipping_quote_engine);
+ /* @var $shipping_quote_engine ShippingQuoteEngine */
+
+ $ret = $shipping_quote_engine->MakeOrder($object);
}
if ( !array_key_exists('error_number', $ret) ) {
@@ -1824,15 +1835,12 @@
$gateway_object->OrderShipped($object->FieldValues, $gw_data['gw_params']);
}
else {
- $usps_errors[$object->GetField('OrderNumber')] = $ret['error_description'];
- $ses_usps_erros = Array();
- $ses_usps_erros = unserialize($this->Application->RecallVar('usps_errors'));
- if ( is_array($ses_usps_erros) ) {
- $usps_errors = array_merge($usps_errors, $ses_usps_erros);
- }
- $this->Application->StoreVar('usps_errors', serialize($usps_errors));
- }
+ $sqe_errors = $this->Application->RecallVar('sqe_errors');
+ $sqe_errors = $sqe_errors ? unserialize($sqe_errors) : Array ();
+ $sqe_errors[ $object->GetField('OrderNumber') ] = $ret['error_description'];
+ $this->Application->StoreVar('sqe_errors', serialize($sqe_errors));
+ }
break;
case 'OnMassOrderProcess':
@@ -3484,50 +3492,71 @@
}
}
+ /**
+ * Updates shipping types
+ *
+ * @param kEvent $event
+ * @return bool
+ */
function UpdateShippingTypes(&$event)
{
- $object =& $this->Application->recallObject($event->getPrefixSpecial());
- $ord_id = $object->GetId();
+ $object =& $event->getObject();
+ /* @var $object OrdersItem */
+ $ord_id = $object->GetID();
+
$order_info = $this->Application->GetVar('ord');
$shipping_ids = getArrayValue($order_info, $ord_id, 'ShippingTypeId');
- if (!$shipping_ids)
- {
+ if (!$shipping_ids) {
return;
}
- $last_shippings = unserialize($this->Application->RecallVar('LastShippings'));
+ $ret = true;
$shipping_types = Array();
+ $last_shippings = unserialize( $this->Application->RecallVar('LastShippings') );
- $ret = true;
- foreach($shipping_ids as $package => $id)
- {
+ $template = $this->Application->GetVar('t');
+ $shipping_templates = Array ('in-commerce/checkout/shipping', 'in-commerce/orders/orders_edit_shipping');
+
+ $quote_engine_collector =& $this->Application->recallObject('ShippingQuoteCollector');
+ /* @var $quote_engine_collector ShippingQuoteCollector */
+
+ foreach ($shipping_ids as $package => $id) {
// try to validate
- if ( $object->GetDBField('ShippingType') == 0 && (strpos($id, 'USPS') !== false) && in_array($this->Application->GetVar('t'), Array('in-commerce/checkout/shipping','in-commerce/orders/orders_edit_shipping'))) {
+ $shipping_types[$package] = $last_shippings[$package][$id];
+ $shipping_quote_engine = $quote_engine_collector->GetClassByType($shipping_types, $package);
+
+ if (($object->GetDBField('ShippingType') == 0) && ($shipping_quote_engine !== false) && in_array($template, $shipping_templates)) {
+ $shipping_quote_engine =& $this->Application->recallObject($shipping_quote_engine);
+ /* @var $shipping_quote_engine ShippingQuoteEngine */
+
+ // set first of found shippings just to check if any errors are returned
$current_usps_shipping_types = unserialize($this->Application->RecallVar('current_usps_shipping_types'));
- $object->SetDBField('ShippingInfo', serialize(Array($package => $current_usps_shipping_types[$id])));
- $usps_data = $this->MakeUSPSOrder($object, true);
- if ( !isset($usps_data['error_number']) ) {
+ $object->SetDBField('ShippingInfo', serialize( Array($package => $current_usps_shipping_types[$id])) );
+
+ $sqe_data = $shipping_quote_engine->MakeOrder($object, true);
+
+ if ( !isset($sqe_data['error_number']) ) {
// update only international shipping
if ( $object->GetDBField('ShippingCountry') != 'USA') {
- $last_shippings[$package][$id]['TotalCost'] = $usps_data['Postage'];
+ $shipping_types[$package]['TotalCost'] = $sqe_data['Postage'];
}
}
else {
- $this->Application->SetVar('usps_errors', $usps_data['error_description']);
$ret = false;
+ $this->Application->StoreVar('sqe_error', $sqe_data['error_description']);
}
+
$object->SetDBField('ShippingInfo', '');
}
- $shipping_types[$package] = $last_shippings[$package][$id];
}
+
$object->SetDBField('ShippingInfo', serialize($shipping_types));
return $ret;
}
-
/*function shipOrder(&$order_items)
{
$product_object =& $this->Application->recallObject('p', null, Array('skip_autoload' => true));
@@ -4054,137 +4083,6 @@
}
/**
- * Creates new USPS order
- *
- * @param OrdersItem $object
- * @param bool $fake_mode
- * @return Array
- */
- function MakeUSPSOrder(&$object, $fake_mode = false)
- {
- $this->Application->recallObject('ShippingQuoteEngine');
-
- $aUSPS = $this->Application->recallObject('USPS', 'USPS');
- /* @var $aUSPS USPS */
-
- $ShippingInfo = unserialize($object->GetDBField('ShippingInfo'));
- $ShippingCode = $USPSMethod = '';
- $ShippingCountry = $aUSPS->GetUSPSCountry($object->GetDBField('ShippingCountry'));
-
- $UserName = explode(" ", $object->GetDBField('ShippingTo'));
-
- $item_table = TABLE_PREFIX.'OrderItems';
- if ($this->Application->isAdminUser) {
- // this strange contraption actually uses temp table from object (when in temp mode)
- $order_table = $object->TableName;
- $item_table = str_replace('Orders', 'OrderItems', $order_table);
- }
-
- $sOrder = Array (
- 'FirstName' => $UserName[0],
- 'LastName' => $UserName[1],
- 'ShippingCompany' => $object->GetDBField('ShippingCompany'),
- 'ShippingAddress1' => $object->GetDBField('ShippingAddress1'),
- 'ShippingAddress2' => $object->GetDBField('ShippingAddress2'),
- 'ShippingCity' => $object->GetDBField('ShippingCity'),
- 'ShippingZip' => $object->GetDBField('ShippingZip'),
- 'ShippingCountry' => $ShippingCountry,
- 'ShippingPhone' => $aUSPS->PhoneClean($object->GetDBField('ShippingPhone')),
- 'ShippingFax' => $aUSPS->PhoneClean($object->GetDBField('ShippingFax')),
- 'ShippingNumBoxes' => '1',
- );
-
- $sql = 'SELECT SUM(`Quantity` * `Weight`)
- FROM ' . $item_table . '
- WHERE ' . $object->IDField . ' = ' . $object->GetID();
- $weight = $this->Application->Conn->GetOne($sql);
-
- $f_weight = Kg2Pounds($weight);
- $sOrder['ShippingWeight'] = $f_weight[0].'.'.$f_weight[1];
-
- foreach ($ShippingInfo as $k => $ShippingRow) {
- $ShippingCode = $ShippingRow['Code'];
- }
-
- if ( $object->GetDBField('ShippingCountry') == 'USA' ) {
- $sOrder['ShippingState'] = $object->GetDBField('ShippingState');
- $USPSMethod = $ShippingCode;
- unset($sOrder['ShippingZip']);
-
- $sOrder['ShippingZip5'] = substr(trim($object->GetDBField('ShippingZip')), 0, 5);
- $sOrder['ShippingZip4'] = '';
- $sOrder['SubTotal'] = $object->GetDBField('SubTotal');
- }
- else {
- $USPSMethod = array_search($ShippingCode, $aUSPS->intl_types);
- $sOrder['ShippingProvince'] = '';
-
- if ( $ShippingCountry == 'CA' ) {
- $sOrder['ShippingProvince'] = $object->GetField('ShippingState');
- }
-
- // add items
- $sql = 'SELECT `Quantity`, `Weight`, `Price`
- FROM ' . $item_table . '
- WHERE ' . $object->IDField . ' = ' . $object->GetID();
- $order_items = $this->Application->Conn->Query($sql);
-
- $i = 1;
- $Items = Array();
-
- foreach ($order_items as $k => $order_item) {
- $p_weight = Array();
- $p_weight = Kg2Pounds($order_item['Weight']);
- $Items[$i] = Array('Qty' => $order_item['Quantity'], 'Price' => $order_item['Price'], 'NetPounds' => $p_weight[0], 'NetOunces' => $p_weight[1]);
- $i++;
- }
-
- $sOrder['Items'] = $Items;
- $sOrder['InvoiceNumber'] = $object->GetDBField('OrderNumber');
- }
-
- $sOrder['ShippingService'] = $USPSMethod;
-
- // make USPS order
- $aUSPS->order = $sOrder;
- $usps_data = $aUSPS->PostOrder();
-
- // if errors
- if ( array_key_exists('error_number', $usps_data) ) {
- return $usps_data;
- }
-
- if ( array_key_exists('Postage', $usps_data) ) {
- $ShippingPrice = '';
- $ShippingPrice = $usps_data['Postage'];
- }
-
- $ShippingTracking = '';
-
- if ( isset($usps_data['TrackingNumber']) && $usps_data['TrackingNumber'] != '' ) {
- $ShippingTracking = $usps_data['TrackingNumber'];
- }
-
- if ( isset($usps_data['PostnetBarCode']) && $usps_data['PostnetBarCode'] != '' && $ShippingTracking == '' ) {
- $ShippingTracking = $usps_data['PostnetBarCode'];
- }
-
- if ($fake_mode == false) {
- $object->SetDBField('ShippingTracking', $ShippingTracking);
- $object->Update();
- }
- else {
- $full_path = USPS_LABEL_FOLDER . $ShippingTracking . ".pdf";
-
- if (file_exists($full_path)) {
- unlink($full_path);
- }
- }
-
- return $usps_data;
- }
-
- /**
* Downloads shipping tracking bar code, that was already generated by USPS service
*
* @param kEvent $event
Index: units/orders/orders_tag_processor.php
===================================================================
--- units/orders/orders_tag_processor.php (revision 13936)
+++ units/orders/orders_tag_processor.php (working copy)
@@ -1465,27 +1465,33 @@
}
/**
- * Prints USPS errors from session
+ * Prints SQE errors from session
*
* @param Array $params
* @return string
*/
- function PrintUSPSErrors($params)
+ function PrintSQEErrors($params)
{
+ $sqe_errors = $this->Application->RecallVar('sqe_errors');
+
+ if (!$sqe_errors) {
+ return '';
+ }
+
$o = '';
- $ses_usps_erros = Array();
- $ses_usps_erros = unserialize($this->Application->RecallVar('usps_errors'));
- if ( count($ses_usps_erros) > 0 && is_array($ses_usps_erros)) {
- foreach ( $ses_usps_erros as $order_number => $error_description ) {
- $block_params = Array();
- $block_params['name'] = $params['render_as'];
- $block_params['order_number'] = $order_number;
- $block_params['error_description'] = $error_description;
- $o.=$this->Application->ParseBlock($block_params, 1);
- }
- $this->Application->RemoveVar('usps_errors');
+ $block_params = $this->prepareTagParams($params);
+ $block_params['name'] = $params['render_as'];
+ $sqe_errors = unserialize($sqe_errors);
+
+ foreach ($sqe_errors as $order_number => $error_description) {
+ $block_params['order_number'] = $order_number;
+ $block_params['error_description'] = $error_description;
+
+ $o .= $this->Application->ParseBlock($block_params);
}
+ $this->Application->RemoveVar('sqe_errors');
+
return $o;
}
Index: units/shipping_quote_engines/shipping_quote_collector.php
===================================================================
--- units/shipping_quote_engines/shipping_quote_collector.php (revision 13936)
+++ units/shipping_quote_engines/shipping_quote_collector.php (working copy)
@@ -38,6 +38,7 @@
return unserialize($shipping_types);
}
+ $quotes_valid = true;
$shipping_types = Array();
$classes = $this->getEngineClasses();
@@ -46,7 +47,13 @@
/* @var $object ShippingQuoteEngine */
$new_shipping_types = $object->GetShippingQuotes($params);
- $shipping_types = array_merge($shipping_types, $new_shipping_types);
+
+ if (is_array($new_shipping_types)) {
+ $shipping_types = array_merge($shipping_types, $new_shipping_types);
+ }
+ else {
+ $quotes_valid = false;
+ }
}
uasort($shipping_types, Array(&$this, 'price_sort'));
@@ -95,7 +102,9 @@
$shipping_types = $available_types;
- $this->Application->setDBCache($cached_var_name, serialize($shipping_types), 24 * 3600);
+ if ($quotes_valid) {
+ $this->Application->setDBCache($cached_var_name, serialize($shipping_types), 24 * 3600);
+ }
return $shipping_types;
}
@@ -136,6 +145,38 @@
return $classes;
}
+ /**
+ * Returns shipping quote engine, that matches shipping type used in order
+ *
+ * @param Array $shipping_info
+ * @param int $package_num
+ * @return ShippingQuoteEngine
+ */
+ function &GetClassByType($shipping_info, $package_num = 1)
+ {
+ if ( !$shipping_info || !array_key_exists($package_num, $shipping_info) ) {
+ return false;
+ }
+
+ $classes = $this->getEngineClasses();
+ $shipping_id = $shipping_info[$package_num]['ShippingId'];
+
+ foreach ($classes as $class) {
+ $object =& $this->Application->recallObject($class);
+ /* @var $object ShippingQuoteEngine */
+
+ $shipping_types = $object->GetAvailableTypes();
+
+ foreach ($shipping_types as $index => $shipping_type) {
+ if ( preg_match('/^' . preg_quote($shipping_type['_Id'], '/') . '/', $shipping_id) ) {
+ return $class;
+ }
+ }
+ }
+
+ return false;
+ }
+
function SortShippingTypes($elem1, $elem2)
{
if ($elem1['_Name'] == $elem2['_Name']) {
Index: units/shipping_quote_engines/shipping_quote_engine.php
===================================================================
--- units/shipping_quote_engines/shipping_quote_engine.php (revision 13936)
+++ units/shipping_quote_engines/shipping_quote_engine.php (working copy)
@@ -173,6 +173,18 @@
}
/**
+ * Sends order to shipping quote engine
+ *
+ * @param OrdersItem $object
+ * @param bool $dry_run
+ * @return Array
+ */
+ function MakeOrder(&$object, $dry_run = false)
+ {
+ return Array ();
+ }
+
+ /**
* Loads properties of shipping quote engine
*
*/
Index: units/shipping_quote_engines/usps.php
===================================================================
--- units/shipping_quote_engines/usps.php (revision 13936)
+++ units/shipping_quote_engines/usps.php (working copy)
@@ -1032,7 +1032,7 @@
$rates = $this->GetQuote();
if ( !isset($rates['error']) ) {
- $this->Application->RemoveVar('usps_errors');
+ $this->Application->RemoveVar('sqe_error');
$i = 1;
foreach ($rates as $k => $rate ) {
@@ -1054,7 +1054,7 @@
}
else {
// for Front-End (shipping screen) and Admin (Shipping Tab on editing order)
- $this->Application->StoreVar('usps_errors', $rates['error']);
+ $this->Application->StoreVar('sqe_error', $rates['error']);
}
$this->Application->StoreVar('current_usps_shipping_types', serialize($shipping_types));
@@ -1196,4 +1196,130 @@
{
return Array ('AccountLogin');
}
+
+ /**
+ * Creates new USPS order
+ *
+ * @param OrdersItem $object
+ * @param bool $dry_run
+ * @return Array
+ */
+ function MakeOrder(&$object, $dry_run = false)
+ {
+ $ShippingInfo = unserialize($object->GetDBField('ShippingInfo'));
+ $ShippingCode = $USPSMethod = '';
+ $ShippingCountry = $this->GetUSPSCountry($object->GetDBField('ShippingCountry'));
+
+ $UserName = explode(" ", $object->GetDBField('ShippingTo'));
+
+ $item_table = TABLE_PREFIX.'OrderItems';
+ if ($this->Application->isAdminUser) {
+ // this strange contraption actually uses temp table from object (when in temp mode)
+ $order_table = $object->TableName;
+ $item_table = str_replace('Orders', 'OrderItems', $order_table);
+ }
+
+ $sOrder = Array (
+ 'FirstName' => $UserName[0],
+ 'LastName' => $UserName[1],
+ 'ShippingCompany' => $object->GetDBField('ShippingCompany'),
+ 'ShippingAddress1' => $object->GetDBField('ShippingAddress1'),
+ 'ShippingAddress2' => $object->GetDBField('ShippingAddress2'),
+ 'ShippingCity' => $object->GetDBField('ShippingCity'),
+ 'ShippingZip' => $object->GetDBField('ShippingZip'),
+ 'ShippingCountry' => $ShippingCountry,
+ 'ShippingPhone' => $this->PhoneClean($object->GetDBField('ShippingPhone')),
+ 'ShippingFax' => $this->PhoneClean($object->GetDBField('ShippingFax')),
+ 'ShippingNumBoxes' => '1',
+ );
+
+ $sql = 'SELECT SUM(`Quantity` * `Weight`)
+ FROM ' . $item_table . '
+ WHERE ' . $object->IDField . ' = ' . $object->GetID();
+ $weight = $this->Application->Conn->GetOne($sql);
+
+ $f_weight = Kg2Pounds($weight);
+ $sOrder['ShippingWeight'] = $f_weight[0].'.'.$f_weight[1];
+
+ foreach ($ShippingInfo as $k => $ShippingRow) {
+ $ShippingCode = $ShippingRow['Code'];
+ }
+
+ if ( $object->GetDBField('ShippingCountry') == 'USA' ) {
+ $sOrder['ShippingState'] = $object->GetDBField('ShippingState');
+ $USPSMethod = $ShippingCode;
+ unset($sOrder['ShippingZip']);
+
+ $sOrder['ShippingZip5'] = substr(trim($object->GetDBField('ShippingZip')), 0, 5);
+ $sOrder['ShippingZip4'] = '';
+ $sOrder['SubTotal'] = $object->GetDBField('SubTotal');
+ }
+ else {
+ $USPSMethod = array_search($ShippingCode, $this->intl_types);
+ $sOrder['ShippingProvince'] = '';
+
+ if ( $ShippingCountry == 'CA' ) {
+ $sOrder['ShippingProvince'] = $object->GetField('ShippingState');
+ }
+
+ // add items
+ $sql = 'SELECT `Quantity`, `Weight`, `Price`
+ FROM ' . $item_table . '
+ WHERE ' . $object->IDField . ' = ' . $object->GetID();
+ $order_items = $this->Application->Conn->Query($sql);
+
+ $i = 1;
+ $Items = Array();
+
+ foreach ($order_items as $k => $order_item) {
+ $p_weight = Array();
+ $p_weight = Kg2Pounds($order_item['Weight']);
+ $Items[$i] = Array('Qty' => $order_item['Quantity'], 'Price' => $order_item['Price'], 'NetPounds' => $p_weight[0], 'NetOunces' => $p_weight[1]);
+ $i++;
+ }
+
+ $sOrder['Items'] = $Items;
+ $sOrder['InvoiceNumber'] = $object->GetDBField('OrderNumber');
+ }
+
+ $sOrder['ShippingService'] = $USPSMethod;
+
+ // make USPS order
+ $this->order = $sOrder;
+ $usps_data = $this->PostOrder();
+
+ // if errors
+ if ( array_key_exists('error_number', $usps_data) ) {
+ return $usps_data;
+ }
+
+ if ( array_key_exists('Postage', $usps_data) ) {
+ $ShippingPrice = '';
+ $ShippingPrice = $usps_data['Postage'];
+ }
+
+ $ShippingTracking = '';
+
+ if ( isset($usps_data['TrackingNumber']) && $usps_data['TrackingNumber'] != '' ) {
+ $ShippingTracking = $usps_data['TrackingNumber'];
+ }
+
+ if ( isset($usps_data['PostnetBarCode']) && $usps_data['PostnetBarCode'] != '' && $ShippingTracking == '' ) {
+ $ShippingTracking = $usps_data['PostnetBarCode'];
+ }
+
+ if ($dry_run == false) {
+ $object->SetDBField('ShippingTracking', $ShippingTracking);
+ $object->Update();
+ }
+ else {
+ $full_path = USPS_LABEL_FOLDER . $ShippingTracking . ".pdf";
+
+ if (file_exists($full_path)) {
+ unlink($full_path);
+ }
+ }
+
+ return $usps_data;
+ }
}
\ No newline at end of file
usps-sql-debug.txt [^] (4,158 bytes) 2010-09-23 13:18
[Show Content]
Name:
SELECT Properties, FlatSurcharge, PercentSurcharge
FROM ShippingQuoteEngines
WHERE LOWER(ClassName) = 'shippingquotecollector'
LIMIT 0,1
[Runtime: 0.00027704238891602s] [File: shipping_quote_engine.php:196] [Query Number: 28] [PrefixSpecial: ]
Name:
SELECT Classname
FROM ShippingQuoteEngines
WHERE Status = 1
[Runtime: 0.00211501121521s] [File: shipping_quote_collector.php:140] [Affected Rows: 1] [Result: USPS] [Query Number: 29] [PrefixSpecial: ShippingQuoteCollector]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_Shipping_Country'
LIMIT 0,1
[Runtime: 0.00047183036804199s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 30]
Name:
SELECT ShortIsoCode
FROM CountryStates
WHERE IsoCode = 'USA' AND `Type` = 1
LIMIT 0,1
[Runtime: 0.0018649101257324s] [File: country_states_helper.php:194] [Affected Rows: 1] [Result: US] [Query Number: 31] [PrefixSpecial: CountryStatesHelper]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_Contacts_Name'
LIMIT 0,1
[Runtime: 0.00035691261291504s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 32]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_CompanyName'
LIMIT 0,1
[Runtime: 0.00062394142150879s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 33]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_StoreName'
LIMIT 0,1
[Runtime: 0.00040984153747559s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 34]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_Shipping_AddressLine1'
LIMIT 0,1
[Runtime: 0.00025606155395508s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 35]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_Shipping_AddressLine2'
LIMIT 0,1
[Runtime: 0.00061988830566406s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 36]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_Shipping_City'
LIMIT 0,1
[Runtime: 0.002669095993042s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 37]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_Shipping_State'
LIMIT 0,1
[Runtime: 0.0022449493408203s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 38]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_Shipping_ZIP'
LIMIT 0,1
[Runtime: 0.00034308433532715s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 39]
Name:
SELECT VariableId, VariableValue
FROM ConfigurationValues
WHERE VariableName = 'Comm_Contacts_Phone'
LIMIT 0,1
[Runtime: 0.0050981044769287s] [File: application.php:2378] [Affected Rows: 1] [Query Number: 40]
Name:
SELECT Properties
FROM ShippingQuoteEngines
WHERE ClassName="USPS"
LIMIT 0,1
[Runtime: 0.00058197975158691s] [File: usps.php:1198] [Affected Rows: 1] [Result: a:21:{s:12:"AccountLogin";s:12:"134ECIGA0481";s:15 ...] [Query Number: 41] [PrefixSpecial: ]
Name:
SELECT Properties, FlatSurcharge, PercentSurcharge
FROM ShippingQuoteEngines
WHERE LOWER(ClassName) = 'customshippingquoteengine'
LIMIT 0,1
[Runtime: 0.0032198429107666s] [File: shipping_quote_engine.php:196] [Query Number: 42] [PrefixSpecial: ]
Name:
SELECT *
FROM ShippingType
[Runtime: 0.00027203559875488s] [File: custom_shipping_quote_engine.php:171] [Query Number: 43] [PrefixSpecial: CustomShippingQuoteEngine]
Notice: Only variable references should be returned by reference in w:\modules\in-commerce\units\shipping_quote_engines\shipping_quote_collector.php on line 177
usps_to_sqe_incommerce_v2.patch [^] (22,567 bytes) 2010-09-26 05:55
[Show Content]
Index: admin_templates/orders/orders_edit_shipping.tpl
===================================================================
--- admin_templates/orders/orders_edit_shipping.tpl (revision 13946)
+++ admin_templates/orders/orders_edit_shipping.tpl (working copy)
@@ -69,12 +69,9 @@
<inp2:ord_SaveWarning name="grid_save_warning"/>
-<inp2:m_if check="m_Recall" name="usps_errors">
- <inp2:m_RenderElement design="form_message" pass_params="1">
- <inp2:m_Recall name="usps_errors" />
- <inp2:m_RemoveVar name="usps_errors"/>
- </inp2:m_RenderElement>
-</inp2:m_if>
+<inp2:m_RenderElement design="form_message" id="sqe_error" style="display: none;" pass_params="1">
+
+</inp2:m_RenderElement>
<inp2:ord_ErrorWarning name="form_error_warning"/>
@@ -241,4 +238,13 @@
<input type="hidden" name="to_tab" value="Shipping">
<input type="hidden" name="check_shipping_address" value="true" />
+<inp2:m_if check="m_Recall" name="sqe_error">
+ <script type="text/javascript">
+ var $error_table = $('#sqe_error');
+ $('td:first', $error_table).html('<inp2:m_Recall name="sqe_error" js_escape="1"/>');
+ $error_table.show();
+ <inp2:m_RemoveVar name="sqe_error"/>
+ </script>
+</inp2:m_if>
+
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Index: admin_templates/orders/orders_toship_list.tpl
===================================================================
--- admin_templates/orders/orders_toship_list.tpl (revision 13936)
+++ admin_templates/orders/orders_toship_list.tpl (working copy)
@@ -62,13 +62,15 @@
</tbody>
</table>
-<inp2:m_DefineElement name="usps_errors">
- Order: <inp2:m_Param name="order_number"/>. USPS error: <inp2:m_Param name="error_description"/><br/>
+<inp2:m_DefineElement name="sqe_error_element">
+ Order: <inp2:m_Param name="order_number"/>. Error: <inp2:m_Param name="error_description"/><br/>
</inp2:m_DefineElement>
-<inp2:m_RenderElement design="form_message" pass_params="1">
- <inp2:ord_PrintUSPSErrors render_as="usps_errors" />
-</inp2:m_RenderElement>
+<inp2:m_if check="m_Recall" name="sqe_errors">
+ <inp2:m_RenderElement design="form_message" pass_params="1">
+ <inp2:ord_PrintSQEErrors render_as="sqe_error_element" />
+ </inp2:m_RenderElement>
+</inp2:m_if>
<inp2:m_RenderElement name="grid" PrefixSpecial="ord.toship" IdField="OrderId" grid="Default"/>
<script type="text/javascript">
Index: units/orders/orders_event_handler.php
===================================================================
--- units/orders/orders_event_handler.php (revision 13936)
+++ units/orders/orders_event_handler.php (working copy)
@@ -1796,12 +1796,23 @@
case 'OnMassOrderShip':
case 'OnOrderShip':
- $ret = Array();
+ $ret = Array ();
+ $shipping_info = $object->GetDBField('ShippingInfo');
+ if ($shipping_info) {
+ $quote_engine_collector =& $this->Application->recallObject('ShippingQuoteCollector');
+ /* @var $quote_engine_collector ShippingQuoteCollector */
+
+ $shipping_info = unserialize($shipping_info);
+ $shipping_quote_engine = $quote_engine_collector->GetClassByType($shipping_info, 1);
+ }
+
// try to create usps order
- if ( $object->GetDBField('ShippingType') == 0 && strpos($object->GetDBField('ShippingInfo'), 'USPS')) {
- $ses_usps_erros = Array();
- $ret = $this->MakeUSPSOrder($object);
+ if (($object->GetDBField('ShippingType') == 0) && ($shipping_quote_engine !== false)) {
+ $shipping_quote_engine =& $this->Application->recallObject($shipping_quote_engine);
+ /* @var $shipping_quote_engine ShippingQuoteEngine */
+
+ $ret = $shipping_quote_engine->MakeOrder($object);
}
if ( !array_key_exists('error_number', $ret) ) {
@@ -1824,15 +1835,12 @@
$gateway_object->OrderShipped($object->FieldValues, $gw_data['gw_params']);
}
else {
- $usps_errors[$object->GetField('OrderNumber')] = $ret['error_description'];
- $ses_usps_erros = Array();
- $ses_usps_erros = unserialize($this->Application->RecallVar('usps_errors'));
- if ( is_array($ses_usps_erros) ) {
- $usps_errors = array_merge($usps_errors, $ses_usps_erros);
- }
- $this->Application->StoreVar('usps_errors', serialize($usps_errors));
- }
+ $sqe_errors = $this->Application->RecallVar('sqe_errors');
+ $sqe_errors = $sqe_errors ? unserialize($sqe_errors) : Array ();
+ $sqe_errors[ $object->GetField('OrderNumber') ] = $ret['error_description'];
+ $this->Application->StoreVar('sqe_errors', serialize($sqe_errors));
+ }
break;
case 'OnMassOrderProcess':
@@ -3484,50 +3492,71 @@
}
}
+ /**
+ * Updates shipping types
+ *
+ * @param kEvent $event
+ * @return bool
+ */
function UpdateShippingTypes(&$event)
{
- $object =& $this->Application->recallObject($event->getPrefixSpecial());
- $ord_id = $object->GetId();
+ $object =& $event->getObject();
+ /* @var $object OrdersItem */
+ $ord_id = $object->GetID();
+
$order_info = $this->Application->GetVar('ord');
$shipping_ids = getArrayValue($order_info, $ord_id, 'ShippingTypeId');
- if (!$shipping_ids)
- {
+ if (!$shipping_ids) {
return;
}
- $last_shippings = unserialize($this->Application->RecallVar('LastShippings'));
+ $ret = true;
$shipping_types = Array();
+ $last_shippings = unserialize( $this->Application->RecallVar('LastShippings') );
- $ret = true;
- foreach($shipping_ids as $package => $id)
- {
+ $template = $this->Application->GetVar('t');
+ $shipping_templates = Array ('in-commerce/checkout/shipping', 'in-commerce/orders/orders_edit_shipping');
+
+ $quote_engine_collector =& $this->Application->recallObject('ShippingQuoteCollector');
+ /* @var $quote_engine_collector ShippingQuoteCollector */
+
+ foreach ($shipping_ids as $package => $id) {
// try to validate
- if ( $object->GetDBField('ShippingType') == 0 && (strpos($id, 'USPS') !== false) && in_array($this->Application->GetVar('t'), Array('in-commerce/checkout/shipping','in-commerce/orders/orders_edit_shipping'))) {
+ $shipping_types[$package] = $last_shippings[$package][$id];
+ $shipping_quote_engine = $quote_engine_collector->GetClassByType($shipping_types, $package);
+
+ if (($object->GetDBField('ShippingType') == 0) && ($shipping_quote_engine !== false) && in_array($template, $shipping_templates)) {
+ $shipping_quote_engine =& $this->Application->recallObject($shipping_quote_engine);
+ /* @var $shipping_quote_engine ShippingQuoteEngine */
+
+ // set first of found shippings just to check if any errors are returned
$current_usps_shipping_types = unserialize($this->Application->RecallVar('current_usps_shipping_types'));
- $object->SetDBField('ShippingInfo', serialize(Array($package => $current_usps_shipping_types[$id])));
- $usps_data = $this->MakeUSPSOrder($object, true);
- if ( !isset($usps_data['error_number']) ) {
+ $object->SetDBField('ShippingInfo', serialize( Array($package => $current_usps_shipping_types[$id])) );
+
+ $sqe_data = $shipping_quote_engine->MakeOrder($object, true);
+
+ if ( !isset($sqe_data['error_number']) ) {
// update only international shipping
if ( $object->GetDBField('ShippingCountry') != 'USA') {
- $last_shippings[$package][$id]['TotalCost'] = $usps_data['Postage'];
+ $shipping_types[$package]['TotalCost'] = $sqe_data['Postage'];
}
}
else {
- $this->Application->SetVar('usps_errors', $usps_data['error_description']);
$ret = false;
+ $this->Application->StoreVar('sqe_error', $sqe_data['error_description']);
}
+
$object->SetDBField('ShippingInfo', '');
}
- $shipping_types[$package] = $last_shippings[$package][$id];
}
+
$object->SetDBField('ShippingInfo', serialize($shipping_types));
return $ret;
}
-
/*function shipOrder(&$order_items)
{
$product_object =& $this->Application->recallObject('p', null, Array('skip_autoload' => true));
@@ -4054,137 +4083,6 @@
}
/**
- * Creates new USPS order
- *
- * @param OrdersItem $object
- * @param bool $fake_mode
- * @return Array
- */
- function MakeUSPSOrder(&$object, $fake_mode = false)
- {
- $this->Application->recallObject('ShippingQuoteEngine');
-
- $aUSPS = $this->Application->recallObject('USPS', 'USPS');
- /* @var $aUSPS USPS */
-
- $ShippingInfo = unserialize($object->GetDBField('ShippingInfo'));
- $ShippingCode = $USPSMethod = '';
- $ShippingCountry = $aUSPS->GetUSPSCountry($object->GetDBField('ShippingCountry'));
-
- $UserName = explode(" ", $object->GetDBField('ShippingTo'));
-
- $item_table = TABLE_PREFIX.'OrderItems';
- if ($this->Application->isAdminUser) {
- // this strange contraption actually uses temp table from object (when in temp mode)
- $order_table = $object->TableName;
- $item_table = str_replace('Orders', 'OrderItems', $order_table);
- }
-
- $sOrder = Array (
- 'FirstName' => $UserName[0],
- 'LastName' => $UserName[1],
- 'ShippingCompany' => $object->GetDBField('ShippingCompany'),
- 'ShippingAddress1' => $object->GetDBField('ShippingAddress1'),
- 'ShippingAddress2' => $object->GetDBField('ShippingAddress2'),
- 'ShippingCity' => $object->GetDBField('ShippingCity'),
- 'ShippingZip' => $object->GetDBField('ShippingZip'),
- 'ShippingCountry' => $ShippingCountry,
- 'ShippingPhone' => $aUSPS->PhoneClean($object->GetDBField('ShippingPhone')),
- 'ShippingFax' => $aUSPS->PhoneClean($object->GetDBField('ShippingFax')),
- 'ShippingNumBoxes' => '1',
- );
-
- $sql = 'SELECT SUM(`Quantity` * `Weight`)
- FROM ' . $item_table . '
- WHERE ' . $object->IDField . ' = ' . $object->GetID();
- $weight = $this->Application->Conn->GetOne($sql);
-
- $f_weight = Kg2Pounds($weight);
- $sOrder['ShippingWeight'] = $f_weight[0].'.'.$f_weight[1];
-
- foreach ($ShippingInfo as $k => $ShippingRow) {
- $ShippingCode = $ShippingRow['Code'];
- }
-
- if ( $object->GetDBField('ShippingCountry') == 'USA' ) {
- $sOrder['ShippingState'] = $object->GetDBField('ShippingState');
- $USPSMethod = $ShippingCode;
- unset($sOrder['ShippingZip']);
-
- $sOrder['ShippingZip5'] = substr(trim($object->GetDBField('ShippingZip')), 0, 5);
- $sOrder['ShippingZip4'] = '';
- $sOrder['SubTotal'] = $object->GetDBField('SubTotal');
- }
- else {
- $USPSMethod = array_search($ShippingCode, $aUSPS->intl_types);
- $sOrder['ShippingProvince'] = '';
-
- if ( $ShippingCountry == 'CA' ) {
- $sOrder['ShippingProvince'] = $object->GetField('ShippingState');
- }
-
- // add items
- $sql = 'SELECT `Quantity`, `Weight`, `Price`
- FROM ' . $item_table . '
- WHERE ' . $object->IDField . ' = ' . $object->GetID();
- $order_items = $this->Application->Conn->Query($sql);
-
- $i = 1;
- $Items = Array();
-
- foreach ($order_items as $k => $order_item) {
- $p_weight = Array();
- $p_weight = Kg2Pounds($order_item['Weight']);
- $Items[$i] = Array('Qty' => $order_item['Quantity'], 'Price' => $order_item['Price'], 'NetPounds' => $p_weight[0], 'NetOunces' => $p_weight[1]);
- $i++;
- }
-
- $sOrder['Items'] = $Items;
- $sOrder['InvoiceNumber'] = $object->GetDBField('OrderNumber');
- }
-
- $sOrder['ShippingService'] = $USPSMethod;
-
- // make USPS order
- $aUSPS->order = $sOrder;
- $usps_data = $aUSPS->PostOrder();
-
- // if errors
- if ( array_key_exists('error_number', $usps_data) ) {
- return $usps_data;
- }
-
- if ( array_key_exists('Postage', $usps_data) ) {
- $ShippingPrice = '';
- $ShippingPrice = $usps_data['Postage'];
- }
-
- $ShippingTracking = '';
-
- if ( isset($usps_data['TrackingNumber']) && $usps_data['TrackingNumber'] != '' ) {
- $ShippingTracking = $usps_data['TrackingNumber'];
- }
-
- if ( isset($usps_data['PostnetBarCode']) && $usps_data['PostnetBarCode'] != '' && $ShippingTracking == '' ) {
- $ShippingTracking = $usps_data['PostnetBarCode'];
- }
-
- if ($fake_mode == false) {
- $object->SetDBField('ShippingTracking', $ShippingTracking);
- $object->Update();
- }
- else {
- $full_path = USPS_LABEL_FOLDER . $ShippingTracking . ".pdf";
-
- if (file_exists($full_path)) {
- unlink($full_path);
- }
- }
-
- return $usps_data;
- }
-
- /**
* Downloads shipping tracking bar code, that was already generated by USPS service
*
* @param kEvent $event
Index: units/orders/orders_tag_processor.php
===================================================================
--- units/orders/orders_tag_processor.php (revision 13936)
+++ units/orders/orders_tag_processor.php (working copy)
@@ -1465,27 +1465,33 @@
}
/**
- * Prints USPS errors from session
+ * Prints SQE errors from session
*
* @param Array $params
* @return string
*/
- function PrintUSPSErrors($params)
+ function PrintSQEErrors($params)
{
+ $sqe_errors = $this->Application->RecallVar('sqe_errors');
+
+ if (!$sqe_errors) {
+ return '';
+ }
+
$o = '';
- $ses_usps_erros = Array();
- $ses_usps_erros = unserialize($this->Application->RecallVar('usps_errors'));
- if ( count($ses_usps_erros) > 0 && is_array($ses_usps_erros)) {
- foreach ( $ses_usps_erros as $order_number => $error_description ) {
- $block_params = Array();
- $block_params['name'] = $params['render_as'];
- $block_params['order_number'] = $order_number;
- $block_params['error_description'] = $error_description;
- $o.=$this->Application->ParseBlock($block_params, 1);
- }
- $this->Application->RemoveVar('usps_errors');
+ $block_params = $this->prepareTagParams($params);
+ $block_params['name'] = $params['render_as'];
+ $sqe_errors = unserialize($sqe_errors);
+
+ foreach ($sqe_errors as $order_number => $error_description) {
+ $block_params['order_number'] = $order_number;
+ $block_params['error_description'] = $error_description;
+
+ $o .= $this->Application->ParseBlock($block_params);
}
+ $this->Application->RemoveVar('sqe_errors');
+
return $o;
}
Index: units/shipping_quote_engines/shipping_quote_collector.php
===================================================================
--- units/shipping_quote_engines/shipping_quote_collector.php (revision 13936)
+++ units/shipping_quote_engines/shipping_quote_collector.php (working copy)
@@ -38,6 +38,7 @@
return unserialize($shipping_types);
}
+ $quotes_valid = true;
$shipping_types = Array();
$classes = $this->getEngineClasses();
@@ -46,7 +47,13 @@
/* @var $object ShippingQuoteEngine */
$new_shipping_types = $object->GetShippingQuotes($params);
- $shipping_types = array_merge($shipping_types, $new_shipping_types);
+
+ if (is_array($new_shipping_types)) {
+ $shipping_types = array_merge($shipping_types, $new_shipping_types);
+ }
+ else {
+ $quotes_valid = false;
+ }
}
uasort($shipping_types, Array(&$this, 'price_sort'));
@@ -95,7 +102,9 @@
$shipping_types = $available_types;
- $this->Application->setDBCache($cached_var_name, serialize($shipping_types), 24 * 3600);
+ if ($quotes_valid) {
+ $this->Application->setDBCache($cached_var_name, serialize($shipping_types), 24 * 3600);
+ }
return $shipping_types;
}
@@ -136,6 +145,38 @@
return $classes;
}
+ /**
+ * Returns shipping quote engine, that matches shipping type used in order
+ *
+ * @param Array $shipping_info
+ * @param int $package_num
+ * @return ShippingQuoteEngine
+ */
+ function &GetClassByType($shipping_info, $package_num = 1)
+ {
+ if ( !$shipping_info || !array_key_exists($package_num, $shipping_info) ) {
+ return false;
+ }
+
+ $classes = $this->getEngineClasses();
+ $shipping_id = $shipping_info[$package_num]['ShippingId'];
+
+ foreach ($classes as $class) {
+ $object =& $this->Application->recallObject($class);
+ /* @var $object ShippingQuoteEngine */
+
+ $shipping_types = $object->GetAvailableTypes();
+
+ foreach ($shipping_types as $index => $shipping_type) {
+ if ( preg_match('/^' . preg_quote($shipping_type['_Id'], '/') . '/', $shipping_id) ) {
+ return $class;
+ }
+ }
+ }
+
+ return false;
+ }
+
function SortShippingTypes($elem1, $elem2)
{
if ($elem1['_Name'] == $elem2['_Name']) {
Index: units/shipping_quote_engines/shipping_quote_engine.php
===================================================================
--- units/shipping_quote_engines/shipping_quote_engine.php (revision 13936)
+++ units/shipping_quote_engines/shipping_quote_engine.php (working copy)
@@ -173,6 +173,18 @@
}
/**
+ * Sends order to shipping quote engine
+ *
+ * @param OrdersItem $object
+ * @param bool $dry_run
+ * @return Array
+ */
+ function MakeOrder(&$object, $dry_run = false)
+ {
+ return Array ();
+ }
+
+ /**
* Loads properties of shipping quote engine
*
*/
Index: units/shipping_quote_engines/usps.php
===================================================================
--- units/shipping_quote_engines/usps.php (revision 13936)
+++ units/shipping_quote_engines/usps.php (working copy)
@@ -1032,7 +1032,7 @@
$rates = $this->GetQuote();
if ( !isset($rates['error']) ) {
- $this->Application->RemoveVar('usps_errors');
+ $this->Application->RemoveVar('sqe_error');
$i = 1;
foreach ($rates as $k => $rate ) {
@@ -1054,7 +1054,7 @@
}
else {
// for Front-End (shipping screen) and Admin (Shipping Tab on editing order)
- $this->Application->StoreVar('usps_errors', $rates['error']);
+ $this->Application->StoreVar('sqe_error', $rates['error']);
}
$this->Application->StoreVar('current_usps_shipping_types', serialize($shipping_types));
@@ -1158,21 +1158,21 @@
return $body;
}
+ /**
+ * Returns available shipping types
+ *
+ * @return Array
+ * @todo Get possible shipping types based on MODULE_SHIPPING_USPS_TYPES and MODULE_SHIPPING_USPS_TYPES_INTL consntants
+ */
function GetAvailableTypes()
{
- return array();
- $conn =& $this->Application->GetADODBConnection();
- $types = $conn->Query('SELECT * FROM '.TABLE_PREFIX.'ShippingType');
-
- $ret = array();
- foreach ($types as $a_type) {
- $a_type['_ClassName'] = get_class($this);
- $a_type['_Id'] = 'CUST_'.$a_type['ShippingID'];
- $a_type['_Name'] = '(Custom) '.$a_type['Name'];
- $ret[] = $a_type;
- }
- return $ret;
-
+ return Array (
+ Array (
+ '_ClassName' => get_class($this),
+ '_Id' => 'USPS',
+ '_Name' => 'USPS (Default)'
+ )
+ );
}
function LoadParams()
@@ -1196,4 +1196,130 @@
{
return Array ('AccountLogin');
}
+
+ /**
+ * Creates new USPS order
+ *
+ * @param OrdersItem $object
+ * @param bool $dry_run
+ * @return Array
+ */
+ function MakeOrder(&$object, $dry_run = false)
+ {
+ $ShippingInfo = unserialize($object->GetDBField('ShippingInfo'));
+ $ShippingCode = $USPSMethod = '';
+ $ShippingCountry = $this->GetUSPSCountry($object->GetDBField('ShippingCountry'));
+
+ $UserName = explode(" ", $object->GetDBField('ShippingTo'));
+
+ $item_table = TABLE_PREFIX.'OrderItems';
+ if ($this->Application->isAdminUser) {
+ // this strange contraption actually uses temp table from object (when in temp mode)
+ $order_table = $object->TableName;
+ $item_table = str_replace('Orders', 'OrderItems', $order_table);
+ }
+
+ $sOrder = Array (
+ 'FirstName' => $UserName[0],
+ 'LastName' => $UserName[1],
+ 'ShippingCompany' => $object->GetDBField('ShippingCompany'),
+ 'ShippingAddress1' => $object->GetDBField('ShippingAddress1'),
+ 'ShippingAddress2' => $object->GetDBField('ShippingAddress2'),
+ 'ShippingCity' => $object->GetDBField('ShippingCity'),
+ 'ShippingZip' => $object->GetDBField('ShippingZip'),
+ 'ShippingCountry' => $ShippingCountry,
+ 'ShippingPhone' => $this->PhoneClean($object->GetDBField('ShippingPhone')),
+ 'ShippingFax' => $this->PhoneClean($object->GetDBField('ShippingFax')),
+ 'ShippingNumBoxes' => '1',
+ );
+
+ $sql = 'SELECT SUM(`Quantity` * `Weight`)
+ FROM ' . $item_table . '
+ WHERE ' . $object->IDField . ' = ' . $object->GetID();
+ $weight = $this->Application->Conn->GetOne($sql);
+
+ $f_weight = Kg2Pounds($weight);
+ $sOrder['ShippingWeight'] = $f_weight[0].'.'.$f_weight[1];
+
+ foreach ($ShippingInfo as $k => $ShippingRow) {
+ $ShippingCode = $ShippingRow['Code'];
+ }
+
+ if ( $object->GetDBField('ShippingCountry') == 'USA' ) {
+ $sOrder['ShippingState'] = $object->GetDBField('ShippingState');
+ $USPSMethod = $ShippingCode;
+ unset($sOrder['ShippingZip']);
+
+ $sOrder['ShippingZip5'] = substr(trim($object->GetDBField('ShippingZip')), 0, 5);
+ $sOrder['ShippingZip4'] = '';
+ $sOrder['SubTotal'] = $object->GetDBField('SubTotal');
+ }
+ else {
+ $USPSMethod = array_search($ShippingCode, $this->intl_types);
+ $sOrder['ShippingProvince'] = '';
+
+ if ( $ShippingCountry == 'CA' ) {
+ $sOrder['ShippingProvince'] = $object->GetField('ShippingState');
+ }
+
+ // add items
+ $sql = 'SELECT `Quantity`, `Weight`, `Price`
+ FROM ' . $item_table . '
+ WHERE ' . $object->IDField . ' = ' . $object->GetID();
+ $order_items = $this->Application->Conn->Query($sql);
+
+ $i = 1;
+ $Items = Array();
+
+ foreach ($order_items as $k => $order_item) {
+ $p_weight = Array();
+ $p_weight = Kg2Pounds($order_item['Weight']);
+ $Items[$i] = Array('Qty' => $order_item['Quantity'], 'Price' => $order_item['Price'], 'NetPounds' => $p_weight[0], 'NetOunces' => $p_weight[1]);
+ $i++;
+ }
+
+ $sOrder['Items'] = $Items;
+ $sOrder['InvoiceNumber'] = $object->GetDBField('OrderNumber');
+ }
+
+ $sOrder['ShippingService'] = $USPSMethod;
+
+ // make USPS order
+ $this->order = $sOrder;
+ $usps_data = $this->PostOrder();
+
+ // if errors
+ if ( array_key_exists('error_number', $usps_data) ) {
+ return $usps_data;
+ }
+
+ if ( array_key_exists('Postage', $usps_data) ) {
+ $ShippingPrice = '';
+ $ShippingPrice = $usps_data['Postage'];
+ }
+
+ $ShippingTracking = '';
+
+ if ( isset($usps_data['TrackingNumber']) && $usps_data['TrackingNumber'] != '' ) {
+ $ShippingTracking = $usps_data['TrackingNumber'];
+ }
+
+ if ( isset($usps_data['PostnetBarCode']) && $usps_data['PostnetBarCode'] != '' && $ShippingTracking == '' ) {
+ $ShippingTracking = $usps_data['PostnetBarCode'];
+ }
+
+ if ($dry_run == false) {
+ $object->SetDBField('ShippingTracking', $ShippingTracking);
+ $object->Update();
+ }
+ else {
+ $full_path = USPS_LABEL_FOLDER . $ShippingTracking . ".pdf";
+
+ if (file_exists($full_path)) {
+ unlink($full_path);
+ }
+ }
+
+ return $usps_data;
+ }
}
\ No newline at end of file
|