Skip to content

2026 08 29/cl migra purchase tier validation 20 - #61

Closed
CILC98 wants to merge 7 commits into
OCA:19.0from
TRESCLOUD:2026_08_29/CL_MIGRA-purchase_tier_validation-20
Closed

2026 08 29/cl migra purchase tier validation 20#61
CILC98 wants to merge 7 commits into
OCA:19.0from
TRESCLOUD:2026_08_29/CL_MIGRA-purchase_tier_validation-20

Conversation

@CILC98

@CILC98 CILC98 commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Riesgo: bajo

  • Tipo: datos
  • Descripción:

    Migra purchase_tier_validation (aplica el flujo de aprobación por tiers a purchase.order)
    de v19 a Odoo 20. Cambio mínimo: activa el módulo (version'1.0'). Sin más deltas: el
    header de purchase.order ya trae botones propios (Send RFQ/Confirm/Approve), así que el
    anclaje por defecto de base_tier_validation funciona sin overrides (a diferencia de
    product.template en product_tier_validation, que sí necesitó uno). Sin iconos FontAwesome,
    sin OWL, sin ir.model.access/_sql_constraints/read_group() clásico.

    License, autoría (ForgeFlow/OCA) y README quedan sin tocar — contenido OCA vendored, mismo
    criterio que base_tier_validation/product_tier_validation.

    Métricas: verde a la primera corrida de install+test (0 failed, 0 error(s) of 3 tests,
    purchase_tier_validation queda installed). 1 archivo modificado (manifest).

Validación de flujos

Cubierto por tests automáticos (0 failed, 0 error(s) of 3 tests):

  • El modelo purchase.order queda registrado en
    tier.definition._get_tier_validation_model_names() (test_01_tier_definition_models)

Flujos sin test automático — requieren evidencia manual (este módulo no trae tests propios de
flujo, solo el de registro del modelo; el flujo de negocio en sí lo cubren los tests genéricos de
base_tier_validation, pero vale confirmarlo sobre purchase.order real):

  1. Botón "Request Validation" en el header de una RFQ: crear una definición de tier sobre
    purchase.order, crear una orden de compra que la dispare, y confirmar que el botón aparece
    junto a "Send RFQ"/"Confirm Order" en el header (no dentro del bloque de aviso amarillo).

    [pega aquí tu evidencia]

  2. Filtro "Needs my Review" en la vista de búsqueda de compras: confirmar que aparece al
    activarlo para un usuario en el grupo de reviewers, y que filtra correctamente por
    reviewer_ids/state.

    [pega aquí tu evidencia]

  3. Filtro "Validated" y la columna validation_status (badge) en la vista de lista/KPI de
    compras: confirmar que el badge cambia de color según el estado (info/danger/success) y que el
    filtro "Validated" muestra solo las órdenes con validation_status = 'validated'.

    [pega aquí tu evidencia]

  4. Bloqueo real de "Confirm Order": intentar confirmar una orden de compra que necesita
    validación sin pasar por request_validation()/validate_tier() primero, y confirmar que el
    mixin tier.validation lo bloquea con ValidationError.

    [pega aquí tu evidencia]

  • Número Ticket/Tarea: #13004

