Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,46 @@
# Base Tier Validation Forward
Odoo addon: base_tier_validation_forward
## Installation
```bash
pip install odoo-bringout-oca-server-ux-base_tier_validation_forward
```
## Dependencies
This addon depends on:
- base_tier_validation
## Manifest Information
- **Name**: Base Tier Validation Forward
- **Version**: 16.0.2.0.0
- **Category**: Tools
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/server-ux](https://github.com/OCA/server-ux) branch 16.0, addon `base_tier_validation_forward`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,109 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
============================
Base Tier Validation Forward
============================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:a5c6f024788546acf5db68f11f653228e13a249e8d49bc82fda24fc06f845c19
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github
:target: https://github.com/OCA/server-ux/tree/16.0/base_tier_validation_forward
:alt: OCA/server-ux
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-ux-16-0/server-ux-16-0-base_tier_validation_forward
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-ux&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module add an advance option to base_tier_validation.
* To allow "Forward" the tier to different user.
**Sample use case:**
A user is appointed to approve a tire, but he/she don't want to make decision
for some reason, and want to pass/forward the decision to another person.
User can then click on Forward instead of Approve. A new tier with minor sequence will be
created on the reviewer table, and new user will be able to make approval decision.
.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_
**Table of contents**
.. contents::
:local:
Configuration
=============
In any tier definition, check "Allow Forward" to enable this feature.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-ux/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
`feedback <https://github.com/OCA/server-ux/issues/new?body=module:%20base_tier_validation_forward%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Ecosoft
Contributors
~~~~~~~~~~~~
* Kitti U. <kittiu@ecosoft.co.th>
* Andrea Stirpe <a.stirpe@onestein.nl>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-kittiu| image:: https://github.com/kittiu.png?size=40px
:target: https://github.com/kittiu
:alt: kittiu
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-kittiu|
This module is part of the `OCA/server-ux <https://github.com/OCA/server-ux/tree/16.0/base_tier_validation_forward>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,5 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models
from . import wizard
from .hooks import uninstall_hook

View file

@ -0,0 +1,29 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Base Tier Validation Forward",
"summary": "Forward option for base tiers",
"version": "16.0.2.0.0",
"category": "Tools",
"website": "https://github.com/OCA/server-ux",
"author": "Ecosoft,Odoo Community Association (OCA)",
"license": "AGPL-3",
"depends": ["base_tier_validation"],
"data": [
"security/ir.model.access.csv",
"data/mail_data.xml",
"views/tier_definition_view.xml",
"wizard/forward_wizard_view.xml",
"templates/tier_validation_templates.xml",
],
"development_status": "Alpha",
"maintainers": ["kittiu"],
"application": False,
"installable": True,
"assets": {
"web.assets_backend": [
"base_tier_validation_forward/static/src/xml/tier_review_template.xml",
],
},
"uninstall_hook": "uninstall_hook",
}

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record
id="mt_tier_validation_forwarded"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Forward Notification</field>
<field name="default" eval="True" />
<field name="internal" eval="True" />
<field name="hidden" eval="True" />
</record>
</odoo>

View file

@ -0,0 +1,19 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
def uninstall_hook(cr, registry):
"""Revert table tier_review back to original before this module"""
cr.execute(
"update tier_review a set sequence = "
"(select floor(sequence) from tier_review b where a.id = b.id);"
)
cr.execute(
"update tier_review a set status = 'approved' where status = 'forwarded';"
)
cr.execute("alter table tier_review drop column name cascade;")
cr.execute("alter table tier_review drop column review_type cascade;")
cr.execute("alter table tier_review drop column reviewer_id cascade;")
cr.execute("alter table tier_review drop column reviewer_group_id cascade;")
cr.execute("alter table tier_review drop column has_comment cascade;")
cr.execute("alter table tier_review drop column approve_sequence cascade;")

View file

