diff --git a/Controller/Adminhtml/Order/MassOrderShip.php b/Controller/Adminhtml/Order/MassOrderShip.php
index 30d74d2..2dabf97 100644
--- a/Controller/Adminhtml/Order/MassOrderShip.php
+++ b/Controller/Adminhtml/Order/MassOrderShip.php
@@ -1 +1,111 @@
-test
\ No newline at end of file
+messageManager = $messageManager;
+ $this->orderModel = $orderModel;
+ $this->convertOrder = $convertOrder;
+ $this->shipmentNotifier = $shipmentNotifier;
+ }
+
+ public function execute()
+ {
+ $resultRedirect = $this->resultRedirectFactory->create();
+
+ $ordersId = $this->getRequest()->getParam('selected');
+ $notify = $this->getRequest()->getParam('notify');
+
+ if (!empty($ordersId)) {
+ // Ship Order
+ foreach ($ordersId as $orderId) {
+
+ $order = $this->orderModel->loadByAttribute('entity_id', $orderId);
+ if ($order->canShip()) {
+
+ $convertOrder = $this->convertOrder;
+ $shipment = $convertOrder->toShipment($order);
+
+ foreach ($order->getAllItems() AS $orderItem) {
+ // Check if order item has qty to ship or is virtual
+ if (! $orderItem->getQtyToShip() || $orderItem->getIsVirtual()) {
+ continue;
+ }
+ $qtyShipped = $orderItem->getQtyToShip();
+ // Create shipment item with qty
+ $shipmentItem = $convertOrder->itemToShipmentItem($orderItem)->setQty($qtyShipped);
+ // Add shipment item to shipment
+ $shipment->addItem($shipmentItem);
+ }
+
+ // Register shipment
+ $shipment->register();
+ $shipment->getOrder()->setIsInProcess(true);
+
+ try {
+ // Save created shipment and order
+ $shipment->save();
+ $shipment->getOrder()->save();
+
+ // Send email
+ if ($notify) {
+ $this->shipmentNotifier->notify($shipment);
+ $shipment->save();
+ }
+ $this->messageManager->addSuccess(__("Shipment Succesfully Generated for order: #".$order->getIncrementId()));
+ } catch (\Exception $e) {
+ $this->messageManager->addError(__('Cannot ship order'. $e->getMessage()));
+ }
+
+ } else {
+ $this->messageManager->addError(__("Cannot ship order, becuase It's already created or something went wrong"));
+ }
+ }
+ }
+ return $resultRedirect->setPath('sales/order/index', [], ['error' => true]);
+ }
+}
diff --git a/Ui/Component/Action/AddParams.php b/Ui/Component/Action/AddParams.php
new file mode 100644
index 0000000..f7003d8
--- /dev/null
+++ b/Ui/Component/Action/AddParams.php
@@ -0,0 +1,33 @@
+urlBuilder = $urlBuilder;
+ }
+
+ public function prepare()
+ {
+ parent::prepare();
+
+ $config = $this->getConfiguration();
+
+ $params = array('notify' => '1');
+
+ $config['url'] = $this->urlBuilder->getUrl('shipbulkactions/order/massordership/', $params);
+
+ $this->setData('config', $config);
+ }
+}
diff --git a/etc/adminhtml/routes.xml b/etc/adminhtml/routes.xml
new file mode 100644
index 0000000..65cc94b
--- /dev/null
+++ b/etc/adminhtml/routes.xml
@@ -0,0 +1,8 @@
+
+