/**
  * @param array|null $tracks
  * @dataProvider createDataProvider
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function testCreate($tracks)
 {
     $orderItem = $this->getMock('Magento\\Sales\\Model\\Order\\Item', ['getId', 'getQtyOrdered'], [], '', false);
     $orderItem->expects($this->any())->method('getId')->willReturn(1);
     $orderItem->expects($this->any())->method('getQtyOrdered')->willReturn(5);
     $shipmentItem = $this->getMock('Magento\\Sales\\Model\\Order\\Shipment\\Item', ['setQty'], [], '', false);
     $shipmentItem->expects($this->once())->method('setQty')->with(5);
     $order = $this->getMock('Magento\\Sales\\Model\\Order', ['getAllItems'], [], '', false);
     $order->expects($this->any())->method('getAllItems')->willReturn([$orderItem]);
     $shipment = $this->getMock('Magento\\Sales\\Model\\Order\\Shipment', ['addItem', 'setTotalQty', 'addTrack'], [], '', false);
     $shipment->expects($this->once())->method('addItem')->with($shipmentItem);
     $shipment->expects($this->once())->method('setTotalQty')->with(5)->willReturn($shipment);
     $this->converter->expects($this->any())->method('toShipment')->with($order)->willReturn($shipment);
     $this->converter->expects($this->any())->method('itemToShipmentItem')->with($orderItem)->willReturn($shipmentItem);
     if ($tracks) {
         $shipmentTrack = $this->getMock('Magento\\Sales\\Model\\Order\\Shipment\\Track', ['addData'], [], '', false);
         if (empty($tracks[0]['number'])) {
             $shipmentTrack->expects($this->never())->method('addData');
             $this->trackFactory->expects($this->never())->method('create');
             $shipment->expects($this->never())->method('addTrack');
             $this->setExpectedException('Magento\\Framework\\Exception\\LocalizedException');
         } else {
             $shipmentTrack->expects($this->once())->method('addData')->willReturnSelf();
             $this->trackFactory->expects($this->once())->method('create')->willReturn($shipmentTrack);
             $shipment->expects($this->once())->method('addTrack')->with($shipmentTrack);
         }
     }
     $this->assertEquals($shipment, $this->subject->create($order, ['1' => 5], $tracks));
 }
예제 #2
0
 /**
  * Prepare shipment
  *
  * @param \Magento\Sales\Model\Order\Invoice $invoice
  * @return \Magento\Sales\Model\Order\Shipment|false
  */
 protected function _prepareShipment($invoice)
 {
     $invoiceData = $this->getRequest()->getParam('invoice');
     $shipment = $this->shipmentFactory->create($invoice->getOrder(), isset($invoiceData['items']) ? $invoiceData['items'] : [], $this->getRequest()->getPost('tracking'));
     if (!$shipment->getTotalQty()) {
         return false;
     }
     return $shipment->register();
 }
예제 #3
0
 /**
  * Initialize shipment model instance
  *
  * @return bool|\Magento\Sales\Model\Order\Shipment
  * @throws \Magento\Framework\Exception\LocalizedException
  */
 public function load()
 {
     $shipment = false;
     $orderId = $this->getOrderId();
     $shipmentId = $this->getShipmentId();
     if ($shipmentId) {
         $shipment = $this->shipmentRepository->get($shipmentId);
     } elseif ($orderId) {
         $order = $this->orderRepository->get($orderId);
         /**
          * Check order existing
          */
         if (!$order->getId()) {
             $this->messageManager->addError(__('The order no longer exists.'));
             return false;
         }
         /**
          * Check shipment is available to create separate from invoice
          */
         if ($order->getForcedShipmentWithInvoice()) {
             $this->messageManager->addError(__('Cannot do shipment for the order separately from invoice.'));
             return false;
         }
         /**
          * Check shipment create availability
          */
         if (!$order->canShip()) {
             $this->messageManager->addError(__('Cannot do shipment for the order.'));
             return false;
         }
         $shipment = $this->shipmentFactory->create($order, $this->getItemQtys(), $this->getTracking());
     }
     $this->registry->register('current_shipment', $shipment);
     return $shipment;
 }