@ -0,0 +1,198 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation_forward
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#, python-format
msgid "A review was forwarded by %s."
msgstr ""
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#, python-format
msgid "A review was forwarded from %(user_name)s %(comment)s"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__has_comment
msgid "Allow Comment"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_definition__has_forward
msgid "Allow Forward"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,help:base_tier_validation_forward.field_tier_definition__has_forward
msgid "Allow option to 'Forward' to different person."
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,help:base_tier_validation_forward.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__approve_sequence
msgid "Approve by sequence"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation__can_forward
msgid "Can Forward"
msgstr ""
#. module: base_tier_validation_forward
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.view_forward_wizard
msgid "Cancel"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__has_comment
msgid "Comment"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_comment_wizard
msgid "Comment Wizard"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__create_uid
msgid "Created by"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__create_date
msgid "Created on"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__name
msgid "Description"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__display_name
msgid "Display Name"
msgstr ""
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.tier_validation_label_forward
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.view_forward_wizard
#, python-format
msgid "Forward"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__forward_description
msgid "Forward Description"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_validation_forward_wizard
msgid "Forward Wizard"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields.selection,name:base_tier_validation_forward.selection__tier_review__status__forwarded
msgid "Forwarded"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__id
msgid "ID"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard____last_update
msgid "Last Modified on"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__write_uid
msgid "Last Updated by"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__write_date
msgid "Last Updated on"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__forward_reviewer_id
msgid "Next Reviewer"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__res_id
msgid "Res"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__res_model
msgid "Res Model"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__status
msgid "Status"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__sequence
msgid "Tier"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_definition
msgid "Tier Definition"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_review
msgid "Tier Review"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr ""
#. module: base_tier_validation_forward
#: model:mail.message.subtype,name:base_tier_validation_forward.mt_tier_validation_forwarded
msgid "Tier Validation Forward Notification"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__review_type
msgid "Validated by"
msgstr ""

View file

@ -0,0 +1,198 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation_forward
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#, python-format
msgid "A review was forwarded by %s."
msgstr "Pregled je preusmjerio %s."
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#, python-format
msgid "A review was forwarded from %(user_name)s %(comment)s"
msgstr "Pregled je preusmjerjen od %(user_name)s %(comment)s"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__has_comment
msgid "Allow Comment"
msgstr "Dozvoli komentar"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_definition__has_forward
msgid "Allow Forward"
msgstr "Dozvoli preusmjeravanje"
#. module: base_tier_validation_forward
#: model:ir.model.fields,help:base_tier_validation_forward.field_tier_definition__has_forward
msgid "Allow option to 'Forward' to different person."
msgstr "Dozvoli opciju za 'preusmjeravanje' drugoj osobi."
#. module: base_tier_validation_forward
#: model:ir.model.fields,help:base_tier_validation_forward.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr "Redoslijed odobravanja po specificiranom broju sekvence"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__approve_sequence
msgid "Approve by sequence"
msgstr "Odobri po sekvenci"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation__can_forward
msgid "Can Forward"
msgstr "Može preusmjeriti"
#. module: base_tier_validation_forward
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.view_forward_wizard
msgid "Cancel"
msgstr "Otkaži"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__has_comment
msgid "Comment"
msgstr "Komentar"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_comment_wizard
msgid "Comment Wizard"
msgstr "Čarobnjak komentara"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__name
msgid "Description"
msgstr "Opis"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.tier_validation_label_forward
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.view_forward_wizard
#, python-format
msgid "Forward"
msgstr "Preusmjeri"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__forward_description
msgid "Forward Description"
msgstr "Opis preusmjeravanja"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_validation_forward_wizard
msgid "Forward Wizard"
msgstr "Čarobnjak preusmjeravanja"
#. module: base_tier_validation_forward
#: model:ir.model.fields.selection,name:base_tier_validation_forward.selection__tier_review__status__forwarded
msgid "Forwarded"
msgstr "Preusmjereno"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__id
msgid "ID"
msgstr "ID"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__forward_reviewer_id
msgid "Next Reviewer"
msgstr "Sljedeći pregledač"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__res_id
msgid "Res"
msgstr "Res"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__res_model
msgid "Res Model"
msgstr "Res model"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "Pregledač"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "Grupa pregledača"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__status
msgid "Status"
msgstr "Status"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__sequence
msgid "Tier"
msgstr "Nivo"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_definition
msgid "Tier Definition"
msgstr "Definicija granice"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_review
msgid "Tier Review"
msgstr "Pregled nivoa"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Validacija nivoa (apstraktna)"
#. module: base_tier_validation_forward
#: model:mail.message.subtype,name:base_tier_validation_forward.mt_tier_validation_forwarded
msgid "Tier Validation Forward Notification"
msgstr "Obavještenje o preusmjeravanju validacije nivoa"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__review_type
msgid "Validated by"
msgstr "Validirao"

