How to fetch getUrl() in Plugin or Observer file in magento 2?

By default you cant call $this->getUrl() method in Plugin or Observer file. When you need to call getUrl() function of Magento in plugin or observer file you need to pass dependancy as Magento\Framework\UrlInterface to construct() method.

public function __construct(
    \Magento\Framework\UrlInterface $urlBuilder
) {
    $this->urlBuilder = $urlBuilder;
}

Now In plugin or Observer function we can get getUrl() as below way,
$this->urlBuilder->getUrl(‘sales/order/view’, [‘order_id’ => 1]);

Run below command for get effect of our Dependancy Injection to code,

php bin/magento setup:di:compile

Above url will return as,
http://{yoururl.com}/admin/sales/order/view/order_id/1/

How to create Shipment programmatically in magento 2?

We just need to pass order id in generateShipment($orderId) function from template.
below code snippet is used for generating Shipment in Magento 2, After generating Shipment automatically send the Shipment mail to a customer who has placed the order.

<?php
namespace Rbj\Shipment\Block;

class Shipment extends \Magento\Framework\View\Element\Template
{
public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
        \Magento\Sales\Model\Convert\OrderFactory $convertOrderFactory,
        \Magento\Framework\DB\TransactionFactory $transactionFactory,
        \Magento\Sales\Model\Order\Email\Sender\ShipmentSender $shipmentSender,
        \Magento\Framework\Message\ManagerInterface $messageManager,
        array $data = []
    ) {
        $this->orderRepository = $orderRepository;
        $this->orderConverter = $convertOrderFactory->create();
        $this->transactionFactory = $transactionFactory;
        $this->messageManager = $messageManager;
        $this->shipmentSender = $shipmentSender;
        parent::__construct($context, $data);
    }
/**
 * Create Shipment Based on Order Object
 * @param \Magento\Sales\Model\Order $order
 * @return $this
 */
public function generateShipment($orderId)
{
    try {
        $order = $this->orderRepository->get($orderId);
        if (!$order->getId()) {
            throw new \Magento\Framework\Exception\LocalizedException(__('The order no longer exists.'));
        }

        /* check shipment exist for order or not */
        if ($order->canShip())
        {
            // Initialize the order shipment object
            $shipment = $this->orderConverter->toShipment($order);
            foreach ($order->getAllItems() AS $orderItem) {
                // Check if order item has qty to ship or is order is virtual
                if (! $orderItem->getQtyToShip() || $orderItem->getIsVirtual()) {
                    continue;
                }
                $qtyShipped = $orderItem->getQtyToShip();
                // Create shipment item with qty
                $shipmentItem = $this->orderConverter->itemToShipmentItem($orderItem)->setQty($qtyShipped);
                // Add shipment item to shipment
                $shipment->addItem($shipmentItem);
            }
            // Register shipment
            $shipment->register();

            $shipment->getOrder()->setIsInProcess(true);

            try {
                $transaction = $this->transactionFactory->create()->addObject($shipment)
                    ->addObject($shipment->getOrder())
                    ->save();
                echo $shipmentId = $shipment->getIncrementId();
            } catch (\Exception $e) {
                $this->messageManager->addError(__('We can\'t generate shipment.'));
            }

            if ($shipment) {
                try {
                    $this->shipmentSender->send($shipment);
                } catch (\Exception $e) {
                    $this->messageManager->addError(__('We can\'t send the shipment right now.'));
                }
            }

            return $shipmentId;
        }
    } catch (\Exception $e) {
        $this->messageManager->addError($e->getMessage());
    }

    return true;
}

Call function from the template,

$orderId = 1;
$shipment = $block->generateInvoice($orderId);

Now Check from Admin panel.

Sales -> Order, Order with Id 1 has generated Shipment.

How to Create Invoice programmatically in Magento 2?

Generate an Auto Invoice Programmatically from Magento 2 required an order id. Based on the Order Id, You can fetch Order Object.

Given code, a snippet is used to generate an Invoice in Magento, After generating an invoice automatically sends the invoice mail to a customer who has placed the order.

I have just given a demo to create an invoice with the specified order id, Continue reading “How to Create Invoice programmatically in Magento 2?”