diff --git a/.vscode/launch.json b/.vscode/launch.json index 874d31d..10199d7 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,12 +9,12 @@ "program": "${config:odoo.path}/odoo-bin", "console": "integratedTerminal", "args": [ - "--database=nfu_sale_order_batch", + "--database=nfu_sale_order_batch_packaging", "--addons-path=${config:odoo.addons_path},${workspaceFolder}", "--limit-time-real=0", "--limit-time-cpu=0", - "--init=sale_order_batch", - // "--update=", + "--update=sale_order_batch_stock", + // "--update=", "--dev=xml" ] }, @@ -31,8 +31,8 @@ "--addons-path=${config:odoo.addons_path}", "--limit-time-real=0", "--limit-time-cpu=0", - "--init=sale_order_batch", - // "--update=", + // "--init=", + // "--update=", "--dev=xml" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index ed0d60f..44d9e80 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,6 @@ "odoo.version": "16.0", "odoo.path": "../../versions/${config:odoo.version}/odoo", "odoo.addons_path": "${config:odoo.path}/addons", - "python.analysis.extraPaths": ["../../versions/16.0/odoo", "../../versions/16.0/OCA"] + "python.analysis.extraPaths": ["../../versions/16.0/odoo", "../../versions/16.0/OCA"], + "python.languageServer": "None" } diff --git a/nfu_sale_order_packaging/README.rst b/nfu_sale_order_packaging/README.rst new file mode 100644 index 0000000..c9230a0 --- /dev/null +++ b/nfu_sale_order_packaging/README.rst @@ -0,0 +1,67 @@ +======================== +NFU Sale Order Packaging +======================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:cf35c3a80aa0718148099036cd6a3dd60afb61acdb420573b1bd129be3ea2cf1 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-bruecksen%2Fife_nfu-lightgray.png?logo=github + :target: https://github.com/bruecksen/ife_nfu/tree/16.0/nfu_sale_order_packaging + :alt: bruecksen/ife_nfu + +|badge1| |badge2| |badge3| + +This module adds a minium and a maximum order quantity field to Sale Orders +and adds a packaging default to sale order batch. + +**Table of contents** + +.. contents:: + :local: + +Changelog +========= + +:1.0.0: Initial module. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* BAKEUP + +Contributors +~~~~~~~~~~~~ + +* Niels Göttsch +* Matthias Brück + +Maintainers +~~~~~~~~~~~ + +This module is part of the `bruecksen/ife_nfu `_ project on GitHub. + +You are welcome to contribute. diff --git a/nfu_sale_order_packaging/__init__.py b/nfu_sale_order_packaging/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/nfu_sale_order_packaging/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/nfu_sale_order_packaging/__manifest__.py b/nfu_sale_order_packaging/__manifest__.py new file mode 100644 index 0000000..9449913 --- /dev/null +++ b/nfu_sale_order_packaging/__manifest__.py @@ -0,0 +1,15 @@ +{ + "name": "NFU Sale Order Packaging", + "summary": "Add minimum and maximum order quantities to sale orders and use default packaging", + "author": "BAKEUP", + "website": "https://www.bakeup.org", + "category": "Sale", + "version": "16.0.0.0.1", + "depends": ["sale", "sale_order_batch"], + "data": [ + "views/sale_order_views.xml", + "views/sale_order_batch_views.xml", + "views/sale_order_batch_product_views.xml", + ], + "license": "LGPL-3", +} diff --git a/nfu_sale_order_packaging/models/__init__.py b/nfu_sale_order_packaging/models/__init__.py new file mode 100644 index 0000000..7b39236 --- /dev/null +++ b/nfu_sale_order_packaging/models/__init__.py @@ -0,0 +1,2 @@ +from . import sale_order_line +from . import sale_order_batch_product diff --git a/nfu_sale_order_packaging/models/sale_order_batch_product.py b/nfu_sale_order_packaging/models/sale_order_batch_product.py new file mode 100644 index 0000000..f2c3cb8 --- /dev/null +++ b/nfu_sale_order_packaging/models/sale_order_batch_product.py @@ -0,0 +1,27 @@ +from odoo import api, fields, models + + +class SaleOrderBatchProduct(models.Model): + _inherit = "sale.order.batch.product" + + open_packaging_qty = fields.Float(compute="_compute_open_packagin_qty") + + @api.depends("sale_order_line_ids.product_uom_qty") + def _compute_open_packagin_qty(self): + for product in self: + open_packaging_qty = product.product_packaging_qty - ( + sum(product.sale_order_line_ids.mapped("product_uom_qty")) % product.product_packaging_qty + ) + product.open_packaging_qty = ( + 0 if open_packaging_qty == product.product_packaging_qty else open_packaging_qty + ) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + + if vals.get("product_id") and not vals.get("product_packaging_id"): + product_id = vals.get("product_id") + packaging = self.env["product.packaging"].search([("product_id", "=", product_id)], limit=1) + vals["product_packaging_id"] = packaging.id + return super().create(vals_list) diff --git a/nfu_sale_order_packaging/models/sale_order_line.py b/nfu_sale_order_packaging/models/sale_order_line.py new file mode 100644 index 0000000..7f6bd31 --- /dev/null +++ b/nfu_sale_order_packaging/models/sale_order_line.py @@ -0,0 +1,20 @@ +from odoo import _, api, fields, models +from odoo.exceptions import UserError + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + product_uom_ordered_qty = fields.Float(string="Ordered Qty", digits="Product Unit of Measure", default=1.0) + product_uom_max_qty = fields.Float(string="Max Qty", digits="Product Unit of Measure") + + @api.constrains("product_uom_qty", "product_uom_max_qty") + def _check_product_uom_qty(self): + for order_line in self: + if order_line.product_uom_max_qty != 0 and order_line.product_uom_qty > order_line.product_uom_max_qty: + raise UserError( + _( + f"{order_line.order_id.name},{order_line.product_id.name}:" + "The quantity must be less than or equal to the maximum quantity." + ) + ) diff --git a/nfu_sale_order_packaging/readme/CONTRIBUTORS.rst b/nfu_sale_order_packaging/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..a4ec453 --- /dev/null +++ b/nfu_sale_order_packaging/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Niels Göttsch +* Matthias Brück \ No newline at end of file diff --git a/nfu_sale_order_packaging/readme/DESCRIPTION.rst b/nfu_sale_order_packaging/readme/DESCRIPTION.rst new file mode 100644 index 0000000..3bd5ae9 --- /dev/null +++ b/nfu_sale_order_packaging/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module adds a minium and a maximum order quantity field to Sale Orders +and adds a packaging default to sale order batch. \ No newline at end of file diff --git a/nfu_sale_order_packaging/readme/HISTORY.rst b/nfu_sale_order_packaging/readme/HISTORY.rst new file mode 100644 index 0000000..765ab9c --- /dev/null +++ b/nfu_sale_order_packaging/readme/HISTORY.rst @@ -0,0 +1 @@ +:1.0.0: Initial module. \ No newline at end of file diff --git a/nfu_sale_order_packaging/static/description/icon.png b/nfu_sale_order_packaging/static/description/icon.png new file mode 100644 index 0000000..1267712 Binary files /dev/null and b/nfu_sale_order_packaging/static/description/icon.png differ diff --git a/nfu_sale_order_packaging/static/description/index.html b/nfu_sale_order_packaging/static/description/index.html new file mode 100644 index 0000000..36dab75 --- /dev/null +++ b/nfu_sale_order_packaging/static/description/index.html @@ -0,0 +1,430 @@ + + + + + +NFU Sale Order Packaging + + + +
+

NFU Sale Order Packaging

+ + +

Beta License: LGPL-3 bruecksen/ife_nfu

+

This module adds a minium and a maximum order quantity field to Sale Orders +and adds a packaging default to sale order batch.

+

Table of contents

+ +
+

Changelog

+ +++ + + + +
1.0.0:Initial module.
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • BAKEUP
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the bruecksen/ife_nfu project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/nfu_sale_order_packaging/views/sale_order_batch_product_views.xml b/nfu_sale_order_packaging/views/sale_order_batch_product_views.xml new file mode 100644 index 0000000..acac722 --- /dev/null +++ b/nfu_sale_order_packaging/views/sale_order_batch_product_views.xml @@ -0,0 +1,25 @@ + + + + sale.order.batch.product.form.nfu + sale.order.batch.product + + + + + + + + + + + + + + diff --git a/nfu_sale_order_packaging/views/sale_order_batch_views.xml b/nfu_sale_order_packaging/views/sale_order_batch_views.xml new file mode 100644 index 0000000..ec519f8 --- /dev/null +++ b/nfu_sale_order_packaging/views/sale_order_batch_views.xml @@ -0,0 +1,31 @@ + + + + sale.order.batch.form.product.min_max_qty + sale.order.batch + + + + + + + + + + + + + (open_packaging_qty != 0) + + + + diff --git a/nfu_sale_order_packaging/views/sale_order_views.xml b/nfu_sale_order_packaging/views/sale_order_views.xml new file mode 100644 index 0000000..4922441 --- /dev/null +++ b/nfu_sale_order_packaging/views/sale_order_views.xml @@ -0,0 +1,16 @@ + + + + sale.order.form.product.min_max_qty + sale.order + + + + + + + + + + + diff --git a/sale_order_batch/__manifest__.py b/sale_order_batch/__manifest__.py index 2c1b66b..b88156b 100644 --- a/sale_order_batch/__manifest__.py +++ b/sale_order_batch/__manifest__.py @@ -9,6 +9,7 @@ "data": [ "data/ir_sequence_data.xml", "views/sale_order_batch_views.xml", + "views/sale_order_batch_product_views.xml", "views/sale_order_views.xml", "views/sale_menus.xml", "security/ir.model.access.csv", diff --git a/sale_order_batch/models/sale_order_batch.py b/sale_order_batch/models/sale_order_batch.py index 59afb0a..1bea44b 100644 --- a/sale_order_batch/models/sale_order_batch.py +++ b/sale_order_batch/models/sale_order_batch.py @@ -47,6 +47,8 @@ class SaleOrderBatch(models.Model): sale_order_ids = fields.One2many("sale.order", "batch_id") sale_order_count = fields.Integer(compute="_compute_sale_order_count") sale_order_line_ids = fields.Many2many("sale.order.line", compute="_compute_sale_order_line_ids", store=True) + invoice_ids = fields.Many2many("account.move", compute="_compute_invoice_ids") + invoice_count = fields.Integer(compute="_compute_invoice_ids") amount_total = fields.Float(compute="_compute_amount_total", string="Total") product_ids = fields.One2many("sale.order.batch.product", "batch_id") product_count = fields.Integer(compute="_compute_product_count") @@ -60,17 +62,24 @@ class SaleOrderBatch(models.Model): else: batch.validity_date = False - @api.depends("sale_order_ids") - def _compute_sale_order_count(self): - for batch in self: - batch.sale_order_count = len(batch.sale_order_ids) - @api.depends("sale_order_ids.order_line") def _compute_sale_order_line_ids(self): for batch in self: order_lines = self.env["sale.order.line"].search([("order_id", "in", batch.sale_order_ids.ids)]) batch.sale_order_line_ids = order_lines + @api.depends("sale_order_ids") + def _compute_sale_order_count(self): + for batch in self: + batch.sale_order_count = len(batch.sale_order_ids) + + @api.depends("sale_order_ids.invoice_ids") + def _compute_invoice_ids(self): + for batch in self: + invoices = batch.sale_order_ids.mapped("invoice_ids") + batch.invoice_ids = invoices + batch.invoice_count = len(invoices) + @api.depends("sale_order_ids.amount_total") def _compute_amount_total(self): for batch in self: @@ -113,6 +122,25 @@ class SaleOrderBatch(models.Model): result = {"type": "ir.actions.act_window_close"} return result + def action_view_invoice(self): + invoices = self.mapped("invoice_ids") + action = self.env["ir.actions.actions"]._for_xml_id("account.action_move_out_invoice_type") + if len(invoices) > 1: + action["domain"] = [("id", "in", invoices.ids)] + elif len(invoices) == 1: + form_view = [(self.env.ref("account.view_move_form").id, "form")] + if "views" in action: + action["views"] = form_view + [(state, view) for state, view in action["views"] if view != "form"] + else: + action["views"] = form_view + action["res_id"] = invoices.id + else: + action = {"type": "ir.actions.act_window_close"} + + context = {"default_move_type": "out_invoice"} + action["context"] = context + return action + def action_confirm(self): for batch in self: orders = batch.with_context(bypass_batch=True).sale_order_ids diff --git a/sale_order_batch/models/sale_order_batch_product.py b/sale_order_batch/models/sale_order_batch_product.py index 60a7d86..a259a84 100644 --- a/sale_order_batch/models/sale_order_batch_product.py +++ b/sale_order_batch/models/sale_order_batch_product.py @@ -14,16 +14,19 @@ class SaleOrderBatchProduct(models.Model): ondelete="cascade", index=True, copy=False, + readonly=True, ) - product_id = fields.Many2one(comodel_name="product.product", required=True, readonly=False) + product_id = fields.Many2one(comodel_name="product.product", required=True, readonly=True) product_template_id = fields.Many2one( "product.template", related="product_id.product_tmpl_id", string="Product Template" ) - sale_order_line_ids = fields.Many2many("sale.order.line", compute="_compute_sale_order_line_ids") + sale_order_line_ids = fields.Many2many( + "sale.order.line", compute="_compute_sale_order_line_ids", store=True, readonly=False + ) product_uom_category_id = fields.Many2one(related="product_id.uom_id.category_id", depends=["product_id"]) - product_uom_qty = fields.Float(compute="_compute_uom_qty") + product_uom_qty = fields.Float(compute="_compute_uom_qty", string="Quantity") product_uom = fields.Many2one(related="product_id.uom_id") product_packaging_id = fields.Many2one("product.packaging") product_packaging_qty = fields.Float(compute="_compute_product_packaging_qty") @@ -35,7 +38,7 @@ class SaleOrderBatchProduct(models.Model): lambda o: o.product_id == product.product_id ) - @api.depends("batch_id.sale_order_line_ids") + @api.depends("sale_order_line_ids.product_uom_qty") def _compute_uom_qty(self): for product in self: product.product_uom_qty = sum(product.sale_order_line_ids.mapped("product_uom_qty")) diff --git a/sale_order_batch/static/description/icon.png b/sale_order_batch/static/description/icon.png new file mode 100644 index 0000000..1267712 Binary files /dev/null and b/sale_order_batch/static/description/icon.png differ diff --git a/sale_order_batch/views/sale_order_batch_product_views.xml b/sale_order_batch/views/sale_order_batch_product_views.xml new file mode 100644 index 0000000..b6e6a46 --- /dev/null +++ b/sale_order_batch/views/sale_order_batch_product_views.xml @@ -0,0 +1,42 @@ + + + + sale.order.batch.product.form + sale.order.batch.product + +
+ +
+
+

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
diff --git a/sale_order_batch/views/sale_order_batch_views.xml b/sale_order_batch/views/sale_order_batch_views.xml index 2eb1ecc..88147e8 100644 --- a/sale_order_batch/views/sale_order_batch_views.xml +++ b/sale_order_batch/views/sale_order_batch_views.xml @@ -29,6 +29,19 @@ type="object" attrs="{'invisible': [('state', '!=','open')]}" /> + +

