From 27d6b2bc80eca9c9cd44def8d402a0725437b049 Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Thu, 13 Aug 2020 15:24:58 +0200
Subject: [PATCH 01/21] Create module sale_stock_mto_as_mts_orderpoint
---
sale_stock_mto_as_mts_orderpoint/__init__.py | 1 +
.../__manifest__.py | 15 ++++
.../models/__init__.py | 4 +
.../models/product.py | 45 +++++++++++
.../models/sale_order.py | 78 +++++++++++++++++++
.../models/stock_move.py | 18 +++++
.../models/stock_warehouse.py | 11 +++
.../readme/CONFIGURATION.rst | 12 +++
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 13 ++++
.../readme/ROADMAP.rst | 1 +
.../tests/__init__.py | 1 +
.../test_sale_stock_mto_as_mts_orderpoint.py | 67 ++++++++++++++++
13 files changed, 267 insertions(+)
create mode 100644 sale_stock_mto_as_mts_orderpoint/__init__.py
create mode 100644 sale_stock_mto_as_mts_orderpoint/__manifest__.py
create mode 100644 sale_stock_mto_as_mts_orderpoint/models/__init__.py
create mode 100644 sale_stock_mto_as_mts_orderpoint/models/product.py
create mode 100644 sale_stock_mto_as_mts_orderpoint/models/sale_order.py
create mode 100644 sale_stock_mto_as_mts_orderpoint/models/stock_move.py
create mode 100644 sale_stock_mto_as_mts_orderpoint/models/stock_warehouse.py
create mode 100644 sale_stock_mto_as_mts_orderpoint/readme/CONFIGURATION.rst
create mode 100644 sale_stock_mto_as_mts_orderpoint/readme/CONTRIBUTORS.rst
create mode 100644 sale_stock_mto_as_mts_orderpoint/readme/DESCRIPTION.rst
create mode 100644 sale_stock_mto_as_mts_orderpoint/readme/ROADMAP.rst
create mode 100644 sale_stock_mto_as_mts_orderpoint/tests/__init__.py
create mode 100644 sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
diff --git a/sale_stock_mto_as_mts_orderpoint/__init__.py b/sale_stock_mto_as_mts_orderpoint/__init__.py
new file mode 100644
index 00000000..0650744f
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/sale_stock_mto_as_mts_orderpoint/__manifest__.py b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
new file mode 100644
index 00000000..75a40e97
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
@@ -0,0 +1,15 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+{
+ "name": "Sale Stock Mto As Mts Orderpoint",
+ "summary": "Materialize need from MTO route through orderpoint",
+ "version": "13.0.1.2.0",
+ "development_status": "Alpha",
+ "category": "Operations/Inventory/Delivery",
+ "website": "https://github.com/OCA/stock-logistics-workflow",
+ "author": "Camptocamp, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "application": False,
+ "installable": True,
+ "depends": ["sale_stock", "stock_orderpoint_manual_procurement"],
+}
diff --git a/sale_stock_mto_as_mts_orderpoint/models/__init__.py b/sale_stock_mto_as_mts_orderpoint/models/__init__.py
new file mode 100644
index 00000000..e5bab062
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/models/__init__.py
@@ -0,0 +1,4 @@
+from . import product
+from . import sale_order
+from . import stock_move
+from . import stock_warehouse
diff --git a/sale_stock_mto_as_mts_orderpoint/models/product.py b/sale_stock_mto_as_mts_orderpoint/models/product.py
new file mode 100644
index 00000000..95f998d2
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/models/product.py
@@ -0,0 +1,45 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import models
+
+
+class ProductTemplate(models.Model):
+
+ _inherit = "product.template"
+
+ def write(self, vals):
+ # Archive orderpoints when MTO route is removed
+ if "route_ids" not in vals:
+ return super().write(vals)
+ mto_products = self._filter_mto_products()
+ res = super().write(vals)
+ not_mto_products = self._filter_mto_products(mto=False)
+ # products to update are the intersection of both recordsets
+ products_to_update = mto_products & not_mto_products
+ if products_to_update:
+ products_to_update._archive_orderpoints_on_mto_removal()
+ return res
+
+ def _filter_mto_products(self, mto=True):
+ mto_route = self.env.ref("stock.route_warehouse0_mto", raise_if_not_found=False)
+ if mto:
+ func = lambda p: mto_route in p.route_ids # noqa
+ else:
+ func = lambda p: mto_route not in p.route_ids # noqa
+ return self.filtered(func)
+
+ def _get_orderpoints_to_archive_domain(self):
+ warehouses = self.env["stock.warehouse"].search([])
+ locations = warehouses._get_locations_for_mto_orderpoints()
+ return [
+ ("product_id", "in", self.mapped("product_variant_ids").ids),
+ ("product_min_qty", "=", 0.0),
+ ("product_max_qty", "=", 0.0),
+ ("location_id", "in", locations.ids),
+ ]
+
+ def _archive_orderpoints_on_mto_removal(self):
+ domain = self._get_orderpoints_to_archive_domain()
+ ops = self.env["stock.warehouse.orderpoint"].search(domain)
+ if ops:
+ ops.write({"active": False})
diff --git a/sale_stock_mto_as_mts_orderpoint/models/sale_order.py b/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
new file mode 100644
index 00000000..0cf2ccf9
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
@@ -0,0 +1,78 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import models
+
+
+class SaleOrderLine(models.Model):
+
+ _inherit = "sale.order.line"
+
+ def _action_launch_stock_rule(self, previous_product_uom_qty=False):
+ res = super()._action_launch_stock_rule(
+ previous_product_uom_qty=previous_product_uom_qty
+ )
+ self._run_orderpoints_for_mto_products()
+ return res
+
+ def _run_orderpoints_for_mto_products(self):
+ orderpoints_to_procure_ids = []
+ mto_route = self.env.ref("stock.route_warehouse0_mto", raise_if_not_found=False)
+ if not mto_route:
+ return
+ for line in self:
+ delivery_move = line.move_ids.filtered(
+ lambda m: m.picking_id.picking_type_code == "outgoing"
+ )
+ if (
+ not delivery_move.is_from_mto_route
+ or mto_route not in line.product_id.route_ids
+ ):
+ continue
+ orderpoint = line._get_mto_orderpoint()
+ if orderpoint.procure_recommended_qty:
+ orderpoints_to_procure_ids.append(orderpoint.id)
+ wiz = (
+ self.env["make.procurement.orderpoint"]
+ .with_context(
+ **{
+ "active_model": "stock.warehouse.orderpoint",
+ "active_ids": orderpoints_to_procure_ids,
+ }
+ )
+ .create({})
+ )
+ wiz.make_procurement()
+
+ def _get_mto_orderpoint(self):
+ self.ensure_one()
+ warehouse = self.warehouse_id or self.order_id.warehouse_id
+ orderpoint = (
+ self.env["stock.warehouse.orderpoint"]
+ .with_context(active_test=False)
+ .search(
+ [
+ ("product_id", "=", self.product_id.id),
+ (
+ "location_id",
+ "=",
+ warehouse._get_locations_for_mto_orderpoints().id,
+ ),
+ ],
+ limit=1,
+ )
+ )
+ if orderpoint and not orderpoint.active:
+ orderpoint.write(
+ {"active": True, "product_min_qty": 0.0, "product_max_qty": 0.0}
+ )
+ elif not orderpoint:
+ orderpoint = self.env["stock.warehouse.orderpoint"].create(
+ {
+ "product_id": self.product_id.id,
+ "warehouse_id": warehouse.id,
+ "location_id": warehouse._get_locations_for_mto_orderpoints().id,
+ "product_min_qty": 0.0,
+ "product_max_qty": 0.0,
+ }
+ )
+ return orderpoint
diff --git a/sale_stock_mto_as_mts_orderpoint/models/stock_move.py b/sale_stock_mto_as_mts_orderpoint/models/stock_move.py
new file mode 100644
index 00000000..a9039460
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/models/stock_move.py
@@ -0,0 +1,18 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import fields, models
+
+
+class StockMove(models.Model):
+
+ _inherit = "stock.move"
+
+ is_from_mto_route = fields.Boolean(compute="_compute_is_from_mto_route")
+
+ def _compute_is_from_mto_route(self):
+ mto_route = self.env.ref("stock.route_warehouse0_mto", raise_if_not_found=False)
+ if not mto_route:
+ self.update({"is_from_mto_route": False})
+ else:
+ for move in self:
+ move.is_from_mto_route = move.rule_id.route_id == mto_route
diff --git a/sale_stock_mto_as_mts_orderpoint/models/stock_warehouse.py b/sale_stock_mto_as_mts_orderpoint/models/stock_warehouse.py
new file mode 100644
index 00000000..2d742d1b
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/models/stock_warehouse.py
@@ -0,0 +1,11 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import models
+
+
+class StockWarehouse(models.Model):
+
+ _inherit = "stock.warehouse"
+
+ def _get_locations_for_mto_orderpoints(self):
+ return self.mapped("lot_stock_id")
diff --git a/sale_stock_mto_as_mts_orderpoint/readme/CONFIGURATION.rst b/sale_stock_mto_as_mts_orderpoint/readme/CONFIGURATION.rst
new file mode 100644
index 00000000..db9f46d6
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/readme/CONFIGURATION.rst
@@ -0,0 +1,12 @@
+On the original MTO route, you have two options to configure the rule to pull
+from Stock:
+
+* Keep the triggering of another rule as Supply Method on stock.rule, will
+ ensure that the need is materialized by the procure_recommended_qty on the
+ orderpoint, if the ensuing procurement (purchase order/manufacturing order)
+ having the MTO rule as origin is canceled.
+
+* Change the Supply Method on stock.rule to Take From Stock, will ensure that
+ the need is materialized by the procure_recommended_qty on the orderpoint,
+ if the ensuing procurement (purchase order/manufacturing order) having the
+ orderpoint as origin is canceled.
diff --git a/sale_stock_mto_as_mts_orderpoint/readme/CONTRIBUTORS.rst b/sale_stock_mto_as_mts_orderpoint/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000..e31e2f0c
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Akim Juillerat
diff --git a/sale_stock_mto_as_mts_orderpoint/readme/DESCRIPTION.rst b/sale_stock_mto_as_mts_orderpoint/readme/DESCRIPTION.rst
new file mode 100644
index 00000000..4a64db20
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/readme/DESCRIPTION.rst
@@ -0,0 +1,13 @@
+This module aims to materialize the triggering of another stock rule through
+an orderpoint in the procurement of MTO products from a sale order.
+
+When a sales order is confirmed, if the delivery order move is generated by
+the stock rule linked to the standard MTO route, and the MTO route is marked
+on the product, an orderpoint will be created on the Stock location of the
+warehouse, with min/max quantities of zero.
+
+This allows to regenerate procurement according to the procure_recommended_qty
+using module `stock_orderpoint_manual_procurement`.
+
+Finally, orderpoints with min/max quantities of zero will be archived if the
+MTO route is removed on the product.
diff --git a/sale_stock_mto_as_mts_orderpoint/readme/ROADMAP.rst b/sale_stock_mto_as_mts_orderpoint/readme/ROADMAP.rst
new file mode 100644
index 00000000..cc94639c
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/readme/ROADMAP.rst
@@ -0,0 +1 @@
+* Do not rely on original MTO record and have something configurable instead.
diff --git a/sale_stock_mto_as_mts_orderpoint/tests/__init__.py b/sale_stock_mto_as_mts_orderpoint/tests/__init__.py
new file mode 100644
index 00000000..ca7ff99a
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_sale_stock_mto_as_mts_orderpoint
diff --git a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
new file mode 100644
index 00000000..80fd6530
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
@@ -0,0 +1,67 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo.tests.common import Form, SavepointCase
+
+
+class TestSaleStockMtoAsMtsOrderpoint(SavepointCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
+ ref = cls.env.ref
+ cls.partner = ref("base.res_partner_2")
+ cls.product = cls.env["product.product"].create(
+ {"name": "Test MTO", "type": "product"}
+ )
+ cls.vendor_partner = ref("base.res_partner_12")
+ cls.env["product.supplierinfo"].create(
+ {
+ "name": cls.vendor_partner.id,
+ "product_tmpl_id": cls.product.product_tmpl_id.id,
+ "min_qty": 1.0,
+ "price": 1.0,
+ }
+ )
+
+ cls.warehouse = ref("stock.warehouse0")
+
+ cls.mto_route = ref("stock.route_warehouse0_mto")
+ cls.buy_route = ref("purchase_stock.route_warehouse0_buy")
+ cls.product.write({"route_ids": [(6, 0, [cls.mto_route.id, cls.buy_route.id])]})
+
+ @classmethod
+ def _create_sale_order(cls):
+ sale_form = Form(cls.env["sale.order"])
+ sale_form.partner_id = cls.partner
+ sale_form.warehouse_id = cls.warehouse
+ with sale_form.order_line.new() as line_form:
+ line_form.product_id = cls.product
+ line_form.product_uom_qty = 1
+ return sale_form.save()
+
+ def test_mto_as_mts_orderpoint(self):
+ order = self._create_sale_order()
+ orderpoint = self.env["stock.warehouse.orderpoint"].search(
+ [("product_id", "=", self.product.id)]
+ )
+ self.assertFalse(orderpoint)
+ order.action_confirm()
+ orderpoint = self.env["stock.warehouse.orderpoint"].search(
+ [("product_id", "=", self.product.id)]
+ )
+ self.assertEqual(
+ orderpoint.location_id, self.warehouse._get_locations_for_mto_orderpoints(),
+ )
+ self.assertAlmostEqual(orderpoint.product_min_qty, 0.0)
+ self.assertAlmostEqual(orderpoint.product_max_qty, 0.0)
+ self.product.write({"route_ids": [(5, 0, 0)]})
+ orderpoint = self.env["stock.warehouse.orderpoint"].search(
+ [("product_id", "=", self.product.id)]
+ )
+ self.assertFalse(orderpoint)
+ orderpoint = (
+ self.env["stock.warehouse.orderpoint"]
+ .with_context(active_test=False)
+ .search([("product_id", "=", self.product.id)])
+ )
+ self.assertTrue(orderpoint)
From f1b0cb2e7c2d5901571f7ae570b18ecbe8e88fb4 Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Tue, 18 Aug 2020 14:44:56 +0200
Subject: [PATCH 02/21] Check move state in selection of delivery move
---
sale_stock_mto_as_mts_orderpoint/models/sale_order.py | 1 +
.../tests/test_sale_stock_mto_as_mts_orderpoint.py | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/sale_stock_mto_as_mts_orderpoint/models/sale_order.py b/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
index 0cf2ccf9..edc76333 100644
--- a/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
+++ b/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
@@ -22,6 +22,7 @@ def _run_orderpoints_for_mto_products(self):
for line in self:
delivery_move = line.move_ids.filtered(
lambda m: m.picking_id.picking_type_code == "outgoing"
+ and m.state not in ("done", "cancel")
)
if (
not delivery_move.is_from_mto_route
diff --git a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
index 80fd6530..a39a908a 100644
--- a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
+++ b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
@@ -65,3 +65,11 @@ def test_mto_as_mts_orderpoint(self):
.search([("product_id", "=", self.product.id)])
)
self.assertTrue(orderpoint)
+
+ def test_cancel_sale_order_orderpoint(self):
+ order = self._create_sale_order()
+ order.action_confirm()
+ order.action_cancel()
+ order.action_draft()
+ order.action_confirm()
+ self.assertEqual(order.state, "sale")
From 8c9d578a6e3ac5ed7d4051cb5b73594caec4c78a Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Thu, 27 Aug 2020 08:47:11 +0000
Subject: [PATCH 03/21] [UPD] Update sale_stock_mto_as_mts_orderpoint.pot
---
.../i18n/sale_stock_mto_as_mts_orderpoint.pot | 39 +++++++++++++++++++
1 file changed, 39 insertions(+)
create mode 100644 sale_stock_mto_as_mts_orderpoint/i18n/sale_stock_mto_as_mts_orderpoint.pot
diff --git a/sale_stock_mto_as_mts_orderpoint/i18n/sale_stock_mto_as_mts_orderpoint.pot b/sale_stock_mto_as_mts_orderpoint/i18n/sale_stock_mto_as_mts_orderpoint.pot
new file mode 100644
index 00000000..c119b901
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/i18n/sale_stock_mto_as_mts_orderpoint.pot
@@ -0,0 +1,39 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_stock_mto_as_mts_orderpoint
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: sale_stock_mto_as_mts_orderpoint
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_stock_move__is_from_mto_route
+msgid "Is From Mto Route"
+msgstr ""
+
+#. module: sale_stock_mto_as_mts_orderpoint
+#: model:ir.model,name:sale_stock_mto_as_mts_orderpoint.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_stock_mto_as_mts_orderpoint
+#: model:ir.model,name:sale_stock_mto_as_mts_orderpoint.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale_stock_mto_as_mts_orderpoint
+#: model:ir.model,name:sale_stock_mto_as_mts_orderpoint.model_stock_move
+msgid "Stock Move"
+msgstr ""
+
+#. module: sale_stock_mto_as_mts_orderpoint
+#: model:ir.model,name:sale_stock_mto_as_mts_orderpoint.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
From dff07a60fd4f9b92689568278894ed5de58befe9 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Thu, 27 Aug 2020 08:59:22 +0000
Subject: [PATCH 04/21] [UPD] README.rst
---
sale_stock_mto_as_mts_orderpoint/README.rst | 95 ++++
.../static/description/index.html | 441 ++++++++++++++++++
2 files changed, 536 insertions(+)
create mode 100644 sale_stock_mto_as_mts_orderpoint/README.rst
create mode 100644 sale_stock_mto_as_mts_orderpoint/static/description/index.html
diff --git a/sale_stock_mto_as_mts_orderpoint/README.rst b/sale_stock_mto_as_mts_orderpoint/README.rst
new file mode 100644
index 00000000..2a153665
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/README.rst
@@ -0,0 +1,95 @@
+================================
+Sale Stock Mto As Mts Orderpoint
+================================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Alpha
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--workflow-lightgray.png?logo=github
+ :target: https://github.com/OCA/stock-logistics-workflow/tree/13.0/sale_stock_mto_as_mts_orderpoint
+ :alt: OCA/stock-logistics-workflow
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/stock-logistics-workflow-13-0/stock-logistics-workflow-13-0-sale_stock_mto_as_mts_orderpoint
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/154/13.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module aims to materialize the triggering of another stock rule through
+an orderpoint in the procurement of MTO products from a sale order.
+
+When a sales order is confirmed, if the delivery order move is generated by
+the stock rule linked to the standard MTO route, and the MTO route is marked
+on the product, an orderpoint will be created on the Stock location of the
+warehouse, with min/max quantities of zero.
+
+This allows to regenerate procurement according to the procure_recommended_qty
+using module `stock_orderpoint_manual_procurement`.
+
+Finally, orderpoints with min/max quantities of zero will be archived if the
+MTO route is removed on the product.
+
+.. IMPORTANT::
+ This is an alpha version, the data model and design can change at any time without warning.
+ Only for development or testing purpose, do not use in production.
+ `More details on development status `_
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Known issues / Roadmap
+======================
+
+* Do not rely on original MTO record and have something configurable instead.
+
+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 smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Camptocamp
+
+Contributors
+~~~~~~~~~~~~
+
+* Akim Juillerat
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/stock-logistics-workflow `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/sale_stock_mto_as_mts_orderpoint/static/description/index.html b/sale_stock_mto_as_mts_orderpoint/static/description/index.html
new file mode 100644
index 00000000..e2439cac
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/static/description/index.html
@@ -0,0 +1,441 @@
+
+
+
+
+
+
+Sale Stock Mto As Mts Orderpoint
+
+
+
+
+
Sale Stock Mto As Mts Orderpoint
+
+
+
+
This module aims to materialize the triggering of another stock rule through
+an orderpoint in the procurement of MTO products from a sale order.
+
When a sales order is confirmed, if the delivery order move is generated by
+the stock rule linked to the standard MTO route, and the MTO route is marked
+on the product, an orderpoint will be created on the Stock location of the
+warehouse, with min/max quantities of zero.
+
This allows to regenerate procurement according to the procure_recommended_qty
+using module stock_orderpoint_manual_procurement.
+
Finally, orderpoints with min/max quantities of zero will be archived if the
+MTO route is removed on the product.
+
+
Important
+
This is an alpha version, the data model and design can change at any time without warning.
+Only for development or testing purpose, do not use in production.
+More details on development status
+
+
Table of contents
+
+
+
+
+- Do not rely on original MTO record and have something configurable instead.
+
+
+
+
+
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 smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/stock-logistics-workflow project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
From 290d152706dc91f02804ca757e88ca4e70e2e2ae Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Thu, 27 Aug 2020 08:59:22 +0000
Subject: [PATCH 05/21] [ADD] icon.png
---
.../static/description/icon.png | Bin 0 -> 9455 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 sale_stock_mto_as_mts_orderpoint/static/description/icon.png
diff --git a/sale_stock_mto_as_mts_orderpoint/static/description/icon.png b/sale_stock_mto_as_mts_orderpoint/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
From 3a5305b7d0c1272a3d11641b4d78afe73e346055 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Thu, 27 Aug 2020 08:59:22 +0000
Subject: [PATCH 06/21] sale_stock_mto_as_mts_orderpoint 13.0.1.2.1
---
sale_stock_mto_as_mts_orderpoint/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sale_stock_mto_as_mts_orderpoint/__manifest__.py b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
index 75a40e97..817ea733 100644
--- a/sale_stock_mto_as_mts_orderpoint/__manifest__.py
+++ b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Sale Stock Mto As Mts Orderpoint",
"summary": "Materialize need from MTO route through orderpoint",
- "version": "13.0.1.2.0",
+ "version": "13.0.1.2.1",
"development_status": "Alpha",
"category": "Operations/Inventory/Delivery",
"website": "https://github.com/OCA/stock-logistics-workflow",
From 6fd88427da145c218b29439460dabe0c976880c2 Mon Sep 17 00:00:00 2001
From: Thierry Ducrest
Date: Wed, 9 Dec 2020 14:26:25 +0100
Subject: [PATCH 07/21] [13.0][FIX] sale_stock_mto_as_mts_orderpoint
For user without proper rights the confirmation of a sale.order can lead
to an access error on the orderpoint creation.
The sudo fixes that.
---
.../models/sale_order.py | 22 ++++++++++++-------
.../test_sale_stock_mto_as_mts_orderpoint.py | 13 +++++++++++
2 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/sale_stock_mto_as_mts_orderpoint/models/sale_order.py b/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
index edc76333..db0d8140 100644
--- a/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
+++ b/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
@@ -67,13 +67,19 @@ def _get_mto_orderpoint(self):
{"active": True, "product_min_qty": 0.0, "product_max_qty": 0.0}
)
elif not orderpoint:
- orderpoint = self.env["stock.warehouse.orderpoint"].create(
- {
- "product_id": self.product_id.id,
- "warehouse_id": warehouse.id,
- "location_id": warehouse._get_locations_for_mto_orderpoints().id,
- "product_min_qty": 0.0,
- "product_max_qty": 0.0,
- }
+ orderpoint = (
+ self.env["stock.warehouse.orderpoint"]
+ .sudo()
+ .create(
+ {
+ "product_id": self.product_id.id,
+ "warehouse_id": warehouse.id,
+ "location_id": (
+ warehouse._get_locations_for_mto_orderpoints().id
+ ),
+ "product_min_qty": 0.0,
+ "product_max_qty": 0.0,
+ }
+ )
)
return orderpoint
diff --git a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
index a39a908a..fb3aa071 100644
--- a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
+++ b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
@@ -73,3 +73,16 @@ def test_cancel_sale_order_orderpoint(self):
order.action_draft()
order.action_confirm()
self.assertEqual(order.state, "sale")
+
+ def test_confirm_mto_as_mts_sudo_needed(self):
+ """Check access right needed to confirm sale.
+
+ A sale manager user with no right on inventory will raise an access
+ right error on confirmation.
+ This is the why of the sudo in `sale_stock_mto_as_mts_orderpoint`
+ """
+ user = self.env.ref("base.user_demo")
+ sale_group = self.env.ref("sales_team.group_sale_manager")
+ sale_group.users = [(4, user.id)]
+ order = self._create_sale_order()
+ order.with_user(user).action_confirm()
From cd7682f01b3e193b3c1fb29bc4cbe9c6a24fa149 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 22 Dec 2020 07:28:43 +0000
Subject: [PATCH 08/21] sale_stock_mto_as_mts_orderpoint 13.0.1.2.2
---
sale_stock_mto_as_mts_orderpoint/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sale_stock_mto_as_mts_orderpoint/__manifest__.py b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
index 817ea733..0f09afe6 100644
--- a/sale_stock_mto_as_mts_orderpoint/__manifest__.py
+++ b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Sale Stock Mto As Mts Orderpoint",
"summary": "Materialize need from MTO route through orderpoint",
- "version": "13.0.1.2.1",
+ "version": "13.0.1.2.2",
"development_status": "Alpha",
"category": "Operations/Inventory/Delivery",
"website": "https://github.com/OCA/stock-logistics-workflow",
From a4b8aa09e425ab0647f3b30be7efd80dce1d10c7 Mon Sep 17 00:00:00 2001
From: "dung.tran"
Date: Tue, 12 Jan 2021 00:23:23 +0700
Subject: [PATCH 09/21] [IMP] sale_stock_mto_as_mts_orderpoint: black, isort,
prettier
---
.../tests/test_sale_stock_mto_as_mts_orderpoint.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
index fb3aa071..c1904cc9 100644
--- a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
+++ b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
@@ -50,7 +50,8 @@ def test_mto_as_mts_orderpoint(self):
[("product_id", "=", self.product.id)]
)
self.assertEqual(
- orderpoint.location_id, self.warehouse._get_locations_for_mto_orderpoints(),
+ orderpoint.location_id,
+ self.warehouse._get_locations_for_mto_orderpoints(),
)
self.assertAlmostEqual(orderpoint.product_min_qty, 0.0)
self.assertAlmostEqual(orderpoint.product_max_qty, 0.0)
From 210247808bce2cb7f0dfc048d696182b566c649c Mon Sep 17 00:00:00 2001
From: "dung.tran"
Date: Tue, 12 Jan 2021 00:23:40 +0700
Subject: [PATCH 10/21] [MIG] sale_stock_mto_as_mts_orderpoint: Migration to
14.0
---
sale_stock_mto_as_mts_orderpoint/README.rst | 21 +++++++++++++-----
.../__manifest__.py | 5 ++++-
.../data/stock_data.xml | 10 +++++++++
.../readme/CONTRIBUTORS.rst | 4 ++++
.../readme/CREDITS.rst | 3 +++
.../static/description/index.html | 22 ++++++++++++++-----
.../test_sale_stock_mto_as_mts_orderpoint.py | 1 +
7 files changed, 55 insertions(+), 11 deletions(-)
create mode 100644 sale_stock_mto_as_mts_orderpoint/data/stock_data.xml
create mode 100644 sale_stock_mto_as_mts_orderpoint/readme/CREDITS.rst
diff --git a/sale_stock_mto_as_mts_orderpoint/README.rst b/sale_stock_mto_as_mts_orderpoint/README.rst
index 2a153665..c026cf4f 100644
--- a/sale_stock_mto_as_mts_orderpoint/README.rst
+++ b/sale_stock_mto_as_mts_orderpoint/README.rst
@@ -14,13 +14,13 @@ Sale Stock Mto As Mts Orderpoint
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--workflow-lightgray.png?logo=github
- :target: https://github.com/OCA/stock-logistics-workflow/tree/13.0/sale_stock_mto_as_mts_orderpoint
+ :target: https://github.com/OCA/stock-logistics-workflow/tree/14.0/sale_stock_mto_as_mts_orderpoint
:alt: OCA/stock-logistics-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/stock-logistics-workflow-13-0/stock-logistics-workflow-13-0-sale_stock_mto_as_mts_orderpoint
+ :target: https://translation.odoo-community.org/projects/stock-logistics-workflow-14-0/stock-logistics-workflow-14-0-sale_stock_mto_as_mts_orderpoint
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/154/13.0
+ :target: https://runbot.odoo-community.org/runbot/154/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -60,7 +60,7 @@ 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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -77,6 +77,17 @@ Contributors
* Akim Juillerat
+Trobz:
+
+* Dung Tran
+
+Other credits
+~~~~~~~~~~~~~
+
+The development of this module has been financially supported by:
+
+* Camptocamp
+
Maintainers
~~~~~~~~~~~
@@ -90,6 +101,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/stock-logistics-workflow `_ project on GitHub.
+This module is part of the `OCA/stock-logistics-workflow `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/sale_stock_mto_as_mts_orderpoint/__manifest__.py b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
index 0f09afe6..7cf5e7bb 100644
--- a/sale_stock_mto_as_mts_orderpoint/__manifest__.py
+++ b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Sale Stock Mto As Mts Orderpoint",
"summary": "Materialize need from MTO route through orderpoint",
- "version": "13.0.1.2.2",
+ "version": "14.0.1.0.0",
"development_status": "Alpha",
"category": "Operations/Inventory/Delivery",
"website": "https://github.com/OCA/stock-logistics-workflow",
@@ -12,4 +12,7 @@
"application": False,
"installable": True,
"depends": ["sale_stock", "stock_orderpoint_manual_procurement"],
+ "data": [
+ "data/stock_data.xml",
+ ],
}
diff --git a/sale_stock_mto_as_mts_orderpoint/data/stock_data.xml b/sale_stock_mto_as_mts_orderpoint/data/stock_data.xml
new file mode 100644
index 00000000..eb14e36a
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/data/stock_data.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/sale_stock_mto_as_mts_orderpoint/readme/CONTRIBUTORS.rst b/sale_stock_mto_as_mts_orderpoint/readme/CONTRIBUTORS.rst
index e31e2f0c..6c8e1741 100644
--- a/sale_stock_mto_as_mts_orderpoint/readme/CONTRIBUTORS.rst
+++ b/sale_stock_mto_as_mts_orderpoint/readme/CONTRIBUTORS.rst
@@ -1 +1,5 @@
* Akim Juillerat
+
+Trobz:
+
+* Dung Tran
diff --git a/sale_stock_mto_as_mts_orderpoint/readme/CREDITS.rst b/sale_stock_mto_as_mts_orderpoint/readme/CREDITS.rst
new file mode 100644
index 00000000..f5cc070c
--- /dev/null
+++ b/sale_stock_mto_as_mts_orderpoint/readme/CREDITS.rst
@@ -0,0 +1,3 @@
+The development of this module has been financially supported by:
+
+* Camptocamp
diff --git a/sale_stock_mto_as_mts_orderpoint/static/description/index.html b/sale_stock_mto_as_mts_orderpoint/static/description/index.html
index e2439cac..f9d4d3f4 100644
--- a/sale_stock_mto_as_mts_orderpoint/static/description/index.html
+++ b/sale_stock_mto_as_mts_orderpoint/static/description/index.html
@@ -367,7 +367,7 @@ Sale Stock Mto As Mts Orderpoint
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module aims to materialize the triggering of another stock rule through
an orderpoint in the procurement of MTO products from a sale order.
When a sales order is confirmed, if the delivery order move is generated by
@@ -392,7 +392,8 @@
Sale Stock Mto As Mts Orderpoint
Credits
@@ -408,7 +409,7 @@
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 smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -424,15 +425,26 @@
+
Trobz:
+
+
+
+
+
The development of this module has been financially supported by:
+
-
+
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/stock-logistics-workflow project on GitHub.
+
This module is part of the OCA/stock-logistics-workflow project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
index c1904cc9..ad7d268d 100644
--- a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
+++ b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
@@ -49,6 +49,7 @@ def test_mto_as_mts_orderpoint(self):
orderpoint = self.env["stock.warehouse.orderpoint"].search(
[("product_id", "=", self.product.id)]
)
+
self.assertEqual(
orderpoint.location_id,
self.warehouse._get_locations_for_mto_orderpoints(),
From bc4c41380f03351acfe7b93ed1d62350e93922f3 Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Thu, 7 Oct 2021 07:52:34 +0000
Subject: [PATCH 11/21] [UPD] Update sale_stock_mto_as_mts_orderpoint.pot
---
.../i18n/sale_stock_mto_as_mts_orderpoint.pot | 26 ++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/sale_stock_mto_as_mts_orderpoint/i18n/sale_stock_mto_as_mts_orderpoint.pot b/sale_stock_mto_as_mts_orderpoint/i18n/sale_stock_mto_as_mts_orderpoint.pot
index c119b901..0c9b99a9 100644
--- a/sale_stock_mto_as_mts_orderpoint/i18n/sale_stock_mto_as_mts_orderpoint.pot
+++ b/sale_stock_mto_as_mts_orderpoint/i18n/sale_stock_mto_as_mts_orderpoint.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -13,11 +13,35 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
+#. module: sale_stock_mto_as_mts_orderpoint
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_stock_move__display_name
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_stock_warehouse__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_stock_mto_as_mts_orderpoint
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_product_template__id
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_stock_move__id
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_stock_warehouse__id
+msgid "ID"
+msgstr ""
+
#. module: sale_stock_mto_as_mts_orderpoint
#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_stock_move__is_from_mto_route
msgid "Is From Mto Route"
msgstr ""
+#. module: sale_stock_mto_as_mts_orderpoint
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_stock_move____last_update
+#: model:ir.model.fields,field_description:sale_stock_mto_as_mts_orderpoint.field_stock_warehouse____last_update
+msgid "Last Modified on"
+msgstr ""
+
#. module: sale_stock_mto_as_mts_orderpoint
#: model:ir.model,name:sale_stock_mto_as_mts_orderpoint.model_product_template
msgid "Product Template"
From 2eb4faa2a25e779649a8df40543766b044c052d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Alix?=
Date: Wed, 30 Sep 2020 17:05:05 +0200
Subject: [PATCH 12/21] [FIX] sale_stock_mto_as_mts_orderpoint: support product
set
---
.../models/sale_order.py | 23 ++++++++++---------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/sale_stock_mto_as_mts_orderpoint/models/sale_order.py b/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
index db0d8140..6846c143 100644
--- a/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
+++ b/sale_stock_mto_as_mts_orderpoint/models/sale_order.py
@@ -20,18 +20,19 @@ def _run_orderpoints_for_mto_products(self):
if not mto_route:
return
for line in self:
- delivery_move = line.move_ids.filtered(
+ delivery_moves = line.move_ids.filtered(
lambda m: m.picking_id.picking_type_code == "outgoing"
and m.state not in ("done", "cancel")
)
- if (
- not delivery_move.is_from_mto_route
- or mto_route not in line.product_id.route_ids
- ):
- continue
- orderpoint = line._get_mto_orderpoint()
- if orderpoint.procure_recommended_qty:
- orderpoints_to_procure_ids.append(orderpoint.id)
+ for delivery_move in delivery_moves:
+ if (
+ not delivery_move.is_from_mto_route
+ or mto_route not in line.product_id.route_ids
+ ):
+ continue
+ orderpoint = line._get_mto_orderpoint(delivery_move.product_id)
+ if orderpoint.procure_recommended_qty:
+ orderpoints_to_procure_ids.append(orderpoint.id)
wiz = (
self.env["make.procurement.orderpoint"]
.with_context(
@@ -44,7 +45,7 @@ def _run_orderpoints_for_mto_products(self):
)
wiz.make_procurement()
- def _get_mto_orderpoint(self):
+ def _get_mto_orderpoint(self, product_id):
self.ensure_one()
warehouse = self.warehouse_id or self.order_id.warehouse_id
orderpoint = (
@@ -52,7 +53,7 @@ def _get_mto_orderpoint(self):
.with_context(active_test=False)
.search(
[
- ("product_id", "=", self.product_id.id),
+ ("product_id", "=", product_id.id),
(
"location_id",
"=",
From 23d713768849c816f9c25d2182e426b3791ae41c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Alix?=
Date: Mon, 18 Jan 2021 10:09:38 +0100
Subject: [PATCH 13/21] [IMP] sale_stock_mto_as_mts_orderpoint: test coverage
---
.../tests/test_sale_stock_mto_as_mts_orderpoint.py | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
index ad7d268d..6ee51541 100644
--- a/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
+++ b/sale_stock_mto_as_mts_orderpoint/tests/test_sale_stock_mto_as_mts_orderpoint.py
@@ -68,6 +68,19 @@ def test_mto_as_mts_orderpoint(self):
)
self.assertTrue(orderpoint)
+ def test_mtp_as_mts_orderpoint_product_no_mto(self):
+ self.product.route_ids = False
+ order = self._create_sale_order()
+ orderpoint = self.env["stock.warehouse.orderpoint"].search(
+ [("product_id", "=", self.product.id)]
+ )
+ self.assertFalse(orderpoint)
+ order.action_confirm()
+ orderpoint = self.env["stock.warehouse.orderpoint"].search(
+ [("product_id", "=", self.product.id)]
+ )
+ self.assertFalse(orderpoint)
+
def test_cancel_sale_order_orderpoint(self):
order = self._create_sale_order()
order.action_confirm()
From 32ce056359fc65f45c4de5960c04c87ac2f3e51e Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 30 Nov 2021 14:49:24 +0000
Subject: [PATCH 14/21] sale_stock_mto_as_mts_orderpoint 14.0.1.0.1
---
sale_stock_mto_as_mts_orderpoint/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sale_stock_mto_as_mts_orderpoint/__manifest__.py b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
index 7cf5e7bb..aa34a5bf 100644
--- a/sale_stock_mto_as_mts_orderpoint/__manifest__.py
+++ b/sale_stock_mto_as_mts_orderpoint/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Sale Stock Mto As Mts Orderpoint",
"summary": "Materialize need from MTO route through orderpoint",
- "version": "14.0.1.0.0",
+ "version": "14.0.1.0.1",
"development_status": "Alpha",
"category": "Operations/Inventory/Delivery",
"website": "https://github.com/OCA/stock-logistics-workflow",
From 3476f17b1e5e698673916691690702bad73be4e9 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Sun, 3 Sep 2023 17:28:19 +0000
Subject: [PATCH 15/21] [UPD] README.rst
---
sale_stock_mto_as_mts_orderpoint/README.rst | 15 ++++---
.../static/description/index.html | 42 ++++++++++---------
2 files changed, 31 insertions(+), 26 deletions(-)
diff --git a/sale_stock_mto_as_mts_orderpoint/README.rst b/sale_stock_mto_as_mts_orderpoint/README.rst
index c026cf4f..dab23477 100644
--- a/sale_stock_mto_as_mts_orderpoint/README.rst
+++ b/sale_stock_mto_as_mts_orderpoint/README.rst
@@ -2,10 +2,13 @@
Sale Stock Mto As Mts Orderpoint
================================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:0c7bd734e1967dc390d782e8c78e632b7bdd45b26457c72285bdab650cf19ed4
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
@@ -19,11 +22,11 @@ Sale Stock Mto As Mts Orderpoint
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/stock-logistics-workflow-14-0/stock-logistics-workflow-14-0-sale_stock_mto_as_mts_orderpoint
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/154/14.0
- :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-workflow&target_branch=14.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
This module aims to materialize the triggering of another stock rule through
an orderpoint in the procurement of MTO products from a sale order.
@@ -59,7 +62,7 @@ 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 smashing it by providing a detailed and welcomed
+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.
diff --git a/sale_stock_mto_as_mts_orderpoint/static/description/index.html b/sale_stock_mto_as_mts_orderpoint/static/description/index.html
index f9d4d3f4..a42b2ca2 100644
--- a/sale_stock_mto_as_mts_orderpoint/static/description/index.html
+++ b/sale_stock_mto_as_mts_orderpoint/static/description/index.html
@@ -1,20 +1,20 @@
-
+
-
+
Sale Stock Mto As Mts Orderpoint