View file

@ -0,0 +1,204 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation_forward
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-08-27 16:07+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#, python-format
msgid "A review was forwarded by %s."
msgstr "%s ha enviado una reseña."
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#, python-format
msgid "A review was forwarded from %(user_name)s %(comment)s"
msgstr "Se envió una reseña desde %(user_name)s %(comment)s"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__has_comment
msgid "Allow Comment"
msgstr "Permitir comentario"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_definition__has_forward
msgid "Allow Forward"
msgstr "Permitir reenviar"
#. module: base_tier_validation_forward
#: model:ir.model.fields,help:base_tier_validation_forward.field_tier_definition__has_forward
msgid "Allow option to 'Forward' to different person."
msgstr "Permitir la opción de 'Reenviar' a otra persona."
#. module: base_tier_validation_forward
#: model:ir.model.fields,help:base_tier_validation_forward.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr "Orden de aprobación por el número de secuencia especificado"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__approve_sequence
msgid "Approve by sequence"
msgstr "Aprobar por secuencia"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation__can_forward
msgid "Can Forward"
msgstr "Puede Reenviar"
#. module: base_tier_validation_forward
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.view_forward_wizard
msgid "Cancel"
msgstr "Cancelar"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__has_comment
msgid "Comment"
msgstr "Comentario"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_comment_wizard
msgid "Comment Wizard"
msgstr "Asistente de comentarios"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__create_date
msgid "Created on"
msgstr "Creado el"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__name
msgid "Description"
msgstr "Descripción"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__display_name
msgid "Display Name"
msgstr "Mostrar Nombre"
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.tier_validation_label_forward
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.view_forward_wizard
#, python-format
msgid "Forward"
msgstr "Avanzar"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__forward_description
msgid "Forward Description"
msgstr "Descripción directa"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_validation_forward_wizard
msgid "Forward Wizard"
msgstr "Asistente de avance"
#. module: base_tier_validation_forward
#: model:ir.model.fields.selection,name:base_tier_validation_forward.selection__tier_review__status__forwarded
msgid "Forwarded"
msgstr "Reenviado"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__id
msgid "ID"
msgstr "ID (identificación)"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard____last_update
msgid "Last Modified on"
msgstr "Última Modificación el"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__write_date
msgid "Last Updated on"
msgstr "Última Actualización el"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__forward_reviewer_id
msgid "Next Reviewer"
msgstr "Siguiente revisor"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__res_id
msgid "Res"
msgstr "Recurso"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__res_model
msgid "Res Model"
msgstr "Modelo Res"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "Revisor"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "Grupo revisor"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__status
msgid "Status"
msgstr "Estados"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__sequence
msgid "Tier"
msgstr ""
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_definition
msgid "Tier Definition"
msgstr "Definición del nivel"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_review
msgid "Tier Review"
msgstr "Definición de nivel"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Validaciones de Nivel (abstracto)"
#. module: base_tier_validation_forward
#: model:mail.message.subtype,name:base_tier_validation_forward.mt_tier_validation_forwarded
msgid "Tier Validation Forward Notification"
msgstr "Validación de nivel Notificación previa"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__review_type
msgid "Validated by"
msgstr "Validado por"
#~ msgid "Sequence"
#~ msgstr "Secuencia"

