Index: branches/5.1.x/units/orders/orders_event_handler.php =================================================================== diff -u -N -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