예제 #4
0
파일: Order.php 프로젝트: aiesh/magento2
 /**
  * Convert order object to Shipment
  *
  * @param   \Magento\Sales\Model\Order $order
  * @return  \Magento\Sales\Model\Order\Shipment
  */
 public function toShipment(\Magento\Sales\Model\Order $order)
 {
     $shipment = $this->_orderShipmentFactory->create();
     $shipment->setOrder($order)->setStoreId($order->getStoreId())->setCustomerId($order->getCustomerId())->setBillingAddressId($order->getBillingAddressId())->setShippingAddressId($order->getShippingAddressId());
     $this->_objectCopyService->copyFieldsetToTarget('sales_convert_order', 'to_shipment', $order, $shipment);
     return $shipment;
 }
예제 #5
0
 /**
  * Retrieve Shipment instance
  *
  * @return \Magento\Sales\Model\Order\Shipment
  */
 public function getShipment()
 {
     if (!$this->_shipment instanceof \Magento\Sales\Model\Order\Shipment) {
         $this->_shipment = $this->_shipmentFactory->create()->load($this->getParentId());
     }
     return $this->_shipment;
 }
예제 #6
0
 public function testLoadOrderId()
 {
     $this->loader->unsetData('shipment_id');
     $orderMock = $this->getMockBuilder('Magento\\Sales\\Model\\Order')->disableOriginalConstructor()->setMethods(['getForcedShipmentWithInvoice', 'getId', 'canShip'])->getMock();
     $this->orderRepository->expects($this->once())->method('get')->will($this->returnValue($orderMock));
     $orderMock->expects($this->once())->method('getId')->will($this->returnValue($this->loader->getOrderId()));
     $orderMock->expects($this->any())->method('getForcedShipmentWithInvoice')->will($this->returnValue(false));
     $orderMock->expects($this->once())->method('canShip')->will($this->returnValue(true));
     $shipmentModelMock = $this->getMockBuilder('Magento\\Sales\\Model\\Order\\Shipment')->disableOriginalConstructor()->setMethods([])->getMock();
     $this->shipmentFactory->expects($this->once())->method('create')->with($orderMock, $this->loader->getShipment()['items'])->willReturn($shipmentModelMock);
     $trackMock = $this->getMockBuilder('Magento\\Sales\\Model\\Order\\Shipment\\Track')->disableOriginalConstructor()->setMethods([])->getMock();
     $this->trackFactoryMock->expects($this->any())->method('create')->will($this->returnValue($trackMock));
     $trackMock->expects($this->any())->method('addData')->will($this->returnValueMap([[$this->loader->getTracking()[0], $trackMock], [$this->loader->getTracking()[1], $trackMock]]));
     $shipmentModelMock->expects($this->any())->method('addTrack')->with($this->equalTo($trackMock))->will($this->returnSelf());
     $this->registryMock->expects($this->once())->method('register')->with('current_shipment', $shipmentModelMock);
     $this->assertEquals($shipmentModelMock, $this->loader->load());
 }
예제 #7
0
파일: Info.php 프로젝트: aiesh/magento2
 /**
  * Instantiate ship model
  *
  * @return Shipment|bool
  */
 protected function _initShipment()
 {
     /* @var $model Shipment */
     $model = $this->_shipmentFactory->create();
     $ship = $model->load($this->getShipId());
     if (!$ship->getEntityId() || $this->getProtectCode() != $ship->getProtectCode()) {
         return false;
     }
     return $ship;
 }