View file

@ -0,0 +1,204 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation_forward
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-08-14 17:58+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#, python-format
msgid "A review was forwarded by %s."
msgstr "Una revisione è stata inoltrata da %s."
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#, python-format
msgid "A review was forwarded from %(user_name)s %(comment)s"
msgstr "Una revisione è stata inoltrata da %(user_name)s %(comment)s"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__has_comment
msgid "Allow Comment"
msgstr "Consenti commenti"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_definition__has_forward
msgid "Allow Forward"
msgstr "Consenti inoltro"
#. module: base_tier_validation_forward
#: model:ir.model.fields,help:base_tier_validation_forward.field_tier_definition__has_forward
msgid "Allow option to 'Forward' to different person."
msgstr "Consente l'opzione di 'Inoltro' ad una persona differente."
#. module: base_tier_validation_forward
#: model:ir.model.fields,help:base_tier_validation_forward.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr "Ordine di approvazione specificato da numero sequenza"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__approve_sequence
msgid "Approve by sequence"
msgstr "Approva in sequenza"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation__can_forward
msgid "Can Forward"
msgstr "Può inoltrare"
#. module: base_tier_validation_forward
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.view_forward_wizard
msgid "Cancel"
msgstr "Annulla"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__has_comment
msgid "Comment"
msgstr "Commento"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_comment_wizard
msgid "Comment Wizard"
msgstr "Procedura guidata commento"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__create_date
msgid "Created on"
msgstr "Creato il"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__name
msgid "Description"
msgstr "Descrizione"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: base_tier_validation_forward
#. odoo-python
#: code:addons/base_tier_validation_forward/models/tier_validation.py:0
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.tier_validation_label_forward
#: model_terms:ir.ui.view,arch_db:base_tier_validation_forward.view_forward_wizard
#, python-format
msgid "Forward"
msgstr "Inoltra"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__forward_description
msgid "Forward Description"
msgstr "Descrizione inoltro"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_validation_forward_wizard
msgid "Forward Wizard"
msgstr "Procedura guidata Inoltro"
#. module: base_tier_validation_forward
#: model:ir.model.fields.selection,name:base_tier_validation_forward.selection__tier_review__status__forwarded
msgid "Forwarded"
msgstr "Inoltrata"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__id
msgid "ID"
msgstr "ID"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__forward_reviewer_id
msgid "Next Reviewer"
msgstr "Prossimo revisore"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__res_id
msgid "Res"
msgstr "Res"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_validation_forward_wizard__res_model
msgid "Res Model"
msgstr "Modello res"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "Revisore"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "Gruppo revisore"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__status
msgid "Status"
msgstr "Stato"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__sequence
msgid "Tier"
msgstr "Livello"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_definition
msgid "Tier Definition"
msgstr "Definizione livello"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_review
msgid "Tier Review"
msgstr "Revisione livello"
#. module: base_tier_validation_forward
#: model:ir.model,name:base_tier_validation_forward.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Validazione livello (sintesi)"
#. module: base_tier_validation_forward
#: model:mail.message.subtype,name:base_tier_validation_forward.mt_tier_validation_forwarded
msgid "Tier Validation Forward Notification"
msgstr "Notifica inoltro validazione livello"
#. module: base_tier_validation_forward
#: model:ir.model.fields,field_description:base_tier_validation_forward.field_tier_review__review_type
msgid "Validated by"
msgstr "Validato da"
#~ msgid "Sequence"
#~ msgstr "Sequenza"

View file

@ -0,0 +1,5 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import tier_definition
from . import tier_review
from . import tier_validation

View file

@ -0,0 +1,13 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class TierDefinition(models.Model):
_inherit = "tier.definition"
has_forward = fields.Boolean(
string="Allow Forward",
default=False,
help="Allow option to 'Forward' to different person.",
)

View file

