diff --git a/base_tier_validation/models/tier_review.py b/base_tier_validation/models/tier_review.py index 18413d2979..cd5dc3bf4f 100644 --- a/base_tier_validation/models/tier_review.py +++ b/base_tier_validation/models/tier_review.py @@ -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", diff --git a/base_tier_validation/models/tier_validation.py b/base_tier_validation/models/tier_validation.py index 6f72422685..dcbd500fae 100644 --- a/base_tier_validation/models/tier_validation.py +++ b/base_tier_validation/models/tier_validation.py @@ -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 @@ -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" diff --git a/base_tier_validation/tests/test_tier_validation.py b/base_tier_validation/tests/test_tier_validation.py index 660a97f8b1..4dd560d27c 100644 --- a/base_tier_validation/tests/test_tier_validation.py +++ b/base_tier_validation/tests/test_tier_validation.py @@ -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: @@ -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( @@ -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, @@ -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( @@ -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(