Example #1
0
 /**
  * Getting all available childs for Invoice, Shipmen or Creditmemo item
  *
  * @param Varien_Object $item
  * @return array
  */
 public function getChilds($item)
 {
     $_itemsArray = array();
     if ($item instanceof Mage_Sales_Model_Order_Invoice_Item) {
         $_items = $item->getInvoice()->getAllItems();
     } else {
         if ($item instanceof Mage_Sales_Model_Order_Shipment_Item) {
             $_items = $item->getShipment()->getAllItems();
         } else {
             if ($item instanceof Mage_Sales_Model_Order_Creditmemo_Item) {
                 $_items = $item->getCreditmemo()->getAllItems();
             }
         }
     }
     if ($_items) {
         foreach ($_items as $_item) {
             $parentItem = $_item->getOrderItem()->getParentItem();
             if ($parentItem) {
                 $_itemsArray[$parentItem->getId()][$_item->getOrderItemId()] = $_item;
             } else {
                 $_itemsArray[$_item->getOrderItem()->getId()][$_item->getOrderItemId()] = $_item;
             }
         }
     }
     if (isset($_itemsArray[$item->getOrderItem()->getId()])) {
         return $_itemsArray[$item->getOrderItem()->getId()];
     } else {
         return null;
     }
 }
Example #2
0
 /**
  * Creates shipment, adds track numbers, creates new invoices
  *
  * @param $shipments array
  * @return array
  */
 public function shipmentPush($shipments)
 {
     $fullResult = array();
     $fullResult['records'] = array();
     if (isset($shipments['records'])) {
         $shipments = $shipments['records'];
     }
     foreach ($shipments as $shipmentData) {
         $result = array();
         try {
             $shipment = new Varien_Object($shipmentData);
             Mage::dispatchEvent('retailops_shipment_process_before', array('record' => $shipment));
             $result['order_increment_id'] = $shipment->getOrderIncrementId();
             $orderIncrementId = $shipment->getOrderIncrementId();
             $shipmentInfo = $shipment->getShipment();
             $trackInfo = isset($shipmentInfo['track']) ? $shipmentInfo['track'] : array();
             $invoiceInfo = isset($shipmentInfo['invoice']) ? $shipmentInfo['invoice'] : array();
             $shipmentIncrementId = null;
             // create shipment
             try {
                 $shipmentResult = array();
                 $shipmentIncrementId = $this->create($orderIncrementId, $shipmentInfo['qtys'], $shipmentInfo['comment'], $shipmentInfo['email'], $shipmentInfo['include_comment']);
                 if ($shipmentIncrementId) {
                     $shipmentResult['status'] = RetailOps_Api_Helper_Data::API_STATUS_SUCCESS;
                     $shipmentResult['shipment_increment_id'] = $shipmentIncrementId;
                 } else {
                     $shipmentResult['status'] = RetailOps_Api_Helper_Data::API_STATUS_FAIL;
                     $shipmentResult['message'] = Mage::helper('retailops_api')->__('Can not create shipment');
                 }
             } catch (Mage_Core_Exception $e) {
                 $shipmentResult['status'] = RetailOps_Api_Helper_Data::API_STATUS_FAIL;
                 $shipmentResult['message'] = $e->getCustomMessage() ? $e->getCustomMessage() : $e->getMessage();
             }
             $result['shipment_result'] = $shipmentResult;
             if ($shipmentIncrementId) {
                 if ($trackInfo) {
                     $result['track_result'] = array();
                     foreach ($trackInfo as $track) {
                         // add shipment track
                         try {
                             $trackResult = array();
                             $track = new Varien_Object($track);
                             Mage::dispatchEvent('retailops_shipment_add_track_before', array('record' => $track));
                             $trackResult['track_number'] = $track->getData('track_number');
                             $trackId = $this->addTrack($shipmentIncrementId, $track->getData('carrier'), $track->getData('title'), $track->getData('track_number'));
                             $trackResult['status'] = RetailOps_Api_Helper_Data::API_STATUS_SUCCESS;
                             $trackResult['track_id'] = $trackId;
                         } catch (Mage_Core_Exception $e) {
                             $trackResult['status'] = RetailOps_Api_Helper_Data::API_STATUS_FAIL;
                             $trackResult['message'] = $e->getMessage();
                         }
                         $result['track_result'][] = $trackResult;
                     }
                 }
                 // create invoice
                 /** @var Mage_Sales_Model_Order $order */
                 $order = Mage::getModel('sales/order');
                 $order->loadByIncrementId($orderIncrementId);
                 $isFullyShipped = $this->_checkAllItemsShipped($order);
                 $invoices = $order->getInvoiceCollection();
                 $invoiceResult = array();
                 if ($order->canInvoice()) {
                     $itemsToInvoice = array();
                     if ($order->getPayment()->canCapturePartial()) {
                         /**
                          * If payment allows partial capture, trying to create invoice with shipped items only and capture it
                          */
                         $itemsToInvoice = $shipmentInfo['qtys'];
                     }
                     if (($itemsToInvoice || $isFullyShipped) && $invoiceInfo) {
                         $invoice = new Varien_Object($invoiceInfo);
                         $invoice->setData('items_to_invoice', $itemsToInvoice);
                         Mage::dispatchEvent('retailops_shipment_invoice_before', array('record' => $invoice));
                         $invoiceResult = $this->_createInvoiceAndCapture($order, $invoice->getItemsToInvoice(), $invoice->getComment(), $invoice->getEmail(), $invoice->getIncludeComment());
                         $invoiceResult = array($invoiceResult);
                     }
                 } else {
                     if ($isFullyShipped) {
                         /**
                          * Capturing all available invoices if all order items are shipped
                          */
                         $invoiceResult = $this->_captureInvoices($invoices);
                     }
                 }
                 $result['invoice_result'] = $invoiceResult;
             }
         } catch (Exception $e) {
             $result['status'] = RetailOps_Api_Helper_Data::API_STATUS_FAIL;
             $result['message'] = $e->getMessage();
         }
         $fullResult['records'][] = $result;
     }
     return $fullResult;
 }
Example #3
0
 /**
  * @param null|Varien_Object $dataObject
  * @return Xcom_Xfabric_Model_Message_Request
  */
 public function _prepareData(Varien_Object $dataObject = null)
 {
     $result = Mage::getModel('xcom_chronicle/message_marketplaceshipment', $dataObject->getShipment());
     $this->setMessageData($result->toArray());
     return parent::_prepareData($dataObject);
 }