Skip to content

Commit

Permalink
[13.0][FIX] stock_location_last_inventory_date
Browse files Browse the repository at this point in the history
The prevoius implementation was only taking into account the last inventory
specific to the location.
This change includes also inventories done on parents location.

Also display the computed last inventory date in the form view.
  • Loading branch information
TDu authored and hailangvn committed Sep 24, 2021
1 parent 8d97347 commit 7fe3180
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 64 deletions.
3 changes: 2 additions & 1 deletion stock_location_last_inventory_date/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
{
"name": "Stock Location Last Inventory Date",
"summary": "Show the last inventory date for a leaf location",
"version": "13.0.1.0.0",
"version": "13.0.1.0.1",
"development_status": "Alpha",
"category": "Warehouse",
"website": "https://github.com/OCA/stock-logistics-warehouse",
Expand All @@ -12,4 +12,5 @@
"application": False,
"installable": True,
"depends": ["product", "stock"],
"data": ["views/stock_location_views.xml"],
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ msgstr ""
#. module: stock_location_last_inventory_date
#: model:ir.model.fields,help:stock_location_last_inventory_date.field_stock_location__last_inventory_date
msgid ""
"Indicates the last inventory date for the location (only for validated "
"inventories). It is only computed for leaf locations."
"Indicates the last inventory date for the location, including inventory done"
" on parents location."
msgstr ""

#. module: stock_location_last_inventory_date
Expand All @@ -29,13 +29,3 @@ msgstr ""
#: model:ir.model.fields,field_description:stock_location_last_inventory_date.field_stock_location__last_inventory_date
msgid "Last Inventory Date"
msgstr ""

#. module: stock_location_last_inventory_date
#: model:ir.model.fields,field_description:stock_location_last_inventory_date.field_stock_location__validated_inventory_ids
msgid "Stock Inventories"
msgstr ""

#. module: stock_location_last_inventory_date
#: model:ir.model.fields,help:stock_location_last_inventory_date.field_stock_location__validated_inventory_ids
msgid "Stock inventories in state validated for this location."
msgstr ""
53 changes: 14 additions & 39 deletions stock_location_last_inventory_date/models/stock_location.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Copyright 2021 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import api, fields, models
from odoo import fields, models


class StockLocation(models.Model):
Expand All @@ -9,44 +9,19 @@ class StockLocation(models.Model):
last_inventory_date = fields.Datetime(
"Last Inventory Date",
compute="_compute_last_inventory_date",
store=True,
help="Indicates the last inventory date for the location (only for "
"validated inventories). It is only computed for leaf locations.",
help="Indicates the last inventory date for the location, "
"including inventory done on parents location.",
)

# This field reuses the Many2many already defined in the model
# stock.inventory, so this definition adds little overhead, and
# allows to create the list of depends needed by the field for the
# Last Inventory Date.
validated_inventory_ids = fields.Many2many(
"stock.inventory",
relation="stock_inventory_stock_location_rel",
column1="stock_location_id",
column2="stock_inventory_id",
string="Stock Inventories",
help="Stock inventories in state validated for this location.",
domain="[('location_ids', 'in', id), ('state', '=', 'done')]",
)

@api.depends(
"usage",
"child_ids",
"validated_inventory_ids",
"validated_inventory_ids.date",
"validated_inventory_ids.state",
"validated_inventory_ids.location_ids.usage",
"validated_inventory_ids.location_ids.child_ids",
)
def _compute_last_inventory_date(self):
"""Store date of the last inventory for each leaf location"""
for loc in self:
if (
loc.usage != "view"
and not loc.child_ids
and loc.validated_inventory_ids
):
loc.last_inventory_date = loc.validated_inventory_ids.sorted(
lambda inventory: inventory.date
)[-1].date
else:
loc.last_inventory_date = False
for location in self:
location_ids = [
int(location_id)
for location_id in location.parent_path.rstrip("/").split("/")
]
last_inventory = self.env["stock.inventory"].search(
[("location_ids", "in", location_ids), ("state", "=", "done")],
order="date desc",
limit=1,
)
location.last_inventory_date = last_inventory.date
15 changes: 3 additions & 12 deletions stock_location_last_inventory_date/tests/test_stock_location.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,6 @@ def test_leaf_location_non_privileged_user(self):
)
inventory.with_user(stock_user).action_start()
inventory.with_user(stock_manager).action_validate()
self.assertEqual(
self.leaf_location.with_user(stock_user).validated_inventory_ids.ids,
[inventory.id],
)
self.assertEqual(
self.leaf_location.with_user(stock_user).last_inventory_date, inventory.date
)
Expand All @@ -60,8 +56,6 @@ def test_leaf_location_non_privileged_user(self):

def test_leaf_location(self):
self.assertFalse(self.leaf_location.child_ids)
self.assertFalse(self.leaf_location.validated_inventory_ids)
self.assertFalse(self.leaf_location.last_inventory_date)
inventory = self.env["stock.inventory"].create(
{
"name": "Inventory Adjustment",
Expand All @@ -71,13 +65,10 @@ def test_leaf_location(self):
)
inventory.action_start()
inventory.action_validate()
self.assertEqual(self.leaf_location.validated_inventory_ids.ids, [inventory.id])
self.assertEqual(self.leaf_location.last_inventory_date, inventory.date)
self.assertFalse(self.top_location.last_inventory_date)

def test_top_location(self):
self.assertTrue(self.top_location.child_ids)
self.assertFalse(self.top_location.validated_inventory_ids)
self.assertFalse(self.top_location.last_inventory_date)
inventory = self.env["stock.inventory"].create(
{
"name": "Inventory Adjustment",
Expand All @@ -87,5 +78,5 @@ def test_top_location(self):
)
inventory.action_start()
inventory.action_validate()
self.assertEqual(self.top_location.validated_inventory_ids.ids, [inventory.id])
self.assertFalse(self.top_location.last_inventory_date)
self.assertEqual(self.leaf_location.last_inventory_date, inventory.date)
self.assertEqual(self.top_location.last_inventory_date, inventory.date)
13 changes: 13 additions & 0 deletions stock_location_last_inventory_date/views/stock_location_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_location_form" model="ir.ui.view">
<field name="name">stock.location.last.inventory.date</field>
<field name="model">stock.location</field>
<field name="inherit_id" ref="stock.view_location_form" />
<field name="arch" type="xml">
<group name="additional_info" position="inside">
<field name="last_inventory_date" />
</group>
</field>
</record>
</odoo>

0 comments on commit 7fe3180

Please sign in to comment.