@@ -76,13 +98,21 @@ + + @@ -94,8 +124,9 @@ > + - + @@ -105,7 +136,7 @@ - + diff --git a/sale_order_batch_stock/README.rst b/sale_order_batch_stock/README.rst new file mode 100644 index 0000000..7e407bb --- /dev/null +++ b/sale_order_batch_stock/README.rst @@ -0,0 +1,65 @@ +============================== +Sale Order Batch Stock Binding +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c32b4440b58e98f3bea5539d78dfa2916d64aebc757c140d78b67b2a2ce288da + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-bruecksen%2Fife_nfu-lightgray.png?logo=github + :target: https://github.com/bruecksen/ife_nfu/tree/16.0/sale_order_batch_stock + :alt: bruecksen/ife_nfu + +|badge1| |badge2| |badge3| + +This module adds Deliverys to Sale ORder Batch Views. + +**Table of contents** + +.. contents:: + :local: + +Changelog +========= + +:0.0.1: Initial module. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* BAKEUP + +Contributors +~~~~~~~~~~~~ + +* Niels Göttsch + +Maintainers +~~~~~~~~~~~ + +This module is part of the `bruecksen/ife_nfu `_ project on GitHub. + +You are welcome to contribute. diff --git a/sale_order_batch_stock/__init__.py b/sale_order_batch_stock/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/sale_order_batch_stock/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_order_batch_stock/__manifest__.py b/sale_order_batch_stock/__manifest__.py new file mode 100644 index 0000000..950a05a --- /dev/null +++ b/sale_order_batch_stock/__manifest__.py @@ -0,0 +1,12 @@ +{ + "name": "Sale Order Batch Stock Binding", + "summary": "Sale Order Batch Stock Bindingh", + "author": "BAKEUP", + "website": "https://www.bakeup.org", + "category": "hidden", + "version": "16.0.0.0.1", + "depends": ["sale_order_batch", "sale_stock"], + "data": ["views/sale_order_batch_views.xml"], + "autoinstall": "True", + "license": "LGPL-3", +} diff --git a/sale_order_batch_stock/models/__init__.py b/sale_order_batch_stock/models/__init__.py new file mode 100644 index 0000000..b2dc7f4 --- /dev/null +++ b/sale_order_batch_stock/models/__init__.py @@ -0,0 +1 @@ +from . import sale_order_batch diff --git a/sale_order_batch_stock/models/sale_order_batch.py b/sale_order_batch_stock/models/sale_order_batch.py new file mode 100644 index 0000000..ff9a9e8 --- /dev/null +++ b/sale_order_batch_stock/models/sale_order_batch.py @@ -0,0 +1,21 @@ +from odoo import api, fields, models + + +STATES = [("open", "Open"), ("close", "Close")] + + +class SaleOrderBatch(models.Model): + _inherit = "sale.order.batch" + + picking_ids = fields.Many2many("stock.picking", compute="_compute_picking_ids", string="Transfers") + delivery_count = fields.Integer(string="Delivery Orders", compute="_compute_picking_ids") + + @api.depends("sale_order_ids.picking_ids") + def _compute_picking_ids(self): + for batch in self: + pickings = batch.sale_order_ids.mapped("picking_ids") + batch.picking_ids = pickings + batch.delivery_count = len(pickings) + + def action_view_delivery(self): + return self.env["sale.order"]._get_action_view_picking(self.picking_ids) diff --git a/sale_order_batch_stock/readme/CONTRIBUTORS.rst b/sale_order_batch_stock/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..fda28e1 --- /dev/null +++ b/sale_order_batch_stock/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Niels Göttsch \ No newline at end of file diff --git a/sale_order_batch_stock/readme/DESCRIPTION.rst b/sale_order_batch_stock/readme/DESCRIPTION.rst new file mode 100644 index 0000000..2836d2a --- /dev/null +++ b/sale_order_batch_stock/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module adds Deliverys to Sale ORder Batch Views. diff --git a/sale_order_batch_stock/readme/HISTORY.rst b/sale_order_batch_stock/readme/HISTORY.rst new file mode 100644 index 0000000..e986fe7 --- /dev/null +++ b/sale_order_batch_stock/readme/HISTORY.rst @@ -0,0 +1 @@ +:0.0.1: Initial module. \ No newline at end of file diff --git a/sale_order_batch_stock/static/description/icon.png b/sale_order_batch_stock/static/description/icon.png new file mode 100644 index 0000000..1267712 Binary files /dev/null and b/sale_order_batch_stock/static/description/icon.png differ diff --git a/sale_order_batch_stock/static/description/index.html b/sale_order_batch_stock/static/description/index.html new file mode 100644 index 0000000..515a69f --- /dev/null +++ b/sale_order_batch_stock/static/description/index.html @@ -0,0 +1,428 @@ + + + + + +Sale Order Batch Stock Binding + + + +
+

Sale Order Batch Stock Binding

+ + +

Beta License: LGPL-3 bruecksen/ife_nfu

+

This module adds Deliverys to Sale ORder Batch Views.

+

Table of contents

+ +
+

Changelog

+ +++ + + + +
0.0.1:Initial module.
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • BAKEUP
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the bruecksen/ife_nfu project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/sale_order_batch_stock/views/sale_order_batch_views.xml b/sale_order_batch_stock/views/sale_order_batch_views.xml new file mode 100644 index 0000000..19a9e9e --- /dev/null +++ b/sale_order_batch_stock/views/sale_order_batch_views.xml @@ -0,0 +1,22 @@ + + + + sale.order.batch.form.stock + sale.order.batch + + + + + + + +