Initial commit: OCA Workflow Process packages (456 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:00 +02:00
commit d366e42934
18799 changed files with 1284507 additions and 0 deletions

View file

@ -0,0 +1,47 @@
# Sale Tier Validation
Odoo addon: sale_tier_validation
## Installation
```bash
pip install odoo-bringout-oca-sale-workflow-sale_tier_validation
```
## Dependencies
This addon depends on:
- sale
- base_tier_validation
## Manifest Information
- **Name**: Sale Tier Validation
- **Version**: 16.0.1.1.2
- **Category**: Sale
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/sale-workflow](https://github.com/OCA/sale-workflow) branch 16.0, addon `sale_tier_validation`.
## 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,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 Sale_tier_validation Module - sale_tier_validation
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 sale_tier_validation. 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,6 @@
# Dependencies
This addon depends on:
- [sale](../../odoo-bringout-oca-ocb-sale)
- [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 sale_tier_validation or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-sale-workflow-sale_tier_validation"
# or
uv pip install odoo-bringout-oca-sale-workflow-sale_tier_validation"
```

View file

@ -0,0 +1,15 @@
# Models
Detected core models and extensions in sale_tier_validation.
```mermaid
classDiagram
class sale_order
class res_company
class res_config_settings
class tier_definition
```
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: sale_tier_validation. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon sale_tier_validation
- License: LGPL-3

View file

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

View file

@ -0,0 +1,8 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

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 sale_tier_validation
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,43 @@
[project]
name = "odoo-bringout-oca-sale-workflow-sale_tier_validation"
version = "16.0.0"
description = "Sale Tier Validation - Extends the functionality of Sale Orders to support a tier validation process."
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-sale>=16.0.0",
"odoo-bringout-oca-sale-workflow-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 = ["sale_tier_validation"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,135 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
====================
Sale Tier Validation
====================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:6af1c72fe8747fb5c730d2d249d08d6ecaa53723190ba8a68e3f80bca0ae98a5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |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%2Fsale--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/sale-workflow/tree/16.0/sale_tier_validation
:alt: OCA/sale-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_tier_validation
: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/sale-workflow&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module extends the functionality of Sale Orders to support a tier
validation process.
**Table of contents**
.. contents::
:local:
Installation
============
This module depends on ``base_tier_validation``. You can find it at
`OCA/server-ux <https://github.com/OCA/server-ux>`__
Configuration
=============
To configure this module, you need to:
1. Go to *Settings > Technical > Tier Validations > Tier Definition*.
2. Create as many tiers as you want for Sale Order model.
If necessary, update the "Block Printing of Unvalidated Quotations"
under *Sales > Configuration > Settings* to block the printing of
quotation when the order has yet to be validated (disabled by default).
Usage
=====
To use this module, you need to:
1. Create a Sale Order triggering at least one "Tier Definition".
2. Click on *Request Validation* button.
3. Under the tab *Reviews* have a look to pending reviews and their
statuses.
4. Once all reviews are validated click on *Confirm Order*.
Additional features:
- You can filter the SOs requesting your review through the filter
*Needs my Review*.
- User with rights to confirm the SO (validate all tiers that would be
generated) can directly do the operation, this is, there is no need
for her/him to request a validation.
Known issues / Roadmap
======================
- The sales order, when moved to the state sent, will still send the
email even if the validation is not approved by the corresponding
tier. Code to consider this particular case is not developed.
- If any module modifies the attrs of the confirm sales order button, it
will invalidate the expected behavior.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-workflow/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/sale-workflow/issues/new?body=module:%20sale_tier_validation%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
-------
* Open Source Integrators
Contributors
------------
- Mayank Gosai <mgosai@opensourceintegrators.com>
- `Tecnativa <https://www.tecnativa.com>`__:
- Sergio Teruel
- Tharathip Chaweewongphan <tharathipc@ecosoft.co.th>
- `Quartile <https://www.quartile.co>`__:
- Aung Ko Ko Lin
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.
This module is part of the `OCA/sale-workflow <https://github.com/OCA/sale-workflow/tree/16.0/sale_tier_validation>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,4 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models
from . import reports

View file

@ -0,0 +1,20 @@
# Copyright 2019 Open Source Integrators
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Sale Tier Validation",
"summary": "Extends the functionality of Sale Orders to "
"support a tier validation process.",
"version": "16.0.1.1.2",
"category": "Sale",
"website": "https://github.com/OCA/sale-workflow",
"author": "Open Source Integrators, Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": ["sale", "base_tier_validation"],
"data": [
"data/mail_data.xml",
"views/sale_order_view.xml",
"views/res_config_settings_views.xml",
],
}

View file

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Sale order -->
<record
id="sale_order_tier_validation_requested"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Requested</field>
<field name="res_model">sale.order</field>
<field name="internal">True</field>
</record>
<record
id="sale_order_tier_validation_accepted"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Accepted Notification</field>
<field name="res_model">sale.order</field>
<field name="internal">True</field>
</record>
<record
id="sale_order_tier_validation_rejected"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Rejected Notification</field>
<field name="res_model">sale.order</field>
<field name="internal">True</field>
</record>
<!-- CRM Team -->
<record
id="crm_team_tier_validation_requested"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Requested</field>
<field name="res_model">crm.team</field>
<field name="default" eval="True" />
<field name="internal">True</field>
<field
name="parent_id"
ref="sale_tier_validation.sale_order_tier_validation_requested"
/>
<field name="relation_field">team_id</field>
</record>
<record
id="crm_team_tier_validation_accepted"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Accepted Notification</field>
<field name="res_model">crm.team</field>
<field name="default" eval="True" />
<field name="internal">True</field>
<field
name="parent_id"
ref="sale_tier_validation.sale_order_tier_validation_accepted"
/>
<field name="relation_field">team_id</field>
</record>
<record
id="crm_team_tier_validation_rejected"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Rejected Notification</field>
<field name="res_model">crm.team</field>
<field name="default" eval="True" />
<field
name="parent_id"
ref="sale_tier_validation.sale_order_tier_validation_rejected"
/>
<field name="internal">True</field>
<field name="relation_field">team_id</field>
</record>
</odoo>

View file

@ -0,0 +1,164 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_tier_validation
#
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: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid "Block Printing of Unvalidated Quotations"
msgstr "Blokiraj štampanje nevalidiranih ponuda"
#. module: sale_tier_validation
#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid ""
"Block the printing of the sale order report if the order is not validated."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review
msgid "Can Review"
msgstr "Može Ovjeriti"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_company
msgid "Companies"
msgstr "Kompanije"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr "Postavke"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment
msgid "Has Comment"
msgstr "Ima komentar"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr "Potrebna ponovn ocjena"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "My Sales to review"
msgstr "Moje prodaje za pregled"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation
msgid "Need Validation"
msgstr "Potrebna ovjera"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Needs my Review"
msgstr "Potrebna moja ovjera"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review
msgid "Next Review"
msgstr "Sljedeća ovjera"
#. module: sale_tier_validation
#. odoo-python
#: code:addons/sale_tier_validation/reports/sale_report.py:0
#, python-format
msgid "Quotation printing is blocked until the order is approved."
msgstr "Štampanje ponude je blokirano dok nalog nije odobren."
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected
msgid "Rejected"
msgstr "Odbijeno"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message
msgid "Rejected Message"
msgstr "Poruka uz odbijanje"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids
msgid "Reviewers"
msgstr "Ovejritelji"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "SOs validated and ready to be confirmed"
msgstr "Prodajni nalozi validirani i spremni za potvrdu"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder
msgid "Sale Order Report"
msgstr "Izvještaj o prodajnom nalogu"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block
msgid "Sale Report Print Block"
msgstr "Blokiranje štampanja prodajnog izvještaja"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_sale_order
msgid "Sales Order"
msgstr "Prodajni nalog"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_tier_definition
msgid "Tier Definition"
msgstr "Definicija granice"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Obavještenje o prihvaćenoj stepenastoj validaciji"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Obavještenje o odbačenoj stepenastoj validaciji"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Zatražena stepenasta validacija"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message
msgid "To Validate Message"
msgstr "Poruka za ovjeru"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Validated"
msgstr "Odobreno"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message
msgid "Validated Message"
msgstr "Poruka za ovjereno"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status
msgid "Validation Status"
msgstr "Status ovjeravanja"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids
msgid "Validations"
msgstr "Ovjeravanja"

View file

@ -0,0 +1,195 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-07 11:28+0000\n"
"PO-Revision-Date: 2023-11-08 13:40+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: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
"SO-Revision-Date: 2019-05-08 12:03+0000\n"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid "Block Printing of Unvalidated Quotations"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid ""
"Block the printing of the sale order report if the order is not validated."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review
msgid "Can Review"
msgstr "Puede Revisar"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_company
msgid "Companies"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment
msgid "Has Comment"
msgstr "Tiene Comentario"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "My Sales to review"
msgstr "Mis ventas a revisar"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation
msgid "Need Validation"
msgstr "Necesita validación"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Needs my Review"
msgstr "Necesita mi Revisión"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review
msgid "Next Review"
msgstr "Siguiente revisión"
#. module: sale_tier_validation
#. odoo-python
#: code:addons/sale_tier_validation/reports/sale_report.py:0
#, python-format
msgid "Quotation printing is blocked until the order is approved."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected
msgid "Rejected"
msgstr "Rechazado/a"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message
msgid "Rejected Message"
msgstr "Mensaje rechazado"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids
msgid "Reviewers"
msgstr "Revisores"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "SOs validated and ready to be confirmed"
msgstr "SOs validadas y preparadas para ser confirmadas"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder
msgid "Sale Order Report"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block
msgid "Sale Report Print Block"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_sale_order
msgid "Sales Order"
msgstr "Pedidos"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_tier_definition
msgid "Tier Definition"
msgstr "Definición de nivel"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Validación de nivel aceptada"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Validación de nivel rechazada"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Validación de nivel solicitada"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message
msgid "To Validate Message"
msgstr "Para validar el mensaje"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Validated"
msgstr "Validada"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message
msgid "Validated Message"
msgstr "Mensaje validado"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status
msgid "Validation Status"
msgstr "Estado de la Validación"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids
msgid "Validations"
msgstr "Validaciones"
#~ msgid ""
#~ "<i class=\"fa fa-info-circle\"/>This SO needs to be\n"
#~ " validated."
#~ msgstr ""
#~ "<i class=\"fa fa-info-circle\"/>Esta SO debe ser\n"
#~ " validada."
#~ msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-down\"/>La operación ha sido <b>rechazada</b>."
#~ msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
#~ msgstr "<i class=\"fa fa-thumbs-up\"/>La operación ha sido <b>validada</b>!"
#~ msgid "Reject"
#~ msgstr "Rechazar"
#~ msgid "Request Validation"
#~ msgstr "Solicitar Validación"
#~ msgid "Restart Validation"
#~ msgstr "Reiniciar Validación"
#~ msgid "Validate"
#~ msgstr "Validar"

View file

@ -0,0 +1,167 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-11-04 11:44+0000\n"
"Last-Translator: Jesús Alan Ramos Rodríguez <alan.ramos@jarsa.com.mx>\n"
"Language-Team: none\n"
"Language: es_MX\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.14.1\n"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid "Block Printing of Unvalidated Quotations"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid ""
"Block the printing of the sale order report if the order is not validated."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review
msgid "Can Review"
msgstr "Puede revisar"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_company
msgid "Companies"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment
msgid "Has Comment"
msgstr "Tiene comentario"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "My Sales to review"
msgstr "Mis ventas para revisar"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation
msgid "Need Validation"
msgstr "Necesita validación"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Needs my Review"
msgstr "Necesita mi revisión"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review
msgid "Next Review"
msgstr "Siguiente revisión"
#. module: sale_tier_validation
#. odoo-python
#: code:addons/sale_tier_validation/reports/sale_report.py:0
#, python-format
msgid "Quotation printing is blocked until the order is approved."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected
msgid "Rejected"
msgstr "Rechazado"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message
msgid "Rejected Message"
msgstr "Mensaje rechazado"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids
msgid "Reviewers"
msgstr "Revisores"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "SOs validated and ready to be confirmed"
msgstr "SOs validados y listos para ser confirmados"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder
msgid "Sale Order Report"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block
msgid "Sale Report Print Block"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_sale_order
msgid "Sales Order"
msgstr "Orden de venta"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_tier_definition
msgid "Tier Definition"
msgstr "Definición de Nivel"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Notificación de validación de nivel aceptada"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Notificación de rechazo de validación de nivel"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Validación de nivel solicitada"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message
msgid "To Validate Message"
msgstr "Mensaje para validar"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Validated"
msgstr "Validado"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message
msgid "Validated Message"
msgstr "Mensaje validado"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status
msgid "Validation Status"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids
msgid "Validations"
msgstr "Validaciones"

View file

@ -0,0 +1,169 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-01-07 15:06+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: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid "Block Printing of Unvalidated Quotations"
msgstr "Blocco stampa preventivi non validati"
#. module: sale_tier_validation
#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid ""
"Block the printing of the sale order report if the order is not validated."
msgstr ""
"Blocca la stampa del resoconto dell'ordine di vendita se l'ordine non è "
"validato."
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review
msgid "Can Review"
msgstr "Può revisionare"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_company
msgid "Companies"
msgstr "Aziende"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr "Impostazioni configurazione"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment
msgid "Has Comment"
msgstr "Ha commenti"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr "È richiesta la rivalutazione"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "My Sales to review"
msgstr "Le mie vendte da revisionare"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation
msgid "Need Validation"
msgstr "Richiede conferma"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Needs my Review"
msgstr "Richiede la mia revisione"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review
msgid "Next Review"
msgstr "Prossima revisione"
#. module: sale_tier_validation
#. odoo-python
#: code:addons/sale_tier_validation/reports/sale_report.py:0
#, python-format
msgid "Quotation printing is blocked until the order is approved."
msgstr "La stampa del preventivo è bloccata finché l'ordine non è approvato."
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected
msgid "Rejected"
msgstr "Rifiutato"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message
msgid "Rejected Message"
msgstr "Messaggio di rifiuto"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids
msgid "Reviewers"
msgstr "Revisori"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "SOs validated and ready to be confirmed"
msgstr "Ordini di vendita approvati e pronti da confermare"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder
msgid "Sale Order Report"
msgstr "Resoconto ordine di vendita"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block
msgid "Sale Report Print Block"
msgstr "Blocco stampa resoconto vendita"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_sale_order
msgid "Sales Order"
msgstr "Ordine di vendita"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_tier_definition
msgid "Tier Definition"
msgstr "Definizione livello"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Notifica accettazione livello approvazione"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Notifica rifiuto livello approvazione"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Approvazione livello richiesta"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message
msgid "To Validate Message"
msgstr "Messaggio per 'Da validare'"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Validated"
msgstr "Validato"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message
msgid "Validated Message"
msgstr "Messaggio per 'Validato'"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status
msgid "Validation Status"
msgstr "Stato validazione"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids
msgid "Validations"
msgstr "Validazioni"

View file

@ -0,0 +1,164 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_tier_validation
#
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: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid "Block Printing of Unvalidated Quotations"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid ""
"Block the printing of the sale order report if the order is not validated."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review
msgid "Can Review"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_company
msgid "Companies"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment
msgid "Has Comment"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "My Sales to review"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation
msgid "Need Validation"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Needs my Review"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review
msgid "Next Review"
msgstr ""
#. module: sale_tier_validation
#. odoo-python
#: code:addons/sale_tier_validation/reports/sale_report.py:0
#, python-format
msgid "Quotation printing is blocked until the order is approved."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected
msgid "Rejected"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message
msgid "Rejected Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids
msgid "Reviewers"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "SOs validated and ready to be confirmed"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder
msgid "Sale Order Report"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block
msgid "Sale Report Print Block"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_sale_order
msgid "Sales Order"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_tier_definition
msgid "Tier Definition"
msgstr ""
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr ""
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr ""
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested
msgid "Tier Validation Requested"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message
msgid "To Validate Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Validated"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message
msgid "Validated Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status
msgid "Validation Status"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids
msgid "Validations"
msgstr ""

View file

@ -0,0 +1,176 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-11-24 12:20+0000\n"
"Last-Translator: Simon S <simon.stromberg@vertel.se>\n"
"Language-Team: none\n"
"Language: sv\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.3.2\n"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid "Block Printing of Unvalidated Quotations"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid ""
"Block the printing of the sale order report if the order is not validated."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review
msgid "Can Review"
msgstr "Kan granska"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_company
msgid "Companies"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment
msgid "Has Comment"
msgstr "Har kommentar"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "My Sales to review"
msgstr "Min försäljning att granska"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation
msgid "Need Validation"
msgstr "Behöver validering"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Needs my Review"
msgstr "Behöver min granskning"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review
msgid "Next Review"
msgstr "Nästa granskning"
#. module: sale_tier_validation
#. odoo-python
#: code:addons/sale_tier_validation/reports/sale_report.py:0
#, python-format
msgid "Quotation printing is blocked until the order is approved."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected
msgid "Rejected"
msgstr "Nekad"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message
msgid "Rejected Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids
msgid "Reviewers"
msgstr "Granskare"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "SOs validated and ready to be confirmed"
msgstr "Försäljningsordrar validerade och redo att bekräftas"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder
msgid "Sale Order Report"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block
msgid "Sale Report Print Block"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_sale_order
msgid "Sales Order"
msgstr "Försäljningsorder"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_tier_definition
msgid "Tier Definition"
msgstr "Attestdefinition"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr ""
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr ""
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested
msgid "Tier Validation Requested"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message
msgid "To Validate Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Validated"
msgstr "Validerad"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message
msgid "Validated Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status
msgid "Validation Status"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids
msgid "Validations"
msgstr "Valideringar"
#~ msgid "Display Name"
#~ msgstr "Visningsnamn"
#~ msgid "ID"
#~ msgstr "ID"
#~ msgid "Last Modified on"
#~ msgstr "Senast ändrad den"

View file

@ -0,0 +1,167 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-03-30 22:51+0000\n"
"Last-Translator: Ediz Duman <neps1192@gmail.com>\n"
"Language-Team: none\n"
"Language: tr\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.14.1\n"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid "Block Printing of Unvalidated Quotations"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid ""
"Block the printing of the sale order report if the order is not validated."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review
msgid "Can Review"
msgstr "Gözden Geçirebilir"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_company
msgid "Companies"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment
msgid "Has Comment"
msgstr "Yorum Var"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "My Sales to review"
msgstr "İncelenecek Satışlarım"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation
msgid "Need Validation"
msgstr "Doğrulama Gerekiyor"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Needs my Review"
msgstr "İncelememe ihtiyacı var"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review
msgid "Next Review"
msgstr "Sonraki İnceleme"
#. module: sale_tier_validation
#. odoo-python
#: code:addons/sale_tier_validation/reports/sale_report.py:0
#, python-format
msgid "Quotation printing is blocked until the order is approved."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected
msgid "Rejected"
msgstr "Reddedildi"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message
msgid "Rejected Message"
msgstr "Reddedilme Mesaj"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids
msgid "Reviewers"
msgstr "İnceleyenler"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "SOs validated and ready to be confirmed"
msgstr "SO'lar doğrulandı ve onaylanmaya hazır"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder
msgid "Sale Order Report"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block
msgid "Sale Report Print Block"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_sale_order
msgid "Sales Order"
msgstr "Satış Siparişi"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_tier_definition
msgid "Tier Definition"
msgstr "Seviye Tanımı"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Seviye Doğrulama Kabul Bildirimi"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Seviye Doğrulaması Reddedildi Bildirimi"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Seviye Doğrulama İstendi"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message
msgid "To Validate Message"
msgstr "Mesajı Doğrulamak İçin"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Validated"
msgstr "Doğrulandı"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message
msgid "Validated Message"
msgstr "Doğrulanmış Mesaj"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status
msgid "Validation Status"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids
msgid "Validations"
msgstr "Doğrulamalar"

View file

@ -0,0 +1,193 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-07-08 09:19+0000\n"
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.10\n"
"SO-Revision-Date: 2019-09-02 19:23+0000\n"
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid "Block Printing of Unvalidated Quotations"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,help:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,help:sale_tier_validation.field_res_config_settings__sale_report_print_block
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.sale_config_settings_form_view
msgid ""
"Block the printing of the sale order report if the order is not validated."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__can_review
msgid "Can Review"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_company
msgid "Companies"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__has_comment
msgid "Has Comment"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "My Sales to review"
msgstr "查看我的采购"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__need_validation
msgid "Need Validation"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Needs my Review"
msgstr "需要我审查的"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__next_review
msgid "Next Review"
msgstr ""
#. module: sale_tier_validation
#. odoo-python
#: code:addons/sale_tier_validation/reports/sale_report.py:0
#, python-format
msgid "Quotation printing is blocked until the order is approved."
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected
msgid "Rejected"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__rejected_message
msgid "Rejected Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__reviewer_ids
msgid "Reviewers"
msgstr ""
#. module: sale_tier_validation
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "SOs validated and ready to be confirmed"
msgstr "采购订单已验证,待确认"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_report_sale_report_saleorder
msgid "Sale Order Report"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_company__sale_report_print_block
#: model:ir.model.fields,field_description:sale_tier_validation.field_res_config_settings__sale_report_print_block
msgid "Sale Report Print Block"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_sale_order
msgid "Sales Order"
msgstr "销售订单"
#. module: sale_tier_validation
#: model:ir.model,name:sale_tier_validation.model_tier_definition
msgid "Tier Definition"
msgstr "层定义"
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_accepted
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr ""
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_rejected
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr ""
#. module: sale_tier_validation
#: model:mail.message.subtype,name:sale_tier_validation.crm_team_tier_validation_requested
#: model:mail.message.subtype,name:sale_tier_validation.sale_order_tier_validation_requested
msgid "Tier Validation Requested"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__to_validate_message
msgid "To Validate Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated
#: model_terms:ir.ui.view,arch_db:sale_tier_validation.view_sale_order_filter
msgid "Validated"
msgstr "已验证"
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validated_message
msgid "Validated Message"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__validation_status
msgid "Validation Status"
msgstr ""
#. module: sale_tier_validation
#: model:ir.model.fields,field_description:sale_tier_validation.field_sale_order__review_ids
msgid "Validations"
msgstr ""
#~ msgid ""
#~ "<i class=\"fa fa-info-circle\"/>This SO needs to be\n"
#~ " validated."
#~ msgstr ""
#~ "<i class=\"fa fa-info-circle\"/>这个采购订单需要\n"
#~ " 验证。"
#~ msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
#~ msgstr "<i class=\"fa fa-thumbs-down\"/> 操作已被<b>拒绝</b>."
#~ msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
#~ msgstr "<i class=\"fa fa-thumbs-up\"/> 操作已被 <b>验证</b>!"
#~ msgid "Reject"
#~ msgstr "拒绝"
#~ msgid "Request Validation"
#~ msgstr "请求验证"
#~ msgid "Restart Validation"
#~ msgstr "重新启动验证"
#~ msgid "Validate"
#~ msgstr "验证"

View file

@ -0,0 +1,7 @@
# Copyright 2019 Open Source Integrators
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import res_company
from . import res_config_settings
from . import sale_order
from . import tier_definition

View file

@ -0,0 +1,12 @@
# Copyright 2024 Quartile (https://www.quartile.co)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class ResCompany(models.Model):
_inherit = "res.company"
sale_report_print_block = fields.Boolean(
help="Block the printing of the sale order report if the order is not validated."
)

View file

@ -0,0 +1,14 @@
# Copyright 2024 Quartile (https://www.quartile.co)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
sale_report_print_block = fields.Boolean(
related="company_id.sale_report_print_block",
readonly=False,
help="Block the printing of the sale order report if the order is not validated.",
)

View file

@ -0,0 +1,22 @@
# Copyright 2019 Open Source Integrators
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models
class SaleOrder(models.Model):
_name = "sale.order"
_inherit = ["sale.order", "tier.validation"]
_state_from = ["draft", "sent"]
_state_to = ["sale", "done"]
_tier_validation_manual_config = False
def _get_requested_notification_subtype(self):
return "sale_tier_validation.sale_order_tier_validation_requested"
def _get_accepted_notification_subtype(self):
return "sale_tier_validation.sale_order_tier_validation_accepted"
def _get_rejected_notification_subtype(self):
return "sale_tier_validation.sale_order_tier_validation_rejected"

View file

@ -0,0 +1,14 @@
# Copyright 2019 Open Source Integrators
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, models
class TierDefinition(models.Model):
_inherit = "tier.definition"
@api.model
def _get_tier_validation_model_names(self):
res = super()._get_tier_validation_model_names()
res.append("sale.order")
return res

View file

@ -0,0 +1,9 @@
To configure this module, you need to:
1. Go to *Settings \> Technical \> Tier Validations \> Tier
Definition*.
2. Create as many tiers as you want for Sale Order model.
If necessary, update the "Block Printing of Unvalidated Quotations" under *Sales \>
Configuration \> Settings* to block the printing of quotation when the order has yet
to be validated (disabled by default).

View file

@ -0,0 +1,6 @@
- Mayank Gosai \<<mgosai@opensourceintegrators.com>\>
- [Tecnativa](https://www.tecnativa.com):
- Sergio Teruel
- Tharathip Chaweewongphan \<<tharathipc@ecosoft.co.th>\>
- [Quartile](https://www.quartile.co):
- Aung Ko Ko Lin

View file

@ -0,0 +1,2 @@
This module extends the functionality of Sale Orders to support a tier
validation process.

View file

@ -0,0 +1,2 @@
This module depends on `base_tier_validation`. You can find it at
[OCA/server-ux](https://github.com/OCA/server-ux)

View file

@ -0,0 +1,5 @@
- The sales order, when moved to the state sent, will still send the
email even if the validation is not approved by the corresponding
tier. Code to consider this particular case is not developed.
- If any module modifies the attrs of the confirm sales order button,
it will invalidate the expected behavior.

View file

@ -0,0 +1,15 @@
To use this module, you need to:
1. Create a Sale Order triggering at least one "Tier Definition".
2. Click on *Request Validation* button.
3. Under the tab *Reviews* have a look to pending reviews and their
statuses.
4. Once all reviews are validated click on *Confirm Order*.
Additional features:
- You can filter the SOs requesting your review through the filter
*Needs my Review*.
- User with rights to confirm the SO (validate all tiers that would be
generated) can directly do the operation, this is, there is no need
for her/him to request a validation.

View file

@ -0,0 +1 @@
from . import sale_report

View file

@ -0,0 +1,29 @@
# Copyright 2024 Quartile (https://www.quartile.co)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, models
from odoo.exceptions import UserError
class ReportSaleOrder(models.AbstractModel):
_name = "report.sale.report_saleorder"
_description = "Sale Order Report"
@api.model
def _get_report_values(self, docids, data=None):
docs = self.env["sale.order"].browse(docids)
for order in docs:
if not order.company_id.sale_report_print_block:
continue
if order.need_validation or (
order.review_ids and order.validation_status != "validated"
):
raise UserError(
_("Quotation printing is blocked until the order is approved.")
)
return {
"doc_ids": docids,
"doc_model": "sale.order",
"docs": docs,
"data": data,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,488 @@
<!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="sale-tier-validation">
<h1>Sale Tier Validation</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:6af1c72fe8747fb5c730d2d249d08d6ecaa53723190ba8a68e3f80bca0ae98a5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.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/sale-workflow/tree/16.0/sale_tier_validation"><img alt="OCA/sale-workflow" src="https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_tier_validation"><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/sale-workflow&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 extends the functionality of Sale Orders to support a tier
validation process.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
<li><a class="reference internal" href="#configuration" id="toc-entry-2">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-3">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-4">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-5">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-6">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-7">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-8">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-9">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="installation">
<h2><a class="toc-backref" href="#toc-entry-1">Installation</a></h2>
<p>This module depends on <tt class="docutils literal">base_tier_validation</tt>. You can find it at
<a class="reference external" href="https://github.com/OCA/server-ux">OCA/server-ux</a></p>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#toc-entry-2">Configuration</a></h2>
<p>To configure this module, you need to:</p>
<ol class="arabic simple">
<li>Go to <em>Settings &gt; Technical &gt; Tier Validations &gt; Tier Definition</em>.</li>
<li>Create as many tiers as you want for Sale Order model.</li>
</ol>
<p>If necessary, update the “Block Printing of Unvalidated Quotations”
under <em>Sales &gt; Configuration &gt; Settings</em> to block the printing of
quotation when the order has yet to be validated (disabled by default).</p>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-3">Usage</a></h2>
<p>To use this module, you need to:</p>
<ol class="arabic simple">
<li>Create a Sale Order triggering at least one “Tier Definition”.</li>
<li>Click on <em>Request Validation</em> button.</li>
<li>Under the tab <em>Reviews</em> have a look to pending reviews and their
statuses.</li>
<li>Once all reviews are validated click on <em>Confirm Order</em>.</li>
</ol>
<p>Additional features:</p>
<ul class="simple">
<li>You can filter the SOs requesting your review through the filter
<em>Needs my Review</em>.</li>
<li>User with rights to confirm the SO (validate all tiers that would be
generated) can directly do the operation, this is, there is no need
for her/him to request a validation.</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h2><a class="toc-backref" href="#toc-entry-4">Known issues / Roadmap</a></h2>
<ul class="simple">
<li>The sales order, when moved to the state sent, will still send the
email even if the validation is not approved by the corresponding
tier. Code to consider this particular case is not developed.</li>
<li>If any module modifies the attrs of the confirm sales order button, it
will invalidate the expected behavior.</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-5">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-workflow/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/sale-workflow/issues/new?body=module:%20sale_tier_validation%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-6">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-7">Authors</a></h3>
<ul class="simple">
<li>Open Source Integrators</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-8">Contributors</a></h3>
<ul class="simple">
<li>Mayank Gosai &lt;<a class="reference external" href="mailto:mgosai&#64;opensourceintegrators.com">mgosai&#64;opensourceintegrators.com</a>&gt;</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Sergio Teruel</li>
</ul>
</li>
<li>Tharathip Chaweewongphan &lt;<a class="reference external" href="mailto:tharathipc&#64;ecosoft.co.th">tharathipc&#64;ecosoft.co.th</a>&gt;</li>
<li><a class="reference external" href="https://www.quartile.co">Quartile</a>:<ul>
<li>Aung Ko Ko Lin</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-9">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>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-workflow/tree/16.0/sale_tier_validation">OCA/sale-workflow</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,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import test_tier_validation

View file

@ -0,0 +1,106 @@
# Copyright 2020 Sergio Teruel <sergio.teruel@tecnativa.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from odoo.exceptions import UserError, ValidationError
from odoo.tests import common, tagged
@tagged("post_install", "-at_install")
class TestSaleTierValidation(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
# Get sale order model
cls.so_model = cls.env.ref("sale.model_sale_order")
# Create users
group_ids = (
cls.env.ref("base.group_system")
+ cls.env.ref("sales_team.group_sale_salesman_all_leads")
).ids
cls.test_user_1 = cls.env["res.users"].create(
{
"name": "John",
"login": "test1",
"groups_id": [(6, 0, group_ids)],
"email": "test@examlple.com",
}
)
# Create tier definitions:
cls.tier_def_obj = cls.env["tier.definition"]
cls.tier_def_obj.create(
{
"model_id": cls.so_model.id,
"review_type": "individual",
"reviewer_id": cls.test_user_1.id,
"definition_domain": "[('amount_untaxed', '>', 50.0)]",
}
)
cls.customer = cls.env["res.partner"].create({"name": "Partner for test"})
cls.product = cls.env["product.product"].create(
{"name": "Product for test", "list_price": 120.00}
)
def test_tier_validation_model_name(self):
self.assertIn(
"sale.order", self.tier_def_obj._get_tier_validation_model_names()
)
def test_validation_sale_order(self):
so = self.env["sale.order"].create(
{
"partner_id": self.customer.id,
"order_line": [
(
0,
0,
{
"name": "Test line",
"product_id": self.product.id,
"product_uom_qty": 1,
"product_uom": self.product.uom_id.id,
"price_unit": self.product.list_price,
},
)
],
"pricelist_id": self.customer.property_product_pricelist.id,
}
)
with self.assertRaises(ValidationError):
so.action_confirm()
so.order_line.price_unit = 45
so.request_validation()
so.with_user(self.test_user_1).validate_tier()
so.action_confirm()
self.assertEqual(so.state, "sale")
def test_block_print_unvalidated_sale_order(self):
so = self.env["sale.order"].create(
{
"partner_id": self.customer.id,
"order_line": [
(
0,
0,
{
"name": "Test line",
"product_id": self.product.id,
"product_uom_qty": 1,
"product_uom": self.product.uom_id.id,
"price_unit": self.product.list_price,
},
)
],
}
)
so.company_id.sale_report_print_block = True
report = self.env["report.sale.report_saleorder"]
# Attempt to render the report before validation
with self.assertRaises(UserError):
report._get_report_values(docids=[so.id])
so.request_validation()
with self.assertRaises(UserError):
report._get_report_values(docids=[so.id])
so.with_user(self.test_user_1).validate_tier()
# Attempt to render the report after validation
report._get_report_values(docids=[so.id])

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.ui.view" id="sale_config_settings_form_view">
<field name="name">res.config.settings.form</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="sale.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath
expr="//div[hasclass('row','mt16','o_settings_container')]/div[@id='proforma_configuration']"
position="after"
>
<div class="col-12 col-lg-6 o_setting_box" id="block_print_sale_order">
<div class="o_setting_left_pane">
<field name="sale_report_print_block" />
</div>
<div class="o_setting_right_pane">
<label
for="sale_report_print_block"
string="Block Printing of Unvalidated Quotations"
/>
<div class="text-muted">
Block the printing of the sale order report if the order is not validated.
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 Open Source Integrators
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_order_form" model="ir.ui.view">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">
<xpath expr="//button[@name='action_confirm'][1]" position="attributes">
<attribute
name="attrs"
>{'invisible':['|', ('validation_status', 'in', ('pending', 'rejected')),('state', '!=', 'sent')]}</attribute>
</xpath>
<xpath expr="//button[@name='action_confirm'][2]" position="attributes">
<attribute
name="attrs"
>{'invisible':['|', ('validation_status', 'in', ('pending', 'rejected')),('state', '!=', 'draft')]}</attribute>
</xpath>
<field name="state" position="after">
<field name="validation_status" invisible="1" />
</field>
</field>
</record>
<record id="view_sale_order_filter" model="ir.ui.view">
<field name="name">sale.order.select - sale_tier_validation</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_sales_order_filter" />
<field name="arch" type="xml">
<filter name="my_sale_orders_filter" position="after">
<filter
name="needs_review"
string="Needs my Review"
domain="[('reviewer_ids','in',uid), ('state', 'not in', ['done', 'cancel','to approve'])]"
help="My Sales to review"
/>
<filter
name="tier_validated"
string="Validated"
domain="[('validation_status', '=', 'validated')]"
help="SOs validated and ready to be confirmed"
/>
</filter>
</field>
</record>
</odoo>