@ -0,0 +1,53 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class TierReview(models.Model):
_inherit = "tier.review"
_order = "sequence"
name = fields.Char(compute="_compute_definition_data", store=True)
status = fields.Selection(
selection_add=[("forwarded", "Forwarded")],
)
review_type = fields.Selection(
compute="_compute_definition_data",
store=True,
)
reviewer_id = fields.Many2one(
comodel_name="res.users",
compute="_compute_definition_data",
store=True,
)
reviewer_group_id = fields.Many2one(
comodel_name="res.groups",
compute="_compute_definition_data",
store=True,
)
sequence = fields.Integer()
has_comment = fields.Boolean(
compute="_compute_definition_data",
store=True,
)
approve_sequence = fields.Boolean(
compute="_compute_definition_data",
store=True,
)
@api.depends(
"definition_id.name",
"definition_id.review_type",
"definition_id.reviewer_id",
"definition_id.reviewer_group_id",
"definition_id.has_comment",
"definition_id.approve_sequence",
)
def _compute_definition_data(self):
for rec in self:
rec.name = rec.definition_id.name
rec.review_type = rec.definition_id.review_type
rec.reviewer_id = rec.definition_id.reviewer_id
rec.reviewer_group_id = rec.definition_id.reviewer_group_id
rec.has_comment = rec.definition_id.has_comment
rec.approve_sequence = rec.definition_id.approve_sequence

View file

@ -0,0 +1,88 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, fields, models
class TierValidation(models.AbstractModel):
_inherit = "tier.validation"
can_forward = fields.Boolean(compute="_compute_can_forward")
def _compute_can_forward(self):
for rec in self:
if not rec.can_review:
rec.can_forward = False
continue
sequences = self._get_sequences_to_approve(self.env.user)
reviews = rec.review_ids.filtered(lambda l: l.sequence in sequences)
definitions = reviews.mapped("definition_id")
rec.can_forward = True in definitions.mapped("has_forward")
def _validated_states(self):
res = super()._validated_states()
res.append("forwarded")
return res
def _get_forwarded_notification_subtype(self):
return "base_tier_validation.mt_tier_validation_forwarded"
def forward_tier(self):
self.ensure_one()
sequences = self._get_sequences_to_approve(self.env.user)
reviews = self.review_ids.filtered(lambda l: l.sequence in sequences)
ctx = self._add_comment("forward", reviews)["context"]
comment = (
self.env["comment.wizard"].with_context(**ctx).create({"comment": "/"})
)
wizard = self.env.ref("base_tier_validation_forward.view_forward_wizard")
return {
"name": _("Forward"),
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "tier.validation.forward.wizard",
"views": [(wizard.id, "form")],
"view_id": wizard.id,
"target": "new",
"context": {
"default_res_id": self.id,
"default_res_model": self._name,
"comment_id": comment.id,
},
}
def _forward_tier(self, tiers=False):
self.ensure_one()
tier_reviews = tiers or self.review_ids
user_reviews = tier_reviews.filtered(
lambda r: r.status != "approved" and (self.env.user in r.reviewer_ids)
)
user_reviews.write(
{
"status": "forwarded",
"done_by": self.env.user.id,
"reviewed_date": fields.Datetime.now(),
}
)
for review in user_reviews:
rec = self.env[review.model].browse(review.res_id)
rec._notify_forwarded_reviews()
def _notify_forwarded_reviews(self):
post = "message_post"
if hasattr(self, post):
# Notify state change
getattr(self, post)(
subtype_xmlid=self._get_forwarded_notification_subtype(),
body=self._notify_forwarded_reviews_body(),
)
def _notify_forwarded_reviews_body(self):
has_comment = self.review_ids.filtered(
lambda r: (self.env.user in r.reviewer_ids) and r.comment
)
if has_comment:
comment = has_comment.mapped("comment")[0]
return _("A review was forwarded from %(user_name)s %(comment)s") % (
{"user_name": self.env.user.name, "comment": comment}
)
return _("A review was forwarded by %s.") % (self.env.user.name)

View file

@ -0,0 +1 @@
In any tier definition, check "Allow Forward" to enable this feature.

