Index: branches/5.1.x/units/shipping_quote_engines/usps.php
===================================================================
diff -u -r13813 -r13985
--- branches/5.1.x/units/shipping_quote_engines/usps.php (.../usps.php) (revision 13813)
+++ branches/5.1.x/units/shipping_quote_engines/usps.php (.../usps.php) (revision 13985)
@@ -1,6 +1,6 @@
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
Index: branches/5.1.x/units/orders/orders_event_handler.php
===================================================================
diff -u -r13933 -r13985
--- branches/5.1.x/units/orders/orders_event_handler.php (.../orders_event_handler.php) (revision 13933)
+++ branches/5.1.x/units/orders/orders_event_handler.php (.../orders_event_handler.php) (revision 13985)
@@ -1,6 +1,6 @@
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: branches/5.1.x/admin_templates/orders/orders_edit_shipping.tpl
===================================================================
diff -u -r13946 -r13985
--- branches/5.1.x/admin_templates/orders/orders_edit_shipping.tpl (.../orders_edit_shipping.tpl) (revision 13946)
+++ branches/5.1.x/admin_templates/orders/orders_edit_shipping.tpl (.../orders_edit_shipping.tpl) (revision 13985)
@@ -69,12 +69,9 @@
-
-
-
-
-
-
+
+
+
@@ -241,4 +238,13 @@
+
+
+
+
\ No newline at end of file
Index: branches/5.1.x/units/shipping_quote_engines/shipping_quote_engine.php
===================================================================
diff -u -r13813 -r13985
--- branches/5.1.x/units/shipping_quote_engines/shipping_quote_engine.php (.../shipping_quote_engine.php) (revision 13813)
+++ branches/5.1.x/units/shipping_quote_engines/shipping_quote_engine.php (.../shipping_quote_engine.php) (revision 13985)
@@ -1,6 +1,6 @@
-
- Order: . USPS error:
+
+ Order: . Error:
-
-
-
+
+
+
+
+