From de714f5f42510f6df4afb9e7b8eb8c1d104356fd Mon Sep 17 00:00:00 2001 From: bosd <5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me> Date: Tue, 12 May 2026 21:14:17 +0200 Subject: [PATCH 1/7] [IMP] base_tier_validation: UI clean-up Small UX polish on the Tier Definition / Tier Review views: - Tier Definition search view: add an explicit *Archived* filter alongside the existing *All* filter, so archived definitions can be surfaced in one click without resorting to the bare ``active`` search field. - Tier Definition form + list: render the ``reviewer_id`` field (individual review type) with ``many2one_avatar_user`` so the reviewer's avatar is shown next to their name, matching the rest of Odoo and making the screen scannable at a glance. - Tier Definition *More Options* tab renamed to *Notifications & Options* and split into two clearly-titled columns: - *Notify reviewers when*: all ``notify_*`` flags plus ``notify_reminder_delay``. - *Review options*: ``has_comment``. The previous flat group mixed conceptually different settings (notification routing vs. review-time behaviour). - Tier Review list: avatar widget on ``requested_by`` and ``done_by``; ``decoration-warning`` on pending rows and ``decoration-muted`` on waiting rows -- complementing the existing decorations for rejected (danger) and approved (success), so the row state is visible at a glance. - Tier Definition action: add a friendly empty-state help message explaining what tier definitions are and how they chain via *Approve by sequence*. --- base_tier_validation/README.rst | 26 +++ base_tier_validation/readme/HISTORY.md | 26 +++ .../static/description/index.html | 151 +++++++++++------- .../views/tier_definition_view.xml | 34 +++- .../views/tier_review_view.xml | 6 +- 5 files changed, 174 insertions(+), 69 deletions(-) diff --git a/base_tier_validation/README.rst b/base_tier_validation/README.rst index 1071e4531..fc721be01 100644 --- a/base_tier_validation/README.rst +++ b/base_tier_validation/README.rst @@ -125,6 +125,32 @@ improvement will be very valuable. Changelog ========= +19.0.1.1.0 (2026-05-13) +----------------------- + +UI improvements: + +- Tier Definition search view: add an explicit *Archived* filter so + archived definitions can be surfaced in one click. The existing *All* + filter is preserved. +- Tier Definition form view: render ``reviewer_id`` (individual review + type) with the ``many2one_avatar_user`` widget so the reviewer's + avatar is shown next to the name, matching the rest of Odoo. +- Tier Definition list view: same ``many2one_avatar_user`` widget on + ``reviewer_id``. +- Tier Definition *More Options* tab renamed to *Notifications & + Options* and split into two clearly-titled columns: *Notify reviewers + when* (all ``notify_*`` flags + ``notify_reminder_delay``) and *Review + options* (``has_comment``). The previous flat group mixed conceptually + different settings. +- Tier Review list view: render ``requested_by`` and ``done_by`` with + ``many2one_avatar_user``. Add ``decoration-warning`` for pending rows + and ``decoration-muted`` for waiting rows so the row state is visible + at a glance, matching the existing decorations for rejected and + approved. +- Tier Definition action: add a helpful empty-state message explaining + what tier definitions are and how to chain them. + 19.0.1.0.4 (2026-05-13) ----------------------- diff --git a/base_tier_validation/readme/HISTORY.md b/base_tier_validation/readme/HISTORY.md index d0d5ab671..1798dcef2 100644 --- a/base_tier_validation/readme/HISTORY.md +++ b/base_tier_validation/readme/HISTORY.md @@ -1,3 +1,29 @@ +## 19.0.1.1.0 (2026-05-13) + +UI improvements: + +- Tier Definition search view: add an explicit *Archived* filter so + archived definitions can be surfaced in one click. The existing + *All* filter is preserved. +- Tier Definition form view: render ``reviewer_id`` (individual + review type) with the ``many2one_avatar_user`` widget so the + reviewer's avatar is shown next to the name, matching the rest of + Odoo. +- Tier Definition list view: same ``many2one_avatar_user`` widget on + ``reviewer_id``. +- Tier Definition *More Options* tab renamed to *Notifications & + Options* and split into two clearly-titled columns: *Notify + reviewers when* (all ``notify_*`` flags + ``notify_reminder_delay``) + and *Review options* (``has_comment``). The previous flat group + mixed conceptually different settings. +- Tier Review list view: render ``requested_by`` and ``done_by`` with + ``many2one_avatar_user``. Add ``decoration-warning`` for pending + rows and ``decoration-muted`` for waiting rows so the row state is + visible at a glance, matching the existing decorations for rejected + and approved. +- Tier Definition action: add a helpful empty-state message + explaining what tier definitions are and how to chain them. + ## 19.0.1.0.4 (2026-05-13) UI improvement: diff --git a/base_tier_validation/static/description/index.html b/base_tier_validation/static/description/index.html index c51bc4a0c..4a532c02d 100644 --- a/base_tier_validation/static/description/index.html +++ b/base_tier_validation/static/description/index.html @@ -398,31 +398,32 @@

Base Tier Validation

  • Configuration
  • Known issues / Roadmap
  • Changelog
  • -
  • Bug Tracker
  • -
  • Credits @@ -491,7 +492,33 @@

    Known issues / Roadmap

    Changelog

    -

    19.0.1.0.4 (2026-05-13)

    +

    19.0.1.1.0 (2026-05-13)

    +

    UI improvements:

    +
      +
    • Tier Definition search view: add an explicit Archived filter so +archived definitions can be surfaced in one click. The existing All +filter is preserved.
    • +
    • Tier Definition form view: render reviewer_id (individual review +type) with the many2one_avatar_user widget so the reviewer’s +avatar is shown next to the name, matching the rest of Odoo.
    • +
    • Tier Definition list view: same many2one_avatar_user widget on +reviewer_id.
    • +
    • Tier Definition More Options tab renamed to Notifications & +Options and split into two clearly-titled columns: Notify reviewers +when (all notify_* flags + notify_reminder_delay) and Review +options (has_comment). The previous flat group mixed conceptually +different settings.
    • +
    • Tier Review list view: render requested_by and done_by with +many2one_avatar_user. Add decoration-warning for pending rows +and decoration-muted for waiting rows so the row state is visible +at a glance, matching the existing decorations for rejected and +approved.
    • +
    • Tier Definition action: add a helpful empty-state message explaining +what tier definitions are and how to chain them.
    • +
    +
    +
    +

    19.0.1.0.4 (2026-05-13)

    UI improvement:

    • The “needs to be validated” banner shown above tier-validated @@ -507,8 +534,8 @@

      19.0.1.0.4 (2026-05-13)

      the model but never rendered.
    -
    -

    19.0.1.0.1 (2026-05-12)

    +
    +

    19.0.1.0.1 (2026-05-12)

    Fixes:

    • Restore auto-promotion of the lowest-sequence review to pending @@ -530,18 +557,18 @@

      19.0.1.0.1 (2026-05-12)

      subtype_ids explicitly (mirroring _notify_review_requested).
    -
    -

    17.0.1.0.0 (2024-01-10)

    +
    +

    17.0.1.0.0 (2024-01-10)

    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.

    -
    -

    14.0.1.0.0 (2020-11-19)

    +
    +

    14.0.1.0.0 (2020-11-19)

    Migrated to Odoo 14.

    -
    -

    13.0.1.2.2 (2020-08-30)

    +
    +

    13.0.1.2.2 (2020-08-30)

    Fixes:

    • When using approve_sequence option in any tier.definition there can be @@ -550,84 +577,84 @@

      13.0.1.2.2 (2020-08-30)

      sequence, but also other sequence for the same approver
    -
    -

    12.0.3.3.1 (2019-12-02)

    +
    +

    12.0.3.3.1 (2019-12-02)

    Fixes:

    • Show comment on Reviews Table.
    • Edit notification with approve_sequence.
    -
    -

    12.0.3.3.0 (2019-11-27)

    +
    +

    12.0.3.3.0 (2019-11-27)

    New features:

    • Add comment on Reviews Table.
    • Approve by sequence.
    -
    -

    12.0.3.2.1 (2019-11-26)

    +
    +

    12.0.3.2.1 (2019-11-26)

    Fixes:

    • Remove message_subscribe_users
    -
    -

    12.0.3.2.0 (2019-11-25)

    +
    +

    12.0.3.2.0 (2019-11-25)

    New features:

    • Notify reviewers
    -
    -

    12.0.3.1.0 (2019-07-08)

    +
    +

    12.0.3.1.0 (2019-07-08)

    Fixes:

    • Singleton error
    -
    -

    12.0.3.0.0 (2019-12-02)

    +
    +

    12.0.3.0.0 (2019-12-02)

    Fixes:

    • Edit Reviews Table
    -
    -

    12.0.2.1.0 (2019-05-29)

    +
    +

    12.0.2.1.0 (2019-05-29)

    Fixes:

    • Edit drop-down style width and position
    -
    -

    12.0.2.0.0 (2019-05-28)

    +
    +

    12.0.2.0.0 (2019-05-28)

    New features:

    • Pass parameters as functions.
    • Add Systray.
    -
    -

    12.0.1.0.0 (2019-02-18)

    +
    +

    12.0.1.0.0 (2019-02-18)

    Migrated to Odoo 12.

    -
    -

    11.0.1.0.0 (2018-05-09)

    +
    +

    11.0.1.0.0 (2018-05-09)

    Migrated to Odoo 11.

    -
    -

    10.0.1.0.0 (2018-03-26)

    +
    +

    10.0.1.0.0 (2018-03-26)

    Migrated to Odoo 10.

    -
    -

    Bug Tracker

    +

    Bug Tracker

    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 @@ -635,15 +662,15 @@

    Bug Tracker

    Do not contact contributors directly about support or help with technical issues.

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • ForgeFlow
    -

    Contributors

    +

    Contributors

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association diff --git a/base_tier_validation/views/tier_definition_view.xml b/base_tier_validation/views/tier_definition_view.xml index ff882142c..7eacf9706 100644 --- a/base_tier_validation/views/tier_definition_view.xml +++ b/base_tier_validation/views/tier_definition_view.xml @@ -11,7 +11,7 @@ - + @@ -57,6 +57,7 @@ - - - + + + - + + + @@ -138,6 +141,11 @@ + tier.definition list,form {'search_default_all': 1} + +

    + Define a new validation tier +

    +

    + A tier definition tells Odoo which records on a given model need + to be reviewed by which user (or group, or field-based reviewer) + before they can move forward in their workflow. +

    +

    + Tiers can be chained -- enable + Approve by sequence + on each definition for the model to require the lower-sequence + tier to be approved first. +

    +
    - + - + From 676e726e4c509dfdd5dd13040a08ac9940525e46 Mon Sep 17 00:00:00 2001 From: bosd <5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me> Date: Wed, 13 May 2026 23:22:26 +0200 Subject: [PATCH 2/7] [IMP] base_tier_validation: tighter Reviews table + Bootstrap 5 classes - Narrow the Sequence column: header becomes "#" with an explicit 2rem width via .o_tier_review_seq, freeing real-estate for the Description / Status / Todo by / Done by / Validation Date columns on cramped form views. - Left-align all text columns (Description, Status, Todo by, Done by, Validation Date, Comment) -- the previous text-end was right-aligning short text values in already-cramped columns, which made the header visually drift away from the value. - Modernize the Bootstrap 3 leftovers from the original widget: panel/panel-default/panel-heading/panel-title/panel-body -> card + card-header/card-title/card-body; data-toggle -> data-bs-toggle and data-target -> data-bs-target; table-condensed -> table-sm; oe_mt32 -> mt-4. The widget still renders the same way but uses classes that actually exist in Bootstrap 5 (which Odoo 19 ships). - Row status colouring: replace alert/alert-success/alert-danger (which are Bootstrap components designed for
    , not , and don't tint the row consistently) with the proper Bootstrap 5 contextual table classes table-success / table-danger. - Scope all custom CSS rules under a new .o_tier_review_widget root class so they no longer rely on the now-renamed .panel-* selectors and won't leak to other Bootstrap cards on the page. --- .../tier_review_widget.scss | 27 ++++---- .../tier_review_widget/tier_review_widget.xml | 67 ++++++++++++------- 2 files changed, 56 insertions(+), 38 deletions(-) diff --git a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.scss b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.scss index a42c166d8..ac41961a1 100644 --- a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.scss +++ b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.scss @@ -3,39 +3,42 @@ ul.o_review { max-width: 800px; } -.panel-group { +.o_tier_review_widget { min-height: auto !important; margin-top: -6px !important; padding: 16px 16px 8px 16px !important; } -.panel-heading { - background-color: initial !important; +.o_tier_review_widget .card { + border: 0 !important; } -.panel { - border: 0 !important; +.o_tier_review_widget .card-header { + background-color: initial !important; } -.panel-body { +.o_tier_review_widget .card-body { overflow-y: hidden; overflow-x: auto; } -.panel-title > a, -.panel-title > a:active { +.o_tier_review_widget .card-title > a, +.o_tier_review_widget .card-title > a:active { display: block; } -.panel-heading a:before { +.o_tier_review_widget .card-header a:before { font-family: FontAwesome; content: "\f0d7"; float: right; transition: all 0.5s; } -.panel-heading.active a:before { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); +.o_tier_review_widget .card-header.active a:before { transform: rotate(180deg); } + +.o_tier_review_widget .o_tier_review_seq { + width: 2rem; + white-space: nowrap; +} diff --git a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml index 92735f4d0..af8880e7c 100644 --- a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml +++ b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml @@ -1,46 +1,58 @@ -
    -
    -
    -

    +
    +
    + -
    -
    - +
    +
    +
    + class="text-center o_tier_review_seq" + ># - + - - + + - + @@ -57,20 +69,23 @@ - - - - - -
    Sequence Requested byDescriptionDescription StatusTodo byDone byTodo byDone by Validation DateCommentComment
    + @@ -78,19 +93,19 @@ t-out="review.requested_by.display_name" /> + + + + + Date: Wed, 13 May 2026 23:42:26 +0200 Subject: [PATCH 3/7] [FIX] base_tier_validation: tier_review_widget collapse selector Follow-up to the Bootstrap 3 -> 5 migration of the Reviews widget template: onToggleCollapse looked up the heading element via .closest(".panel-heading"), which no longer matches anything since the template now uses .card-header. The collapse toggle was a no-op after the migration. Switch the selector to .card-header and add optional chaining on nextElementSibling.matches so a defensive check survives any future DOM rearrangement instead of throwing. --- .../components/tier_review_widget/tier_review_widget.esm.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js index b9b87135a..b1a3d5950 100644 --- a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js +++ b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js @@ -17,9 +17,9 @@ export class ReviewsTable extends Component { } onToggleCollapse(ev) { - const panelHeading = ev.currentTarget.closest(".panel-heading"); - const collapseDiv = panelHeading.nextElementSibling.matches("div#collapse1") - ? panelHeading.nextElementSibling + const cardHeader = ev.currentTarget.closest(".card-header"); + const collapseDiv = cardHeader?.nextElementSibling?.matches("div#collapse1") + ? cardHeader.nextElementSibling : null; if (!collapseDiv) return; if (this.state.collapse) { From b614153e84b9f68c5751e9a7482ac01bbaaea1d2 Mon Sep 17 00:00:00 2001 From: bosd <5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me> Date: Thu, 14 May 2026 17:01:10 +0200 Subject: [PATCH 4/7] [IMP] base_tier_validation: refresh icons to align with new app icon The module's app icon recently switched to an xmark + check motif. Bring the rest of the UI iconography in line: - Systray dropdown: fa-pencil-square-o -> fa-check-square-o. Avoids the visual collision with the sale / invoice systray entries which use fa-pencil-square-o, and matches the checkbox+check shape of the app icon. - Validate button: fa-thumbs-up -> fa-check (fa-lg). Reject button: fa-thumbs-down -> fa-times (= xmark, fa-lg). Same for the validated / rejected alert banners on the document and the matching HTML message bodies posted to chatter -- single consistent xmark+check vocabulary across systray, alert, button and chatter message. - Restart Validation button: was bare; now fa-rotate-left so the three workflow buttons (Request / Validate / Restart) all read with a glanceable icon. --- base_tier_validation/models/tier_validation.py | 4 ++-- .../src/components/tier_review_menu/tier_review_menu.xml | 6 +----- .../templates/tier_validation_templates.xml | 9 +++++---- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/base_tier_validation/models/tier_validation.py b/base_tier_validation/models/tier_validation.py index 782cca05d..0fc9b8def 100644 --- a/base_tier_validation/models/tier_validation.py +++ b/base_tier_validation/models/tier_validation.py @@ -200,13 +200,13 @@ def _get_to_validate_message(self): ) def _get_validated_message(self): - msg = f""" { + msg = f""" { self.env._("Operation has been validated!") }""" return self.validation_status == "validated" and msg or "" def _get_rejected_message(self): - msg = f""" { + msg = f""" { self.env._("Operation has been rejected.") }""" return self.validation_status == "rejected" and msg or "" diff --git a/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml b/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml index f4b1c323a..20582664f 100644 --- a/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml +++ b/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml @@ -9,11 +9,7 @@ menuClass="discussSystray.menuClass" >