[IMP] base_changeset: optionally prevent self validation
parent
e507256b63
commit
b3d4640dae
|
@ -38,6 +38,7 @@ class ChangesetFieldRule(models.Model):
|
||||||
)
|
)
|
||||||
company_id = fields.Many2one("res.company", default=lambda self: self.env.company)
|
company_id = fields.Many2one("res.company", default=lambda self: self.env.company)
|
||||||
active = fields.Boolean(default=True)
|
active = fields.Boolean(default=True)
|
||||||
|
prevent_self_validation = fields.Boolean(default=False)
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
"""Ensure there is at most one rule with source_model_id NULL."""
|
"""Ensure there is at most one rule with source_model_id NULL."""
|
||||||
|
|
|
@ -394,6 +394,8 @@ class RecordChangesetChange(models.Model):
|
||||||
has_group = self.user_has_groups("base_changeset.group_changeset_user")
|
has_group = self.user_has_groups("base_changeset.group_changeset_user")
|
||||||
for rec in self:
|
for rec in self:
|
||||||
can_validate = rec._is_change_pending() and (is_superuser or has_group)
|
can_validate = rec._is_change_pending() and (is_superuser or has_group)
|
||||||
|
if rec.rule_id.prevent_self_validation:
|
||||||
|
can_validate = can_validate and rec.modified_by_id != self.env.user
|
||||||
rec.user_can_validate_changeset = can_validate
|
rec.user_can_validate_changeset = can_validate
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
|
|
|
@ -118,6 +118,35 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase):
|
||||||
# All computed fields are assigned
|
# All computed fields are assigned
|
||||||
changeset.change_ids.read()
|
changeset.change_ids.read()
|
||||||
|
|
||||||
|
def test_apply_change_with_prevent_self_validation(self):
|
||||||
|
""" Don't apply a changeset change and prevent self validation """
|
||||||
|
self.partner.write({"street": "street Z"})
|
||||||
|
self.partner._compute_changeset_ids()
|
||||||
|
self.partner._compute_count_pending_changesets()
|
||||||
|
self.assertEqual(self.partner.count_pending_changesets, 1)
|
||||||
|
self.assertEqual(self.partner.count_pending_changeset_changes, 1)
|
||||||
|
self.partner.changeset_ids.change_ids.rule_id.prevent_self_validation = True
|
||||||
|
with self.assertRaises(
|
||||||
|
UserError, msg="You don't have the rights to reject the changes."
|
||||||
|
):
|
||||||
|
self.partner.changeset_ids.change_ids.apply()
|
||||||
|
self.partner._compute_changeset_ids()
|
||||||
|
self.partner._compute_count_pending_changesets()
|
||||||
|
self.assertEqual(self.partner.count_pending_changesets, 1)
|
||||||
|
self.assertEqual(self.partner.count_pending_changeset_changes, 1)
|
||||||
|
self.assertEqual(self.partner.street, "street X")
|
||||||
|
self.assertEqual(self.partner.changeset_ids.change_ids.state, "draft")
|
||||||
|
|
||||||
|
user = self.env.ref("base.user_demo")
|
||||||
|
user.groups_id += self.env.ref("base_changeset.group_changeset_user")
|
||||||
|
self.partner.changeset_ids.change_ids.with_user(user).apply()
|
||||||
|
self.partner._compute_changeset_ids()
|
||||||
|
self.partner._compute_count_pending_changesets()
|
||||||
|
self.assertEqual(self.partner.count_pending_changesets, 0)
|
||||||
|
self.assertEqual(self.partner.count_pending_changeset_changes, 0)
|
||||||
|
self.assertEqual(self.partner.street, "street Z")
|
||||||
|
self.assertEqual(self.partner.changeset_ids.change_ids.state, "done")
|
||||||
|
|
||||||
def test_apply_done_change(self):
|
def test_apply_done_change(self):
|
||||||
""" Done changes do not apply (already applied) """
|
""" Done changes do not apply (already applied) """
|
||||||
changes = [(self.field_name, "Y", "done")]
|
changes = [(self.field_name, "Y", "done")]
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
/>
|
/>
|
||||||
<field name="action" />
|
<field name="action" />
|
||||||
<field name="source_model_id" widget="selection" />
|
<field name="source_model_id" widget="selection" />
|
||||||
|
<field name="prevent_self_validation" />
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
|
|
Loading…
Reference in New Issue