예제 #8
0
 /**
  * @param \Magento\Framework\Event\Observer $observer
  *
  * @throws \Exception
  * @throws bool
  */
 public function execute(\Magento\Framework\Event\Observer $observer)
 {
     $merchantOrder = $observer->getMerchantOrder();
     if (!count($merchantOrder['shipments']) > 0) {
         return;
     }
     $data = $observer->getPayment();
     $order = $this->_coreModel->_getOrder($data["external_reference"]);
     //if order has shipments, status is updated. If it doesn't the shipment is created.
     if ($merchantOrder['shipments'][0]['status'] == 'ready_to_ship') {
         if ($order->hasShipments()) {
             $shipment = $this->_shipment->load($order->getId(), 'order_id');
         } else {
             $shipment = $this->_shipmentFactory->create($order);
             $order->setIsInProcess(true);
         }
         $shipment->setShippingLabel($merchantOrder['shipments'][0]['id']);
         $shipmentInfo = $this->_shipmentHelper->getShipmentInfo($merchantOrder['shipments'][0]['id']);
         $this->_coreHelper->log("Shipment Info", 'mercadopago-notification.log', $shipmentInfo);
         $serviceInfo = $this->_shipmentHelper->getServiceInfo($merchantOrder['shipments'][0]['service_id'], $merchantOrder['site_id']);
         $this->_coreHelper->log("Service Info by service id", 'mercadopago-notification.log', $serviceInfo);
         if ($shipmentInfo && isset($shipmentInfo->tracking_number)) {
             $tracking['number'] = $shipmentInfo->tracking_number;
             $tracking['description'] = str_replace('#{trackingNumber}', $shipmentInfo->tracking_number, $serviceInfo->tracking_url);
             $tracking['title'] = self::CODE;
             $existingTracking = $this->_trackFactory->create()->load($shipment->getOrderId(), 'order_id');
             if ($existingTracking->getId()) {
                 $track = $shipment->getTrackById($existingTracking->getId());
                 $track->setNumber($tracking['number'])->setDescription($tracking['description'])->setTitle($tracking['title'])->save();
             } else {
                 $track = $this->_trackFactory->create()->addData($tracking);
                 $track->setCarrierCode(\MercadoPago\MercadoEnvios\Model\Carrier\MercadoEnvios::CODE);
                 $shipment->addTrack($track);
                 $shipment->save();
             }
             $this->_coreHelper->log("Track added", 'mercadopago-notification.log', $track);
         }
         $this->_transaction->addObject($order)->save();
     }
 }
예제 #9
0
 protected function prepareShipment()
 {
     // Skip shipment observer
     // ---------------------------------------
     $this->getHelper('Data\\GlobalData')->unsetValue('skip_shipment_observer');
     $this->getHelper('Data\\GlobalData')->setValue('skip_shipment_observer', true);
     // ---------------------------------------
     $qtys = array();
     foreach ($this->magentoOrder->getAllItems() as $item) {
         $qtyToShip = $item->getQtyToShip();
         if ($qtyToShip == 0) {
             continue;
         }
         $qtys[$item->getId()] = $qtyToShip;
     }
     // Create shipment
     // ---------------------------------------
     $this->shipment = $this->shipmentFactory->create($this->magentoOrder);
     $this->shipment->register();
     // it is necessary for updating qty_shipped field in sales_flat_order_item table
     $this->shipment->getOrder()->setIsInProcess(true);
     $this->transaction->addObject($this->shipment)->addObject($this->shipment->getOrder())->save();
     // ---------------------------------------
 }
예제 #10
0
 /**
  * Initialize shipment model instance
  *
  * @param RequestInterface $request
  * @return bool|\Magento\Sales\Model\Order\Shipment
  * @throws \Magento\Framework\Model\Exception
  */
 public function load(RequestInterface $request)
 {
     $shipment = false;
     $shipmentId = $request->getParam('shipment_id');
     $orderId = $request->getParam('order_id');
     if ($shipmentId) {
         $shipment = $this->shipmentFactory->create()->load($shipmentId);
     } elseif ($orderId) {
         $order = $this->orderFactory->create()->load($orderId);
         /**
          * Check order existing
          */
         if (!$order->getId()) {
             $this->messageManager->addError(__('The order no longer exists.'));
             return false;
         }
         /**
          * Check shipment is available to create separate from invoice
          */
         if ($order->getForcedShipmentWithInvoice()) {
             $this->messageManager->addError(__('Cannot do shipment for the order separately from invoice.'));
             return false;
         }
         /**
          * Check shipment create availability
          */
         if (!$order->canShip()) {
             $this->messageManager->addError(__('Cannot do shipment for the order.'));
             return false;
         }
         $savedQtys = $this->_getItemQtys($request);
         $shipment = $this->orderServiceFactory->create(array('order' => $order))->prepareShipment($savedQtys);
         $tracks = $request->getPost('tracking');
         if ($tracks) {
             foreach ($tracks as $data) {
                 if (empty($data['number'])) {
                     throw new \Magento\Framework\Model\Exception(__('Please enter a tracking number.'));
                 }
                 $track = $this->trackFactory->create()->addData($data);
                 $shipment->addTrack($track);
             }
         }
     }
     $this->registry->register('current_shipment', $shipment);
     return $shipment;
 }