From f28ee0ebadd75aea5bef50230ad5b247bfdcd73c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?ana=C3=AFs?=
Date: Tue, 14 May 2024 11:33:37 +0200
Subject: [PATCH] [MIG] stock_quantity_history_location: Migration to 17.0 -
refactored .js code by inheriting `get_views` method to display a different
button text for those users having the Multi Locations group enabled. Added a
test case to cover the change
---
stock_quantity_history_location/README.rst | 9 +++++-
stock_quantity_history_location/__init__.py | 1 +
.../__manifest__.py | 10 +-----
.../models/__init__.py | 1 +
.../models/stock_quant.py | 25 +++++++++++++++
.../readme/USAGE.md | 10 ++++--
.../static/description/index.html | 7 +++--
.../inventory_report/inventory_report.esm.js | 17 ----------
.../inventory_report/inventory_report.xml | 14 ---------
.../tests/common.py | 5 +--
.../test_stock_quantity_history_location.py | 31 ++++++++++++++++++-
.../wizards/stock_quantity_history.xml | 6 ++--
12 files changed, 86 insertions(+), 50 deletions(-)
create mode 100644 stock_quantity_history_location/models/__init__.py
create mode 100644 stock_quantity_history_location/models/stock_quant.py
delete mode 100644 stock_quantity_history_location/static/src/components/inventory_report/inventory_report.esm.js
delete mode 100644 stock_quantity_history_location/static/src/components/inventory_report/inventory_report.xml
diff --git a/stock_quantity_history_location/README.rst b/stock_quantity_history_location/README.rst
index ecdbda5..682d648 100644
--- a/stock_quantity_history_location/README.rst
+++ b/stock_quantity_history_location/README.rst
@@ -39,7 +39,14 @@ report by location, for a past date or for current date.
Usage
=====
-- Go to: *Inventory / Reporting / Inventory or Inventory Valuation*
+First, you need to activate Storage Locations. To do so, go to Inventory
+/ Configuration / Settings / Warehouse and activate it.
+
+To use this module, go to:
+
+- *Inventory / Reporting / Locations*
+
+- Select Inventory at Date & Location
- Filter by location
diff --git a/stock_quantity_history_location/__init__.py b/stock_quantity_history_location/__init__.py
index 5cb1c49..976591c 100644
--- a/stock_quantity_history_location/__init__.py
+++ b/stock_quantity_history_location/__init__.py
@@ -1 +1,2 @@
from . import wizards
+from . import models
diff --git a/stock_quantity_history_location/__manifest__.py b/stock_quantity_history_location/__manifest__.py
index 5c7e9dc..ce454c9 100644
--- a/stock_quantity_history_location/__manifest__.py
+++ b/stock_quantity_history_location/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Stock Quantity History Location",
"summary": "Provides stock quantity by location on past date",
- "version": "16.0.1.0.1",
+ "version": "17.0.1.0.0",
"license": "AGPL-3",
"author": "ForgeFlow, Odoo Community Association (OCA)",
"maintainers": [
@@ -15,12 +15,4 @@
"website": "https://github.com/OCA/stock-logistics-reporting",
"depends": ["stock"],
"data": ["wizards/stock_quantity_history.xml"],
- "assets": {
- "web.assets_backend": [
- "stock_quantity_history_location/static/src/components"
- "/inventory_report/inventory_report.esm.js",
- "stock_quantity_history_location/static/src/components/"
- "inventory_report/inventory_report.xml",
- ],
- },
}
diff --git a/stock_quantity_history_location/models/__init__.py b/stock_quantity_history_location/models/__init__.py
new file mode 100644
index 0000000..70f8e6c
--- /dev/null
+++ b/stock_quantity_history_location/models/__init__.py
@@ -0,0 +1 @@
+from . import stock_quant
diff --git a/stock_quantity_history_location/models/stock_quant.py b/stock_quantity_history_location/models/stock_quant.py
new file mode 100644
index 0000000..e8e42fd
--- /dev/null
+++ b/stock_quantity_history_location/models/stock_quant.py
@@ -0,0 +1,25 @@
+# Copyright 2024 ForgeFlow S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from lxml import etree
+
+from odoo import api, models
+
+
+class StockQuant(models.Model):
+ _inherit = "stock.quant"
+
+ @api.model
+ def get_views(self, views, options=None):
+ res = super().get_views(views, options=options)
+ user_has_group = self.user_has_groups("stock.group_stock_multi_locations")
+ list_view = res.get("views", {}).get("list", {})
+ if user_has_group and list_view:
+ arch = list_view.get("arch", "")
+ arch_tree = etree.XML(arch)
+ buttons = arch_tree.xpath('//button[@name="action_inventory_at_date"]')
+ for button in buttons:
+ button.set("string", "Inventory at Date & Location")
+ new_arch = etree.tostring(arch_tree, encoding="unicode")
+ list_view["arch"] = new_arch
+ return res
diff --git a/stock_quantity_history_location/readme/USAGE.md b/stock_quantity_history_location/readme/USAGE.md
index 0f4b8a4..f045037 100644
--- a/stock_quantity_history_location/readme/USAGE.md
+++ b/stock_quantity_history_location/readme/USAGE.md
@@ -1,9 +1,15 @@
-- Go to: *Inventory / Reporting / Inventory or Inventory Valuation*
+First, you need to activate Storage Locations. To do so, go to
+Inventory / Configuration / Settings / Warehouse and activate it.
+
+To use this module, go to:
+- *Inventory / Reporting / Locations*
+
+- Select Inventory at Date & Location
- Filter by location
- **Optionally: Mark if you want to include child location**
-- Choose a moment in time:
+- Choose a moment in time:
- Current Inventory
- At a Specific Date
diff --git a/stock_quantity_history_location/static/description/index.html b/stock_quantity_history_location/static/description/index.html
index 5b5c2a5..c0616c8 100644
--- a/stock_quantity_history_location/static/description/index.html
+++ b/stock_quantity_history_location/static/description/index.html
@@ -1,4 +1,3 @@
-
@@ -387,8 +386,12 @@ report by location, for a past date or for current date.
+
First, you need to activate Storage Locations. To do so, go to Inventory
+/ Configuration / Settings / Warehouse and activate it.
+
To use this module, go to:
-- Go to: Inventory / Reporting / Inventory or Inventory Valuation
+- Inventory / Reporting / Locations
+- Select Inventory at Date & Location
- Filter by location
- Optionally: Mark if you want to include child location
- Choose a moment in time:
diff --git a/stock_quantity_history_location/static/src/components/inventory_report/inventory_report.esm.js b/stock_quantity_history_location/static/src/components/inventory_report/inventory_report.esm.js
deleted file mode 100644
index fd66bfc..0000000
--- a/stock_quantity_history_location/static/src/components/inventory_report/inventory_report.esm.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/** @odoo-module **/
-
-import {InventoryReportListController} from "@stock/views/list/inventory_report_list_controller";
-import {patch} from "@web/core/utils/patch";
-const {onWillStart} = owl;
-
-patch(InventoryReportListController.prototype, "inventory_report_list_controller", {
- setup() {
- this._super(...arguments);
- this.multi_location = false;
- onWillStart(async () => {
- this.multi_location = await this.userService.hasGroup(
- "stock.group_stock_multi_locations"
- );
- });
- },
-});
diff --git a/stock_quantity_history_location/static/src/components/inventory_report/inventory_report.xml b/stock_quantity_history_location/static/src/components/inventory_report/inventory_report.xml
deleted file mode 100644
index d425d04..0000000
--- a/stock_quantity_history_location/static/src/components/inventory_report/inventory_report.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
- Inventory at Date & Location
-
- Inventory at Date
-
-
- text_multi_location
-
-
-
diff --git a/stock_quantity_history_location/tests/common.py b/stock_quantity_history_location/tests/common.py
index 4ec8d3d..7b78395 100644
--- a/stock_quantity_history_location/tests/common.py
+++ b/stock_quantity_history_location/tests/common.py
@@ -22,7 +22,8 @@ class TestCommon(TransactionCase):
)
move._action_confirm()
move._action_assign()
- move_line = move.move_line_ids[0]
- move_line.qty_done = qty
+ for move_line in move.move_line_ids:
+ move_line.quantity = qty
+ move_line.picked = True
move._action_done()
return move
diff --git a/stock_quantity_history_location/tests/test_stock_quantity_history_location.py b/stock_quantity_history_location/tests/test_stock_quantity_history_location.py
index dae4733..79f4c99 100644
--- a/stock_quantity_history_location/tests/test_stock_quantity_history_location.py
+++ b/stock_quantity_history_location/tests/test_stock_quantity_history_location.py
@@ -2,7 +2,9 @@
# Copyright 2021 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo import fields
+from lxml import etree
+
+from odoo import Command, fields
from .common import TestCommon
@@ -30,6 +32,7 @@ class TestStockQuantityHistoryLocation(TestCommon):
}
)
cls._create_stock_move(cls, location_dest_id=cls.child_test_stock_loc, qty=100)
+ cls.group_multi_locations = cls.env.ref("stock.group_stock_multi_locations")
def test_01_wizard_past_date(self):
wizard = self.env["stock.quantity.history"].create(
@@ -63,3 +66,29 @@ class TestStockQuantityHistoryLocation(TestCommon):
action = wizard.with_context().open_at_date()
self.assertEqual(action["context"]["compute_child"], True)
self.assertEqual(action["context"]["location"], self.test_stock_loc.id)
+
+ def test_03_get_stock_quant_list_view(self):
+ # 1. Get Stock Quant list view without the `group_stock_multi_locations` group
+ self.env.user.write(
+ {"groups_id": [Command.unlink(self.group_multi_locations.id)]}
+ )
+ views = [[False, "list"]]
+ sq_views = self.env["stock.quant"].get_views(views=views)
+ list_view = sq_views.get("views", {}).get("list", {})
+ arch = list_view.get("arch", "")
+ arch_tree = etree.XML(arch)
+ buttons = arch_tree.xpath('//button[@name="action_inventory_at_date"]')
+ for button in buttons:
+ self.assertEqual(button.get("string"), "Inventory at Date")
+ # 2. Now, with the group
+ self.env.user.write(
+ {"groups_id": [Command.link(self.group_multi_locations.id)]}
+ )
+ views = [[False, "list"]]
+ sq_views = self.env["stock.quant"].get_views(views=views)
+ list_view = sq_views.get("views", {}).get("list", {})
+ arch = list_view.get("arch", "")
+ arch_tree = etree.XML(arch)
+ buttons = arch_tree.xpath('//button[@name="action_inventory_at_date"]')
+ for button in buttons:
+ self.assertEqual(button.get("string"), "Inventory at Date & Location")
diff --git a/stock_quantity_history_location/wizards/stock_quantity_history.xml b/stock_quantity_history_location/wizards/stock_quantity_history.xml
index b34f001..cc0e29d 100644
--- a/stock_quantity_history_location/wizards/stock_quantity_history.xml
+++ b/stock_quantity_history_location/wizards/stock_quantity_history.xml
@@ -2,7 +2,9 @@
- Inventory Report
+ stock.quantity.history.form - stock_quantity_history_location
stock.quantity.history
@@ -10,7 +12,7 @@