From dd1a1b81109cc805f45f8f38b23cbba2a080ebd1 Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Wed, 11 Mar 2020 10:03:45 +0100
Subject: [PATCH 01/14] Add module stock_move_common_dest
---
stock_move_common_dest/README.rst | 75 ++++
stock_move_common_dest/__init__.py | 1 +
stock_move_common_dest/__manifest__.py | 15 +
stock_move_common_dest/models/__init__.py | 1 +
stock_move_common_dest/models/stock_move.py | 49 ++
.../readme/CONTRIBUTORS.rst | 1 +
stock_move_common_dest/readme/DESCRIPTION.rst | 3 +
.../static/description/index.html | 421 ++++++++++++++++++
stock_move_common_dest/tests/__init__.py | 1 +
.../tests/test_move_common_dest.py | 156 +++++++
stock_move_common_dest/views/stock_move.xml | 27 ++
11 files changed, 750 insertions(+)
create mode 100644 stock_move_common_dest/README.rst
create mode 100644 stock_move_common_dest/__init__.py
create mode 100644 stock_move_common_dest/__manifest__.py
create mode 100644 stock_move_common_dest/models/__init__.py
create mode 100644 stock_move_common_dest/models/stock_move.py
create mode 100644 stock_move_common_dest/readme/CONTRIBUTORS.rst
create mode 100644 stock_move_common_dest/readme/DESCRIPTION.rst
create mode 100644 stock_move_common_dest/static/description/index.html
create mode 100644 stock_move_common_dest/tests/__init__.py
create mode 100644 stock_move_common_dest/tests/test_move_common_dest.py
create mode 100644 stock_move_common_dest/views/stock_move.xml
diff --git a/stock_move_common_dest/README.rst b/stock_move_common_dest/README.rst
new file mode 100644
index 000000000..b55c751d9
--- /dev/null
+++ b/stock_move_common_dest/README.rst
@@ -0,0 +1,75 @@
+=============================
+Stock Move Common Destination
+=============================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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-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--warehouse-lightgray.png?logo=github
+ :target: https://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_move_common_dest
+ :alt: OCA/stock-logistics-warehouse
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-13-0/stock-logistics-warehouse-13-0-stock_move_common_dest
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/153/13.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module adds a M2m field `common_dest_move_ids` on `stock.move` in order
+to compute all the moves having a chained destination move sharing the same
+picking as the actual move's destination move.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+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-warehouse `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_move_common_dest/__init__.py b/stock_move_common_dest/__init__.py
new file mode 100644
index 000000000..0650744f6
--- /dev/null
+++ b/stock_move_common_dest/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/stock_move_common_dest/__manifest__.py b/stock_move_common_dest/__manifest__.py
new file mode 100644
index 000000000..fe22114d3
--- /dev/null
+++ b/stock_move_common_dest/__manifest__.py
@@ -0,0 +1,15 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+{
+ "name": "Stock Move Common Destination",
+ "summary": "Adds field for common destination moves",
+ "version": "13.0.1.0.0",
+ "category": "Warehouse Management",
+ "website": "https://github.com/OCA/stock-logistics-warehouse",
+ "author": "Camptocamp, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "application": False,
+ "installable": True,
+ "depends": ["stock"],
+ "data": ["views/stock_move.xml"],
+}
diff --git a/stock_move_common_dest/models/__init__.py b/stock_move_common_dest/models/__init__.py
new file mode 100644
index 000000000..6bda2d242
--- /dev/null
+++ b/stock_move_common_dest/models/__init__.py
@@ -0,0 +1 @@
+from . import stock_move
diff --git a/stock_move_common_dest/models/stock_move.py b/stock_move_common_dest/models/stock_move.py
new file mode 100644
index 000000000..395c77f83
--- /dev/null
+++ b/stock_move_common_dest/models/stock_move.py
@@ -0,0 +1,49 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import api, fields, models
+
+
+class StockMove(models.Model):
+
+ _inherit = "stock.move"
+
+ common_dest_move_ids = fields.Many2many(
+ "stock.move",
+ compute="_compute_common_dest_move_ids",
+ help="All the stock moves having a chained destination move sharing the"
+ " same picking as the actual move's destination move",
+ )
+
+ @api.depends(
+ "move_dest_ids",
+ "move_dest_ids.picking_id",
+ "move_dest_ids.picking_id.move_lines",
+ "move_dest_ids.picking_id.move_lines.move_orig_ids",
+ )
+ def _compute_common_dest_move_ids(self):
+ sql = """SELECT smmr.move_orig_id move_id
+ , array_agg(smmr2.move_orig_id) common_move_dest_ids
+ FROM stock_move_move_rel smmr
+ , stock_move sm_dest
+ , stock_picking sp
+ , stock_move sm_pick
+ , stock_move_move_rel smmr2
+ WHERE smmr.move_dest_id = sm_dest.id
+ AND sm_dest.picking_id = sp.id
+ AND sp.id = sm_pick.picking_id
+ AND sm_pick.id = smmr2.move_dest_id
+ AND smmr.move_orig_id != smmr2.move_orig_id
+ AND smmr.move_orig_id IN %s
+ GROUP BY smmr.move_orig_id;
+ """
+ self.env.cr.execute(sql, (tuple(self.ids),))
+ res = {
+ row.get("move_id"): row.get("common_move_dest_ids")
+ for row in self.env.cr.dictfetchall()
+ }
+ for move in self:
+ common_move_ids = res.get(move.id)
+ if common_move_ids:
+ move.common_dest_move_ids = [(6, 0, common_move_ids)]
+ else:
+ move.common_dest_move_ids = [(5, 0, 0)]
diff --git a/stock_move_common_dest/readme/CONTRIBUTORS.rst b/stock_move_common_dest/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..e31e2f0c4
--- /dev/null
+++ b/stock_move_common_dest/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Akim Juillerat
diff --git a/stock_move_common_dest/readme/DESCRIPTION.rst b/stock_move_common_dest/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..84a7e9bea
--- /dev/null
+++ b/stock_move_common_dest/readme/DESCRIPTION.rst
@@ -0,0 +1,3 @@
+This module adds a M2m field `common_dest_move_ids` on `stock.move` in order
+to compute all the moves having a chained destination move sharing the same
+picking as the actual move's destination move.
diff --git a/stock_move_common_dest/static/description/index.html b/stock_move_common_dest/static/description/index.html
new file mode 100644
index 000000000..86ef79acd
--- /dev/null
+++ b/stock_move_common_dest/static/description/index.html
@@ -0,0 +1,421 @@
+
+
+
+
+
+
+Stock Move Common Destination
+
+
+
+
+
Stock Move Common Destination
+
+
+

