diff --git a/stock_custom_picking_report/__init__.py b/stock_custom_picking_report/__init__.py
new file mode 100644
index 00000000000..4c4f242fa03
--- /dev/null
+++ b/stock_custom_picking_report/__init__.py
@@ -0,0 +1 @@
+from . import report
diff --git a/stock_custom_picking_report/__manifest__.py b/stock_custom_picking_report/__manifest__.py
new file mode 100644
index 00000000000..37c9b15f491
--- /dev/null
+++ b/stock_custom_picking_report/__manifest__.py
@@ -0,0 +1,12 @@
+{
+ "name": "Stock Custom Picking Report",
+ "application": False,
+ "installable": True,
+ "author": "sngoh",
+ "depends": ["mrp", "stock"],
+ "license": "LGPL-3",
+ "data": [
+ "report/report_mo_delivery_note.xml",
+ "report/stock_report_view.xml",
+ ],
+}
diff --git a/stock_custom_picking_report/report/__init__.py b/stock_custom_picking_report/report/__init__.py
new file mode 100644
index 00000000000..5277f4b5c22
--- /dev/null
+++ b/stock_custom_picking_report/report/__init__.py
@@ -0,0 +1 @@
+from . import report_mo_delivery_note
diff --git a/stock_custom_picking_report/report/report_mo_delivery_note.py b/stock_custom_picking_report/report/report_mo_delivery_note.py
new file mode 100644
index 00000000000..1096bfd7caa
--- /dev/null
+++ b/stock_custom_picking_report/report/report_mo_delivery_note.py
@@ -0,0 +1,30 @@
+from odoo import api, models
+
+
+class ReportMODeliveryNote(models.AbstractModel):
+ _name = "report.stock_custom_picking_report.mo_delivery_note_report"
+ _description = "MO Delivery Note Report"
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ docs = self.env["stock.picking"].browse(docids)
+ filtered_moves_by_picking = {}
+
+ for picking in docs:
+ linked_mos = picking.move_ids.move_orig_ids.production_id
+
+ if linked_mos:
+ components = self.env["stock.move"].search(
+ [
+ ("raw_material_production_id", "in", linked_mos.ids),
+ ("bom_line_id.bom_id.type", "!=", "phantom"),
+ ]
+ )
+ filtered_moves_by_picking[picking.id] = components
+ else:
+ filtered_moves_by_picking[picking.id] = picking.move_ids
+
+ return {
+ "docs": docs,
+ "filtered_moves": filtered_moves_by_picking,
+ }
diff --git a/stock_custom_picking_report/report/report_mo_delivery_note.xml b/stock_custom_picking_report/report/report_mo_delivery_note.xml
new file mode 100644
index 00000000000..00c61652cc0
--- /dev/null
+++ b/stock_custom_picking_report/report/report_mo_delivery_note.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | Product |
+ Ordered |
+ Delivered |
+
+
+
+
+
+ |
+
+ |
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
diff --git a/stock_custom_picking_report/report/stock_report_view.xml b/stock_custom_picking_report/report/stock_report_view.xml
new file mode 100644
index 00000000000..1f2892986a8
--- /dev/null
+++ b/stock_custom_picking_report/report/stock_report_view.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ MO Delivery Note
+ stock.picking
+ qweb-pdf
+ stock_custom_picking_report.mo_delivery_note_report
+ stock_custom_picking_report.mo_delivery_note_report
+ 'MO Delivery Note - %s' % (object.name)
+
+ report
+
+
+
diff --git a/stock_custom_picking_report/security/ir.model.access.csv b/stock_custom_picking_report/security/ir.model.access.csv
new file mode 100644
index 00000000000..a350a90aaaa
--- /dev/null
+++ b/stock_custom_picking_report/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_report_stock_picking_report_mo_delivery_note_report,access_report_stock_picking_report_mo_delivery_note_report,model_report_stock_custom_picking_report_mo_delivery_note_report,base.group_user,1,1,1,1