/** * @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)); }
/** * 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(); }
/** * 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; }
/** * 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; }
/** * 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; }
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()); }
/** * 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; }
/** * @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(); } }
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(); // --------------------------------------- }
/** * 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; }