View file

@ -0,0 +1,2 @@
* Kitti U. <kittiu@ecosoft.co.th>
* Andrea Stirpe <a.stirpe@onestein.nl>

View file

@ -0,0 +1,11 @@
This module add an advance option to base_tier_validation.
* To allow "Forward" the tier to different user.
**Sample use case:**
A user is appointed to approve a tire, but he/she don't want to make decision
for some reason, and want to pass/forward the decision to another person.
User can then click on Forward instead of Approve. A new tier with minor sequence will be
created on the reviewer table, and new user will be able to make approval decision.

View file

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_tier_validation_forward_wizard,access.tier.validation.forward.wizard,model_tier_validation_forward_wizard,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_tier_validation_forward_wizard access.tier.validation.forward.wizard model_tier_validation_forward_wizard 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,451 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>README.rst</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="base-tier-validation-forward">
<h1>Base Tier Validation Forward</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:a5c6f024788546acf5db68f11f653228e13a249e8d49bc82fda24fc06f845c19
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-ux/tree/16.0/base_tier_validation_forward"><img alt="OCA/server-ux" src="https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-ux-16-0/server-ux-16-0-base_tier_validation_forward"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-ux&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module add an advance option to base_tier_validation.</p>
<ul class="simple">
<li>To allow “Forward” the tier to different user.</li>
</ul>
<p><strong>Sample use case:</strong></p>
<p>A user is appointed to approve a tire, but he/she dont want to make decision
for some reason, and want to pass/forward the decision to another person.</p>
<p>User can then click on Forward instead of Approve. A new tier with minor sequence will be
created on the reviewer table, and new user will be able to make approval decision.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<p class="last">This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
<a class="reference external" href="https://odoo-community.org/page/development-status">More details on development status</a></p>
</div>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#toc-entry-1">Configuration</a></h2>
<p>In any tier definition, check “Allow Forward” to enable this feature.</p>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-ux/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/server-ux/issues/new?body=module:%20base_tier_validation_forward%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h2><a class="toc-backref" href="#toc-entry-3">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-4">Authors</a></h3>
<ul class="simple">
<li>Ecosoft</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-5">Contributors</a></h3>
<ul class="simple">
<li>Kitti U. &lt;<a class="reference external" href="mailto:kittiu&#64;ecosoft.co.th">kittiu&#64;ecosoft.co.th</a>&gt;</li>
<li>Andrea Stirpe &lt;<a class="reference external" href="mailto:a.stirpe&#64;onestein.nl">a.stirpe&#64;onestein.nl</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h3>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/kittiu"><img alt="kittiu" src="https://github.com/kittiu.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-ux/tree/16.0/base_tier_validation_forward">OCA/server-ux</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<t t-inherit="base_tier_validation.Collapse" t-inherit-mode="extension" owl="1">
<xpath expr="//table[hasclass('table-condensed')]/tbody/t/tr" position="before">
<t
t-if="review.status == 'forwarded'"
t-set="status_class"
t-value="'alert-warning'"
/>
</xpath>
</t>
</templates>

View file

@ -0,0 +1,18 @@
<odoo>
<template
id="tier_validation_label_forward"
inherit_id="base_tier_validation.tier_validation_label"
>
<xpath expr="//button[@name='reject_tier']" position="after">
<field name="can_forward" invisible="1" />
<button
name="forward_tier"
string="Forward"
attrs="{'invisible': [('can_forward', '=', False)]}"
type="object"
class="oe_inline oe_button btn-warning"
icon="fa-arrow-circle-right"
/>
</xpath>
</template>
</odoo>

View file

@ -0,0 +1,3 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import test_tier_validation

View file

