diff --git a/base_tier_validation/README.rst b/base_tier_validation/README.rst
index 5c97d71c7..a0a527df2 100644
--- a/base_tier_validation/README.rst
+++ b/base_tier_validation/README.rst
@@ -125,6 +125,23 @@ improvement will be very valuable.
Changelog
=========
+19.0.1.0.4 (2026-05-13)
+-----------------------
+
+UI improvement:
+
+- The "needs to be validated" banner shown above tier-validated
+ documents now surfaces *who* is expected to act, when known. Reads
+ "Pending validation by John" or "Pending validation by Group
+ Accountants" instead of the generic "This Record needs to be
+ validated", with a fallback to the model-name phrasing for the
+ defensive edge case where no review has reached ``pending`` yet.
+ Reuses ``tier.review.todo_by`` so every review type (individual user,
+ group, ``res.users`` / ``res.groups`` field) is handled uniformly. The
+ banner template now reads from the long-standing
+ ``to_validate_message`` Html field, which was previously defined on
+ the model but never rendered.
+
19.0.1.0.1 (2026-05-12)
-----------------------
diff --git a/base_tier_validation/models/tier_validation.py b/base_tier_validation/models/tier_validation.py
index 29896f80b..782cca05d 100644
--- a/base_tier_validation/models/tier_validation.py
+++ b/base_tier_validation/models/tier_validation.py
@@ -172,11 +172,32 @@ def _get_to_validate_message_name(self):
return self._description
def _get_to_validate_message(self):
- return f""" {
- self.env._(
- "This %s needs to be validated", self._get_to_validate_message_name()
+ """Build the contextual "needs to be validated" banner body.
+
+ When at least one review has reached ``pending`` and carries a
+ ``todo_by`` label (i.e. the assignee is known -- a user, a group
+ or a field-based reviewer), surface it inline so the reader can
+ see at a glance *who* is expected to act next, not just *that*
+ action is needed.
+
+ Falls back to the model-name phrasing -- "This Sale Order needs
+ to be validated" -- when no pending review is available yet
+ (defensive: e.g. the ``waiting`` edge state, or downstream code
+ that calls this on a fresh record).
+ """
+ icon = ''
+ pending = self.review_ids.filtered(lambda r: r.status == "pending")[:1]
+ if pending and pending.todo_by:
+ return self.env._(
+ "%(icon)s Pending validation by %(todo_by)s",
+ icon=icon,
+ todo_by=pending.todo_by,
)
- }"""
+ return self.env._(
+ "%(icon)s This %(model_name)s needs to be validated",
+ icon=icon,
+ model_name=self._get_to_validate_message_name(),
+ )
def _get_validated_message(self):
msg = f""" {
@@ -190,7 +211,7 @@ def _get_rejected_message(self):
}"""
return self.validation_status == "rejected" and msg or ""
- @api.depends("validation_status")
+ @api.depends("validation_status", "review_ids.status", "review_ids.todo_by")
def _compute_to_validate_message(self):
for rec in self:
rec.to_validate_message = rec._get_to_validate_message()
diff --git a/base_tier_validation/readme/HISTORY.md b/base_tier_validation/readme/HISTORY.md
index 740cd6ca2..d0d5ab671 100644
--- a/base_tier_validation/readme/HISTORY.md
+++ b/base_tier_validation/readme/HISTORY.md
@@ -1,3 +1,20 @@
+## 19.0.1.0.4 (2026-05-13)
+
+UI improvement:
+
+- The "needs to be validated" banner shown above tier-validated
+ documents now surfaces *who* is expected to act, when known.
+ Reads "Pending validation by John" or "Pending validation by
+ Group Accountants" instead of the generic
+ "This Record needs to be validated", with a fallback to the
+ model-name phrasing for the defensive edge case where no review
+ has reached ``pending`` yet. Reuses ``tier.review.todo_by`` so
+ every review type (individual user, group, ``res.users`` /
+ ``res.groups`` field) is handled uniformly. The banner template
+ now reads from the long-standing ``to_validate_message`` Html
+ field, which was previously defined on the model but never
+ rendered.
+
## 19.0.1.0.1 (2026-05-12)
Fixes:
diff --git a/base_tier_validation/static/description/index.html b/base_tier_validation/static/description/index.html
index 8d3911153..3be2d110c 100644
--- a/base_tier_validation/static/description/index.html
+++ b/base_tier_validation/static/description/index.html
@@ -398,30 +398,31 @@
Base Tier Validation
Configuration
Known issues / Roadmap
Changelog
-Bug Tracker
-Credits
@@ -490,7 +491,24 @@
-
+
+
UI improvement:
+
+- The “needs to be validated” banner shown above tier-validated
+documents now surfaces who is expected to act, when known. Reads
+“Pending validation by John” or “Pending validation by Group
+Accountants” instead of the generic “This Record needs to be
+validated”, with a fallback to the model-name phrasing for the
+defensive edge case where no review has reached pending yet.
+Reuses tier.review.todo_by so every review type (individual user,
+group, res.users / res.groups field) is handled uniformly. The
+banner template now reads from the long-standing
+to_validate_message Html field, which was previously defined on
+the model but never rendered.
+
+
+
+
Fixes:
- Restore auto-promotion of the lowest-sequence review to pending
@@ -512,18 +530,18 @@
subtype_ids explicitly (mirroring _notify_review_requested).
-
-
+
+
Migrated to Odoo 17. Merged module with tier_validation_waiting. To
support sending messages in a validation sequence when it is their turn
to validate.
-
-
+
-
-
+
+
Fixes:
- When using approve_sequence option in any tier.definition there can be
@@ -532,84 +550,84 @@
sequence, but also other sequence for the same approver
-
-
+
+
Fixes:
- Show comment on Reviews Table.
- Edit notification with approve_sequence.
-
-
+
+
New features:
- Add comment on Reviews Table.
- Approve by sequence.
-
-
+
+
Fixes:
- Remove message_subscribe_users
-
-
+
-
-
+
-
-
+
-
-
+
+
Fixes:
- Edit drop-down style width and position
-
-
+
+
New features:
- Pass parameters as functions.
- Add Systray.
-
-
+
-
-
+
-
-
+
-
-
+
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
@@ -617,15 +635,15 @@
Do not contact contributors directly about support or help with technical issues.