+
This module adds a M2m field common_dest_move_ids on stock.move in order
+to compute all the moves having a chained destination move sharing the same
+picking as the actual move’s destination move.
+
Table of contents
+
+
+
+
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-warehouse project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/stock_move_common_dest/tests/__init__.py b/stock_move_common_dest/tests/__init__.py
new file mode 100644
index 000000000..d59b1a6af
--- /dev/null
+++ b/stock_move_common_dest/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_move_common_dest
diff --git a/stock_move_common_dest/tests/test_move_common_dest.py b/stock_move_common_dest/tests/test_move_common_dest.py
new file mode 100644
index 000000000..c32132f36
--- /dev/null
+++ b/stock_move_common_dest/tests/test_move_common_dest.py
@@ -0,0 +1,156 @@
+# Copyright 2020 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo.tests import SavepointCase
+
+
+class TestCommonMoveDest(SavepointCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
+ cls.partner_delta = cls.env.ref("base.res_partner_4")
+ cls.warehouse = cls.env.ref("stock.warehouse0")
+ cls.warehouse.write({"delivery_steps": "pick_pack_ship"})
+ cls.customers_location = cls.env.ref("stock.stock_location_customers")
+ cls.output_location = cls.env.ref("stock.stock_location_output")
+ cls.packing_location = cls.env.ref("stock.location_pack_zone")
+ cls.stock_shelf_location = cls.env.ref("stock.stock_location_components")
+ cls.stock_shelf_2_location = cls.env.ref("stock.stock_location_14")
+
+ cls.out_type = cls.warehouse.out_type_id
+ cls.pack_type = cls.warehouse.pack_type_id
+ cls.pick_type = cls.warehouse.pick_type_id
+
+ cls.product_1 = cls.env["product.product"].create(
+ {"name": "Product 1", "type": "product"}
+ )
+ cls.product_2 = cls.env["product.product"].create(
+ {"name": "Product 2", "type": "product"}
+ )
+
+ cls.procurement_group_1 = cls.env["procurement.group"].create(
+ {"name": "Test 1"}
+ )
+
+ def _init_inventory(self):
+ # Product 1 on shelf 1
+ # Product 2 on shelf 2
+ inventory = self.env["stock.inventory"].create({"name": "Test init"})
+ inventory.action_start()
+ product_location_list = [
+ (self.product_1, self.stock_shelf_location),
+ (self.product_2, self.stock_shelf_2_location),
+ ]
+ lines_vals = list()
+ for product, location in product_location_list:
+ lines_vals.append(
+ (
+ 0,
+ 0,
+ {
+ "product_id": product.id,
+ "product_uom_id": product.uom_id.id,
+ "product_qty": 10.0,
+ "location_id": location.id,
+ },
+ )
+ )
+ inventory.write({"line_ids": lines_vals})
+ inventory.action_validate()
+
+ def _create_pickings(self):
+ # Create delivery order
+ ship_order = self.env["stock.picking"].create(
+ {
+ "partner_id": self.partner_delta.id,
+ "location_id": self.output_location.id,
+ "location_dest_id": self.customers_location.id,
+ "picking_type_id": self.out_type.id,
+ }
+ )
+ pack_order = self.env["stock.picking"].create(
+ {
+ "partner_id": self.partner_delta.id,
+ "location_id": self.packing_location.id,
+ "location_dest_id": self.output_location.id,
+ "picking_type_id": self.pack_type.id,
+ }
+ )
+ pick_order = self.env["stock.picking"].create(
+ {
+ "partner_id": self.partner_delta.id,
+ "location_id": self.stock_shelf_location.id,
+ "location_dest_id": self.packing_location.id,
+ "picking_type_id": self.pick_type.id,
+ }
+ )
+ pick_order_2 = self.env["stock.picking"].create(
+ {
+ "partner_id": self.partner_delta.id,
+ "location_id": self.stock_shelf_2_location.id,
+ "location_dest_id": self.packing_location.id,
+ "picking_type_id": self.pick_type.id,
+ }
+ )
+ return ship_order, pack_order, pick_order, pick_order_2
+
+ def _create_move(
+ self,
+ picking,
+ product,
+ state="waiting",
+ procure_method="make_to_order",
+ move_dest=None,
+ ):
+ move_vals = {
+ "name": product.name,
+ "product_id": product.id,
+ "product_uom_qty": 2.0,
+ "product_uom": product.uom_id.id,
+ "picking_id": picking.id,
+ "location_id": picking.location_id.id,
+ "location_dest_id": picking.location_dest_id.id,
+ "state": state,
+ "procure_method": procure_method,
+ "group_id": self.procurement_group_1.id,
+ }
+ if move_dest:
+ move_vals["move_dest_ids"] = [(4, move_dest.id, False)]
+ return self.env["stock.move"].create(move_vals)
+
+ def test_packing_sub_location(self):
+ self._init_inventory()
+ (
+ ship_order_1,
+ pack_order_1,
+ pick_order_1a,
+ pick_order_1b,
+ ) = self._create_pickings()
+ ship_move_1a = self._create_move(ship_order_1, self.product_1)
+ pack_move_1a = self._create_move(
+ pack_order_1, self.product_1, move_dest=ship_move_1a
+ )
+ pick_move_1a = self._create_move(
+ pick_order_1a,
+ self.product_1,
+ state="confirmed",
+ procure_method="make_to_stock",
+ move_dest=pack_move_1a,
+ )
+ ship_move_1b = self._create_move(ship_order_1, self.product_2)
+ pack_move_1b = self._create_move(
+ pack_order_1, self.product_2, move_dest=ship_move_1b
+ )
+ pick_move_1b = self._create_move(
+ pick_order_1b,
+ self.product_2,
+ state="confirmed",
+ procure_method="make_to_stock",
+ move_dest=pack_move_1b,
+ )
+ self.assertEqual(pick_move_1a.common_dest_move_ids, pick_move_1b)
+ self.assertEqual(pick_move_1b.common_dest_move_ids, pick_move_1a)
+ self.assertEqual(pack_move_1a.common_dest_move_ids, pack_move_1b)
+ self.assertEqual(pack_move_1b.common_dest_move_ids, pack_move_1a)
+ self.assertFalse(ship_move_1a.common_dest_move_ids)
+ self.assertFalse(ship_move_1b.common_dest_move_ids)
diff --git a/stock_move_common_dest/views/stock_move.xml b/stock_move_common_dest/views/stock_move.xml
new file mode 100644
index 000000000..d18574a01
--- /dev/null
+++ b/stock_move_common_dest/views/stock_move.xml
@@ -0,0 +1,27 @@
+
+
+
+ stock.move.form.inherit
+ stock.move
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From a54b44017eeecb6f79c2a4e75951f5a87202317f Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Tue, 7 Apr 2020 14:11:14 +0000
Subject: [PATCH 02/14] [UPD] Update stock_move_common_dest.pot
---
.../i18n/stock_move_common_dest.pot | 36 +++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100644 stock_move_common_dest/i18n/stock_move_common_dest.pot
diff --git a/stock_move_common_dest/i18n/stock_move_common_dest.pot b/stock_move_common_dest/i18n/stock_move_common_dest.pot
new file mode 100644
index 000000000..89b734306
--- /dev/null
+++ b/stock_move_common_dest/i18n/stock_move_common_dest.pot
@@ -0,0 +1,36 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_move_common_dest
+#
+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: stock_move_common_dest
+#: model:ir.model.fields,help:stock_move_common_dest.field_stock_move__common_dest_move_ids
+msgid ""
+"All the stock moves having a chained destination move sharing the same "
+"picking as the actual move's destination move"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__common_dest_move_ids
+msgid "Common Dest Move"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model_terms:ir.ui.view,arch_db:stock_move_common_dest.view_move_form_inherit
+msgid "Common destination moves"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model,name:stock_move_common_dest.model_stock_move
+msgid "Stock Move"
+msgstr ""
From 92e40ce917a18a08312f9c084b5fb5c20157ecad Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 7 Apr 2020 15:00:28 +0000
Subject: [PATCH 03/14] [ADD] icon.png
---
.../static/description/icon.png | Bin 0 -> 9455 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 stock_move_common_dest/static/description/icon.png
diff --git a/stock_move_common_dest/static/description/icon.png b/stock_move_common_dest/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 eb592618ceff7d6a296aa070dfb58fef73891a74 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Mon, 27 Apr 2020 14:03:01 +0200
Subject: [PATCH 04/14] Fix warning in stock_move_common_dest
In this module: https://github.com/OCA/stock-logistics-warehouse/pull/808
A computed field uses "common_dest_move_ids" as dependency:
@api.depends(
"picking_type_id.display_completion_info",
"move_lines.common_dest_move_ids.state",
)
def _compute_completion_info(self):
Which has the following effect when the ORM triggers changes:
odoo.osv.expression: Non-stored field stock.move.common_dest_move_ids cannot be searched.
Implement a search method to prevent this.
---
stock_move_common_dest/models/stock_move.py | 32 +++++++++++++++----
.../tests/test_move_common_dest.py | 18 +++++++++++
2 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/stock_move_common_dest/models/stock_move.py b/stock_move_common_dest/models/stock_move.py
index 395c77f83..4cf44b567 100644
--- a/stock_move_common_dest/models/stock_move.py
+++ b/stock_move_common_dest/models/stock_move.py
@@ -10,17 +10,12 @@ class StockMove(models.Model):
common_dest_move_ids = fields.Many2many(
"stock.move",
compute="_compute_common_dest_move_ids",
+ search="_search_compute_dest_move_ids",
help="All the stock moves having a chained destination move sharing the"
" same picking as the actual move's destination move",
)
- @api.depends(
- "move_dest_ids",
- "move_dest_ids.picking_id",
- "move_dest_ids.picking_id.move_lines",
- "move_dest_ids.picking_id.move_lines.move_orig_ids",
- )
- def _compute_common_dest_move_ids(self):
+ def _common_dest_move_query(self):
sql = """SELECT smmr.move_orig_id move_id
, array_agg(smmr2.move_orig_id) common_move_dest_ids
FROM stock_move_move_rel smmr
@@ -36,6 +31,16 @@ class StockMove(models.Model):
AND smmr.move_orig_id IN %s
GROUP BY smmr.move_orig_id;
"""
+ return sql
+
+ @api.depends(
+ "move_dest_ids",
+ "move_dest_ids.picking_id",
+ "move_dest_ids.picking_id.move_lines",
+ "move_dest_ids.picking_id.move_lines.move_orig_ids",
+ )
+ def _compute_common_dest_move_ids(self):
+ sql = self._common_dest_move_query()
self.env.cr.execute(sql, (tuple(self.ids),))
res = {
row.get("move_id"): row.get("common_move_dest_ids")
@@ -47,3 +52,16 @@ class StockMove(models.Model):
move.common_dest_move_ids = [(6, 0, common_move_ids)]
else:
move.common_dest_move_ids = [(5, 0, 0)]
+
+ def _search_compute_dest_move_ids(self, operator, value):
+ moves = self.search([("id", operator, value)])
+ if not moves:
+ return [("id", "=", 0)]
+ sql = self._common_dest_move_query()
+ self.env.cr.execute(sql, (tuple(moves.ids),))
+ res = [
+ move_dest_id
+ for row in self.env.cr.dictfetchall()
+ for move_dest_id in row.get("common_move_dest_ids") or []
+ ]
+ return [("id", "in", res)]
diff --git a/stock_move_common_dest/tests/test_move_common_dest.py b/stock_move_common_dest/tests/test_move_common_dest.py
index c32132f36..9af07ff05 100644
--- a/stock_move_common_dest/tests/test_move_common_dest.py
+++ b/stock_move_common_dest/tests/test_move_common_dest.py
@@ -154,3 +154,21 @@ class TestCommonMoveDest(SavepointCase):
self.assertEqual(pack_move_1b.common_dest_move_ids, pack_move_1a)
self.assertFalse(ship_move_1a.common_dest_move_ids)
self.assertFalse(ship_move_1b.common_dest_move_ids)
+ self.assertEqual(
+ self.env["stock.move"].search(
+ [("common_dest_move_ids", "=", pick_move_1b.id)]
+ ),
+ pick_move_1a,
+ )
+ self.assertEqual(
+ self.env["stock.move"].search(
+ [("common_dest_move_ids", "=", pick_move_1a.id)]
+ ),
+ pick_move_1b,
+ )
+ self.assertEqual(
+ self.env["stock.move"].search(
+ [("common_dest_move_ids", "in", (pick_move_1a | pick_move_1b).ids)]
+ ),
+ pick_move_1a | pick_move_1b,
+ )
From 393a9f312b3c578ee025b4e67a0e41059ce3eab8 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Fri, 17 Jul 2020 07:25:54 +0000
Subject: [PATCH 05/14] stock_move_common_dest 13.0.1.1.0
---
stock_move_common_dest/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/stock_move_common_dest/__manifest__.py b/stock_move_common_dest/__manifest__.py
index fe22114d3..c6cc0860e 100644
--- a/stock_move_common_dest/__manifest__.py
+++ b/stock_move_common_dest/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Move Common Destination",
"summary": "Adds field for common destination moves",
- "version": "13.0.1.0.0",
+ "version": "13.0.1.1.0",
"category": "Warehouse Management",
"website": "https://github.com/OCA/stock-logistics-warehouse",
"author": "Camptocamp, Odoo Community Association (OCA)",
From 9d09e3541d46c508c16e4020aa73b91d66e478eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20BEAU?=
Date: Wed, 6 Jan 2021 14:39:06 +0100
Subject: [PATCH 06/14] [MIG] stock_move_common_dest: Migration to 14.0
---
stock_move_common_dest/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/stock_move_common_dest/__manifest__.py b/stock_move_common_dest/__manifest__.py
index c6cc0860e..a032c6d46 100644
--- a/stock_move_common_dest/__manifest__.py
+++ b/stock_move_common_dest/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Move Common Destination",
"summary": "Adds field for common destination moves",
- "version": "13.0.1.1.0",
+ "version": "14.0.1.0.0",
"category": "Warehouse Management",
"website": "https://github.com/OCA/stock-logistics-warehouse",
"author": "Camptocamp, Odoo Community Association (OCA)",
From 965b93e12f7fe1b780e9da753739014d08052c41 Mon Sep 17 00:00:00 2001
From: hparfr
Date: Fri, 5 Mar 2021 17:31:36 +0100
Subject: [PATCH 07/14] stock_move_common_dest: !fixup use FALSE_DOMAIN
---
stock_move_common_dest/models/stock_move.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/stock_move_common_dest/models/stock_move.py b/stock_move_common_dest/models/stock_move.py
index 4cf44b567..1bf3c7e9d 100644
--- a/stock_move_common_dest/models/stock_move.py
+++ b/stock_move_common_dest/models/stock_move.py
@@ -1,6 +1,7 @@
# Copyright 2020 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import api, fields, models
+from odoo.osv.expression import FALSE_DOMAIN
class StockMove(models.Model):
@@ -56,7 +57,7 @@ class StockMove(models.Model):
def _search_compute_dest_move_ids(self, operator, value):
moves = self.search([("id", operator, value)])
if not moves:
- return [("id", "=", 0)]
+ return FALSE_DOMAIN
sql = self._common_dest_move_query()
self.env.cr.execute(sql, (tuple(moves.ids),))
res = [
From 866d32e1e510dcc692dc01b8a4081dd33a220c00 Mon Sep 17 00:00:00 2001
From: hparfr
Date: Tue, 13 Apr 2021 18:49:50 +0200
Subject: [PATCH 08/14] stock_move_common_dest: !fixup flush before SELECT
---
stock_move_common_dest/models/stock_move.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/stock_move_common_dest/models/stock_move.py b/stock_move_common_dest/models/stock_move.py
index 1bf3c7e9d..7cb652daf 100644
--- a/stock_move_common_dest/models/stock_move.py
+++ b/stock_move_common_dest/models/stock_move.py
@@ -16,6 +16,10 @@ class StockMove(models.Model):
" same picking as the actual move's destination move",
)
+ def _flush_common_dest_move_query(self):
+ # flush is necessary before a SELECT
+ self.flush(["move_orig_ids", "move_dest_ids"])
+
def _common_dest_move_query(self):
sql = """SELECT smmr.move_orig_id move_id
, array_agg(smmr2.move_orig_id) common_move_dest_ids
@@ -41,6 +45,7 @@ class StockMove(models.Model):
"move_dest_ids.picking_id.move_lines.move_orig_ids",
)
def _compute_common_dest_move_ids(self):
+ self._flush_common_dest_move_query()
sql = self._common_dest_move_query()
self.env.cr.execute(sql, (tuple(self.ids),))
res = {
@@ -58,6 +63,7 @@ class StockMove(models.Model):
moves = self.search([("id", operator, value)])
if not moves:
return FALSE_DOMAIN
+ self._flush_common_dest_move_query()
sql = self._common_dest_move_query()
self.env.cr.execute(sql, (tuple(moves.ids),))
res = [
From 603c1a15fa7b19aee3c244b40efa11dcf5230287 Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Mon, 19 Apr 2021 13:03:33 +0000
Subject: [PATCH 09/14] [UPD] Update stock_move_common_dest.pot
---
.../i18n/stock_move_common_dest.pot | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/stock_move_common_dest/i18n/stock_move_common_dest.pot b/stock_move_common_dest/i18n/stock_move_common_dest.pot
index 89b734306..dca10a065 100644
--- a/stock_move_common_dest/i18n/stock_move_common_dest.pot
+++ b/stock_move_common_dest/i18n/stock_move_common_dest.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"
@@ -30,6 +30,21 @@ msgstr ""
msgid "Common destination moves"
msgstr ""
+#. module: stock_move_common_dest
+#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__id
+msgid "ID"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move____last_update
+msgid "Last Modified on"
+msgstr ""
+
#. module: stock_move_common_dest
#: model:ir.model,name:stock_move_common_dest.model_stock_move
msgid "Stock Move"
From 44255e4d40e557b04beb0634b7e89481e1a69ed0 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 19 Apr 2021 13:32:20 +0000
Subject: [PATCH 10/14] [UPD] README.rst
---
stock_move_common_dest/README.rst | 10 +++++-----
stock_move_common_dest/static/description/index.html | 6 +++---
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/stock_move_common_dest/README.rst b/stock_move_common_dest/README.rst
index b55c751d9..d36904113 100644
--- a/stock_move_common_dest/README.rst
+++ b/stock_move_common_dest/README.rst
@@ -14,13 +14,13 @@ Stock Move Common Destination
: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--warehouse-lightgray.png?logo=github
- :target: https://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_move_common_dest
+ :target: https://github.com/OCA/stock-logistics-warehouse/tree/14.0/stock_move_common_dest
:alt: OCA/stock-logistics-warehouse
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-13-0/stock-logistics-warehouse-13-0-stock_move_common_dest
+ :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-14-0/stock-logistics-warehouse-14-0-stock_move_common_dest
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/153/13.0
+ :target: https://runbot.odoo-community.org/runbot/153/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -40,7 +40,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.
@@ -70,6 +70,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-warehouse `_ project on GitHub.
+This module is part of the `OCA/stock-logistics-warehouse `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_move_common_dest/static/description/index.html b/stock_move_common_dest/static/description/index.html
index 86ef79acd..88e817aa8 100644
--- a/stock_move_common_dest/static/description/index.html
+++ b/stock_move_common_dest/static/description/index.html
@@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module adds a M2m field common_dest_move_ids on stock.move in order
to compute all the moves having a chained destination move sharing the same
picking as the actual move’s destination move.
@@ -388,7 +388,7 @@ picking as the actual move’s destination move.
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.
@@ -412,7 +412,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
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-warehouse project on GitHub.
+
This module is part of the OCA/stock-logistics-warehouse project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
From 72cc6d0476a21e99e6da7ef666c7f6e4c7243abd Mon Sep 17 00:00:00 2001
From: mymage
Date: Mon, 24 Oct 2022 10:48:33 +0000
Subject: [PATCH 11/14] Added translation using Weblate (Italian)
---
stock_move_common_dest/i18n/it.po | 52 +++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
create mode 100644 stock_move_common_dest/i18n/it.po
diff --git a/stock_move_common_dest/i18n/it.po b/stock_move_common_dest/i18n/it.po
new file mode 100644
index 000000000..878a79647
--- /dev/null
+++ b/stock_move_common_dest/i18n/it.po
@@ -0,0 +1,52 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_move_common_dest
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: stock_move_common_dest
+#: model:ir.model.fields,help:stock_move_common_dest.field_stock_move__common_dest_move_ids
+msgid ""
+"All the stock moves having a chained destination move sharing the same "
+"picking as the actual move's destination move"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__common_dest_move_ids
+msgid "Common Dest Move"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model_terms:ir.ui.view,arch_db:stock_move_common_dest.view_move_form_inherit
+msgid "Common destination moves"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__id
+msgid "ID"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: stock_move_common_dest
+#: model:ir.model,name:stock_move_common_dest.model_stock_move
+msgid "Stock Move"
+msgstr ""
From d7fb51f1dc92d1f8c8eef41357134a7934364737 Mon Sep 17 00:00:00 2001
From: mymage
Date: Mon, 24 Oct 2022 10:51:43 +0000
Subject: [PATCH 12/14] Translated using Weblate (Italian)
Currently translated at 100.0% (7 of 7 strings)
Translation: stock-logistics-warehouse-14.0/stock-logistics-warehouse-14.0-stock_move_common_dest
Translate-URL: https://translation.odoo-community.org/projects/stock-logistics-warehouse-14-0/stock-logistics-warehouse-14-0-stock_move_common_dest/it/
---
stock_move_common_dest/i18n/it.po | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/stock_move_common_dest/i18n/it.po b/stock_move_common_dest/i18n/it.po
index 878a79647..d8c87bffe 100644
--- a/stock_move_common_dest/i18n/it.po
+++ b/stock_move_common_dest/i18n/it.po
@@ -6,13 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2022-10-24 12:43+0000\n"
+"Last-Translator: mymage \n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.14.1\n"
#. module: stock_move_common_dest
#: model:ir.model.fields,help:stock_move_common_dest.field_stock_move__common_dest_move_ids
@@ -20,33 +22,36 @@ msgid ""
"All the stock moves having a chained destination move sharing the same "
"picking as the actual move's destination move"
msgstr ""
+"Tutti i movimenti che hanno un movimento di destinazione collegato, che "
+"condividono lo stesso prelievo del movimento di destinazione di questo "
+"movimento"
#. module: stock_move_common_dest
#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__common_dest_move_ids
msgid "Common Dest Move"
-msgstr ""
+msgstr "Movimento di destinazione comune"
#. module: stock_move_common_dest
#: model_terms:ir.ui.view,arch_db:stock_move_common_dest.view_move_form_inherit
msgid "Common destination moves"
-msgstr ""
+msgstr "Movimenti con destinazione comune"
#. module: stock_move_common_dest
#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__display_name
msgid "Display Name"
-msgstr ""
+msgstr "Nome visualizzato"
#. module: stock_move_common_dest
#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__id
msgid "ID"
-msgstr ""
+msgstr "ID"
#. module: stock_move_common_dest
#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move____last_update
msgid "Last Modified on"
-msgstr ""
+msgstr "Ultima modifica il"
#. module: stock_move_common_dest
#: model:ir.model,name:stock_move_common_dest.model_stock_move
msgid "Stock Move"
-msgstr ""
+msgstr "Movimento di magazzino"
From be9623936158c871ced89a121edbca32b5c1ed38 Mon Sep 17 00:00:00 2001
From: hda
Date: Wed, 30 Nov 2022 17:10:54 +0100
Subject: [PATCH 13/14] [IMP] stock_move_common_dest: black, isort, prettier
---
.../odoo/addons/stock_move_common_dest | 1 +
setup/stock_move_common_dest/setup.py | 6 ++++++
2 files changed, 7 insertions(+)
create mode 120000 setup/stock_move_common_dest/odoo/addons/stock_move_common_dest
create mode 100644 setup/stock_move_common_dest/setup.py
diff --git a/setup/stock_move_common_dest/odoo/addons/stock_move_common_dest b/setup/stock_move_common_dest/odoo/addons/stock_move_common_dest
new file mode 120000
index 000000000..79e655cd1
--- /dev/null
+++ b/setup/stock_move_common_dest/odoo/addons/stock_move_common_dest
@@ -0,0 +1 @@
+../../../../stock_move_common_dest
\ No newline at end of file
diff --git a/setup/stock_move_common_dest/setup.py b/setup/stock_move_common_dest/setup.py
new file mode 100644
index 000000000..28c57bb64
--- /dev/null
+++ b/setup/stock_move_common_dest/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
From a03ce5cf86d34eab9697a8f219f7a8007c8ad17b Mon Sep 17 00:00:00 2001
From: hda
Date: Wed, 30 Nov 2022 17:11:17 +0100
Subject: [PATCH 14/14] [MIG] stock_move_common_dest: Migration to 16.0
---
stock_move_common_dest/__manifest__.py | 2 +-
stock_move_common_dest/i18n/it.po | 57 -------------------
.../i18n/stock_move_common_dest.pot | 19 +------
stock_move_common_dest/models/stock_move.py | 6 +-
.../readme/CONTRIBUTORS.rst | 1 +
.../tests/test_move_common_dest.py | 38 +++++--------
6 files changed, 23 insertions(+), 100 deletions(-)
delete mode 100644 stock_move_common_dest/i18n/it.po
diff --git a/stock_move_common_dest/__manifest__.py b/stock_move_common_dest/__manifest__.py
index a032c6d46..143751528 100644
--- a/stock_move_common_dest/__manifest__.py
+++ b/stock_move_common_dest/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Move Common Destination",
"summary": "Adds field for common destination moves",
- "version": "14.0.1.0.0",
+ "version": "16.0.1.0.0",
"category": "Warehouse Management",
"website": "https://github.com/OCA/stock-logistics-warehouse",
"author": "Camptocamp, Odoo Community Association (OCA)",
diff --git a/stock_move_common_dest/i18n/it.po b/stock_move_common_dest/i18n/it.po
deleted file mode 100644
index d8c87bffe..000000000
--- a/stock_move_common_dest/i18n/it.po
+++ /dev/null
@@ -1,57 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * stock_move_common_dest
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
-"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2022-10-24 12:43+0000\n"
-"Last-Translator: mymage \n"
-"Language-Team: none\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.14.1\n"
-
-#. module: stock_move_common_dest
-#: model:ir.model.fields,help:stock_move_common_dest.field_stock_move__common_dest_move_ids
-msgid ""
-"All the stock moves having a chained destination move sharing the same "
-"picking as the actual move's destination move"
-msgstr ""
-"Tutti i movimenti che hanno un movimento di destinazione collegato, che "
-"condividono lo stesso prelievo del movimento di destinazione di questo "
-"movimento"
-
-#. module: stock_move_common_dest
-#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__common_dest_move_ids
-msgid "Common Dest Move"
-msgstr "Movimento di destinazione comune"
-
-#. module: stock_move_common_dest
-#: model_terms:ir.ui.view,arch_db:stock_move_common_dest.view_move_form_inherit
-msgid "Common destination moves"
-msgstr "Movimenti con destinazione comune"
-
-#. module: stock_move_common_dest
-#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__display_name
-msgid "Display Name"
-msgstr "Nome visualizzato"
-
-#. module: stock_move_common_dest
-#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__id
-msgid "ID"
-msgstr "ID"
-
-#. module: stock_move_common_dest
-#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move____last_update
-msgid "Last Modified on"
-msgstr "Ultima modifica il"
-
-#. module: stock_move_common_dest
-#: model:ir.model,name:stock_move_common_dest.model_stock_move
-msgid "Stock Move"
-msgstr "Movimento di magazzino"
diff --git a/stock_move_common_dest/i18n/stock_move_common_dest.pot b/stock_move_common_dest/i18n/stock_move_common_dest.pot
index dca10a065..f4371a007 100644
--- a/stock_move_common_dest/i18n/stock_move_common_dest.pot
+++ b/stock_move_common_dest/i18n/stock_move_common_dest.pot
@@ -4,8 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
+"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-12-01 15:27+0000\n"
+"PO-Revision-Date: 2022-12-01 15:27+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -30,21 +32,6 @@ msgstr ""
msgid "Common destination moves"
msgstr ""
-#. module: stock_move_common_dest
-#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__display_name
-msgid "Display Name"
-msgstr ""
-
-#. module: stock_move_common_dest
-#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move__id
-msgid "ID"
-msgstr ""
-
-#. module: stock_move_common_dest
-#: model:ir.model.fields,field_description:stock_move_common_dest.field_stock_move____last_update
-msgid "Last Modified on"
-msgstr ""
-
#. module: stock_move_common_dest
#: model:ir.model,name:stock_move_common_dest.model_stock_move
msgid "Stock Move"
diff --git a/stock_move_common_dest/models/stock_move.py b/stock_move_common_dest/models/stock_move.py
index 7cb652daf..c6b8687f4 100644
--- a/stock_move_common_dest/models/stock_move.py
+++ b/stock_move_common_dest/models/stock_move.py
@@ -18,7 +18,7 @@ class StockMove(models.Model):
def _flush_common_dest_move_query(self):
# flush is necessary before a SELECT
- self.flush(["move_orig_ids", "move_dest_ids"])
+ self.flush_recordset(["move_orig_ids", "move_dest_ids"])
def _common_dest_move_query(self):
sql = """SELECT smmr.move_orig_id move_id
@@ -41,8 +41,8 @@ class StockMove(models.Model):
@api.depends(
"move_dest_ids",
"move_dest_ids.picking_id",
- "move_dest_ids.picking_id.move_lines",
- "move_dest_ids.picking_id.move_lines.move_orig_ids",
+ "move_dest_ids.picking_id.move_ids",
+ "move_dest_ids.picking_id.move_ids.move_orig_ids",
)
def _compute_common_dest_move_ids(self):
self._flush_common_dest_move_query()
diff --git a/stock_move_common_dest/readme/CONTRIBUTORS.rst b/stock_move_common_dest/readme/CONTRIBUTORS.rst
index e31e2f0c4..d288b67ff 100644
--- a/stock_move_common_dest/readme/CONTRIBUTORS.rst
+++ b/stock_move_common_dest/readme/CONTRIBUTORS.rst
@@ -1 +1,2 @@
* Akim Juillerat
+* Hughes Damry
diff --git a/stock_move_common_dest/tests/test_move_common_dest.py b/stock_move_common_dest/tests/test_move_common_dest.py
index 9af07ff05..6410ae442 100644
--- a/stock_move_common_dest/tests/test_move_common_dest.py
+++ b/stock_move_common_dest/tests/test_move_common_dest.py
@@ -1,9 +1,9 @@
# Copyright 2020 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
-from odoo.tests import SavepointCase
+from odoo.tests import TransactionCase
-class TestCommonMoveDest(SavepointCase):
+class TestCommonMoveDest(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
@@ -35,28 +35,20 @@ class TestCommonMoveDest(SavepointCase):
def _init_inventory(self):
# Product 1 on shelf 1
# Product 2 on shelf 2
- inventory = self.env["stock.inventory"].create({"name": "Test init"})
- inventory.action_start()
- product_location_list = [
- (self.product_1, self.stock_shelf_location),
- (self.product_2, self.stock_shelf_2_location),
+ vals_list = [
+ {
+ "product_id": self.product_1.id,
+ "inventory_quantity": 10.0,
+ "location_id": self.stock_shelf_location.id,
+ },
+ {
+ "product_id": self.product_2.id,
+ "inventory_quantity": 10.0,
+ "location_id": self.stock_shelf_2_location.id,
+ },
]
- lines_vals = list()
- for product, location in product_location_list:
- lines_vals.append(
- (
- 0,
- 0,
- {
- "product_id": product.id,
- "product_uom_id": product.uom_id.id,
- "product_qty": 10.0,
- "location_id": location.id,
- },
- )
- )
- inventory.write({"line_ids": lines_vals})
- inventory.action_validate()
+ quants = self.env["stock.quant"].create(vals_list)
+ quants.action_apply_inventory()
def _create_pickings(self):
# Create delivery order