@ -0,0 +1,134 @@
# Copyright 2018 ForgeFlow S.L.
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from odoo_test_helper import FakeModelLoader
from odoo.tests import Form
from odoo.tests.common import TransactionCase, tagged
from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
@tagged("post_install", "-at_install")
class TierTierValidation(TransactionCase):
@classmethod
def setUpClass(cls):
super(TierTierValidation, cls).setUpClass()
cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT))
cls.loader = FakeModelLoader(cls.env, cls.__module__)
cls.loader.backup_registry()
from odoo.addons.base_tier_validation.tests.tier_validation_tester import (
TierDefinition,
TierValidationTester,
TierValidationTester2,
)
cls.loader.update_registry(
(TierValidationTester, TierValidationTester2, TierDefinition)
)
cls.test_model = cls.env[TierValidationTester._name]
cls.tester_model = cls.env["ir.model"].search(
[("model", "=", "tier.validation.tester")]
)
# Access record:
cls.env["ir.model.access"].create(
{
"name": "access.tester",
"model_id": cls.tester_model.id,
"perm_read": 1,
"perm_write": 1,
"perm_create": 1,
"perm_unlink": 1,
}
)
# Create users:
group_ids = cls.env.ref("base.group_system").ids
cls.test_user_1 = cls.env["res.users"].create(
{
"name": "John",
"login": "test1",
"groups_id": [(6, 0, group_ids)],
"email": "john@yourcompany.example.com",
}
)
cls.test_user_2 = cls.env["res.users"].create(
{"name": "Mike", "login": "test2", "email": "mike@yourcompany.example.com"}
)
cls.test_user_3 = cls.env["res.users"].create(
{"name": "Mary", "login": "test3", "email": "mary@yourcompany.example.com"}
)
# Create tier definitions:
cls.tier_def_obj = cls.env["tier.definition"]
cls.tier_def_obj.create(
{
"model_id": cls.tester_model.id,
"review_type": "individual",
"reviewer_id": cls.test_user_1.id,
"definition_domain": "[('test_field', '>', 1.0)]",
}
)
cls.test_record = cls.test_model.create({"test_field": 2.5})
@classmethod
def tearDownClass(cls):
cls.loader.restore_registry()
return super(TierTierValidation, cls).tearDownClass()
def test_01_forward_tier(self):
# Create new test record
test_record = self.test_model.create({"test_field": 2.5})
# Create tier definitions
self.tier_def_obj.create(
{
"model_id": self.tester_model.id,
"review_type": "individual",
"reviewer_id": self.test_user_2.id,
"definition_domain": "[('test_field', '>', 1.0)]",
"approve_sequence": True,
"has_forward": True,
}
)
# Request validation
review = test_record.with_user(self.test_user_2.id).request_validation()
self.assertTrue(review)
record = test_record.with_user(self.test_user_1.id)
record.invalidate_recordset()
record.review_ids[0]._compute_can_review()
record.validate_tier()
self.assertFalse(record.can_forward)
# User 2 forward to user 1
record = test_record.with_user(self.test_user_2.id)
record.invalidate_recordset()
self.assertTrue(record.can_forward)
res = record.forward_tier()
ctx = res.get("context")
wizard = Form(
self.env["tier.validation.forward.wizard"]
.with_user(self.test_user_2.id)
.with_context(**ctx)
)
wizard.forward_reviewer_id = self.test_user_1
wizard.forward_description = "Please review again"
wiz = wizard.save()
wiz.add_forward()
# Newly created forwarded review will have no definition
record = test_record.with_user(self.test_user_2.id)
record.invalidate_recordset()
self.assertTrue(record.review_ids.filtered(lambda l: not l.definition_id))
# User 1 validate
res = record.with_user(self.test_user_1.id).validate_tier()
ctx = res.get("context")
wizard = Form(
self.env["comment.wizard"]
.with_user(self.test_user_1.id)
.with_context(**ctx)
)
wizard.comment = "Forward tier is reviewed"
wiz = wizard.save()
wiz.add_comment()
self.assertEqual(record.validation_status, "validated")

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="tier_definition_view_form" model="ir.ui.view">
<field name="name">tier.definition.form</field>
<field name="model">tier.definition</field>
<field name="inherit_id" ref="base_tier_validation.tier_definition_view_form" />
<field name="arch" type="xml">
<field name="approve_sequence" position="after">
<field name="has_forward" />
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,4 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import comment_wizard
from . import forward_wizard

