Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[18.0][FIX] base_tier_validation: Do not update the counter if it is not possible to review it #1042

Merged
merged 2 commits into from
Mar 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion base_tier_validation/models/tier_review.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@ class TierReview(models.Model):
default="waiting",
)
model = fields.Char(string="Related Document Model", index=True)
res_id = fields.Integer(string="Related Document ID", index=True)
res_id = fields.Many2oneReference(
string="Related Document ID",
index=True,
model_field="model",
)
definition_id = fields.Many2one(comodel_name="tier.definition")
company_id = fields.Many2one(
related="definition_id.company_id",
Expand Down
6 changes: 4 additions & 2 deletions base_tier_validation/models/tier_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -729,8 +729,9 @@ def request_validation(self):
if rec.evaluate_tier(td):
sequence += 1
vals_list.append(rec._prepare_tier_review_vals(td, sequence))
self._update_counter({"review_created": True})
created_trs = tr_obj.create(vals_list)
if any(self.mapped("can_review")):
self._update_counter({"review_created": True})
self._notify_review_requested(created_trs)
return created_trs

Expand Down Expand Up @@ -765,8 +766,9 @@ def restart_validation(self):
.mapped("partner_id")
.ids
)
can_review = rec.can_review
rec.mapped("review_ids").unlink()
if to_update_counter:
if to_update_counter and can_review:
self._update_counter({"review_deleted": True})
if partners_to_notify_ids:
subscribe = "message_subscribe"
Expand Down
33 changes: 24 additions & 9 deletions base_tier_validation/tests/test_tier_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,8 @@ def test_10_systray_counter(self):
)
# Request validation
self.test_record.with_user(self.test_user_2.id).request_validation()
self.test_record.invalidate_model()
test_record.with_user(self.test_user_2.id).request_validation()
test_record.invalidate_model()
self.test_record_2.with_user(self.test_user_2.id).request_validation()
self.test_record_2.invalidate_model()
# Get review user count as systray icon would do and check count value
docs = self.test_user_1.with_user(self.test_user_1).review_user_count()
for doc in docs:
Expand Down Expand Up @@ -295,14 +292,14 @@ def test_12_approve_sequence_same_user(self):
self.assertTrue(reviews)

record1 = test_record.with_user(self.test_user_1.id)
record1.invalidate_model()
self.assertTrue(record1.can_review)
# Validation will be all by sequence
self.assertEqual(len(record1.review_ids), 2)
self.assertEqual(
2, len(record1.review_ids.filtered(lambda x: x.status == "waiting"))
1, len(record1.review_ids.filtered(lambda x: x.status == "waiting"))
)
self.assertEqual(
0, len(record1.review_ids.filtered(lambda x: x.status == "pending"))
1, len(record1.review_ids.filtered(lambda x: x.status == "pending"))
)
record1.validate_tier()
self.assertEqual(
Expand All @@ -311,14 +308,29 @@ def test_12_approve_sequence_same_user(self):
self.assertEqual(
1, len(record1.review_ids.filtered(lambda x: x.status == "pending"))
)
self.assertEqual(
1, len(record1.review_ids.filtered(lambda x: x.status == "approved"))
)
record1.validate_tier()
self.assertEqual(
0, len(record1.review_ids.filtered(lambda x: x.status == "waiting"))
)
self.assertEqual(
0, len(record1.review_ids.filtered(lambda x: x.status == "pending"))
)
self.assertEqual(
2, len(record1.review_ids.filtered(lambda x: x.status == "approved"))
)
record1.validate_tier()
self.assertEqual(
0, len(record1.review_ids.filtered(lambda x: x.status == "waiting"))
)
self.assertEqual(
0, len(record1.review_ids.filtered(lambda x: x.status == "pending"))
)
self.assertEqual(
2, len(record1.review_ids.filtered(lambda x: x.status == "approved"))
)

def test_12_approve_sequence_same_user_bypassed(self):
"""Similar to test_12_approve_sequence, with all same users,
Expand Down Expand Up @@ -354,14 +366,14 @@ def test_12_approve_sequence_same_user_bypassed(self):
self.assertTrue(reviews)

record1 = test_record.with_user(self.test_user_1.id)
record1.invalidate_model()
self.assertTrue(record1.can_review)
# When the first tier is validated, all the rest will be approved.
self.assertEqual(len(record1.review_ids), 2)
self.assertEqual(
2, len(record1.review_ids.filtered(lambda x: x.status == "waiting"))
1, len(record1.review_ids.filtered(lambda x: x.status == "waiting"))
)
self.assertEqual(
0, len(record1.review_ids.filtered(lambda x: x.status == "pending"))
1, len(record1.review_ids.filtered(lambda x: x.status == "pending"))
)
record1.validate_tier()
self.assertEqual(
Expand All @@ -370,6 +382,9 @@ def test_12_approve_sequence_same_user_bypassed(self):
self.assertEqual(
0, len(record1.review_ids.filtered(lambda x: x.status == "waiting"))
)
self.assertEqual(
2, len(record1.review_ids.filtered(lambda x: x.status == "approved"))
)

def test_13_onchange_review_type(self):
tier_def_id = self.tier_def_obj.create(
Expand Down