stevTresCloud and others added 7 commits August 28, 2026 20:32
…ínea pre-20) (#1)

Onboarding del repo como referencia del CI de migración a Odoo 20. Los
módulos OCA de tier-validation aún no están migrados; se marcan no
instalables para que, al estar en el addons-path del CI/smoke, no se
intente instalarlos y no rompan las corridas. Cada módulo pasará a
installable=True cuando se migre.
* [MIG] product_state: migración a Odoo 20

* [MIG] product_state_stock_base: migración a Odoo 20

Co-authored-by: mymage <stefano.consolaro@mymage.it>

* [FIX][CL] Ajuste a comodel -> string

* [FIX][CL] Retorno a readme original

---------

Co-authored-by: mymage <stefano.consolaro@mymage.it>
* [MIG] base_tier_validation: migración a Odoo 20

- Activa el módulo (installable: True), version -> '1.0'.
- security/ir.model.access.csv -> ir.access.csv (nuevo esquema
  id,name,model_id,group_id/id,operation,domain; ir.model.access
  se fusionó con ir.rule en ir.access). Las reglas multi-compañía
  de tier_validation_security.xml migran de ir.rule a ir.access
  (global, sin group_id, operation=crud).
- Iconos FontAwesome -> oi (Material Symbols): 6 sitios en Python/XML
  (thumb_up/thumb_down/info/pencil_square) + icon="fa-bell" ->
  "notifications" en el mail.activity.type del recordatorio + un
  ::before con font-family: FontAwesome en el SCSS del widget de
  reviews (ya no renderiza nada) reemplazado por un <i class="oi">
  real.
- OWL 3: useState() eliminado -> proxy(). El wrapper useState() sobre
  useService("mail.store") se quita (el store ya es reactivo por sí
  solo, igual que en el propio mail). reactive() (eliminado) -> proxy()
  en el servicio del systray. Se agregan los `this.` explícitos que
  ahora exige el compilador QWeb en los templates de ambos componentes.
  Se agrega un test Hoot que monta el systray (bundle
  web.assets_unit_tests nuevo en el manifest).
- Query.subselect() ya no acepta un string crudo (Since 20, UserWarning
  "select takes only SQL arguments"); se envuelve con SQL(...).
- tests/common.py y test_tier_validation.py: ir.model.access (Python,
  eliminado) -> ir.access. Ojo con la trampa de polaridad: la fila
  original no tenía group_id (bajo ir.model.access eso concedía a
  todos); se fija group_id=base.group_user explícito para no perder
  el permiso en silencio.
- tests/common.py: BaseCommon en v20 aísla el usuario implícito de
  test a solo base.group_user (patrón usado en ~764 archivos del
  core); se declara _test_user_groups = None porque estos tests crean
  tier.definition/res.groups y leen ir.model.fields directo sin
  with_user().

Verificado: install+test limpio contra Odoo 20 (0 failed, 0 error(s)
of 54 tests, base_tier_validation queda `installed`).

License, autoría (ForgeFlow/OCA) y README quedan sin tocar: es
contenido OCA vendored, no de autoría Trescloud (mismo criterio ya
aplicado a stock_analytic/report_xlsx/auditlog en este workspace).

Co-authored-by: Saran440 <saranl@ecosoft.co.th>

* [FIX] base_tier_validation: pencil_square no está en el subset de iconos oi

data-icon="pencil_square" no renderiza nada: el font oi/Material Symbols
que sirve Odoo 20 es un subconjunto curado (icons_wishlist.txt), no el
catálogo completo, y "pencil_square" no está en esa lista (aunque aparece
como texto en un archivo de website_slides -- ese uso también está roto,
no es una referencia válida). Cambia a "edit_square", que sí está en el
wishlist y es el mismo icono que usa el core para casos equivalentes
(account_move, partner_view).

Verificado contra icons_wishlist.txt (no solo grepeando usos en el código,
que puede incluir referencias igual de rotas) y con install+test verde
(0 failed, 0 error(s) of 54 tests).

---------

Co-authored-by: Saran440 <saranl@ecosoft.co.th>
* [MIG] product_state: migración a Odoo 20

* [FIX][CL] Ajuste a comodel -> string
Activa el módulo (installable: True), version -> '1.0'. Sin más deltas:
el header de purchase.order sí trae botones propios (Send RFQ/Confirm/
Approve), así que el anclaje por defecto de
base_tier_validation._tier_validation_buttons_xpath funciona sin overrides
(a diferencia de product.template en product_tier_validation). Sin
iconos FontAwesome, sin OWL, sin ir.model.access/_sql_constraints/
read_group() clásico; los xmlids referenciados
(purchase.view_purchase_order_filter, purchase.purchase_order_kpis_tree,
filter "order_date") siguen existiendo igual en v20.

Verificado: install+test limpio contra Odoo 20 (0 failed, 0 error(s) of
3 tests, purchase_tier_validation queda `installed`).

License, autoría (ForgeFlow/OCA) y README quedan sin tocar: contenido
OCA vendored, mismo criterio que base_tier_validation/product_tier_validation.

Co-authored-by: jaydeep32 <jaydipgajera2020@gmail.com>
@OCA-git-bot

Copy link
Copy Markdown
Contributor

Hi @LoisRForgeFlow,
some modules you are maintaining are being modified, check this out!

@OCA-git-bot OCA-git-bot added mod:product_tier_validation Module product_tier_validation mod:base_tier_validation Module base_tier_validation series:19.0 mod:purchase_tier_validation Module purchase_tier_validation mod:sale_tier_validation Module sale_tier_validation mod:product_state Module product_state mod:product_state_stock_base Module product_state_stock_base labels Aug 30, 2026
@CILC98 CILC98 closed this Aug 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

mod:base_tier_validation Module base_tier_validation mod:product_state_stock_base Module product_state_stock_base mod:product_state Module product_state mod:product_tier_validation Module product_tier_validation mod:purchase_tier_validation Module purchase_tier_validation mod:sale_tier_validation Module sale_tier_validation series:19.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants