From 35ea60cc3b4eb78ad678d62b834222f5b57f2e86 Mon Sep 17 00:00:00 2001 From: FactorLibre Date: Thu, 16 Jan 2025 17:58:34 +0100 Subject: [PATCH] [UPD] stock_lock_lot Fix permissions issue when creating product categories --- stock_lock_lot/models/product_category.py | 11 +++++++++-- stock_lock_lot/tests/test_stock_lock_lot.py | 11 +++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/stock_lock_lot/models/product_category.py b/stock_lock_lot/models/product_category.py index 84df15d6729..29f60531bad 100644 --- a/stock_lock_lot/models/product_category.py +++ b/stock_lock_lot/models/product_category.py @@ -2,7 +2,7 @@ # Copyright 2015 AvanzOsc (http://www.avanzosc.es) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, api, exceptions, fields, models +from odoo import _, exceptions, fields, models class ProductCategory(models.Model): @@ -14,9 +14,16 @@ class ProductCategory(models.Model): "by default", ) - @api.constrains("lot_default_locked") def _check_category_lock_unlock(self): if not self.user_has_groups("stock_lock_lot.group_lock_lot"): raise exceptions.AccessError( _("You are not allowed to block/unblock Serial Numbers/Lots") ) + + def write(self, vals): + if ( + "lot_default_locked" in vals + and vals["lot_default_locked"] != self.lot_default_locked + ): + self._check_category_lock_unlock() + return super().write(vals) diff --git a/stock_lock_lot/tests/test_stock_lock_lot.py b/stock_lock_lot/tests/test_stock_lock_lot.py index a3967ac89c4..94d6bf7b538 100644 --- a/stock_lock_lot/tests/test_stock_lock_lot.py +++ b/stock_lock_lot/tests/test_stock_lock_lot.py @@ -72,3 +72,14 @@ def test_track_subtype_locked(self): self.assertEqual( subtype, expected_subtype, "Incorrect subtype for unlocked state" ) + + def test_category_lock_permissions(self): + # Remove lock permission + self.env.user.groups_id -= self.env.ref("stock_lock_lot.group_lock_lot") + # Change lot_default_locked should fail + with self.assertRaises(exceptions.AccessError): + self.category.write({"lot_default_locked": False}) + self.env.user.groups_id += self.env.ref("stock_lock_lot.group_lock_lot") + # Now the change should work + self.category.write({"lot_default_locked": False}) + self.assertFalse(self.category.lot_default_locked)