View file

@ -0,0 +1,15 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models
class CommentWizard(models.TransientModel):
_inherit = "comment.wizard"
def add_comment(self):
super().add_comment()
rec = self.env[self.res_model].browse(self.res_id)
if self.validate_reject == "forward":
rec._forward_tier(self.review_ids)
rec._update_counter({"review_created": True})
return self.review_ids

View file

@ -0,0 +1,54 @@
# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, fields, models
class ValidationForwardWizard(models.TransientModel):
_name = "tier.validation.forward.wizard"
_description = "Forward Wizard"
res_model = fields.Char()
res_id = fields.Integer()
forward_reviewer_id = fields.Many2one(
comodel_name="res.users",
string="Next Reviewer",
required=True,
)
forward_description = fields.Char()
has_comment = fields.Boolean(string="Allow Comment", default=True)
approve_sequence = fields.Boolean(
string="Approve by sequence",
default=True,
)
def add_forward(self):
"""Add extra step, with specific reviewer"""
self.ensure_one()
rec = self.env[self.res_model].browse(self.res_id)
prev_comment = self.env["comment.wizard"].browse(
self._context.get("comment_id")
)
prev_comment.write(
{"comment": _(">> %s") % self.forward_reviewer_id.display_name}
)
prev_reviews = prev_comment.add_comment()
review = self.env["tier.review"].create(
{
"model": rec._name,
"res_id": rec.id,
"sequence": max(prev_reviews.mapped("sequence")) + 0.1,
"requested_by": self.env.uid,
}
)
# Because following fileds are readonly, we need to write after create
review.write(
{
"name": self.forward_description,
"review_type": "individual",
"reviewer_id": self.forward_reviewer_id.id,
"has_comment": self.has_comment,
"approve_sequence": self.approve_sequence,
}
)
rec.invalidate_recordset()
rec.review_ids._compute_can_review()

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_forward_wizard" model="ir.ui.view">
<field name="name">Forward Wizard</field>
<field name="model">tier.validation.forward.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Forward">
<group>
<group>
<field name="forward_reviewer_id" />
<field name="forward_description" required="1" />
</group>
<group>
<field name="has_comment" invisible="1" />
<field name="approve_sequence" invisible="1" />
</group>
</group>
<footer>
<button
name="add_forward"
string="Forward"
type="object"
class="oe_highlight"
/>
<button special="cancel" string="Cancel" class="oe_link" />
</footer>
</form>
</field>
</record>
</odoo>

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Base_tier_validation_forward Module - base_tier_validation_forward
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for base_tier_validation_forward. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [base_tier_validation](../../odoo-bringout-oca-server-ux-base_tier_validation)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon base_tier_validation_forward or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-server-ux-base_tier_validation_forward"
# or
uv pip install odoo-bringout-oca-server-ux-base_tier_validation_forward"
```

View file

@ -0,0 +1,14 @@
# Models
Detected core models and extensions in base_tier_validation_forward.
```mermaid
classDiagram
class tier_definition
class tier_review
class tier_validation
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: base_tier_validation_forward. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon base_tier_validation_forward
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,34 @@
# Security
Access control and security definitions in base_tier_validation_forward.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../base_tier_validation_forward/security/ir.model.access.csv)**
- 1 model access rules
## Record Rules
Row-level security rules defined in:
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[ir.model.access.csv](../base_tier_validation_forward/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon base_tier_validation_forward
```

View file

@ -0,0 +1,9 @@
# Wizards
Transient models exposed as UI wizards in base_tier_validation_forward.
```mermaid
classDiagram
class CommentWizard
class ValidationForwardWizard
```

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-server-ux-base_tier_validation_forward"
version = "16.0.0"
description = "Base Tier Validation Forward - Forward option for base tiers"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-server-ux-base_tier_validation>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["base_tier_validation_forward"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]