Skip to content

Commit 848af22

Browse files
committed
[ADD] active field to spp.audit.rule for soft-delete support
Implements the TODO to add an active field to audit rules, allowing users to archive rules instead of deleting them. Inactive rules are excluded from hook registration and normal searches.
1 parent aef0602 commit 848af22

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

spp_audit_log/models/spp_audit_rule.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ class SppAuditRule(models.Model):
1111
_description = "SPP Audit Rule"
1212

1313
name = fields.Char(required=True)
14-
# TODO: should we need to add active field?
15-
# active = fields.Boolean(default=True)
14+
active = fields.Boolean(default=True)
1615
log_create = fields.Boolean("Log Creation", default=True)
1716
log_write = fields.Boolean("Log Update", default=True)
1817
log_unlink = fields.Boolean("Log Deletion", default=True)
@@ -131,9 +130,9 @@ def _register_hook(self, ids=None):
131130
self = self.sudo()
132131
updated = False
133132
if ids:
134-
rules = self.browse(ids)
133+
rules = self.browse(ids).filtered(lambda r: r.active)
135134
else:
136-
rules = self.search([])
135+
rules = self.search([]) # search() excludes inactive records by default
137136
for rule in rules:
138137
if rule.model_id.model not in self.env.registry.models:
139138
continue

spp_audit_log/tests/test_spp_audit_rule.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,29 @@ def test_get_audit_log_vals(self):
8888
self.assertEqual(res_id, vals["res_id"])
8989
self.assertEqual(method, vals["method"])
9090
self.assertEqual(repr(data[res_id]), vals["data"])
91+
92+
def test_active_field_default(self):
93+
"""Test that new audit rules are active by default."""
94+
model_2 = self.env["ir.model"].search([("model", "=", "res.users")], limit=1)
95+
new_rule = self.create_audit_rule(name="Active Rule Test", model_id=model_2.id)
96+
self.assertTrue(new_rule.active, "New audit rules should be active by default")
97+
98+
def test_inactive_rule_excluded_from_search(self):
99+
"""Test that inactive rules are excluded from normal searches."""
100+
model_2 = self.env["ir.model"].search([("model", "=", "res.currency")], limit=1)
101+
rule = self.create_audit_rule(name="Inactive Rule Test", model_id=model_2.id)
102+
103+
# Rule should be found when active
104+
found = self.env["spp.audit.rule"].search([("id", "=", rule.id)])
105+
self.assertEqual(len(found), 1)
106+
107+
# Deactivate the rule
108+
rule.active = False
109+
110+
# Rule should not be found in normal search
111+
found = self.env["spp.audit.rule"].search([("id", "=", rule.id)])
112+
self.assertEqual(len(found), 0)
113+
114+
# Rule should be found with active_test=False context
115+
found = self.env["spp.audit.rule"].with_context(active_test=False).search([("id", "=", rule.id)])
116+
self.assertEqual(len(found), 1)

spp_audit_log/views/spp_audit_rule_views.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<field name="log_unlink" />
1414
<field name="view_logs" />
1515
<field name="model_id" />
16+
<field name="active" optional="hide" />
1617
</tree>
1718
</field>
1819
</record>

0 commit comments

Comments
 (0)