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
Odoo addon: base_tier_validation
## Installation
```bash
pip install odoo-bringout-oca-server-ux-base_tier_validation
```
## Dependencies
This addon depends on:
- mail
## Manifest Information
- **Name**: Base Tier Validation
- **Version**: 16.0.4.0.2
- **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`.
## 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,263 @@
.. 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
====================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3ef2fb9504521a977d133828ec0237701cd3b45b490e193c410a4c6cb4c226c0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
:target: https://odoo-community.org/page/development-status
:alt: Mature
.. |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
: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
: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|
Validating some operations is a common need across different areas in a company
and sometimes it also involves several people and stages in the process. With
this module you will be able to define your custom validation workflows for
any Odoo document.
This module does not provide a functionality by itself but an abstract model
to implement a validation process based on tiers on other models (e.g.
purchase orders, sales orders, budgets, expenses...).
**Note:** To be able to use this module in a new model you will need some
development.
See `purchase_tier_validation <https://github.com/OCA/purchase-workflow>`_ as an example of implementation.
**Table of contents**
.. contents::
:local:
Configuration
=============
To configure Tier Validations, you need to:
#. Go to *Settings > Technical > Tier Validations > Tier Definition*.
#. Create as many tiers as you want for any model having tier validation
functionality.
**Note:**
* If check *Notify Reviewers on Creation*, all possible reviewers will be notified by email when this definition is triggered.
* If check *Comment*, reviewers can comment after click Validate or Reject.
* If check *Approve by sequence*, reviewers is forced to review by specified sequence.
To configure Tier Validation Exceptions, you need to:
#. Go to *Settings > Technical > Tier Validations > Tier Validation Exceptions*.
#. Create as many tiers validation exceptions as you want for any model
having tier validation functionality.
#. Add desired fields to be checked in *Fields*.
#. Add desired groups that can use this Exception in *Groups*.
#. You must check *Write under Validation*, *Write after Validation* or both.
**Note:**
* If you don't create any exception, the Validated record will be readonly and cannot be modified.
* If check *Write under Validation*, records will be able to be modified only in the defined fields when the Validation process is ongoing.
* If check *Write after Validation*, records will be able to be modified only in the defined fields when the Validation process is finished.
* If check *Write after Validation* and *Write under Validation*, records will be able to be modified defined fields always.
Known issues / Roadmap
======================
This is the list of known issues for this module. Any proposal for improvement will
be very valuable.
* **Issue:**
When using `approve_sequence` option in any tier.definition there can be inconsistencies
in the systray notifications.
**Description:**
Field `can_review` in tier.review is used to filter out, in the systray notifications,
the reviews a user can approve. This `can_review` field is updated **in the database**
in method `review_user_count`, this can make it very inconsistent for databases
with a lot of users and recurring updates that can change the expected behavior.
* **Migration to 15.0:**
The parameter _tier_validation_manual_config will become False, on 14.0, the default
value is True, as the change is applied after the migration. In order to use the new
behavior we need to modify the value on our expected model.
Changelog
=========
14.0.1.0.0 (2020-11-19)
~~~~~~~~~~~~~~~~~~~~~~~
Migrated to Odoo 14.
13.0.1.2.2 (2020-08-30)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- When using approve_sequence option in any tier.definition there can be inconsistencies in the systray notifications
- When using approve_sequence, still not approve only the needed sequence, but also other sequence for the same approver
12.0.3.3.1 (2019-12-02)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Show comment on Reviews Table.
- Edit notification with approve_sequence.
12.0.3.3.0 (2019-11-27)
~~~~~~~~~~~~~~~~~~~~~~~
New features:
- Add comment on Reviews Table.
- Approve by sequence.
12.0.3.2.1 (2019-11-26)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Remove message_subscribe_users
12.0.3.2.0 (2019-11-25)
~~~~~~~~~~~~~~~~~~~~~~~
New features:
- Notify reviewers
12.0.3.1.0 (2019-07-08)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Singleton error
12.0.3.0.0 (2019-12-02)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Edit Reviews Table
12.0.2.1.0 (2019-05-29)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Edit drop-down style width and position
12.0.2.0.0 (2019-05-28)
~~~~~~~~~~~~~~~~~~~~~~~
New features:
- Pass parameters as functions.
- Add Systray.
12.0.1.0.0 (2019-02-18)
~~~~~~~~~~~~~~~~~~~~~~~
Migrated to Odoo 12.
11.0.1.0.0 (2018-05-09)
~~~~~~~~~~~~~~~~~~~~~~~
Migrated to Odoo 11.
10.0.1.0.0 (2018-03-26)
~~~~~~~~~~~~~~~~~~~~~~~
Migrated to Odoo 10.
9.0.1.0.0 (2017-12-02)
~~~~~~~~~~~~~~~~~~~~~~~
First version.
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%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
~~~~~~~
* ForgeFlow
Contributors
~~~~~~~~~~~~
* Lois Rilo <lois.rilo@forgeflow.com>
* Naglis Jonaitis <naglis@versada.eu>
* Adrià Gil Sorribes <adria.gil@forgeflow.com>
* Pimolnat Suntian <pimolnats@ecosoft.co.th>
* Pedro Gonzalez <pedro.gonzalez@pesol.es>
* Kitti U. <kittiu@ecosoft.co.th>
* Saran Lim. <saranl@ecosoft.co.th>
* Evan Soh <evan.soh@omnisoftsolution.com>
* Manuel Regidor <manuel.regidor@sygel.es>
* Eduardo de Miguel <edu@moduon.team>
* `XCG Consulting <https://xcg-consulting.fr>`_:
* Houzéfa Abbasbhay
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-LoisRForgeFlow| image:: https://github.com/LoisRForgeFlow.png?size=40px
:target: https://github.com/LoisRForgeFlow
:alt: LoisRForgeFlow
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-LoisRForgeFlow|
This module is part of the `OCA/server-ux <https://github.com/OCA/server-ux/tree/16.0/base_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 wizard

View file

@ -0,0 +1,45 @@
# Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Base Tier Validation",
"summary": "Implement a validation process based on tiers.",
"version": "16.0.4.0.2",
"development_status": "Mature",
"maintainers": ["LoisRForgeFlow"],
"category": "Tools",
"website": "https://github.com/OCA/server-ux",
"author": "ForgeFlow, Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": ["mail"],
"data": [
"data/cron_data.xml",
"data/mail_data.xml",
"security/ir.model.access.csv",
"security/tier_validation_security.xml",
"views/res_config_settings_views.xml",
"views/tier_definition_view.xml",
"views/tier_review_view.xml",
"views/tier_validation_exception_view.xml",
"wizard/comment_wizard_view.xml",
"templates/tier_validation_templates.xml",
],
"assets": {
"web.assets_backend": [
"/base_tier_validation/static/src/scss/systray.scss",
"/base_tier_validation/static/src/scss/review.scss",
"/base_tier_validation/static/src/js/main.esm.js",
"/base_tier_validation/static/src/js/ir_model.esm.js",
"/base_tier_validation/static/src/js/systray_service.esm.js",
"/base_tier_validation/static/src/js/systray.esm.js",
"/base_tier_validation/static/src/js/review_groups.esm.js",
"/base_tier_validation/static/src/js/reviewer_menu_view.esm.js",
"/base_tier_validation/static/src/js/tier_review_widget.esm.js",
"/base_tier_validation/static/src/js/review_group_view.esm.js",
"/base_tier_validation/static/src/js/reviewer_menu_container.esm.js",
"/base_tier_validation/static/src/js/review_notification_handler.esm.js",
"/base_tier_validation/static/src/xml/**/*",
],
},
}

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="ir_cron_auto_tier_validation" model="ir.cron">
<field name="name">Send Tier Review Reminder</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field
name="nextcall"
eval="(datetime.now() + timedelta(minutes=5)).strftime('%Y-%m-%d %H:%M:%S')"
/>
<field name="doall" eval="False" />
<field name="model_id" ref="model_tier_definition" />
<field name="code">model._cron_send_review_reminder()</field>
<field name="state">code</field>
</record>
</odoo>

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record
id="mt_tier_validation_requested"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Requested</field>
<field name="default" eval="False" />
<field name="internal" eval="True" />
<field name="hidden" eval="True" />
</record>
<record
id="mt_tier_validation_accepted"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Accepted Notification</field>
<field name="default" eval="False" />
<field name="internal" eval="True" />
<field name="hidden" eval="True" />
</record>
<record
id="mt_tier_validation_rejected"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Rejected Notification</field>
<field name="default" eval="False" />
<field name="internal" eval="True" />
<field name="hidden" eval="True" />
</record>
<record
id="mt_tier_validation_restarted"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Restarted</field>
<field name="default" eval="False" />
<field name="internal" eval="True" />
<field name="hidden" eval="True" />
</record>
<record
id="mt_tier_validation_reminder"
model="mail.message.subtype"
forcecreate="1"
>
<field name="name">Tier Validation Reminder</field>
<field name="default" eval="True" />
<field name="internal" eval="True" />
<field name="hidden" eval="True" />
</record>
<record
id="mail_act_tier_validation_reminder"
model="mail.activity.type"
forcecreate="1"
>
<field name="name">Tier Validation Reminder</field>
<field name="icon">fa-bell</field>
</record>
</odoo>

View file

@ -0,0 +1,916 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_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: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "0 Pending"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-info-circle\"/> This Record needs to be validated."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span class=\"oe_edit_only\">Name</span>"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span>Bypass, if previous tier was validated by same reviewer</span>"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "A review has been requested %s days ago."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review has been requested by %s."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted. (%s)"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %(user)s. (%(comment)s)"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %s."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A validation process is still open for at least one record."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active
msgid "Active"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "Activity"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "All"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Allowed groups to use this Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group
msgid "Any user in a specific group"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Apply On"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid "Approve Sequence Bypass"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence
msgid "Approve by sequence"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved
msgid "Approved"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Archived"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation_exception.py:0
#, python-format
msgid ""
"At least one of these fields must be checked! Write under Validation, Write "
"after Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid ""
"Bypassed (auto validated), if previous tier was validated by same reviewer"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review
msgid "Can Review"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review
msgid ""
"Can review will be marked if the review is pending and the\n"
" approve sequence has been achieved"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
msgid "Cancel"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
#, python-format
msgid "Comment"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_comment_wizard
msgid "Comment Wizard"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment
msgid "Comments"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Company"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "Create a new Validation Exception!"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid
msgid "Created by"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date
msgid "Created on"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id
msgid "Definition"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain
msgid "Definition Domain"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name
#, python-format
msgid "Description"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name
msgid "Display Name"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status
msgid "Display Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain
msgid "Domain"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by
msgid "Done By"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Done by"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field
msgid "Field in related record"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids
msgid "Fields"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "Group %s"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "Group By"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Groups"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment
msgid "Has Comment"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id
msgid "ID"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create
msgid ""
"If set, all possible reviewers will be notified by email when this "
"definition is triggered."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is accepted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is rejected."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted
msgid ""
"If set, reviewers will be notified by email when a reviews related to this "
"definition are restarted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's fully validated"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's in the validation process"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception____last_update
msgid "Last Modified on"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
msgid "Last Reminder Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid
msgid "Last Updated by"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date
msgid "Last Updated on"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Model"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name
msgid "Model Name"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "More Options"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name
msgid "Name"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation
msgid "Need Validation"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_definition.py:0
#, python-format
msgid "New Tier Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review
msgid "Next Review"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Next: %s"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "No reviews to do."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted
msgid "Notify Reviewers on Accepted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create
msgid "Notify Reviewers on Creation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected
msgid "Notify Reviewers on Rejected"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted
msgid "Notify Reviewers on Restarted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid ""
"Number of days after which a message must be posted to remind about pending "
"validation (0 = no reminder)"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid ""
"Once created, you can decide which fields you want to be editable when the "
"record:"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>rejected</b>."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>validated</b>!"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to forward a tier validation to other reviewer, and backward"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to use python formula to get reviewers and find documents"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
#, python-format
msgid "Pending"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Reevaluate Reviews"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
msgid "Referenced Model"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Reject"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
msgid "Rejected"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message
msgid "Rejected Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id
msgid "Related Document ID"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model
msgid "Related Document Model"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Request Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by
msgid "Requested By"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Requested by"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id
msgid "Res"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model
msgid "Res Model"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Restart Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids
msgid "Review"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id
msgid "Reviewer field"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids
msgid "Reviewers"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids
#, python-format
msgid "Reviews"
msgstr ""
#. module: base_tier_validation
#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
#: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
msgid "Send Tier Review Reminder"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid "Send reminder message on pending reviews"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence
#, python-format
msgid "Sequence"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual
msgid "Specific user"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status
#, python-format
msgid "Status"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "The review has been reset by %s."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "There are no res.users in the selected field"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "This %s needs to be validated"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"This action needs to be validated for at least one record. \n"
"Please request a validation."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence
msgid "Tier"
msgstr ""
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action
#: model:ir.model,name:base_tier_validation.model_tier_definition
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Tier Definition"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula
msgid "Tier Formula"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_forward
msgid "Tier Forward & Backward"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_review
msgid "Tier Review"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Tier Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr ""
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form
msgid "Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation_exception
msgid "Tier Validation Exceptions"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr ""
#. module: base_tier_validation
#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
msgid "Tier Validation Reminder"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
msgid "Tier Validation Requested"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted
msgid "Tier Validation Restarted"
msgstr ""
#. module: base_tier_validation
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation
msgid "Tier Validations"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message
msgid "To Validate Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by
msgid "Todo By"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Todo by"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_users
msgid "User"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids
msgid "Valid Model Field"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids
msgid "Valid Reviewer Field"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Validate"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject
msgid "Validate Reject"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
msgid "Validated"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message
msgid "Validated Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type
msgid "Validated by"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date
#, python-format
msgid "Validation Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date
msgid "Validation Formated Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
msgid "Validation Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
msgid "Validations"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
msgid "Without validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation
msgid "Write after Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write after validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation
msgid "Write under Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write under validation"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "e.g. Tier Validation for..."
msgstr ""

View file

@ -0,0 +1,916 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_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: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "0 Pending"
msgstr "0 na čekanju"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-info-circle\"/> This Record needs to be validated."
msgstr "<i class=\"fa fa-info-circle\"/> Ovaj zapis treba biti validiran."
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
msgstr "<i class=\"fa fa-thumbs-down\"/> Operacija je <b>odbijena</b>."
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
msgstr "<i class=\"fa fa-thumbs-up\"/> Operacija je <b>validirana</b>!"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span class=\"oe_edit_only\">Name</span>"
msgstr "<span class=\"oe_edit_only\">Naziv</span>"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span>Bypass, if previous tier was validated by same reviewer</span>"
msgstr "<span>Preskači, ako je prethodnji nivo validiran od strane istog pregledača</span>"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "A review has been requested %s days ago."
msgstr "Pregled je zatražen prije %s dana."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review has been requested by %s."
msgstr "Pregled je zatražen od %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted"
msgstr "Pregled je prihvaćen"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted. (%s)"
msgstr "Pregled je prihvaćen. (%s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %(user)s. (%(comment)s)"
msgstr "Pregled je odbačen od %(user)s. (%(comment)s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %s."
msgstr "Pregled je odbačen od %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A validation process is still open for at least one record."
msgstr "Proces validacije je još uvijek otvoren za najmanje jedan zapis."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active
msgid "Active"
msgstr "Aktivan"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "Activity"
msgstr "Aktivnost"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "All"
msgstr "Sve"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Allowed groups to use this Tier Validation Exception"
msgstr "Dozvoljene grupe za korišćenje ovog izuzetka validacije nivoa"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group
msgid "Any user in a specific group"
msgstr "Bilo koji korisnik u specifičnoj grupi"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Apply On"
msgstr "Primjeni na"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr "Redoslijed odobravanje po specificiranom broju sekvence"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid "Approve Sequence Bypass"
msgstr "Preskač odobravanje sekvence"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence
msgid "Approve by sequence"
msgstr "Odobri po sekvenci"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved
msgid "Approved"
msgstr "Odobren"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Archived"
msgstr "Arhivirano"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation_exception.py:0
#, python-format
msgid ""
"At least one of these fields must be checked! Write under Validation, Write "
"after Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid ""
"Bypassed (auto validated), if previous tier was validated by same reviewer"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review
msgid "Can Review"
msgstr "Može Ovjeriti"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review
msgid ""
"Can review will be marked if the review is pending and the\n"
" approve sequence has been achieved"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
msgid "Cancel"
msgstr "Otkaži"
#. module: base_tier_validation
#. odoo-javascript
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
#, python-format
msgid "Comment"
msgstr "Komentar"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_comment_wizard
msgid "Comment Wizard"
msgstr "Čarobnjak komentara"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment
msgid "Comments"
msgstr "Komentari"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Company"
msgstr "Preduzeće"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr "Postavke"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "Create a new Validation Exception!"
msgstr "Kreiraj novi izuzetak validacije!"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id
msgid "Definition"
msgstr "Definicija"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain
msgid "Definition Domain"
msgstr "Domen definicije"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name
#, python-format
msgid "Description"
msgstr "Opis"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status
msgid "Display Status"
msgstr "Prikaži status"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain
msgid "Domain"
msgstr "Domena"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by
msgid "Done By"
msgstr "Riješio"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Done by"
msgstr "Uradio"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field
msgid "Field in related record"
msgstr "Polje u povezanom zapisu"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids
msgid "Fields"
msgstr "Polja"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "Group %s"
msgstr "Grupa %s"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "Group By"
msgstr "Grupiši po"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Groups"
msgstr "Grupe"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment
msgid "Has Comment"
msgstr "Ima komentar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id
msgid "ID"
msgstr "ID"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create
msgid ""
"If set, all possible reviewers will be notified by email when this "
"definition is triggered."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is accepted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is rejected."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted
msgid ""
"If set, reviewers will be notified by email when a reviews related to this "
"definition are restarted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr "Je li potrebna ponovna evaluacija"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's fully validated"
msgstr "Potpuno je validirano"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's in the validation process"
msgstr "U procesu validacije je"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
msgid "Last Reminder Date"
msgstr "Datum posljednjeg podsjetnka"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Model"
msgstr "Model"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name
msgid "Model Name"
msgstr "Naziv modela"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "More Options"
msgstr "Više opcija"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name
msgid "Name"
msgstr "Naziv:"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation
msgid "Need Validation"
msgstr "Potrebna ovjera"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_definition.py:0
#, python-format
msgid "New Tier Validation"
msgstr "Nova validacija nivoa"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review
msgid "Next Review"
msgstr "Sljedeća ovjera"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Next: %s"
msgstr "Sljedeće: %s"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "No reviews to do."
msgstr "Nema pregleda za uraditi."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted
msgid "Notify Reviewers on Accepted"
msgstr "Obavijesti pregledače o prihvatanju"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create
msgid "Notify Reviewers on Creation"
msgstr "Obavijesti pregledače o kreiranju"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected
msgid "Notify Reviewers on Rejected"
msgstr "Obavijesti pregledače o odbacivanju"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted
msgid "Notify Reviewers on Restarted"
msgstr "Obavijesti pregledače o restartovanju"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid ""
"Number of days after which a message must be posted to remind about pending "
"validation (0 = no reminder)"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid ""
"Once created, you can decide which fields you want to be editable when the "
"record:"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>rejected</b>."
msgstr "Operacija je <b>odbijena</b>."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>validated</b>!"
msgstr "Operacija je <b>validirana</b>!"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to forward a tier validation to other reviewer, and backward"
msgstr "Opcija za preusmjeravanje validacije nivoa drugom pregledaču, i nazad"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to use python formula to get reviewers and find documents"
msgstr "Opcija za korišćenje python formule za dobijanje pregledača i pronalaženje dokumenata"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
#, python-format
msgid "Pending"
msgstr "Na čekanju"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Reevaluate Reviews"
msgstr "Ponovo ocijeni preglede"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
msgid "Referenced Model"
msgstr "Referentni model"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Reject"
msgstr "Odbaci"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
msgid "Rejected"
msgstr "Odbijeno"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message
msgid "Rejected Message"
msgstr "Poruka uz odbijanje"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id
msgid "Related Document ID"
msgstr "Povezani ID dokumenta"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model
msgid "Related Document Model"
msgstr "Povezani model dokumenta"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Request Validation"
msgstr "Zatražite validaciju"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by
msgid "Requested By"
msgstr "Zahtjevao"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Requested by"
msgstr "Zatraženo od"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id
msgid "Res"
msgstr "Res"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model
msgid "Res Model"
msgstr "Res model"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Restart Validation"
msgstr "Restartaj validaciju"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids
msgid "Review"
msgstr "Pregled"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "Pregledač"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id
msgid "Reviewer field"
msgstr "Polje pregledača"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "Grupa pregledača"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids
msgid "Reviewers"
msgstr "Ovejritelji"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids
#, python-format
msgid "Reviews"
msgstr "Pregledi"
#. module: base_tier_validation
#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
#: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
msgid "Send Tier Review Reminder"
msgstr "Pošalji podsjetnike pregleda nivoa"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid "Send reminder message on pending reviews"
msgstr "Pošalji podsjetničku poruku o pregledima na čekanju"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence
#, python-format
msgid "Sequence"
msgstr "Sekvenca"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual
msgid "Specific user"
msgstr "Specifičan korisnik"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status
#, python-format
msgid "Status"
msgstr "Status"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "The review has been reset by %s."
msgstr "Pregled je resetovao %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "There are no res.users in the selected field"
msgstr "Nema res.users u odabranom polju"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "This %s needs to be validated"
msgstr "Ovaj %s treba biti validiran"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"This action needs to be validated for at least one record. \n"
"Please request a validation."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence
msgid "Tier"
msgstr "Nivo"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action
#: model:ir.model,name:base_tier_validation.model_tier_definition
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Tier Definition"
msgstr "Definicija granice"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula
msgid "Tier Formula"
msgstr "Formula nivoa"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_forward
msgid "Tier Forward & Backward"
msgstr "Preusmjeravanje nivoa naprijed i nazad"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_review
msgid "Tier Review"
msgstr "Pregled nivoa"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Tier Validation"
msgstr "Validacija nivoa"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Validacija nivoa (apstraktna)"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Obavještenje o prihvaćenoj validaciji nivoa"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form
msgid "Tier Validation Exception"
msgstr "Izuzetak validacije nivoa"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation_exception
msgid "Tier Validation Exceptions"
msgstr "Izuzeci validacije nivoa"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Obavještenje o odbačenoj validaciji nivoa"
#. module: base_tier_validation
#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
msgid "Tier Validation Reminder"
msgstr "Podsjetnik validacije nivoa"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Zatražena validacija nivoa"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted
msgid "Tier Validation Restarted"
msgstr "Restartovana validacija nivoa"
#. module: base_tier_validation
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation
msgid "Tier Validations"
msgstr "Validacije nivoa"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message
msgid "To Validate Message"
msgstr "Poruka za ovjeru"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by
msgid "Todo By"
msgstr "Uradi od"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Todo by"
msgstr "Uradi od"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_users
msgid "User"
msgstr "Korisnik"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids
msgid "Valid Model Field"
msgstr "Važeće polje modela"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids
msgid "Valid Reviewer Field"
msgstr "Važeće polje pregledača"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Validate"
msgstr "Ovjeri"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject
msgid "Validate Reject"
msgstr "Validiraj odbacivanje"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
msgid "Validated"
msgstr "Odobreno"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message
msgid "Validated Message"
msgstr "Poruka za ovjereno"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type
msgid "Validated by"
msgstr "Validirao"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date
#, python-format
msgid "Validation Date"
msgstr "Datum validacije"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date
msgid "Validation Formated Date"
msgstr "Formatiran datum validacije"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
msgid "Validation Status"
msgstr "Status ovjeravanja"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
msgid "Validations"
msgstr "Ovjeravanja"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
msgid "Without validation"
msgstr "Bez validacije"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation
msgid "Write after Validation"
msgstr "Piši nakon validacije"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write after validation"
msgstr "Piši nakon validacije"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation
msgid "Write under Validation"
msgstr "Piši tijekom validacije"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write under validation"
msgstr "Piši tijekom validacije"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "e.g. Tier Validation for..."
msgstr "npr. Validacija nivoa za..."

View file

@ -0,0 +1,989 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-05 07:53+0000\n"
"PO-Revision-Date: 2025-03-10 11:06+0000\n"
"Last-Translator: Víctor Martínez <victor.martinez@tecnativa.com>\n"
"Language-Team: \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 5.10.2\n"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "0 Pending"
msgstr "0 Pendientes"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-info-circle\"/> This Record needs to be validated."
msgstr "<i class=\"fa fa-info-circle\"/> Este registro necesita ser validado."
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
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>."
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
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>!"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span class=\"oe_edit_only\">Name</span>"
msgstr "<span class=\"oe_edit_only\">Nombre</span>"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span>Bypass, if previous tier was validated by same reviewer</span>"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "A review has been requested %s days ago."
msgstr "Una revisión ha sido solicitado hace %s días."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review has been requested by %s."
msgstr "Una revisión fue solicitada por %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted"
msgstr "Una revisión fue aceptada"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted. (%s)"
msgstr "Una revisión fue aceptada. (%s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %(user)s. (%(comment)s)"
msgstr "%(user)s rechazó una reseña. %(comment)s"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %s."
msgstr "Una revisión fue rechaza por %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A validation process is still open for at least one record."
msgstr "Un proceso de validación está aún abierto para al menos un registro."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active
msgid "Active"
msgstr "Activo"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "Activity"
msgstr "Actividades"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "All"
msgstr "Todos"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Allowed groups to use this Tier Validation Exception"
msgstr "Grupos permitidos para utilizar esta Excepción de Validación de Nivel"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group
msgid "Any user in a specific group"
msgstr "Cualquier usuario de un grupo específico"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Apply On"
msgstr "Aplicar en"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,help:base_tier_validation.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
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid "Approve Sequence Bypass"
msgstr "Aprobar Omisión de Secuencia"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence
msgid "Approve by sequence"
msgstr "Aprobar por secuencia"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved
msgid "Approved"
msgstr "Aprobado"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Archived"
msgstr "Archivado"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation_exception.py:0
#, python-format
msgid ""
"At least one of these fields must be checked! Write under Validation, Write "
"after Validation"
msgstr ""
"¡Al menos uno de estos campos debe estar marcado! Escribir en Validación, "
"Escribir después de Validación"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid ""
"Bypassed (auto validated), if previous tier was validated by same reviewer"
msgstr ""
"Omitido (validado automático), si el mismo revisor validó el nivel anterior"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review
msgid "Can Review"
msgstr "Puede revisar"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review
msgid ""
"Can review will be marked if the review is pending and the\n"
" approve sequence has been achieved"
msgstr ""
"Puede revisar será establecido si la revisión está pendiente y la\n"
" secuencia de aprobación se ha alcanzado"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
msgid "Cancel"
msgstr "Cancelar"
#. module: base_tier_validation
#. odoo-javascript
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
#, python-format
msgid "Comment"
msgstr "Comentario"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_comment_wizard
msgid "Comment Wizard"
msgstr "Asistente de comentario"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment
msgid "Comments"
msgstr "Comentarios"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Company"
msgstr "Compañía"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr "Opciones de configuración"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "Create a new Validation Exception!"
msgstr "¡Crea una nueva Excepción de Validación!"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date
msgid "Created on"
msgstr "Creado en"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id
msgid "Definition"
msgstr "Definición"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain
msgid "Definition Domain"
msgstr "Dominio de definición"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name
#, python-format
msgid "Description"
msgstr "Descripción"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status
msgid "Display Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain
msgid "Domain"
msgstr "Dominio"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by
msgid "Done By"
msgstr "Hecho Por"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Done by"
msgstr "Hecho Por"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field
msgid "Field in related record"
msgstr "Campo en el registro relacionado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids
msgid "Fields"
msgstr "Campos"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "Group %s"
msgstr "Grupo %s"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "Group By"
msgstr "Agrupar por"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Groups"
msgstr "Grupos"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment
msgid "Has Comment"
msgstr "Ha comentado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id
msgid "ID"
msgstr "ID"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create
msgid ""
"If set, all possible reviewers will be notified by email when this "
"definition is triggered."
msgstr ""
"Si se establece, todos los posibles revisores serán notificados por correo "
"electrónico cuando se active esta definición."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is accepted."
msgstr ""
"Si está establecido, los revisores serán notificados por email cuando una "
"revisión relativa a ésta definición es aceptada."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is rejected."
msgstr ""
"Si está establecido, los revisores serán notificados por email cuando una "
"revisión relativa a ésta definición es rechazada."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted
msgid ""
"If set, reviewers will be notified by email when a reviews related to this "
"definition are restarted."
msgstr ""
"Si está establecido, los revisores serán notificados por email cuando una "
"revisión relativa a ésta definición se ha reiniciado."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's fully validated"
msgstr "Completamente Validado"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's in the validation process"
msgstr "Está en proceso de Validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
msgid "Last Reminder Date"
msgstr "Fecha de último recordatorio"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid
msgid "Last Updated by"
msgstr "Última actualización de"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date
msgid "Last Updated on"
msgstr "Última actualización en"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Model"
msgstr "Modelo"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name
msgid "Model Name"
msgstr "Nombre del modelo"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "More Options"
msgstr "Más opciones"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name
msgid "Name"
msgstr "Nombre"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation
msgid "Need Validation"
msgstr "Necesita validación"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_definition.py:0
#, python-format
msgid "New Tier Validation"
msgstr "Nueva Validación de Nivel"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review
msgid "Next Review"
msgstr "Siguiente Revisión"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Next: %s"
msgstr "Siguiente: %s"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "No reviews to do."
msgstr "No hay revisiones a realizar."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted
msgid "Notify Reviewers on Accepted"
msgstr "Notificar revisores cuando se Acepta"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create
msgid "Notify Reviewers on Creation"
msgstr "Notificar a los revisores en la creación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected
msgid "Notify Reviewers on Rejected"
msgstr "Notificar revisores cuando se Rechaza"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted
msgid "Notify Reviewers on Restarted"
msgstr "Notificar revisores cuando se Reinicia"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid ""
"Number of days after which a message must be posted to remind about pending "
"validation (0 = no reminder)"
msgstr ""
"Número de días después de los cuales se debe publicar un mensaje para "
"recordar sobre la validación pendiente (0 = sin recordatorio)"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid ""
"Once created, you can decide which fields you want to be editable when the "
"record:"
msgstr ""
"Una vez creada, puedes decidir qué campos quieres que sean editables en el "
"registro:"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>rejected</b>."
msgstr "La operación ha sido <b>rechazada</b>."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>validated</b>!"
msgstr "¡La operación ha sido <b>validada</b>!"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to forward a tier validation to other reviewer, and backward"
msgstr ""
"Opción de reenviar una validación de nivel a otro revisor, y hacia atrás"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to use python formula to get reviewers and find documents"
msgstr ""
"Opción de utilizar una fórmula python para obtener revisores y encontrar "
"documentos"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
#, python-format
msgid "Pending"
msgstr "Pendiente"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Reevaluate Reviews"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
msgid "Referenced Model"
msgstr "Modelo referenciado"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Reject"
msgstr "Rechazar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
msgid "Rejected"
msgstr "Rechazado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message
msgid "Rejected Message"
msgstr "Mensaje rechazado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id
msgid "Related Document ID"
msgstr "ID del Documento Relacionado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model
msgid "Related Document Model"
msgstr "Modelo del Documento Relacionado"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Request Validation"
msgstr "Solicitar validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by
msgid "Requested By"
msgstr "Solicitado Por"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Requested by"
msgstr "Solicitado Por"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id
msgid "Res"
msgstr "Recurso"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model
msgid "Res Model"
msgstr "Modelo Res"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Restart Validation"
msgstr "Reiniciar la Validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids
msgid "Review"
msgstr "Revisor"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "Revisor"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id
msgid "Reviewer field"
msgstr "Campo revisor"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "Grupo revisor"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids
msgid "Reviewers"
msgstr "Revisores"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids
#, python-format
msgid "Reviews"
msgstr "Revisiones"
#. module: base_tier_validation
#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
#: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
msgid "Send Tier Review Reminder"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid "Send reminder message on pending reviews"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence
#, python-format
msgid "Sequence"
msgstr "Secuencia"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual
msgid "Specific user"
msgstr "Usuario específico"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status
#, python-format
msgid "Status"
msgstr "Estado"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "The review has been reset by %s."
msgstr "La revisión ha sido reiniciada por %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "There are no res.users in the selected field"
msgstr "No hay res.usuarios en el campo seleccionado"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "This %s needs to be validated"
msgstr "Este %s necesita ser validado"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"This action needs to be validated for at least one record. \n"
"Please request a validation."
msgstr ""
"Esta acción necesita ser validada para algún registro.\n"
"Por favor, solicita una validación."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence
msgid "Tier"
msgstr "Secuencia"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action
#: model:ir.model,name:base_tier_validation.model_tier_definition
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Tier Definition"
msgstr "Definición de Nivel"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula
msgid "Tier Formula"
msgstr "Fórmula de niveles"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_forward
msgid "Tier Forward & Backward"
msgstr "Nivel hacia delante y hacia atrás"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_review
msgid "Tier Review"
msgstr "Revisión de Nivel"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Tier Validation"
msgstr "Validación por niveles"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Validaciones de Nivel (abstracto)"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Notificación de Validación de Nivel Aceptada"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form
msgid "Tier Validation Exception"
msgstr "Excepción de Validación del Tier"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation_exception
msgid "Tier Validation Exceptions"
msgstr "Excepciones de Validación del Tier"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Validación de nivel Notificación rechazada"
#. module: base_tier_validation
#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
msgid "Tier Validation Reminder"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Validación de nivel solicitada"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted
msgid "Tier Validation Restarted"
msgstr "Validación de nivel reiniciada"
#. module: base_tier_validation
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation
msgid "Tier Validations"
msgstr "Validaciones de Nivel"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message
msgid "To Validate Message"
msgstr "Para validar el mensaje"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by
msgid "Todo By"
msgstr "Por hacer por"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Todo by"
msgstr "Para hacer por"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_users
msgid "User"
msgstr "Usuario"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids
msgid "Valid Model Field"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids
msgid "Valid Reviewer Field"
msgstr "Campo Revisor válido"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Validate"
msgstr "Validar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject
msgid "Validate Reject"
msgstr "Validar Rechazar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
msgid "Validated"
msgstr "Validado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message
msgid "Validated Message"
msgstr "Mensaje Validado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type
msgid "Validated by"
msgstr "Validado por"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date
#, python-format
msgid "Validation Date"
msgstr "Fecha de Validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date
msgid "Validation Formated Date"
msgstr "Fecha de Validación Formateada"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
msgid "Validation Status"
msgstr "Estado de validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
msgid "Validations"
msgstr "Validaciones"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
msgid "Without validation"
msgstr "Sin validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation
msgid "Write after Validation"
msgstr "Escritura tras Validación"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write after validation"
msgstr "Escritura tras validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation
msgid "Write under Validation"
msgstr "Escritura mientras Validación"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write under validation"
msgstr "Escritura mientras validación"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
"No puedes escribir estos campos tras una validación.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Solo estos campos pueden ser modificados:\n"
"- %(allowed_fields)s"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
"No puedes escribir estos campos mientras está validándose.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Solo estos campos pueden ser modificados:\n"
"- %(allowed_fields)s"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "e.g. Tier Validation for..."
msgstr "ej. Validación de Nivel por..."
#~ msgid ""
#~ "<span>Bypassed, if previous tier was validated by same reviewer</span>"
#~ msgstr ""
#~ "<span>Omitido, si el nivel anterior fue validado por el mismo revisor</"
#~ "span>"
#~ msgid ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " This Record needs to be\n"
#~ " validated."
#~ msgstr ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " Este registro debe ser\n"
#~ " validado."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " Operation has been\n"
#~ " <b>rejected</b>\n"
#~ " ."
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " La operación ha sido\n"
#~ " <b>rechazada</b>\n"
#~ " ."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " Operation has been\n"
#~ " <b>validated</b>\n"
#~ " !"
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " La operación ha sido\n"
#~ " <b>validada</b>\n"
#~ " !"

View file

@ -0,0 +1,970 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-08-16 22:50+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.3.2\n"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "0 Pending"
msgstr "0 Pendientes"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-info-circle\"/> This Record needs to be validated."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span class=\"oe_edit_only\">Name</span>"
msgstr "<span class=\"oe_edit_only\">Nombre</span>"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span>Bypass, if previous tier was validated by same reviewer</span>"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "A review has been requested %s days ago."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review has been requested by %s."
msgstr "%s ha solicitado una revisión."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted"
msgstr "Se aceptó una revisión"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted. (%s)"
msgstr "Se aceptó una revisión. (%s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %(user)s. (%(comment)s)"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %s."
msgstr "%s rechazó una revisión."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A validation process is still open for at least one record."
msgstr ""
"Todavía hay un proceso de validación abierto para al menos un registro."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active
msgid "Active"
msgstr "Activo"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "Activity"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "All"
msgstr "Todos"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Allowed groups to use this Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group
msgid "Any user in a specific group"
msgstr "Cualquier usuario de un grupo específico"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Apply On"
msgstr "Aplicar en"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,help:base_tier_validation.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
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid "Approve Sequence Bypass"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence
msgid "Approve by sequence"
msgstr "Aprobar por secuencia"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved
msgid "Approved"
msgstr "Aprobado"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Archived"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation_exception.py:0
#, python-format
msgid ""
"At least one of these fields must be checked! Write under Validation, Write "
"after Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid ""
"Bypassed (auto validated), if previous tier was validated by same reviewer"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review
msgid "Can Review"
msgstr "Puede revisar"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review
msgid ""
"Can review will be marked if the review is pending and the\n"
" approve sequence has been achieved"
msgstr ""
"Puede revisar se marcará si la revisión está pendiente y\n"
" se ha logrado aprobar la secuencia"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
msgid "Cancel"
msgstr "Cancelado"
#. module: base_tier_validation
#. odoo-javascript
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
#, python-format
msgid "Comment"
msgstr "Comentario"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_comment_wizard
msgid "Comment Wizard"
msgstr "Asistente de comentarios"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment
msgid "Comments"
msgstr "Comentarios"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Company"
msgstr "Empresa"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "Create a new Validation Exception!"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date
msgid "Created on"
msgstr "Creado en"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id
msgid "Definition"
msgstr "Definición de Nivel"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain
msgid "Definition Domain"
msgstr "Dominio de definición"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name
#, python-format
msgid "Description"
msgstr "Descripción"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status
msgid "Display Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain
msgid "Domain"
msgstr "Dominio"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by
msgid "Done By"
msgstr "Realizado por"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Done by"
msgstr "Realizado por"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field
msgid "Field in related record"
msgstr "Campo en registro relacionado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids
msgid "Fields"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "Group %s"
msgstr "Grupo %s"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "Group By"
msgstr "Agrupar por"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Groups"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment
msgid "Has Comment"
msgstr "Tiene comentario"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id
msgid "ID"
msgstr "Identificación"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create
msgid ""
"If set, all possible reviewers will be notified by email when this "
"definition is triggered."
msgstr ""
"Si se establece, todos los posibles revisores serán notificados por correo "
"electrónico cuando se active esta definición."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is accepted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is rejected."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted
msgid ""
"If set, reviewers will be notified by email when a reviews related to this "
"definition are restarted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's fully validated"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's in the validation process"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception____last_update
msgid "Last Modified on"
msgstr "Última modificación el"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
msgid "Last Reminder Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid
msgid "Last Updated by"
msgstr "Última modificación por"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date
msgid "Last Updated on"
msgstr "Última modificación en"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Model"
msgstr "Modelo"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name
msgid "Model Name"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "More Options"
msgstr "Más opciones"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name
msgid "Name"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation
msgid "Need Validation"
msgstr "Necesita validación"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_definition.py:0
#, python-format
msgid "New Tier Validation"
msgstr "Nueva Definición de Nivel"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review
msgid "Next Review"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Next: %s"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "No reviews to do."
msgstr "No hay revisiones que hacer."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted
msgid "Notify Reviewers on Accepted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create
msgid "Notify Reviewers on Creation"
msgstr "Notificar a los revisores sobre la creación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected
msgid "Notify Reviewers on Rejected"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted
msgid "Notify Reviewers on Restarted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid ""
"Number of days after which a message must be posted to remind about pending "
"validation (0 = no reminder)"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid ""
"Once created, you can decide which fields you want to be editable when the "
"record:"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>rejected</b>."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>validated</b>!"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to forward a tier validation to other reviewer, and backward"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to use python formula to get reviewers and find documents"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
#, python-format
msgid "Pending"
msgstr "Pendiente"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Reevaluate Reviews"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
msgid "Referenced Model"
msgstr "Modelo referenciado"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Reject"
msgstr "Rechazar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
msgid "Rejected"
msgstr "Rechazado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message
msgid "Rejected Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id
msgid "Related Document ID"
msgstr "ID de documento relacionado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model
msgid "Related Document Model"
msgstr "Modelo de documento relacionado"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Request Validation"
msgstr "Solicitar Validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by
msgid "Requested By"
msgstr "Solicitado por"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Requested by"
msgstr "Solicitado por"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id
msgid "Res"
msgstr "Res"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model
msgid "Res Model"
msgstr "Modelo Res"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Restart Validation"
msgstr "Reiniciar la validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids
msgid "Review"
msgstr "Revisión"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "Evaluador"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id
msgid "Reviewer field"
msgstr "Campo de revisor"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "Grupo de revisores"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids
msgid "Reviewers"
msgstr "Revisores"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids
#, python-format
msgid "Reviews"
msgstr "Comentarios"
#. module: base_tier_validation
#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
#: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
msgid "Send Tier Review Reminder"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid "Send reminder message on pending reviews"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence
#, python-format
msgid "Sequence"
msgstr "Secuencia"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual
msgid "Specific user"
msgstr "Usuario específico"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status
#, python-format
msgid "Status"
msgstr "Estatus"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "The review has been reset by %s."
msgstr "%s ha restablecido la revisión."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "There are no res.users in the selected field"
msgstr "No hay res.users en el campo seleccionado"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "This %s needs to be validated"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"This action needs to be validated for at least one record. \n"
"Please request a validation."
msgstr ""
"Esta acción debe validarse para al menos un registro.\n"
"Solicite una validación."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence
msgid "Tier"
msgstr ""
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action
#: model:ir.model,name:base_tier_validation.model_tier_definition
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Tier Definition"
msgstr "Definición de Nivel"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula
msgid "Tier Formula"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_forward
msgid "Tier Forward & Backward"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_review
msgid "Tier Review"
msgstr "Revisión de niveles"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Tier Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Validación de nivel (resumen)"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Notificación de validación de nivel aceptada"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form
msgid "Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation_exception
msgid "Tier Validation Exceptions"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Notificación de rechazo de validación de nivel"
#. module: base_tier_validation
#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
msgid "Tier Validation Reminder"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Validación de nivel solicitada"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted
msgid "Tier Validation Restarted"
msgstr "Se reinició la validación de nivel"
#. module: base_tier_validation
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation
msgid "Tier Validations"
msgstr "Validaciones de nivel"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message
msgid "To Validate Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by
msgid "Todo By"
msgstr "Por Hacer por"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Todo by"
msgstr "Por Hacer por"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_users
msgid "User"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids
msgid "Valid Model Field"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids
msgid "Valid Reviewer Field"
msgstr "Campo de revisor válido"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Validate"
msgstr "Validar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject
msgid "Validate Reject"
msgstr "Validar Rechazar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
msgid "Validated"
msgstr "Validado"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message
msgid "Validated Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type
msgid "Validated by"
msgstr "Validado por"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date
#, python-format
msgid "Validation Date"
msgstr "Fecha de validación"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date
msgid "Validation Formated Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
msgid "Validation Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
msgid "Validations"
msgstr "Validaciones"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
msgid "Without validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation
msgid "Write after Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write after validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation
msgid "Write under Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write under validation"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "e.g. Tier Validation for..."
msgstr "p.ej. Validación de nivel para ..."
#~ msgid ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " This Record needs to be\n"
#~ " validated."
#~ msgstr ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " Este registro necesita ser\n"
#~ " validado."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " Operation has been\n"
#~ " <b>rejected</b>\n"
#~ " ."
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " La operación ha sido\n"
#~ " <b>rechazada</b>\n"
#~ " ."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " Operation has been\n"
#~ " <b>validated</b>\n"
#~ " !"
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " ¡La operación ha sido\n"
#~ " <b>validada</b>\n"
#~ " !"
#, python-format
#~ msgid "The operation is under validation."
#~ msgstr "La operación está en proceso de validación."
#, python-format
#~ msgid "Activities"
#~ msgstr "Actividades"
#~ msgid "Users"
#~ msgstr "Usuarios"
#~ msgid "A review was rejected by {}. ({})"
#~ msgstr "{} rechazó una revisión. ({})"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,992 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-01-07 01:59+0000\n"
"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\n"
"Language-Team: none\n"
"Language: nl_NL\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
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "0 Pending"
msgstr "0 In afwachting"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-info-circle\"/> This Record needs to be validated."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span class=\"oe_edit_only\">Name</span>"
msgstr "<span class=\"oe_edit_only\">Naam</span>"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span>Bypass, if previous tier was validated by same reviewer</span>"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "A review has been requested %s days ago."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review has been requested by %s."
msgstr "Een beoordeling is aangevraagd door %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted"
msgstr "Een beoordeling is geaccepteerd"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted. (%s)"
msgstr "Een beoordeling is geaccepteerd. (%s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %(user)s. (%(comment)s)"
msgstr "Een validatie is afgewezen door %(user)s. (%(comment)s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %s."
msgstr "Een beoordeling is afgewezen door %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A validation process is still open for at least one record."
msgstr "Er is nog steeds een validatieproces open voor ten minste één record."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active
msgid "Active"
msgstr "Actief"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "Activity"
msgstr "Activiteit"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "All"
msgstr "Alle"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Allowed groups to use this Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group
msgid "Any user in a specific group"
msgstr "Elke gebruiker in een specifieke groep"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Apply On"
msgstr "Toepassen op"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr "Goedkeuringsvolgorde op basis van het opgegeven volgnummer"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid "Approve Sequence Bypass"
msgstr "Beoordeel volgorde omzeilen"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence
msgid "Approve by sequence"
msgstr "Goedkeuren op volgorde"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved
msgid "Approved"
msgstr "Goedgekeurd"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Archived"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation_exception.py:0
#, python-format
msgid ""
"At least one of these fields must be checked! Write under Validation, Write "
"after Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid ""
"Bypassed (auto validated), if previous tier was validated by same reviewer"
msgstr ""
"Overgeslagen (automatisch gevalideerd), als het vorige niveau door dezelfde "
"beoordelaar is gevalideerd"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review
msgid "Can Review"
msgstr "Kan beoordelen"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review
msgid ""
"Can review will be marked if the review is pending and the\n"
" approve sequence has been achieved"
msgstr ""
"Kan beoordelen wordt gemarkeerd als de beoordeling in behandeling is en de\n"
" goedkeuringssequentie is bereikt"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
msgid "Cancel"
msgstr "Annuleer"
#. module: base_tier_validation
#. odoo-javascript
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
#, python-format
msgid "Comment"
msgstr "Opmerking"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_comment_wizard
msgid "Comment Wizard"
msgstr "Opmerking Wizard"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment
msgid "Comments"
msgstr "Opmerkingen"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Company"
msgstr "Bedrijf"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_config_settings
#, fuzzy
msgid "Config Settings"
msgstr "Configuratie Instellingen"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "Create a new Validation Exception!"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid
msgid "Created by"
msgstr "Bedrijf"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date
msgid "Created on"
msgstr "Aangemaakt door"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id
msgid "Definition"
msgstr "Definitie"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain
msgid "Definition Domain"
msgstr "Definitiedomein"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name
#, python-format
msgid "Description"
msgstr "Omschrijving"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name
msgid "Display Name"
msgstr "Weergavenaam"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status
msgid "Display Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain
msgid "Domain"
msgstr "Domein"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by
msgid "Done By"
msgstr "Gedaan door"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Done by"
msgstr "Gedaan door"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field
msgid "Field in related record"
msgstr "Veld in verwante record"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids
msgid "Fields"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "Group %s"
msgstr "Groep %s"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "Group By"
msgstr "Groeperen op"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Groups"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment
msgid "Has Comment"
msgstr "Heeft commentaar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id
msgid "ID"
msgstr "ID"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create
msgid ""
"If set, all possible reviewers will be notified by email when this "
"definition is triggered."
msgstr ""
"Indien ingesteld, worden alle mogelijke reviewers per e-mail op de hoogte "
"gebracht wanneer deze definitie wordt geactiveerd."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is accepted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is rejected."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted
msgid ""
"If set, reviewers will be notified by email when a reviews related to this "
"definition are restarted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's fully validated"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's in the validation process"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception____last_update
msgid "Last Modified on"
msgstr "Laatst gewijzigd op"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
msgid "Last Reminder Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid
msgid "Last Updated by"
msgstr "Laatst bijgewerkt door"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date
msgid "Last Updated on"
msgstr "Laatst bijgewerkt op"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Model"
msgstr "Model"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name
msgid "Model Name"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "More Options"
msgstr "Meer Opties"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name
msgid "Name"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation
msgid "Need Validation"
msgstr "Validatie nodig"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_definition.py:0
#, python-format
msgid "New Tier Validation"
msgstr "Nieuwe Tier-validatie"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review
msgid "Next Review"
msgstr "Volgende Beoordeling"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Next: %s"
msgstr "Volgende: %s"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "No reviews to do."
msgstr "Geen beoordelingen te doen."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted
msgid "Notify Reviewers on Accepted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create
msgid "Notify Reviewers on Creation"
msgstr "Informeer beoordelaar bij het maken"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected
msgid "Notify Reviewers on Rejected"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted
msgid "Notify Reviewers on Restarted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid ""
"Number of days after which a message must be posted to remind about pending "
"validation (0 = no reminder)"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid ""
"Once created, you can decide which fields you want to be editable when the "
"record:"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>rejected</b>."
msgstr "Operatie is <b>afgewezen</b>."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>validated</b>!"
msgstr "Operation has been <b>Goedgekeurd</b>!"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to forward a tier validation to other reviewer, and backward"
msgstr ""
"Optie om een validatie door te sturen naar een andere beoordelaar en terug"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to use python formula to get reviewers and find documents"
msgstr ""
"Optie om pythonformule te gebruiken om beoordelaars te krijgen en documenten "
"te vinden"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
#, python-format
msgid "Pending"
msgstr "In afwachting"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Reevaluate Reviews"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
msgid "Referenced Model"
msgstr "Referentiemodel"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Reject"
msgstr "Weiger"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
msgid "Rejected"
msgstr "Afgekeurd"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message
msgid "Rejected Message"
msgstr "Afgewezen bericht"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id
msgid "Related Document ID"
msgstr "Gerelateerde document-ID"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model
msgid "Related Document Model"
msgstr "Verwant documentmodel"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Request Validation"
msgstr "Verzoek valideren"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by
msgid "Requested By"
msgstr "Aangevraagd door"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Requested by"
msgstr "Aangevraagd door"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id
msgid "Res"
msgstr "Res"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model
msgid "Res Model"
msgstr "Res model"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Restart Validation"
msgstr "Herstart Beoordeling"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids
msgid "Review"
msgstr "Beoordeling"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "Beoordelaar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id
msgid "Reviewer field"
msgstr "Beoordelaar veld"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "Beoordeel groep"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids
msgid "Reviewers"
msgstr "Beoordelaars"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids
#, python-format
msgid "Reviews"
msgstr "Beoordelingen"
#. module: base_tier_validation
#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
#: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
msgid "Send Tier Review Reminder"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid "Send reminder message on pending reviews"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence
#, python-format
msgid "Sequence"
msgstr "Volgorde"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual
msgid "Specific user"
msgstr "Specifieke gebruiker"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status
#, python-format
msgid "Status"
msgstr "Status"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "The review has been reset by %s."
msgstr "De beoordeling is opnieuw gestart door %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "There are no res.users in the selected field"
msgstr "Er zijn geen res.users in het geselecteerde veld"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "This %s needs to be validated"
msgstr "Dit %s dient te worden beoordeeld"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"This action needs to be validated for at least one record. \n"
"Please request a validation."
msgstr ""
"Deze actie moet voor ten minste één record gevalideerd worden.\n"
"Vraag een validatie aan."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence
msgid "Tier"
msgstr "Tier"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action
#: model:ir.model,name:base_tier_validation.model_tier_definition
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Tier Definition"
msgstr "Tier definitie"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula
msgid "Tier Formula"
msgstr "Niveau Formule"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_forward
msgid "Tier Forward & Backward"
msgstr "Niveau Vooruit & Achteruit"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_review
msgid "Tier Review"
msgstr "Tier beoordeling"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Tier Validation"
msgstr "Niveauvalidatie"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Tier-validatie (abstract)"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted
#, fuzzy
msgid "Tier Validation Accepted Notification"
msgstr "Tier-validatie (abstract)"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form
msgid "Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation_exception
msgid "Tier Validation Exceptions"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected
#, fuzzy
msgid "Tier Validation Rejected Notification"
msgstr "Tier-validatie (abstract)"
#. module: base_tier_validation
#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
msgid "Tier Validation Reminder"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
msgid "Tier Validation Requested"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted
msgid "Tier Validation Restarted"
msgstr "Niveauvalidatie opnieuw gestart"
#. module: base_tier_validation
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation
msgid "Tier Validations"
msgstr "Tier-validaties"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message
msgid "To Validate Message"
msgstr "Bericht valideren"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by
msgid "Todo By"
msgstr "Te doen door"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Todo by"
msgstr "Te doen door"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_users
msgid "User"
msgstr "Gebruiker"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids
msgid "Valid Model Field"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids
msgid "Valid Reviewer Field"
msgstr "Geldig beoordelaarsveld"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Validate"
msgstr "Valideer"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject
msgid "Validate Reject"
msgstr "Valideren weigeren"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
msgid "Validated"
msgstr "Gevalideerd"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message
msgid "Validated Message"
msgstr "Gevalideerd bericht"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type
msgid "Validated by"
msgstr "Gevalideerd door"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date
#, python-format
msgid "Validation Date"
msgstr "Validatie datum"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date
msgid "Validation Formated Date"
msgstr "Validatie Datum"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
msgid "Validation Status"
msgstr "Validatie Status"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
msgid "Validations"
msgstr "Validaties"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
msgid "Without validation"
msgstr "Zonder validatie"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation
msgid "Write after Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write after validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation
msgid "Write under Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write under validation"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "e.g. Tier Validation for..."
msgstr "bijv. Tier validatie voor..."
#~ msgid ""
#~ "<span>Bypassed, if previous tier was validated by same reviewer</span>"
#~ msgstr ""
#~ "<span>Overslaan, als het vorige niveau door dezelfde beoordelaar is "
#~ "gevalideerd</span>"
#~ msgid ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " This Record needs to be\n"
#~ " validated."
#~ msgstr ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " Dit Record dient te worden\n"
#~ " beoordeeld."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " Operation has been\n"
#~ " <b>rejected</b>\n"
#~ " ."
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " Aanvraag is \n"
#~ " <b>afgewezen</b>\n"
#~ " ."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " Operation has been\n"
#~ " <b>validated</b>\n"
#~ " !"
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " Aanvraag is\n"
#~ " <b>Gevalideerd</b>\n"
#~ " !"
#, python-format
#~ msgid "The operation is under validation."
#~ msgstr "De bewerking is onder validatie."
#, fuzzy, python-format
#~ msgid "Activities"
#~ msgstr "Actief"
#~ msgid "Users"
#~ msgstr "Gebruikers"
#~ msgid "A review was rejected by {}. ({})"
#~ msgstr "Een beoordeling is afgewezen door {}. ({})"
#~ msgid "Any user in a specific group."
#~ msgstr "Elke gebruiker in een specifieke groep."
#~ msgid "Object"
#~ msgstr "Object"
#~ msgid "Approve Sequence"
#~ msgstr "Volgorde goedkeuren"

View file

@ -0,0 +1,995 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-27 11:35+0000\n"
"Last-Translator: jakobkrabbe <jakob@syscare.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.17\n"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "0 Pending"
msgstr "0 Väntar"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-info-circle\"/> This Record needs to be validated."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span class=\"oe_edit_only\">Name</span>"
msgstr "<span class=\"oe_edit_only\">Namn</span>"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span>Bypass, if previous tier was validated by same reviewer</span>"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "A review has been requested %s days ago."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review has been requested by %s."
msgstr "En granskning har begärts av %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted"
msgstr "En granskning accepterades"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted. (%s)"
msgstr "En granskning accepterades. (%s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %(user)s. (%(comment)s)"
msgstr "En granskning nekades av %(user)s. (%(comment)s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %s."
msgstr "En granskning nekades av %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A validation process is still open for at least one record."
msgstr "En valideringsprocess är fortfarande öppen för minst en post."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active
msgid "Active"
msgstr "Aktiv"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "Activity"
msgstr "Aktivitet"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "All"
msgstr "Alla"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Allowed groups to use this Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group
msgid "Any user in a specific group"
msgstr "Alla användare i en specifik grupp"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Apply On"
msgstr "Applicera på"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr "Godkännandeordning enligt angivet sekvensnummer"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid "Approve Sequence Bypass"
msgstr "Attest av förbikoppling"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence
msgid "Approve by sequence"
msgstr "Attest i viss ordning"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved
msgid "Approved"
msgstr "Attesterad"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Archived"
msgstr "Arkiverad"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation_exception.py:0
#, python-format
msgid ""
"At least one of these fields must be checked! Write under Validation, Write "
"after Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid ""
"Bypassed (auto validated), if previous tier was validated by same reviewer"
msgstr ""
"Förbikopplad (autovaliderad), om föregående nivå validerades av samma "
"granskare"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review
msgid "Can Review"
msgstr "Kan granska"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review
msgid ""
"Can review will be marked if the review is pending and the\n"
" approve sequence has been achieved"
msgstr ""
"Kan attesteras kommer att vara ikryssad om attest är i kö och\n"
" attestsekvensen har uppnåtts"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
msgid "Cancel"
msgstr "Avbryt"
#. module: base_tier_validation
#. odoo-javascript
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
#, python-format
msgid "Comment"
msgstr "Kommentar"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_comment_wizard
msgid "Comment Wizard"
msgstr "Kommentarsguide"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment
msgid "Comments"
msgstr "Kommentarer"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Company"
msgstr "Bolag"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr "Konfigurationsinställningar"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "Create a new Validation Exception!"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid
msgid "Created by"
msgstr "Skapad av"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date
msgid "Created on"
msgstr "Skapad den"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id
msgid "Definition"
msgstr "Definition"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain
msgid "Definition Domain"
msgstr "Definitionsdomän"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name
#, python-format
msgid "Description"
msgstr "Beskrivning"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name
msgid "Display Name"
msgstr "Visningsnamn"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status
msgid "Display Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain
msgid "Domain"
msgstr "Domän"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by
msgid "Done By"
msgstr "Gjord av"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Done by"
msgstr "Gjord av"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field
msgid "Field in related record"
msgstr "Fält i relaterad post"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids
msgid "Fields"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "Group %s"
msgstr "Grupp %s"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "Group By"
msgstr "Gruppera efter"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Groups"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment
msgid "Has Comment"
msgstr "Har kommentar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id
msgid "ID"
msgstr "ID"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create
msgid ""
"If set, all possible reviewers will be notified by email when this "
"definition is triggered."
msgstr ""
"Om den är inställd kommer alla möjliga attesterare att meddelas via e-post "
"när denna definition aktiveras."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is accepted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is rejected."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted
msgid ""
"If set, reviewers will be notified by email when a reviews related to this "
"definition are restarted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's fully validated"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's in the validation process"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception____last_update
msgid "Last Modified on"
msgstr "Senast ändrad den"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
msgid "Last Reminder Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid
msgid "Last Updated by"
msgstr "Senast uppdaterad av"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date
msgid "Last Updated on"
msgstr "Senast uppdaterad den"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Model"
msgstr "Modell"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name
msgid "Model Name"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "More Options"
msgstr "Fler alternativ"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name
msgid "Name"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation
msgid "Need Validation"
msgstr "Behöver validering"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_definition.py:0
#, python-format
msgid "New Tier Validation"
msgstr "Ny attestering"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review
msgid "Next Review"
msgstr "Nästa granskning"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Next: %s"
msgstr "Nästa: %s"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "No reviews to do."
msgstr "Inga attester att göra."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted
msgid "Notify Reviewers on Accepted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create
msgid "Notify Reviewers on Creation"
msgstr "Meddela granskare vid skapande"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected
msgid "Notify Reviewers on Rejected"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted
msgid "Notify Reviewers on Restarted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid ""
"Number of days after which a message must be posted to remind about pending "
"validation (0 = no reminder)"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid ""
"Once created, you can decide which fields you want to be editable when the "
"record:"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>rejected</b>."
msgstr "Åtgärden har blivit <b>avvisats</b>."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>validated</b>!"
msgstr "Åtgärden har <b>validerats</b>!"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to forward a tier validation to other reviewer, and backward"
msgstr ""
"Alternativ för att vidarebefordra en attestering till en annan granskare och "
"bakåt"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to use python formula to get reviewers and find documents"
msgstr ""
"Alternativ för att använda python-formel för att få fram granskare och hitta "
"dokument"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
#, python-format
msgid "Pending"
msgstr "Väntande"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Reevaluate Reviews"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
msgid "Referenced Model"
msgstr "Refererad modell"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Reject"
msgstr "Neka"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
msgid "Rejected"
msgstr "Nekad"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message
msgid "Rejected Message"
msgstr "Nekat meddelande"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id
msgid "Related Document ID"
msgstr "ID för relaterat dokument"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model
msgid "Related Document Model"
msgstr "Modell för relaterat dokument"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Request Validation"
msgstr "Begär attest"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by
msgid "Requested By"
msgstr "Begärd av"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Requested by"
msgstr "Begärd av"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id
msgid "Res"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model
msgid "Res Model"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Restart Validation"
msgstr "Starta om attest"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids
msgid "Review"
msgstr "Granska"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "Granskare"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id
msgid "Reviewer field"
msgstr "Granskarfält"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "Granskargrupp"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids
msgid "Reviewers"
msgstr "Granskare"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids
#, python-format
msgid "Reviews"
msgstr "Granskningar"
#. module: base_tier_validation
#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
#: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
msgid "Send Tier Review Reminder"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid "Send reminder message on pending reviews"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence
#, python-format
msgid "Sequence"
msgstr "Sekvens"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual
msgid "Specific user"
msgstr "Specifik användare"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status
#, python-format
msgid "Status"
msgstr "Status"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "The review has been reset by %s."
msgstr "Attesten har återställts av %s."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "There are no res.users in the selected field"
msgstr "Det finns inga res.users i det valda fältet"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "This %s needs to be validated"
msgstr "Denna %s måste valideras"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"This action needs to be validated for at least one record. \n"
"Please request a validation."
msgstr ""
"Denna åtgärd måste valideras för minst en post.\n"
"Vänligen begär en validering."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence
msgid "Tier"
msgstr ""
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action
#: model:ir.model,name:base_tier_validation.model_tier_definition
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Tier Definition"
msgstr "Attestdefinition"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula
msgid "Tier Formula"
msgstr "Attestformel"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_forward
msgid "Tier Forward & Backward"
msgstr "Attest framåt och bakåt"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_review
msgid "Tier Review"
msgstr "Attestgranskning"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Tier Validation"
msgstr "Attestering"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Attestering (sammanfattning)"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Meddelande vid accepterad attestering"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form
msgid "Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation_exception
msgid "Tier Validation Exceptions"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Meddelande vid nekad attestering"
#. module: base_tier_validation
#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
msgid "Tier Validation Reminder"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Attestering begärd"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted
msgid "Tier Validation Restarted"
msgstr "Attestering omstartad"
#. module: base_tier_validation
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation
msgid "Tier Validations"
msgstr "Attesteringar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message
msgid "To Validate Message"
msgstr "Att validera meddelande"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by
msgid "Todo By"
msgstr "Att göra av"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Todo by"
msgstr "Att göra av"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_users
msgid "User"
msgstr "Användare"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids
msgid "Valid Model Field"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids
msgid "Valid Reviewer Field"
msgstr "Granskarfält"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Validate"
msgstr "Validera"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject
msgid "Validate Reject"
msgstr "Validera Neka"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
msgid "Validated"
msgstr "Validerad"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message
msgid "Validated Message"
msgstr "Validera meddelande"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type
msgid "Validated by"
msgstr "Attesterad av"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date
#, python-format
msgid "Validation Date"
msgstr "Attestdatum"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date
msgid "Validation Formated Date"
msgstr "Attestformaterat datum"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
msgid "Validation Status"
msgstr "Atteststatus"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
msgid "Validations"
msgstr "Attesteringar"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
msgid "Without validation"
msgstr "Utan attestering"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation
msgid "Write after Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write after validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation
msgid "Write under Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write under validation"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "e.g. Tier Validation for..."
msgstr "t.ex. attest för..."
#~ msgid ""
#~ "<span>Bypassed, if previous tier was validated by same reviewer</span>"
#~ msgstr ""
#~ "<span>Förbigås om föregående nivå validerades av samma granskare</span>"
#~ msgid ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " This Record needs to be\n"
#~ " validated."
#~ msgstr ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " Den här posten måste\n"
#~ " valideras."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " Operation has been\n"
#~ " <b>rejected</b>\n"
#~ " ."
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " Åtgärden har\n"
#~ " <b>nekats</b>\n"
#~ " ."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " Operation has been\n"
#~ " <b>validated</b>\n"
#~ " !"
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " Åtgärden har\n"
#~ " <b>validerats</b>\n"
#~ " !"
#, python-format
#~ msgid "The operation is under validation."
#~ msgstr "Åtgärden håller på att attest."
#, python-format
#~ msgid "Activities"
#~ msgstr "Aktiviteter"
#~ msgid "More reports about tier validations, i.e., summary of all my reviews"
#~ msgstr ""
#~ "Fler rapporter om attesteringar, dvs. en sammanfattning av alla mina "
#~ "granskningar"
#~ msgid "Option to trigger server actions on completion of tier reviews"
#~ msgstr ""
#~ "Alternativ för att utlösa serveråtgärder när attesteringar har slutförts"
#~ msgid "Tier Reports"
#~ msgstr "Attestrapporter"
#~ msgid "Tier Server Action"
#~ msgstr "Attestserveråtgärd"
#~ msgid "Users"
#~ msgstr "Användare"
#~ msgid "A review was rejected by {}. ({})"
#~ msgstr "En granskning nekades av {}. ({})"

View file

@ -0,0 +1,987 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-06-21 10:25+0000\n"
"Last-Translator: Ahmet Yiğit Budak <yigit@altinkaya.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 5.10.4\n"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "0 Pending"
msgstr "0 Bekleyen"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-info-circle\"/> This Record needs to be validated."
msgstr "<i class=\"fa fa-info-circle\"/> Bu Kaydın doğrulanması gerekiyor."
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
msgstr "<i class=\"fa fa-thumbs-down\"/> İşlem <b>reddedildi</b>."
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
msgstr "<i class=\"fa fa-thumbs-up\"/> İşlem <b>doğrulandı</b>!"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span class=\"oe_edit_only\">Name</span>"
msgstr "<span class=\"oe_edit_only\">Adı</span>"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span>Bypass, if previous tier was validated by same reviewer</span>"
msgstr ""
"<span>Önceki katman aynı incelemeci tarafından doğrulandıysa atlayın</span>"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "A review has been requested %s days ago."
msgstr "%s gün önce bir inceleme istendi."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review has been requested by %s."
msgstr "%s tarafından bir inceleme istendi."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted"
msgstr "Bir inceleme kabul edildi"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted. (%s)"
msgstr "Bir inceleme kabul edildi. (%s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %(user)s. (%(comment)s)"
msgstr "Bir inceleme %(user)s tarafından reddedildi. (%(comment)s)"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %s."
msgstr "Bir inceleme %s tarafından reddedildi."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A validation process is still open for at least one record."
msgstr "En az bir kayıt için hala bir doğrulama süreci açık."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active
msgid "Active"
msgstr "Etkin"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "Activity"
msgstr "Aktivite"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "All"
msgstr "Bütün"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Allowed groups to use this Tier Validation Exception"
msgstr "Grupların bu Katman Doğrulama İstisnasını kullanmasına izin verildi"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group
msgid "Any user in a specific group"
msgstr "Belirli bir gruptaki herhangi bir kullanıcı"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Apply On"
msgstr "Uygula"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr "Belirtilen sıra numarasına göre onay sırası"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid "Approve Sequence Bypass"
msgstr "Dizi Atlamasını Onayla"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence
msgid "Approve by sequence"
msgstr "Sıraya göre onayla"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved
msgid "Approved"
msgstr "Onaylı"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Archived"
msgstr "Arşivlenmiş"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation_exception.py:0
#, python-format
msgid ""
"At least one of these fields must be checked! Write under Validation, Write "
"after Validation"
msgstr ""
"Bu alanlardan en az birinin işaretlenmesi gerekmektedir! Doğrulama Altında "
"Yaz, Doğrulama Sonrası Yaz"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid ""
"Bypassed (auto validated), if previous tier was validated by same reviewer"
msgstr ""
"Önceki aşama aynı inceleyici tarafından doğrulandıysa atlandı (otomatik "
"olarak doğrulandı)"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review
msgid "Can Review"
msgstr "Gözden Geçirebilir"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review
msgid ""
"Can review will be marked if the review is pending and the\n"
" approve sequence has been achieved"
msgstr ""
"İnceleme beklemedeyse ve gözden geçirilebilirse işaretlenebilir.\n"
" onay dizisi elde edildi"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
msgid "Cancel"
msgstr "İptal"
#. module: base_tier_validation
#. odoo-javascript
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
#, python-format
msgid "Comment"
msgstr "Yorum"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_comment_wizard
msgid "Comment Wizard"
msgstr "Yorum Sihirbazı"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment
msgid "Comments"
msgstr "Yorumlar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Company"
msgstr "Şirket"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr "Yapılandırma Ayarları"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "Create a new Validation Exception!"
msgstr "Yeni bir Doğrulama İstisnası oluştur!"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid
msgid "Created by"
msgstr "Oluşturan"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date
msgid "Created on"
msgstr "Oluşturulma"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id
msgid "Definition"
msgstr "Tanım"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain
msgid "Definition Domain"
msgstr "Tanım Domaini"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name
#, python-format
msgid "Description"
msgstr "Açıklama"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name
msgid "Display Name"
msgstr "Görünüm Adı"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status
msgid "Display Status"
msgstr "Durumu Göster"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain
msgid "Domain"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by
msgid "Done By"
msgstr "Tamamlayan"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Done by"
msgstr "Tamamlayan"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field
msgid "Field in related record"
msgstr "İlgili kayıttaki alan"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids
msgid "Fields"
msgstr "Alanlar"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "Group %s"
msgstr "Grup %s"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "Group By"
msgstr "Grupla"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Groups"
msgstr "Gruplar"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment
msgid "Has Comment"
msgstr "Yorum Var"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id
msgid "ID"
msgstr "ID"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create
msgid ""
"If set, all possible reviewers will be notified by email when this "
"definition is triggered."
msgstr ""
"Ayarlanırsa, bu tanım tetiklendiğinde tüm olası gözden geçirenler e-posta "
"ile bilgilendirilecektir."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is accepted."
msgstr ""
"Ayarlanırsa, bu tanımla ilgili bir inceleme kabul edildiğinde gözden "
"geçirenler e-postayla bilgilendirilecektir."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is rejected."
msgstr ""
"Ayarlanırsa, bu tanımla ilgili bir inceleme reddedildiğinde inceleyenler e-"
"postayla bilgilendirilecektir."
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted
msgid ""
"If set, reviewers will be notified by email when a reviews related to this "
"definition are restarted."
msgstr ""
"Ayarlanırsa, bu tanımla ilgili bir inceleme yeniden başlatıldığında "
"inceleyenler e-postayla bilgilendirilecektir."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr "Yeniden Doğrulama Gerekli Mi"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's fully validated"
msgstr "Tamamen Doğrulandı"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's in the validation process"
msgstr "Doğrulama Aşamasında"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception____last_update
msgid "Last Modified on"
msgstr "Son Düzenleme"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
msgid "Last Reminder Date"
msgstr "Son Bilgilendirme Tarihi"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid
msgid "Last Updated by"
msgstr "Son Güncelleyen"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date
msgid "Last Updated on"
msgstr "Son Güncelleme"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Model"
msgstr "Modeli"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name
msgid "Model Name"
msgstr "Model İsmi"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "More Options"
msgstr "Daha Fazla Seçenek"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name
msgid "Name"
msgstr "İsim"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation
msgid "Need Validation"
msgstr "Doğrulama Gerekiyor"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_definition.py:0
#, python-format
msgid "New Tier Validation"
msgstr "Yeni Seviye Doğrulama"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review
msgid "Next Review"
msgstr "Sonraki İnceleme"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Next: %s"
msgstr "Sonraki: %s"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "No reviews to do."
msgstr "Yapacak inceleme yok."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted
msgid "Notify Reviewers on Accepted"
msgstr "Onaylandığında İnceleyenlere Bildir"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create
msgid "Notify Reviewers on Creation"
msgstr "İncelemeleri Oluşturma Hakkında Bilgilendir"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected
msgid "Notify Reviewers on Rejected"
msgstr "Reddedildiğinde İnceleyenlere Bildir"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted
msgid "Notify Reviewers on Restarted"
msgstr "Yeniden Başlatıldığında İnceleyenlere Bildir"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid ""
"Number of days after which a message must be posted to remind about pending "
"validation (0 = no reminder)"
msgstr ""
"Bekleyen doğrulamayı hatırlatmak için bir mesajın gönderilmesi gereken gün "
"sayısı (0 = hatırlatma yok)"
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid ""
"Once created, you can decide which fields you want to be editable when the "
"record:"
msgstr ""
"Oluşturulduktan sonra, kayıt sırasında hangi alanların düzenlenebilir "
"olmasını istediğinize karar verebilirsiniz:"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>rejected</b>."
msgstr "İşlem <b>reddedildi</b>."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>validated</b>!"
msgstr "İşlem <b>doğrulandı</b>!"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to forward a tier validation to other reviewer, and backward"
msgstr ""
"Bir aşama doğrulamasını diğer incelemeciye ve geriye doğru iletme seçeneği"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to use python formula to get reviewers and find documents"
msgstr ""
"Gözden geçirenleri almak ve belgeleri bulmak için python formülünü kullanma "
"seçeneği"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
#, python-format
msgid "Pending"
msgstr "Bekleyen"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Reevaluate Reviews"
msgstr "İncelemeleri Yeniden Değerlendir"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
msgid "Referenced Model"
msgstr "Referans Model"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Reject"
msgstr "Reddet"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
msgid "Rejected"
msgstr "Reddedildi"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message
msgid "Rejected Message"
msgstr "Reddedilen Mesaj"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id
msgid "Related Document ID"
msgstr "İlgili Belge ID"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model
msgid "Related Document Model"
msgstr "İlgili Belge Modeli"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Request Validation"
msgstr "Doğrulama İste"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by
msgid "Requested By"
msgstr "İsteyen"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Requested by"
msgstr "İsteyen"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id
msgid "Res"
msgstr "Temsilci"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model
msgid "Res Model"
msgstr "Res Model"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Restart Validation"
msgstr "Yeniden Doğrulama İste"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids
msgid "Review"
msgstr "İncele"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "İnceleyen"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id
msgid "Reviewer field"
msgstr "İnceleme alanı"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "İnceleme grubu"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids
msgid "Reviewers"
msgstr "İnceleyenler"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids
#, python-format
msgid "Reviews"
msgstr "İncelemeler"
#. module: base_tier_validation
#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
#: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
msgid "Send Tier Review Reminder"
msgstr "Katman İnceleme Hatırlatıcısı Gönder"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid "Send reminder message on pending reviews"
msgstr "Bekleyen incelemelerle ilgili hatırlatma mesajı gönder"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence
#, python-format
msgid "Sequence"
msgstr "Sıra"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual
msgid "Specific user"
msgstr "Belirli kullanıcı"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status
#, python-format
msgid "Status"
msgstr "Durumu"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "The review has been reset by %s."
msgstr "İnceleme %s tarafından sıfırlandı."
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "There are no res.users in the selected field"
msgstr "Seçili alanda res.kullanıcı yok"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "This %s needs to be validated"
msgstr "Bu %s 'nin doğrulanması gerekiyor"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"This action needs to be validated for at least one record. \n"
"Please request a validation."
msgstr ""
"Bu eylemin en az bir kayıt için doğrulanması gerekir.\n"
"Lütfen doğrulama isteğinde bulunun."
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence
msgid "Tier"
msgstr "Seviye"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action
#: model:ir.model,name:base_tier_validation.model_tier_definition
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Tier Definition"
msgstr "Seviye Tanımı"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula
msgid "Tier Formula"
msgstr "Katman Formülü"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_forward
msgid "Tier Forward & Backward"
msgstr "Katman İleri & Geri"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_review
msgid "Tier Review"
msgstr "Seviye İncelemesi"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Tier Validation"
msgstr "Katman Doğrulama"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "Seviye Doğrulaması (özet)"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted
msgid "Tier Validation Accepted Notification"
msgstr "Seviye Doğrulama Kabul Bildirimi"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form
msgid "Tier Validation Exception"
msgstr "Katman Doğrulama İstisnası"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation_exception
msgid "Tier Validation Exceptions"
msgstr "Katman Doğrulama İstisnaları"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected
msgid "Tier Validation Rejected Notification"
msgstr "Seviye Doğrulaması Reddedildi Bildirimi"
#. module: base_tier_validation
#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
msgid "Tier Validation Reminder"
msgstr "Katman Doğrulama Hatırlatıcısı"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
msgid "Tier Validation Requested"
msgstr "Seviye Doğrulaması İstendi"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted
msgid "Tier Validation Restarted"
msgstr "Seviye Doğrulaması Yeniden Başlatıldı"
#. module: base_tier_validation
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation
msgid "Tier Validations"
msgstr "Seviye Doğrulamaları"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message
msgid "To Validate Message"
msgstr "Mesajı Doğrulamak İçin"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by
msgid "Todo By"
msgstr "Yapılacak"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Todo by"
msgstr "Yapılacak"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_users
msgid "User"
msgstr "Kullanıcı"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids
msgid "Valid Model Field"
msgstr "Geçerli Model Alanı"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids
msgid "Valid Reviewer Field"
msgstr "Geçerli İnceleme Alanı"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Validate"
msgstr "Doğrula"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject
msgid "Validate Reject"
msgstr "Reddetmeyi Doğrula"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
msgid "Validated"
msgstr "Doğrulandı"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message
msgid "Validated Message"
msgstr "Doğrulanmış Mesaj"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type
msgid "Validated by"
msgstr "Doğrulayan"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date
#, python-format
msgid "Validation Date"
msgstr "Doğrulama Tarihi"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date
msgid "Validation Formated Date"
msgstr "Doğrulama Format Tarihi"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
msgid "Validation Status"
msgstr "Doğrulama Durumu"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
msgid "Validations"
msgstr "Doğrulamalar"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
msgid "Without validation"
msgstr "Doğrulama olmadan"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation
msgid "Write after Validation"
msgstr "Doğrulamadan sonra Yaz"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write after validation"
msgstr "Doğrulamadan sonra yaz"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation
msgid "Write under Validation"
msgstr "Doğrulama esnasında Yaz"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write under validation"
msgstr "Doğrulama esnasında yaz"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
"Doğrulamadan sonra bu alanları yazmanıza izin verilmez.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Yalnızca bu alanlar değiştirilebilir:\n"
"- %(allowed_fields)s"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
"Doğrulama esnasındai bu alanları yazmanıza izin verilmiyor.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Yalnızca bu alanlar değiştirilebilir:\n"
"- %(allowed_fields)s"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "e.g. Tier Validation for..."
msgstr "ör. Şunun için Seviye Doğrulaması..."
#~ msgid ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " This Record needs to be\n"
#~ " validated."
#~ msgstr ""
#~ "<i class=\"fa fa-info-circle\"/>\n"
#~ " Bu kaydın olması gerekiyor\n"
#~ " doğrulandı."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " Operation has been\n"
#~ " <b>rejected</b>\n"
#~ " ."
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-down\"/>\n"
#~ " operasyon yapıldı\n"
#~ " <b>reddedildi</b>\n"
#~ " ."
#~ msgid ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " Operation has been\n"
#~ " <b>validated</b>\n"
#~ " !"
#~ msgstr ""
#~ "<i class=\"fa fa-thumbs-up\"/>\n"
#~ " operasyon yapıldı\n"
#~ " <b>doğrulandı</b>\n"
#~ " !"
#, python-format
#~ msgid "The operation is under validation."
#~ msgstr "İşlem doğrulama aşamasındadır."

View file

@ -0,0 +1,951 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_tier_validation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-09-24 18:00+0000\n"
"Last-Translator: Dong <dong@freshoo.cn>\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"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "0 Pending"
msgstr "0 待审批"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-info-circle\"/> This Record needs to be validated."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-down\"/> Operation has been <b>rejected</b>."
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "<i class=\"fa fa-thumbs-up\"/> Operation has been <b>validated</b>!"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span class=\"oe_edit_only\">Name</span>"
msgstr "<span class=\"oe_edit_only\">名称</span>"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "<span>Bypass, if previous tier was validated by same reviewer</span>"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "A review has been requested %s days ago."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review has been requested by %s."
msgstr "%s 发起审批请求。"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted"
msgstr "审批已通过"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was accepted. (%s)"
msgstr "审批已通过。 ( %s )"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %(user)s. (%(comment)s)"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A review was rejected by %s."
msgstr "%s 驳回了审批。"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "A validation process is still open for at least one record."
msgstr "当前记录存在待批复的审批流程。"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active
msgid "Active"
msgstr "有效"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "Activity"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "All"
msgstr "所有"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Allowed groups to use this Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group
msgid "Any user in a specific group"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Apply On"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence
msgid "Approval order by the specified sequence number"
msgstr "审批按指定序号排序"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid "Approve Sequence Bypass"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence
msgid "Approve by sequence"
msgstr "按顺序审批"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved
msgid "Approved"
msgstr "已批准"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Archived"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation_exception.py:0
#, python-format
msgid ""
"At least one of these fields must be checked! Write under Validation, Write "
"after Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass
msgid ""
"Bypassed (auto validated), if previous tier was validated by same reviewer"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review
msgid "Can Review"
msgstr "可审批"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review
msgid ""
"Can review will be marked if the review is pending and the\n"
" approve sequence has been achieved"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
msgid "Cancel"
msgstr "取消"
#. module: base_tier_validation
#. odoo-javascript
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment
#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard
#, python-format
msgid "Comment"
msgstr "审批意见"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_comment_wizard
msgid "Comment Wizard"
msgstr "审批意见向导"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment
msgid "Comments"
msgstr "审批意见"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Company"
msgstr "公司"
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "Create a new Validation Exception!"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid
msgid "Created by"
msgstr "创建人"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date
msgid "Created on"
msgstr "创建时间"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id
msgid "Definition"
msgstr "定义类型"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain
msgid "Definition Domain"
msgstr "定义域"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name
#, python-format
msgid "Description"
msgstr "说明"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name
msgid "Display Name"
msgstr "显示名称"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status
msgid "Display Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain
msgid "Domain"
msgstr "域"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by
msgid "Done By"
msgstr "审批人"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Done by"
msgstr "审批人"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field
msgid "Field in related record"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids
msgid "Fields"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "Group %s"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
msgid "Group By"
msgstr "分组"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids
msgid "Groups"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment
msgid "Has Comment"
msgstr "含审批意见"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id
msgid "ID"
msgstr "ID"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create
msgid ""
"If set, all possible reviewers will be notified by email when this "
"definition is triggered."
msgstr "如果设置,则触发此定义规则时将通过电子邮件通知所有的审批人。"
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is accepted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected
msgid ""
"If set, reviewers will be notified by email when a review related to this "
"definition is rejected."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted
msgid ""
"If set, reviewers will be notified by email when a reviews related to this "
"definition are restarted."
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__is_reevaluation_required
msgid "Is Reevaluation Required"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's fully validated"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid "It's in the validation process"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review____last_update
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception____last_update
msgid "Last Modified on"
msgstr "最近修改时间"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date
msgid "Last Reminder Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid
msgid "Last Updated by"
msgstr "最近更新人"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date
msgid "Last Updated on"
msgstr "最近更新时间"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Model"
msgstr "模型"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name
msgid "Model Name"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "More Options"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name
msgid "Name"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation
msgid "Need Validation"
msgstr "需要审批"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_definition.py:0
#, python-format
msgid "New Tier Validation"
msgstr "新建多层级审批"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review
msgid "Next Review"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Next: %s"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#, python-format
msgid "No reviews to do."
msgstr "没有待审批的项目。"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted
msgid "Notify Reviewers on Accepted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create
msgid "Notify Reviewers on Creation"
msgstr "创建时通知审批人"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected
msgid "Notify Reviewers on Rejected"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted
msgid "Notify Reviewers on Restarted"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid ""
"Number of days after which a message must be posted to remind about pending "
"validation (0 = no reminder)"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action
msgid ""
"Once created, you can decide which fields you want to be editable when the "
"record:"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>rejected</b>."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "Operation has been <b>validated</b>!"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to forward a tier validation to other reviewer, and backward"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Option to use python formula to get reviewers and find documents"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending
#, python-format
msgid "Pending"
msgstr "待审批"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Reevaluate Reviews"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id
msgid "Referenced Model"
msgstr "引用模型"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Reject"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected
msgid "Rejected"
msgstr "已驳回"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message
msgid "Rejected Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id
msgid "Related Document ID"
msgstr "关联文档 ID"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model
msgid "Related Document Model"
msgstr "关联文档模型"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Request Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by
msgid "Requested By"
msgstr "发起人"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Requested by"
msgstr "发起人"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id
msgid "Res"
msgstr "资源"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model
msgid "Res Model"
msgstr "资源模型"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons
msgid "Restart Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids
msgid "Review"
msgstr "审批"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id
msgid "Reviewer"
msgstr "审批人"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id
msgid "Reviewer field"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id
msgid "Reviewer group"
msgstr "审批组"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids
msgid "Reviewers"
msgstr "审批者"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/systray.xml:0
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids
#, python-format
msgid "Reviews"
msgstr "审批"
#. module: base_tier_validation
#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server
#: model:ir.cron,cron_name:base_tier_validation.ir_cron_auto_tier_validation
msgid "Send Tier Review Reminder"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay
msgid "Send reminder message on pending reviews"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence
#, python-format
msgid "Sequence"
msgstr "序号"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual
msgid "Specific user"
msgstr "指定用户"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status
#, python-format
msgid "Status"
msgstr "状态"
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "The review has been reset by %s."
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_review.py:0
#, python-format
msgid "There are no res.users in the selected field"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid "This %s needs to be validated"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"This action needs to be validated for at least one record. \n"
"Please request a validation."
msgstr ""
"此操作需要至少对一条记录进行审批。\n"
"请发起审批申请。"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence
msgid "Tier"
msgstr "层级"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action
#: model:ir.model,name:base_tier_validation.model_tier_definition
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "Tier Definition"
msgstr "层级定义"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula
msgid "Tier Formula"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_forward
msgid "Tier Forward & Backward"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_review
msgid "Tier Review"
msgstr "多层级审批"
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget
msgid "Tier Validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation
msgid "Tier Validation (abstract)"
msgstr "多层级审批(抽象)"
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted
#, fuzzy
msgid "Tier Validation Accepted Notification"
msgstr "多层级审批(抽象)"
#. module: base_tier_validation
#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form
msgid "Tier Validation Exception"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_tier_validation_exception
msgid "Tier Validation Exceptions"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected
#, fuzzy
msgid "Tier Validation Rejected Notification"
msgstr "多层级审批(抽象)"
#. module: base_tier_validation
#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder
msgid "Tier Validation Reminder"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested
msgid "Tier Validation Requested"
msgstr ""
#. module: base_tier_validation
#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted
msgid "Tier Validation Restarted"
msgstr ""
#. module: base_tier_validation
#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation
msgid "Tier Validations"
msgstr "多层级审批"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message
msgid "To Validate Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by
msgid "Todo By"
msgstr ""
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#, python-format
msgid "Todo by"
msgstr ""
#. module: base_tier_validation
#: model:ir.model,name:base_tier_validation.model_res_users
msgid "User"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids
msgid "Valid Model Field"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids
msgid "Valid Reviewer Field"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label
msgid "Validate"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject
msgid "Validate Reject"
msgstr "驳回"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated
msgid "Validated"
msgstr "已批准"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message
msgid "Validated Message"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type
msgid "Validated by"
msgstr "审批人"
#. module: base_tier_validation
#. odoo-javascript
#: code:addons/base_tier_validation/static/src/xml/tier_review_template.xml:0
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date
#, python-format
msgid "Validation Date"
msgstr "审批日期"
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date
msgid "Validation Formated Date"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status
msgid "Validation Status"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids
msgid "Validations"
msgstr "审批"
#. module: base_tier_validation
#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no
msgid "Without validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation
msgid "Write after Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write after validation"
msgstr ""
#. module: base_tier_validation
#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation
msgid "Write under Validation"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search
msgid "Write under validation"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#. odoo-python
#: code:addons/base_tier_validation/models/tier_validation.py:0
#, python-format
msgid ""
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n"
"\n"
"Only those fields can be modified:\n"
"- %(allowed_fields)s"
msgstr ""
#. module: base_tier_validation
#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form
msgid "e.g. Tier Validation for..."
msgstr "例如:审批层级用于..."
#, python-format
#~ msgid "The operation is under validation."
#~ msgstr "该操作正在审批中。"
#, python-format
#~ msgid "Activities"
#~ msgstr "活动项目"
#~ msgid "Users"
#~ msgstr "用户"
#~ msgid "A review was rejected by {}. ({})"
#~ msgstr "{} 驳回了审批。 ( {} )"
#~ msgid "Any user in a specific group."
#~ msgstr "指定权限组"
#~ msgid "Object"
#~ msgstr "对象"
#~ msgid "Approve Sequence"
#~ msgstr "批准顺序"
#~ msgid "Formula"
#~ msgstr "公式"
#~ msgid "Python Expression"
#~ msgstr "Python表达式"

View file

@ -0,0 +1,122 @@
# Copyright 2025 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openupgradelib import openupgrade
@openupgrade.migrate()
def migrate(env, version):
env.cr.execute(
"""
SELECT imf.model
FROM ir_model_fields AS imf
WHERE imf.name = 'review_ids'
AND imf.ttype = 'one2many'
AND imf.model != 'tier.validation'
"""
)
for (model_name,) in env.cr.fetchall():
table_name = model_name.replace(".", "_")
# validated column
if not openupgrade.column_exists(env.cr, table_name, "validated"):
openupgrade.logged_query(
env.cr,
f"""
ALTER TABLE {table_name}
ADD COLUMN IF NOT EXISTS validated BOOLEAN
""",
)
# Define all those with reviews as validated and then define
# as not validated those with unapproved reviews.
openupgrade.logged_query(
env.cr,
f"""
UPDATE {table_name} SET validated = true WHERE id IN (
SELECT DISTINCT(tr.res_id)
FROM tier_review AS tr
WHERE tr.model = '{model_name}'
)
""",
)
openupgrade.logged_query(
env.cr,
f"""
UPDATE {table_name} SET validated = false WHERE id IN (
SELECT DISTINCT(tr.res_id)
FROM tier_review AS tr
WHERE tr.model = '{model_name}'
AND tr.status not in ('approved', 'forwarded')
)
""",
)
# rejected column
if not openupgrade.column_exists(env.cr, table_name, "rejected"):
openupgrade.logged_query(
env.cr,
f"""
ALTER TABLE {table_name}
ADD COLUMN IF NOT EXISTS rejected BOOLEAN
""",
)
# Define rejected if any review is rejected
openupgrade.logged_query(
env.cr,
f"""
UPDATE {table_name} SET rejected = true WHERE id IN (
SELECT DISTINCT(tr.res_id)
FROM tier_review AS tr
WHERE tr.model = '{model_name}' AND tr.status = 'rejected'
)
""",
)
# validation_status column
if not openupgrade.column_exists(env.cr, table_name, "validation_status"):
openupgrade.logged_query(
env.cr,
f"""
ALTER TABLE {table_name}
ADD COLUMN IF NOT EXISTS validation_status VARCHAR
""",
)
openupgrade.logged_query(
env.cr,
f"""
UPDATE {table_name} SET validation_status = 'no'
""",
)
openupgrade.logged_query(
env.cr,
f"""
UPDATE {table_name} SET validation_status = 'validated'
WHERE validated = true AND coalesce(rejected, false) = false
""",
)
openupgrade.logged_query(
env.cr,
f"""
UPDATE {table_name} SET validation_status = 'rejected'
WHERE validated = false AND rejected = true;
""",
)
openupgrade.logged_query(
env.cr,
f"""
UPDATE {table_name} SET validation_status = 'pending'
WHERE validation_status = 'no' AND id IN (
SELECT DISTINCT(tr.res_id)
FROM tier_review AS tr
WHERE tr.model = '{model_name}' AND tr.status = 'pending'
)
""",
)
openupgrade.logged_query(
env.cr,
f"""
UPDATE {table_name} SET validation_status = 'waiting'
WHERE validation_status = 'no' AND id IN (
SELECT DISTINCT(tr.res_id)
FROM tier_review AS tr
WHERE tr.model = '{model_name}' AND tr.status = 'waiting'
)
""",
)

View file

@ -0,0 +1,8 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import tier_definition
from . import tier_validation_exception
from . import tier_review
from . import tier_validation
from . import res_users
from . import res_config_settings

View file

@ -0,0 +1,14 @@
# Copyright 2021 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
# Activate me back when modules are migrated
module_base_tier_validation_formula = fields.Boolean(string="Tier Formula")
module_base_tier_validation_forward = fields.Boolean("Tier Forward & Backward")
# module_base_tier_validation_server_action = fields.Boolean("Tier Server Action")
# module_base_tier_validation_report = fields.Boolean("Tier Reports")

View file

@ -0,0 +1,65 @@
# Copyright 2019 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models, modules
class Users(models.Model):
_inherit = "res.users"
review_ids = fields.Many2many(string="Reviews", comodel_name="tier.review")
@api.model
def review_user_count(self):
user_reviews = {}
domain = [
("status", "=", "pending"),
("can_review", "=", True),
("id", "in", self.env.user.review_ids.ids),
]
review_groups = self.env["tier.review"].read_group(domain, ["model"], ["model"])
for review_group in review_groups:
model = review_group["model"]
reviews = self.env["tier.review"].search(review_group.get("__domain"))
if reviews:
records = (
self.env[model]
.with_user(self.env.user)
.search([("id", "in", reviews.mapped("res_id"))])
.filtered(
lambda x: x.validation_status != "rejected" and x.can_review
)
)
# Excludes any cancelled records depending on the structure of the model
if self.env[model]._state_field in self.env[model]._fields:
records = records.filtered(
lambda x: x[x._state_field] != x._cancel_state
)
if records:
record = self.env[model]
user_reviews[model] = {
"id": records[0].id,
"name": record._description,
"model": model,
"active_field": "active" in record._fields,
"icon": modules.module.get_module_icon(record._original_module),
"type": "tier_review",
"pending_count": len(records),
}
return list(user_reviews.values())
@api.model
def get_reviews(self, data):
review_obj = self.env["tier.review"].with_context(lang=self.env.user.lang)
res = review_obj.search_read([("id", "in", data.get("res_ids"))])
for r in res:
# Get the translated status value.
r["display_status"] = dict(
review_obj.fields_get("status")["status"]["selection"]
).get(r.get("status"))
# Convert to datetime timezone
if r["reviewed_date"]:
r["reviewed_date"] = fields.Datetime.context_timestamp(
self, r["reviewed_date"]
)
return res

View file

@ -0,0 +1,142 @@
# Copyright 2017 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
class TierDefinition(models.Model):
_name = "tier.definition"
_description = "Tier Definition"
@api.model
def _get_default_name(self):
return _("New Tier Validation")
@api.model
def _get_tier_validation_model_names(self):
res = []
return res
name = fields.Char(
string="Description",
required=True,
default=lambda self: self._get_default_name(),
translate=True,
)
model_id = fields.Many2one(
comodel_name="ir.model",
string="Referenced Model",
domain=lambda self: [("model", "in", self._get_tier_validation_model_names())],
)
model = fields.Char(related="model_id.model", index=True, store=True)
review_type = fields.Selection(
string="Validated by",
default="individual",
selection=[
("individual", "Specific user"),
("group", "Any user in a specific group"),
("field", "Field in related record"),
],
)
reviewer_id = fields.Many2one(comodel_name="res.users", string="Reviewer")
reviewer_group_id = fields.Many2one(
comodel_name="res.groups", string="Reviewer group"
)
reviewer_field_id = fields.Many2one(
comodel_name="ir.model.fields",
string="Reviewer field",
domain="[('id', 'in', valid_reviewer_field_ids)]",
)
valid_reviewer_field_ids = fields.One2many(
comodel_name="ir.model.fields",
compute="_compute_domain_reviewer_field",
)
definition_type = fields.Selection(
string="Definition", selection=[("domain", "Domain")], default="domain"
)
definition_domain = fields.Char()
active = fields.Boolean(default=True)
sequence = fields.Integer(default=30)
company_id = fields.Many2one(
comodel_name="res.company",
string="Company",
default=lambda self: self.env.company,
)
notify_on_create = fields.Boolean(
string="Notify Reviewers on Creation",
help="If set, all possible reviewers will be notified by email when "
"this definition is triggered.",
)
notify_on_accepted = fields.Boolean(
string="Notify Reviewers on Accepted",
help="If set, reviewers will be notified by email when a review related "
"to this definition is accepted.",
)
notify_on_rejected = fields.Boolean(
string="Notify Reviewers on Rejected",
help="If set, reviewers will be notified by email when a review related "
"to this definition is rejected.",
)
notify_on_restarted = fields.Boolean(
string="Notify Reviewers on Restarted",
help="If set, reviewers will be notified by email when a reviews related "
"to this definition are restarted.",
)
has_comment = fields.Boolean(string="Comment", default=False)
notify_reminder_delay = fields.Integer(
string="Send reminder message on pending reviews",
help="Number of days after which a message must be posted to remind about "
"pending validation (0 = no reminder)",
)
approve_sequence = fields.Boolean(
string="Approve by sequence",
default=False,
help="Approval order by the specified sequence number",
)
approve_sequence_bypass = fields.Boolean(
help="Bypassed (auto validated), if previous tier was validated by same reviewer",
)
@api.onchange("review_type")
def onchange_review_type(self):
self.reviewer_id = None
self.reviewer_group_id = None
@api.depends("review_type", "model_id")
def _compute_domain_reviewer_field(self):
for rec in self:
rec.valid_reviewer_field_ids = (
self.env["ir.model.fields"]
.sudo()
.search([("model", "=", rec.model), ("relation", "=", "res.users")])
)
def _get_review_needing_reminder(self):
"""Return all the reviews that have the reminder setup."""
self.ensure_one()
if not self.notify_reminder_delay:
return self.env["tier.review"]
review_date = fields.Datetime.subtract(
fields.Datetime.now(), days=self.notify_reminder_delay
)
return self.env["tier.review"].search(
[
("definition_id", "=", self.id),
("status", "=", "pending"),
"|",
"&",
("create_date", "<", review_date),
("last_reminder_date", "=", False),
("last_reminder_date", "<", review_date),
],
limit=1,
)
def _cron_send_review_reminder(self):
definition_with_reminder = self.env["tier.definition"].search(
[("notify_reminder_delay", ">", 0)]
)
for record in definition_with_reminder:
review_to_remind = record._get_review_needing_reminder()
if review_to_remind:
review_to_remind._send_review_reminder()

View file

@ -0,0 +1,184 @@
# Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import logging
import pytz
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__)
class TierReview(models.Model):
_name = "tier.review"
_description = "Tier Review"
name = fields.Char(related="definition_id.name", readonly=True)
status = fields.Selection(
selection=[
("pending", "Pending"),
("rejected", "Rejected"),
("approved", "Approved"),
],
default="pending",
)
model = fields.Char(string="Related Document Model", index=True)
res_id = fields.Many2oneReference(
string="Related Document ID",
index=True,
model_field="model",
)
definition_id = fields.Many2one(comodel_name="tier.definition")
company_id = fields.Many2one(
related="definition_id.company_id",
store=True,
)
review_type = fields.Selection(related="definition_id.review_type", readonly=True)
reviewer_id = fields.Many2one(related="definition_id.reviewer_id", readonly=True)
reviewer_group_id = fields.Many2one(
related="definition_id.reviewer_group_id", readonly=True
)
reviewer_field_id = fields.Many2one(
related="definition_id.reviewer_field_id", readonly=True
)
reviewer_ids = fields.Many2many(
string="Reviewers",
comodel_name="res.users",
compute="_compute_reviewer_ids",
store=True,
)
display_status = fields.Char(compute="_compute_display_status")
sequence = fields.Integer(string="Tier")
todo_by = fields.Char(compute="_compute_todo_by", store=True)
done_by = fields.Many2one(comodel_name="res.users")
requested_by = fields.Many2one(comodel_name="res.users")
reviewed_date = fields.Datetime(string="Validation Date")
reviewed_formated_date = fields.Char(
string="Validation Formated Date", compute="_compute_reviewed_formated_date"
)
has_comment = fields.Boolean(related="definition_id.has_comment", readonly=True)
comment = fields.Char(string="Comments")
can_review = fields.Boolean(
compute="_compute_can_review",
store=True,
help="""Can review will be marked if the review is pending and the
approve sequence has been achieved""",
)
approve_sequence = fields.Boolean(
related="definition_id.approve_sequence", readonly=True
)
approve_sequence_bypass = fields.Boolean(
related="definition_id.approve_sequence_bypass", readonly=True
)
last_reminder_date = fields.Datetime(readonly=True)
@api.depends("status")
def _compute_display_status(self):
"""
Compute the display status based on the current status value to get the
translated status value.
"""
selection = self.fields_get(["status"])["status"]["selection"]
selection_dict = dict(selection)
for record in self:
record.display_status = selection_dict[record.status]
@api.depends_context("tz")
def _compute_reviewed_formated_date(self):
timezone = self._context.get("tz") or self.env.user.partner_id.tz or "UTC"
for review in self:
if not review.reviewed_date:
review.reviewed_formated_date = False
continue
reviewed_date_utc = pytz.timezone("UTC").localize(review.reviewed_date)
reviewed_date_tz = reviewed_date_utc.astimezone(pytz.timezone(timezone))
review.reviewed_formated_date = reviewed_date_tz.replace(tzinfo=None)
@api.depends("definition_id.approve_sequence")
def _compute_can_review(self):
for record in self:
record.can_review = record._can_review_value()
def _can_review_value(self):
if self.status != "pending":
return False
if not self.approve_sequence:
return True
resource = self.env[self.model].browse(self.res_id)
reviews = resource.review_ids.filtered(lambda r: r.status == "pending")
if not reviews:
return True
sequence = min(reviews.mapped("sequence"))
return self.sequence == sequence
@api.model
def _get_reviewer_fields(self):
return ["reviewer_id", "reviewer_group_id", "reviewer_group_id.users"]
@api.depends(lambda self: self._get_reviewer_fields())
def _compute_reviewer_ids(self):
for rec in self:
rec.reviewer_ids = rec._get_reviewers()
@api.depends("reviewer_ids")
def _compute_todo_by(self):
"""Show by group or by abbrev list of names"""
num_show = 3 # Max number of users to display
for rec in self:
todo_by = False
if rec.reviewer_group_id:
todo_by = _("Group %s") % rec.reviewer_group_id.name
else:
todo_by = ", ".join(rec.reviewer_ids[:num_show].mapped("display_name"))
num_users = len(rec.reviewer_ids)
if num_users > num_show:
todo_by = "{} (and {} more)".format(todo_by, num_users - num_show)
rec.todo_by = todo_by
def _get_reviewers(self):
if self.reviewer_id or self.reviewer_group_id.users:
return self.reviewer_id + self.reviewer_group_id.users
reviewer_field = self.env["res.users"]
if self.reviewer_field_id:
resource = self.env[self.model].browse(self.res_id)
reviewer_field = getattr(resource, self.reviewer_field_id.name, False)
if not reviewer_field or not reviewer_field._name == "res.users":
raise ValidationError(_("There are no res.users in the selected field"))
return reviewer_field
def _get_reminder_notification_subtype(self):
return "base_tier_validation.mt_tier_validation_reminder"
def _get_reminder_activity_type(self):
return "base_tier_validation.mail_act_tier_validation_reminder"
def _notify_review_reminder_body(self):
delay = (fields.Datetime.now() - self.create_date).days
return _("A review has been requested %s days ago.") % (delay)
def _send_review_reminder(self):
record = self.env[self.model].browse(self.res_id)
# Only schedule activity if reviewer is a single user and model has activities
if len(self.reviewer_ids) == 1 and hasattr(record, "activity_ids"):
self._schedule_review_reminder_activity(record)
elif hasattr(record, "message_post"):
self._notify_review_reminder(record)
else:
msg = "Could not send reminder for record %s" % record
_logger.exception(msg)
self.last_reminder_date = fields.Datetime.now()
def _notify_review_reminder(self, record):
record.message_post(
subtype_xmlid=self._get_reminder_notification_subtype(),
body=self._notify_review_reminder_body(),
)
def _schedule_review_reminder_activity(self, record):
record.activity_schedule(
act_type_xmlid=self._get_reminder_activity_type(),
note=self._notify_review_reminder_body(),
act_values={"user_id": self.reviewer_ids.id},
)

View file

@ -0,0 +1,878 @@
# Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com)
# Copyright 2024 Moduon Team (https://www.moduon.team)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import json
from ast import literal_eval
from lxml import etree
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
from odoo.osv.expression import OR
from odoo.tools.misc import frozendict
BASE_EXCEPTION_FIELDS = [
"message_main_attachment_id",
"message_follower_ids",
"access_token",
"need_validation",
]
class TierValidation(models.AbstractModel):
_name = "tier.validation"
_description = "Tier Validation (abstract)"
_tier_validation_buttons_xpath = "/form/header/button[last()]"
_tier_validation_manual_config = True
_tier_validation_company_field = "company_id"
_state_field = "state"
_state_from = ["draft"]
_state_to = ["confirmed"]
_cancel_state = "cancel"
# TODO: step by step validation?
review_ids = fields.One2many(
comodel_name="tier.review",
inverse_name="res_id",
string="Validations",
domain=lambda self: [("model", "=", self._name)],
auto_join=True,
)
# TODO: Delete in v19 in favor of validation_status field
validated = fields.Boolean(
compute="_compute_validated_rejected", search="_search_validated"
)
to_validate_message = fields.Html(compute="_compute_to_validate_message")
validated_message = fields.Html(compute="_compute_validated_message")
need_validation = fields.Boolean(compute="_compute_need_validation")
# TODO: Delete in v19 in favor of validation_status field
rejected = fields.Boolean(
compute="_compute_validated_rejected", search="_search_rejected"
)
rejected_message = fields.Html(compute="_compute_rejected_message")
validation_status = fields.Selection(
selection=[
("no", "Without validation"),
("pending", "Pending"),
("rejected", "Rejected"),
("validated", "Validated"),
],
default="no",
compute="_compute_validation_status",
store=True,
)
reviewer_ids = fields.Many2many(
string="Reviewers",
comodel_name="res.users",
compute="_compute_reviewer_ids",
search="_search_reviewer_ids",
)
can_review = fields.Boolean(
compute="_compute_can_review", search="_search_can_review"
)
has_comment = fields.Boolean(compute="_compute_has_comment")
next_review = fields.Char(compute="_compute_next_review")
is_reevaluation_required = fields.Boolean(
compute="_compute_is_reevaluation_required"
)
def _compute_has_comment(self):
for rec in self:
has_comment = rec.review_ids.filtered(
lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids)
).mapped("has_comment")
rec.has_comment = True in has_comment
def _get_sequences_to_approve(self, user):
all_reviews = self.review_ids.filtered(lambda r: r.status == "pending")
my_reviews = all_reviews.filtered(lambda r: user in r.reviewer_ids)
# Include all my_reviews with approve_sequence = False
sequences = my_reviews.filtered(lambda r: not r.approve_sequence).mapped(
"sequence"
)
# Include only my_reviews with approve_sequence = True
approve_sequences = my_reviews.filtered("approve_sequence").mapped("sequence")
if approve_sequences:
my_sequence = min(approve_sequences)
min_sequence = min(all_reviews.mapped("sequence"))
if my_sequence <= min_sequence:
sequences.append(my_sequence)
return sequences
@api.depends_context("uid")
@api.depends("review_ids.status")
def _compute_can_review(self):
for rec in self:
rec.can_review = rec._get_sequences_to_approve(self.env.user)
@api.model
def _search_can_review(self, operator, value):
domain = [
("review_ids.reviewer_ids", "=", self.env.user.id),
("review_ids.status", "=", "pending"),
("review_ids.can_review", "=", True),
("validation_status", "!=", "rejected"),
]
if "active" in self._fields:
domain.append(("active", "in", [True, False]))
res_ids = self.search(domain).filtered("can_review").ids
return [("id", "in", res_ids)]
@api.depends("review_ids")
def _compute_reviewer_ids(self):
for rec in self:
rec.reviewer_ids = rec.review_ids.filtered(
lambda r: r.status == "pending"
).mapped("reviewer_ids")
# TODO: delete in 19.0 migration in favor of validation_status field
@api.model
def _search_validated(self, operator, value):
assert operator in ("=", "!="), "Invalid domain operator"
assert value in (True, False), "Invalid domain value"
operator_equal = (operator == "=" and value) or (operator == "!=" and not value)
return [("validation_status", operator_equal and "=" or "!=", "validated")]
# TODO: delete in 19.0 migration in favor of validation_status field
@api.model
def _search_rejected(self, operator, value):
assert operator in ("=", "!="), "Invalid domain operator"
assert value in (True, False), "Invalid domain value"
operator_equal = (operator == "=" and value) or (operator == "!=" and not value)
return [("validation_status", operator_equal and "=" or "!=", "rejected")]
@api.model
def _search_reviewer_ids(self, operator, value):
model_operator = "in"
if operator == "=" and value in ("[]", False):
# Search for records that have not yet been through a validation
# process.
operator = "!="
model_operator = "not in"
reviews = self.env["tier.review"].search(
[
("model", "=", self._name),
("reviewer_ids", operator, value),
("can_review", "=", True),
("status", "=", "pending"),
]
)
return [("id", model_operator, list(set(reviews.mapped("res_id"))))]
def _get_to_validate_message_name(self):
return self._description
def _get_to_validate_message(self):
return (
"""<i class="fa fa-info-circle" /> %s"""
% _("This %s needs to be validated")
% self._get_to_validate_message_name()
)
def _get_validated_message(self):
msg = """<i class="fa fa-thumbs-up" /> %s""" % _(
"""Operation has been <b>validated</b>!"""
)
return self.validation_status == "validated" and msg or ""
def _get_rejected_message(self):
msg = """<i class="fa fa-thumbs-down" /> %s""" % _(
"""Operation has been <b>rejected</b>."""
)
return self.validation_status == "rejected" and msg or ""
# TODO: delete in 19.0 migration in favor of validation_status field
@api.depends("validation_status")
def _compute_validated_rejected(self):
for rec in self:
for field in ("validated", "rejected"):
rec[field] = rec.validation_status == field
@api.depends("validation_status")
def _compute_to_validate_message(self):
for rec in self:
rec.to_validate_message = rec._get_to_validate_message()
def _validated_states(self):
"""Override for different validation policy."""
return ["approved"]
@api.depends("validation_status")
def _compute_validated_message(self):
for rec in self:
rec.validated_message = rec._get_validated_message()
def _rejected_states(self):
"""Override for different rejected policy."""
return ["rejected"]
@api.depends("validation_status")
def _compute_rejected_message(self):
for rec in self:
rec.rejected_message = rec._get_rejected_message()
@api.depends("review_ids", "review_ids.status")
def _compute_validation_status(self):
validated_states = self._validated_states()
rejected_states = self._rejected_states()
for item in self:
reviews = item.review_ids
any_rejected = any(reviews.filtered(lambda x: x.status in rejected_states))
any_pending = any(reviews.filtered(lambda x: x.status == "pending"))
if reviews and all(x.status in validated_states for x in reviews):
item.validation_status = "validated"
elif any_rejected:
item.validation_status = "rejected"
elif any_pending:
item.validation_status = "pending"
else:
item.validation_status = "no"
def _compute_next_review(self):
for rec in self:
review = rec.review_ids.sorted("sequence").filtered(
lambda l: l.status == "pending"
)[:1]
rec.next_review = review and _("Next: %s") % review.name or ""
def _compute_is_reevaluation_required(self):
for rec in self:
if isinstance(rec.id, models.NewId):
rec.is_reevaluation_required = False
continue
tiers = (
self.env["tier.definition"]
.with_context(active_test=True)
.search(
[
("model", "=", self._name),
("company_id", "in", [False] + rec._get_company().ids),
]
)
)
rec.is_reevaluation_required = False
valid_tiers = tiers.filtered(lambda x: rec.evaluate_tier(x))
if valid_tiers and rec.review_ids.definition_id:
if len(valid_tiers) != len(rec.review_ids.definition_id):
rec.is_reevaluation_required = True
def _compute_need_validation(self):
for rec in self:
if isinstance(rec.id, models.NewId):
rec.need_validation = False
continue
tiers = (
self.env["tier.definition"]
.with_context(active_test=True)
.search(
[
("model", "=", self._name),
("company_id", "in", [False] + rec._get_company().ids),
]
)
)
valid_tiers = tiers.filtered(lambda x: rec.evaluate_tier(x))
requested_tiers = rec.review_ids.filtered(
lambda x: x.status != "pending"
).mapped("definition_id")
new_tiers = valid_tiers - requested_tiers
rec.need_validation = new_tiers and rec._check_state_from_condition()
def evaluate_tier(self, tier):
if tier.definition_domain:
domain = literal_eval(tier.definition_domain)
return self.filtered_domain(domain)
else:
return self
@api.model
def _get_validation_exceptions(self, extra_domain=None, add_base_exceptions=True):
"""Return Tier Validation Exception field names that matchs custom domain."""
exception_fields = (
self.env["tier.validation.exception"]
.sudo()
.search(
[
("model_name", "=", self._name),
("company_id", "in", [False] + self._get_company().ids),
"|",
("group_ids", "in", self.env.user.groups_id.ids),
("group_ids", "=", False),
*(extra_domain or []),
]
)
.mapped("field_ids.name")
)
if add_base_exceptions:
exception_fields += BASE_EXCEPTION_FIELDS
return list(set(exception_fields))
@api.model
def _get_all_validation_exceptions(self):
"""Extend for more field exceptions to be written when on the entire
validation process."""
return self._get_validation_exceptions()
@api.model
def _get_under_validation_exceptions(self):
"""Extend for more field exceptions to be written under validation."""
return self._get_validation_exceptions(
extra_domain=[("allowed_to_write_under_validation", "=", True)]
)
@api.model
def _get_after_validation_exceptions(self):
"""Extend for more field exceptions to be written after validation."""
return self._get_validation_exceptions(
extra_domain=[("allowed_to_write_after_validation", "=", True)]
)
def _check_allow_write_under_validation(self, vals):
"""Allow to add exceptions for fields that are allowed to be written
even when the record is under validation."""
exceptions = self._get_under_validation_exceptions()
for val in vals:
if val not in exceptions:
return False
return True
def _check_allow_write_after_validation(self, vals):
"""Allow to add exceptions for fields that are allowed to be written
even when the record is after validation."""
exceptions = self._get_after_validation_exceptions()
for val in vals:
if val not in exceptions:
return False
return True
def _get_fields_to_write_validation(self, vals, records_exception_function):
"""Not allowed fields to write when validation depending on the given function."""
exceptions = records_exception_function()
not_allowed_fields = []
for val in vals:
if val not in exceptions:
not_allowed_fields.append(val)
if not not_allowed_fields:
return []
not_allowed_field_names, allowed_field_names = [], []
for fld_name, fld_data in self.fields_get(
not_allowed_fields + exceptions
).items():
if fld_name in not_allowed_fields:
not_allowed_field_names.append(fld_data["string"])
else:
allowed_field_names.append(fld_data["string"])
return allowed_field_names, not_allowed_field_names
def write(self, vals):
for rec in self:
if rec._check_state_conditions(vals):
if rec.need_validation:
# try to validate operation
reviews = rec.request_validation()
rec._validate_tier(reviews)
if rec.validation_status != "validated":
raise ValidationError(
_(
"This action needs to be validated for at least "
"one record. \nPlease request a validation."
)
)
if rec.review_ids and rec.validation_status != "validated":
raise ValidationError(
_(
"A validation process is still open for at least "
"one record."
)
)
# Write under validation
if (
rec.review_ids
and getattr(rec, self._state_field) in self._state_from
and not vals.get(self._state_field)
in (self._state_to + [self._cancel_state])
and not rec._check_allow_write_under_validation(vals)
and not rec._context.get("skip_validation_check")
):
(
allowed_fields,
not_allowed_fields,
) = rec._get_fields_to_write_validation(
vals, rec._get_under_validation_exceptions
)
raise ValidationError(
_(
"You are not allowed to write those fields under validation.\n"
"- %(not_allowed_fields)s\n\n"
"Only those fields can be modified:\n- %(allowed_fields)s"
)
% {
"not_allowed_fields": "\n- ".join(not_allowed_fields),
"allowed_fields": "\n- ".join(allowed_fields),
}
)
# Write after validation. Check only if Tier Validation Exception is created
if (
rec._get_validation_exceptions(add_base_exceptions=False)
and rec.validation_status == "validated"
and getattr(rec, self._state_field)
in (self._state_to + [self._cancel_state])
and not rec._check_allow_write_after_validation(vals)
and not rec._context.get("skip_validation_check")
):
(
allowed_fields,
not_allowed_fields,
) = rec._get_fields_to_write_validation(
vals, rec._get_after_validation_exceptions
)
raise ValidationError(
_(
"You are not allowed to write those fields after validation.\n"
"- %(not_allowed_fields)s\n\n"
"Only those fields can be modified:\n- %(allowed_fields)s"
)
% {
"not_allowed_fields": "\n- ".join(not_allowed_fields),
"allowed_fields": "\n- ".join(allowed_fields),
}
)
if rec._allow_to_remove_reviews(vals):
rec.mapped("review_ids").unlink()
return super(TierValidation, self).write(vals)
def _allow_to_remove_reviews(self, values):
"""Method for deciding whether the elimination of revisions is necessary."""
self.ensure_one()
state_to = values.get(self._state_field)
if not state_to:
return False
state_from = self[self._state_field]
# If you change to _cancel_state
if state_to in (self._cancel_state):
return True
# If it is changed to _state_from and it was not in _state_from
if state_to in self._state_from and state_from not in self._state_from:
return True
return False
def _check_state_from_condition(self):
return self.env.context.get("skip_check_state_condition") or (
self._state_field in self._fields
and getattr(self, self._state_field) in self._state_from
)
def _check_state_conditions(self, vals):
self.ensure_one()
return (
self._check_state_from_condition()
and vals.get(self._state_field) in self._state_to
)
def _validate_tier(self, tiers=False):
self.ensure_one()
tier_reviews = tiers or self.review_ids
user_reviews = tier_reviews.filtered(
lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids)
)
user_reviews.write(
{
"status": "approved",
"done_by": self.env.user.id,
"reviewed_date": fields.Datetime.now(),
}
)
reviews_to_notify = user_reviews.filtered(
lambda r: r.definition_id.notify_on_accepted
)
# We need to notify all pending users if there is approve sequence
if tier_reviews and any(review.approve_sequence for review in tier_reviews):
reviews_to_notify = self.review_ids.filtered(
lambda r: r.status == "pending" and r.definition_id.notify_on_accepted
)
# If there are approve sequence, only the following should be
# considered to notify
if reviews_to_notify and any(
review.approve_sequence for review in reviews_to_notify
):
reviews_to_notify = reviews_to_notify.filtered(
lambda x: x.approve_sequence
)[0]
if reviews_to_notify:
subscribe = "message_subscribe"
if hasattr(self, subscribe):
getattr(self, subscribe)(
partner_ids=reviews_to_notify.mapped("reviewer_ids")
.mapped("partner_id")
.ids,
subtype_ids=self.env.ref(
self._get_accepted_notification_subtype()
).ids,
)
for review in reviews_to_notify:
rec = self.env[review.model].browse(review.res_id)
rec._notify_accepted_reviews()
def _get_requested_notification_subtype(self):
return "base_tier_validation.mt_tier_validation_requested"
def _get_accepted_notification_subtype(self):
return "base_tier_validation.mt_tier_validation_accepted"
def _get_rejected_notification_subtype(self):
return "base_tier_validation.mt_tier_validation_rejected"
def _get_restarted_notification_subtype(self):
return "base_tier_validation.mt_tier_validation_restarted"
def _notify_accepted_reviews(self):
post = "message_post"
if hasattr(self, post):
# Notify state change
getattr(self.sudo(), post)(
subtype_xmlid=self._get_accepted_notification_subtype(),
body=self._notify_accepted_reviews_body(),
)
def _notify_accepted_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 accepted. (%s)") % comment
return _("A review was accepted")
def _add_comment(self, validate_reject, reviews):
wizard = self.env.ref("base_tier_validation.view_comment_wizard")
return {
"name": _("Comment"),
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "comment.wizard",
"views": [(wizard.id, "form")],
"view_id": wizard.id,
"target": "new",
"context": {
"default_res_id": self.id,
"default_res_model": self._name,
"default_review_ids": reviews.ids,
"default_validate_reject": validate_reject,
},
}
def validate_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 or l.approve_sequence_bypass
)
if self.has_comment:
user_reviews = reviews.filtered(
lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids)
)
return self._add_comment("validate", user_reviews)
self._validate_tier(reviews)
self._update_counter({"review_deleted": True})
def reject_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)
if self.has_comment:
return self._add_comment("reject", reviews)
self._rejected_tier(reviews)
self._update_counter({"review_deleted": True})
def _notify_rejected_review_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 rejected by %(user)s. (%(comment)s)") % {
"user": self.env.user.name,
"comment": comment,
}
return _("A review was rejected by %s.") % (self.env.user.name)
def _notify_rejected_review(self):
post = "message_post"
if hasattr(self, post):
# Notify state change
getattr(self.sudo(), post)(
subtype_xmlid=self._get_rejected_notification_subtype(),
body=self._notify_rejected_review_body(),
)
def _rejected_tier(self, tiers=False):
self.ensure_one()
tier_reviews = tiers or self.review_ids
user_reviews = tier_reviews.filtered(
lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids)
)
user_reviews.write(
{
"status": "rejected",
"done_by": self.env.user.id,
"reviewed_date": fields.Datetime.now(),
}
)
reviews_to_notify = user_reviews.filtered(
lambda r: r.definition_id.notify_on_rejected
)
# We need to notify all pending users if there is approve sequence
if tier_reviews and any(review.approve_sequence for review in tier_reviews):
reviews_to_notify = self.review_ids.filtered(
lambda r: r.status == "pending" and r.definition_id.notify_on_rejected
)
# If there are approve sequence, only the following should be
# considered to notify
if reviews_to_notify and any(
review.approve_sequence for review in reviews_to_notify
):
reviews_to_notify = reviews_to_notify.filtered(
lambda x: x.approve_sequence
)[0]
if reviews_to_notify:
subscribe = "message_subscribe"
if hasattr(self, subscribe):
getattr(self, subscribe)(
partner_ids=reviews_to_notify.mapped("reviewer_ids")
.mapped("partner_id")
.ids,
subtype_ids=self.env.ref(
self._get_rejected_notification_subtype()
).ids,
)
for review in reviews_to_notify:
rec = self.env[review.model].browse(review.res_id)
rec._notify_rejected_review()
def _notify_requested_review_body(self):
return _("A review has been requested by %s.") % (self.env.user.name)
def _notify_review_requested(self, tier_reviews):
subscribe = "message_subscribe"
post = "message_post"
if hasattr(self, post) and hasattr(self, subscribe):
for rec in self.sudo():
users_to_notify = tier_reviews.filtered(
lambda r: r.definition_id.notify_on_create and r.res_id == rec.id
).mapped("reviewer_ids")
# Subscribe reviewers and notify
if len(users_to_notify) > 0:
getattr(rec, subscribe)(
partner_ids=users_to_notify.mapped("partner_id").ids,
subtype_ids=self.env.ref(
self._get_requested_notification_subtype()
).ids,
)
getattr(rec, post)(
subtype_xmlid=self._get_requested_notification_subtype(),
body=rec._notify_requested_review_body(),
)
def _prepare_tier_review_vals(self, definition, sequence):
return {
"model": self._name,
"res_id": self.id,
"definition_id": definition.id,
"requested_by": self.env.uid,
"sequence": sequence,
}
@api.model
def _get_company(self):
company_id = self.env.company
if (
self
and self._tier_validation_company_field in self.env[self._name]
and self[self._tier_validation_company_field]
):
company_id = self[self._tier_validation_company_field]
return company_id
def request_validation(self):
td_obj = self.env["tier.definition"]
tr_obj = self.env["tier.review"]
vals_list = []
for rec in self:
if rec._check_state_from_condition() and rec.need_validation:
tier_definitions = td_obj.search(
[
("model", "=", self._name),
("company_id", "in", [False] + rec._get_company().ids),
("id", "not in", rec.review_ids.mapped("definition_id").ids),
],
order="sequence desc",
)
sequence = 0
for td in tier_definitions:
if rec.evaluate_tier(td):
sequence += 1
vals_list.append(rec._prepare_tier_review_vals(td, sequence))
created_trs = tr_obj.create(vals_list)
if any(self.mapped("can_review")):
self._update_counter({"review_created": True})
self._notify_review_requested(created_trs)
return created_trs
def _notify_restarted_review_body(self):
return _("The review has been reset by %s.") % (self.env.user.name)
def _notify_restarted_review(self):
post = "message_post"
if hasattr(self, post):
getattr(self.sudo(), post)(
subtype_xmlid=self._get_restarted_notification_subtype(),
body=self._notify_restarted_review_body(),
)
def restart_validation(self):
for rec in self:
partners_to_notify_ids = False
if getattr(rec, self._state_field) in self._state_from:
to_update_counter = (
rec.mapped("review_ids").filtered(lambda a: a.status == "pending")
and True
or False
)
reviews_to_notify = rec.review_ids.filtered(
lambda r: r.definition_id.notify_on_restarted
)
if reviews_to_notify:
partners_to_notify_ids = (
reviews_to_notify.mapped("reviewer_ids")
.mapped("partner_id")
.ids
)
rec.mapped("review_ids").unlink()
if to_update_counter:
self._update_counter({"review_deleted": True})
if partners_to_notify_ids:
subscribe = "message_subscribe"
reviews_to_notify = rec.review_ids.filtered(
lambda r: r.definition_id.notify_on_restarted
)
if hasattr(self, subscribe):
getattr(self, subscribe)(
partner_ids=partners_to_notify_ids,
subtype_ids=self.env.ref(
self._get_restarted_notification_subtype()
).ids,
)
rec._notify_restarted_review()
def reevaluate_reviews(self):
reviews = self.env["tier.review"]
for rec in self:
rec._compute_need_validation()
reviews += rec.request_validation()
return reviews
@api.model
def _update_counter(self, review_counter):
self.review_ids._compute_can_review()
notifications = []
channel = "base.tier.validation/updated"
notifications.append([self.env.user.partner_id, channel, review_counter])
self.env["bus.bus"]._sendmany(notifications)
def unlink(self):
self.mapped("review_ids").unlink()
return super().unlink()
def _add_tier_validation_buttons(self, node, params):
str_element = self.env["ir.qweb"]._render(
"base_tier_validation.tier_validation_buttons", params
)
new_node = etree.fromstring(str_element)
return new_node
def _add_tier_validation_label(self, node, params):
str_element = self.env["ir.qweb"]._render(
"base_tier_validation.tier_validation_label", params
)
new_node = etree.fromstring(str_element)
return new_node
def _add_tier_validation_reviews(self, node, params):
str_element = self.env["ir.qweb"]._render(
"base_tier_validation.tier_validation_reviews", params
)
new_node = etree.fromstring(str_element)
return new_node
def _get_tier_validation_readonly_domain(self):
return [("review_ids", "!=", [])]
@api.model
def get_view(self, view_id=None, view_type="form", **options):
res = super().get_view(view_id=view_id, view_type=view_type, **options)
View = self.env["ir.ui.view"]
if view_type == "form" and not self._tier_validation_manual_config:
doc = etree.XML(res["arch"])
params = {
"state_field": self._state_field,
"state_operator": "not in",
"state_value": self._state_from,
}
all_models = res["models"].copy() # {modelname(str) ➔ fields(tuple)}
for node in doc.xpath(self._tier_validation_buttons_xpath):
# By default, after the last button of the header
# _add_tier_validation_buttons process
new_node = self._add_tier_validation_buttons(node, params)
new_arch, new_models = View.postprocess_and_fields(new_node, self._name)
new_node = etree.fromstring(new_arch)
for new_element in new_node:
node.addnext(new_element)
_merge_view_fields(all_models, new_models)
for node in doc.xpath("/form/sheet"):
# _add_tier_validation_label process
new_node = self._add_tier_validation_label(node, params)
new_arch, new_models = View.postprocess_and_fields(new_node, self._name)
new_node = etree.fromstring(new_arch)
for new_element in new_node:
node.addprevious(new_element)
_merge_view_fields(all_models, new_models)
# _add_tier_validation_reviews process
new_node = self._add_tier_validation_reviews(node, params)
new_arch, new_models = View.postprocess_and_fields(new_node, self._name)
new_node = etree.fromstring(new_arch)
node.append(new_node)
_merge_view_fields(all_models, new_models)
excepted_fields = self._get_all_validation_exceptions()
for node in doc.xpath("//field[@name][not(ancestor::field)]"):
if node.attrib.get("name") in excepted_fields:
continue
modifiers = json.loads(
node.attrib.get("modifiers", '{"readonly": false}')
)
if modifiers.get("readonly") is not True:
modifiers["readonly"] = OR(
[
modifiers.get("readonly", []) or [],
self._get_tier_validation_readonly_domain(),
]
)
node.attrib["modifiers"] = json.dumps(modifiers)
res["arch"] = etree.tostring(doc)
res["models"] = frozendict(all_models)
return res
def _merge_view_fields(all_models: dict, new_models: dict):
"""Merge new_models into all_models. Both are {modelname(str) ➔ fields(tuple)}."""
for model, view_fields in new_models.items():
if model in all_models:
all_models[model] = tuple(set(all_models[model]) | set(view_fields))
else:
all_models[model] = tuple(view_fields)

View file

@ -0,0 +1,92 @@
# Copyright 2024 Moduon Team (https://www.moduon.team)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, exceptions, fields, models
from .tier_validation import BASE_EXCEPTION_FIELDS
class TierValidationException(models.Model):
_name = "tier.validation.exception"
_description = "Tier Validation Exceptions"
_rec_name = "name"
@api.model
def _get_tier_validation_model_names(self):
return self.env["tier.definition"]._get_tier_validation_model_names()
name = fields.Char(
required=True,
default="New Tier Validation Exception",
)
model_id = fields.Many2one(
comodel_name="ir.model",
string="Model",
required=True,
ondelete="cascade",
domain=lambda self: [("model", "in", self._get_tier_validation_model_names())],
)
model_name = fields.Char(
related="model_id.model",
string="Model Name",
store=True,
readonly=True,
index=True,
)
field_ids = fields.Many2many(
comodel_name="ir.model.fields",
string="Fields",
domain="[('id', 'in', valid_model_field_ids)]",
required=True,
)
valid_model_field_ids = fields.One2many(
comodel_name="ir.model.fields",
compute="_compute_valid_model_field_ids",
)
company_id = fields.Many2one(
comodel_name="res.company",
string="Company",
default=lambda self: self.env.company,
)
allowed_to_write_under_validation = fields.Boolean(
string="Write under Validation",
default=True,
)
allowed_to_write_after_validation = fields.Boolean(
string="Write after Validation",
default=True,
)
group_ids = fields.Many2many(
comodel_name="res.groups",
string="Groups",
help="Allowed groups to use this Tier Validation Exception",
)
@api.depends("model_id")
def _compute_valid_model_field_ids(self):
for record in self:
record.valid_model_field_ids = (
self.env["ir.model.fields"]
.sudo()
.search(
[
("model", "=", record.model_name),
("name", "not in", BASE_EXCEPTION_FIELDS),
]
)
)
@api.constrains(
"allowed_to_write_under_validation", "allowed_to_write_after_validation"
)
def _check_allowed_to_write(self):
if (
not self.allowed_to_write_under_validation
and not self.allowed_to_write_after_validation
):
raise exceptions.ValidationError(
_(
"At least one of these fields must be checked! "
"Write under Validation, Write after Validation"
)
)

View file

@ -0,0 +1,28 @@
To configure Tier Validations, you need to:
#. Go to *Settings > Technical > Tier Validations > Tier Definition*.
#. Create as many tiers as you want for any model having tier validation
functionality.
**Note:**
* If check *Notify Reviewers on Creation*, all possible reviewers will be notified by email when this definition is triggered.
* If check *Comment*, reviewers can comment after click Validate or Reject.
* If check *Approve by sequence*, reviewers is forced to review by specified sequence.
To configure Tier Validation Exceptions, you need to:
#. Go to *Settings > Technical > Tier Validations > Tier Validation Exceptions*.
#. Create as many tiers validation exceptions as you want for any model
having tier validation functionality.
#. Add desired fields to be checked in *Fields*.
#. Add desired groups that can use this Exception in *Groups*.
#. You must check *Write under Validation*, *Write after Validation* or both.
**Note:**
* If you don't create any exception, the Validated record will be readonly and cannot be modified.
* If check *Write under Validation*, records will be able to be modified only in the defined fields when the Validation process is ongoing.
* If check *Write after Validation*, records will be able to be modified only in the defined fields when the Validation process is finished.
* If check *Write after Validation* and *Write under Validation*, records will be able to be modified defined fields always.

View file

@ -0,0 +1,13 @@
* Lois Rilo <lois.rilo@forgeflow.com>
* Naglis Jonaitis <naglis@versada.eu>
* Adrià Gil Sorribes <adria.gil@forgeflow.com>
* Pimolnat Suntian <pimolnats@ecosoft.co.th>
* Pedro Gonzalez <pedro.gonzalez@pesol.es>
* Kitti U. <kittiu@ecosoft.co.th>
* Saran Lim. <saranl@ecosoft.co.th>
* Evan Soh <evan.soh@omnisoftsolution.com>
* Manuel Regidor <manuel.regidor@sygel.es>
* Eduardo de Miguel <edu@moduon.team>
* `XCG Consulting <https://xcg-consulting.fr>`_:
* Houzéfa Abbasbhay

View file

@ -0,0 +1,13 @@
Validating some operations is a common need across different areas in a company
and sometimes it also involves several people and stages in the process. With
this module you will be able to define your custom validation workflows for
any Odoo document.
This module does not provide a functionality by itself but an abstract model
to implement a validation process based on tiers on other models (e.g.
purchase orders, sales orders, budgets, expenses...).
**Note:** To be able to use this module in a new model you will need some
development.
See `purchase_tier_validation <https://github.com/OCA/purchase-workflow>`_ as an example of implementation.

View file

@ -0,0 +1,91 @@
14.0.1.0.0 (2020-11-19)
~~~~~~~~~~~~~~~~~~~~~~~
Migrated to Odoo 14.
13.0.1.2.2 (2020-08-30)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- When using approve_sequence option in any tier.definition there can be inconsistencies in the systray notifications
- When using approve_sequence, still not approve only the needed sequence, but also other sequence for the same approver
12.0.3.3.1 (2019-12-02)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Show comment on Reviews Table.
- Edit notification with approve_sequence.
12.0.3.3.0 (2019-11-27)
~~~~~~~~~~~~~~~~~~~~~~~
New features:
- Add comment on Reviews Table.
- Approve by sequence.
12.0.3.2.1 (2019-11-26)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Remove message_subscribe_users
12.0.3.2.0 (2019-11-25)
~~~~~~~~~~~~~~~~~~~~~~~
New features:
- Notify reviewers
12.0.3.1.0 (2019-07-08)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Singleton error
12.0.3.0.0 (2019-12-02)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Edit Reviews Table
12.0.2.1.0 (2019-05-29)
~~~~~~~~~~~~~~~~~~~~~~~
Fixes:
- Edit drop-down style width and position
12.0.2.0.0 (2019-05-28)
~~~~~~~~~~~~~~~~~~~~~~~
New features:
- Pass parameters as functions.
- Add Systray.
12.0.1.0.0 (2019-02-18)
~~~~~~~~~~~~~~~~~~~~~~~
Migrated to Odoo 12.
11.0.1.0.0 (2018-05-09)
~~~~~~~~~~~~~~~~~~~~~~~
Migrated to Odoo 11.
10.0.1.0.0 (2018-03-26)
~~~~~~~~~~~~~~~~~~~~~~~
Migrated to Odoo 10.
9.0.1.0.0 (2017-12-02)
~~~~~~~~~~~~~~~~~~~~~~~
First version.

View file

@ -0,0 +1,20 @@
This is the list of known issues for this module. Any proposal for improvement will
be very valuable.
* **Issue:**
When using `approve_sequence` option in any tier.definition there can be inconsistencies
in the systray notifications.
**Description:**
Field `can_review` in tier.review is used to filter out, in the systray notifications,
the reviews a user can approve. This `can_review` field is updated **in the database**
in method `review_user_count`, this can make it very inconsistent for databases
with a lot of users and recurring updates that can change the expected behavior.
* **Migration to 15.0:**
The parameter _tier_validation_manual_config will become False, on 14.0, the default
value is True, as the change is applied after the migration. In order to use the new
behavior we need to modify the value on our expected model.

View file

@ -0,0 +1,7 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_tier_review,access.tier.review,model_tier_review,,1,1,1,1
access_tier_definition_all,tier.definition.all,model_tier_definition,,1,0,0,0
access_tier_definition_settings,tier.definition.settings,model_tier_definition,base.group_system,1,1,1,1
access_comment_wizard,access.comment.wizard,model_comment_wizard,,1,1,1,1
access_tier_validation_exceptions_all,tier.validation.exceptions,model_tier_validation_exception,,1,0,0,0
access_tier_validation_exceptions_settings,tier.validation.exceptions,model_tier_validation_exception,base.group_system,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_tier_review access.tier.review model_tier_review 1 1 1 1
3 access_tier_definition_all tier.definition.all model_tier_definition 1 0 0 0
4 access_tier_definition_settings tier.definition.settings model_tier_definition base.group_system 1 1 1 1
5 access_comment_wizard access.comment.wizard model_comment_wizard 1 1 1 1
6 access_tier_validation_exceptions_all tier.validation.exceptions model_tier_validation_exception 1 0 0 0
7 access_tier_validation_exceptions_settings tier.validation.exceptions model_tier_validation_exception base.group_system 1 1 1 1

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="0">
<record id="tier_definition_comp_rule" model="ir.rule">
<field name="name">Tier Definition multi-company</field>
<field name="model_id" ref="model_tier_definition" />
<field name="global" eval="True" />
<field name="domain_force">
['|',('company_id','=',False),('company_id', 'in', company_ids)]
</field>
</record>
<record id="tier_review_comp_rule" model="ir.rule">
<field name="name">Tier Review multi-company</field>
<field name="model_id" ref="model_tier_review" />
<field name="global" eval="True" />
<field name="domain_force">
['|',('company_id','=',False),('company_id', 'in', company_ids)]
</field>
</record>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,614 @@
<!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">
<h1>Base Tier Validation</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3ef2fb9504521a977d133828ec0237701cd3b45b490e193c410a4c6cb4c226c0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Mature" src="https://img.shields.io/badge/maturity-Mature-brightgreen.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"><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"><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>Validating some operations is a common need across different areas in a company
and sometimes it also involves several people and stages in the process. With
this module you will be able to define your custom validation workflows for
any Odoo document.</p>
<p>This module does not provide a functionality by itself but an abstract model
to implement a validation process based on tiers on other models (e.g.
purchase orders, sales orders, budgets, expenses…).</p>
<p><strong>Note:</strong> To be able to use this module in a new model you will need some
development.</p>
<p>See <a class="reference external" href="https://github.com/OCA/purchase-workflow">purchase_tier_validation</a> as an example of implementation.</p>
<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="#known-issues-roadmap" id="toc-entry-2">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#changelog" id="toc-entry-3">Changelog</a><ul>
<li><a class="reference internal" href="#section-1" id="toc-entry-4">14.0.1.0.0 (2020-11-19)</a></li>
<li><a class="reference internal" href="#section-2" id="toc-entry-5">13.0.1.2.2 (2020-08-30)</a></li>
<li><a class="reference internal" href="#section-3" id="toc-entry-6">12.0.3.3.1 (2019-12-02)</a></li>
<li><a class="reference internal" href="#section-4" id="toc-entry-7">12.0.3.3.0 (2019-11-27)</a></li>
<li><a class="reference internal" href="#section-5" id="toc-entry-8">12.0.3.2.1 (2019-11-26)</a></li>
<li><a class="reference internal" href="#section-6" id="toc-entry-9">12.0.3.2.0 (2019-11-25)</a></li>
<li><a class="reference internal" href="#section-7" id="toc-entry-10">12.0.3.1.0 (2019-07-08)</a></li>
<li><a class="reference internal" href="#section-8" id="toc-entry-11">12.0.3.0.0 (2019-12-02)</a></li>
<li><a class="reference internal" href="#section-9" id="toc-entry-12">12.0.2.1.0 (2019-05-29)</a></li>
<li><a class="reference internal" href="#section-10" id="toc-entry-13">12.0.2.0.0 (2019-05-28)</a></li>
<li><a class="reference internal" href="#section-11" id="toc-entry-14">12.0.1.0.0 (2019-02-18)</a></li>
<li><a class="reference internal" href="#section-12" id="toc-entry-15">11.0.1.0.0 (2018-05-09)</a></li>
<li><a class="reference internal" href="#section-13" id="toc-entry-16">10.0.1.0.0 (2018-03-26)</a></li>
<li><a class="reference internal" href="#section-14" id="toc-entry-17">9.0.1.0.0 (2017-12-02)</a></li>
</ul>
</li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-18">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-19">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-20">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-21">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-22">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>To configure Tier Validations, 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 any model having tier validation
functionality.</li>
</ol>
<p><strong>Note:</strong></p>
<ul class="simple">
<li>If check <em>Notify Reviewers on Creation</em>, all possible reviewers will be notified by email when this definition is triggered.</li>
<li>If check <em>Comment</em>, reviewers can comment after click Validate or Reject.</li>
<li>If check <em>Approve by sequence</em>, reviewers is forced to review by specified sequence.</li>
</ul>
<p>To configure Tier Validation Exceptions, you need to:</p>
<ol class="arabic simple">
<li>Go to <em>Settings &gt; Technical &gt; Tier Validations &gt; Tier Validation Exceptions</em>.</li>
<li>Create as many tiers validation exceptions as you want for any model
having tier validation functionality.</li>
<li>Add desired fields to be checked in <em>Fields</em>.</li>
<li>Add desired groups that can use this Exception in <em>Groups</em>.</li>
<li>You must check <em>Write under Validation</em>, <em>Write after Validation</em> or both.</li>
</ol>
<p><strong>Note:</strong></p>
<ul class="simple">
<li>If you dont create any exception, the Validated record will be readonly and cannot be modified.</li>
<li>If check <em>Write under Validation</em>, records will be able to be modified only in the defined fields when the Validation process is ongoing.</li>
<li>If check <em>Write after Validation</em>, records will be able to be modified only in the defined fields when the Validation process is finished.</li>
<li>If check <em>Write after Validation</em> and <em>Write under Validation</em>, records will be able to be modified defined fields always.</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h2><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h2>
<p>This is the list of known issues for this module. Any proposal for improvement will
be very valuable.</p>
<ul>
<li><p class="first"><strong>Issue:</strong></p>
<p>When using <cite>approve_sequence</cite> option in any tier.definition there can be inconsistencies
in the systray notifications.</p>
<p><strong>Description:</strong></p>
<p>Field <cite>can_review</cite> in tier.review is used to filter out, in the systray notifications,
the reviews a user can approve. This <cite>can_review</cite> field is updated <strong>in the database</strong>
in method <cite>review_user_count</cite>, this can make it very inconsistent for databases
with a lot of users and recurring updates that can change the expected behavior.</p>
</li>
<li><p class="first"><strong>Migration to 15.0:</strong></p>
<p>The parameter _tier_validation_manual_config will become False, on 14.0, the default
value is True, as the change is applied after the migration. In order to use the new
behavior we need to modify the value on our expected model.</p>
</li>
</ul>
</div>
<div class="section" id="changelog">
<h2><a class="toc-backref" href="#toc-entry-3">Changelog</a></h2>
<div class="section" id="section-1">
<h3><a class="toc-backref" href="#toc-entry-4">14.0.1.0.0 (2020-11-19)</a></h3>
<p>Migrated to Odoo 14.</p>
</div>
<div class="section" id="section-2">
<h3><a class="toc-backref" href="#toc-entry-5">13.0.1.2.2 (2020-08-30)</a></h3>
<p>Fixes:</p>
<ul class="simple">
<li>When using approve_sequence option in any tier.definition there can be inconsistencies in the systray notifications</li>
<li>When using approve_sequence, still not approve only the needed sequence, but also other sequence for the same approver</li>
</ul>
</div>
<div class="section" id="section-3">
<h3><a class="toc-backref" href="#toc-entry-6">12.0.3.3.1 (2019-12-02)</a></h3>
<p>Fixes:</p>
<ul class="simple">
<li>Show comment on Reviews Table.</li>
<li>Edit notification with approve_sequence.</li>
</ul>
</div>
<div class="section" id="section-4">
<h3><a class="toc-backref" href="#toc-entry-7">12.0.3.3.0 (2019-11-27)</a></h3>
<p>New features:</p>
<ul class="simple">
<li>Add comment on Reviews Table.</li>
<li>Approve by sequence.</li>
</ul>
</div>
<div class="section" id="section-5">
<h3><a class="toc-backref" href="#toc-entry-8">12.0.3.2.1 (2019-11-26)</a></h3>
<p>Fixes:</p>
<ul class="simple">
<li>Remove message_subscribe_users</li>
</ul>
</div>
<div class="section" id="section-6">
<h3><a class="toc-backref" href="#toc-entry-9">12.0.3.2.0 (2019-11-25)</a></h3>
<p>New features:</p>
<ul class="simple">
<li>Notify reviewers</li>
</ul>
</div>
<div class="section" id="section-7">
<h3><a class="toc-backref" href="#toc-entry-10">12.0.3.1.0 (2019-07-08)</a></h3>
<p>Fixes:</p>
<ul class="simple">
<li>Singleton error</li>
</ul>
</div>
<div class="section" id="section-8">
<h3><a class="toc-backref" href="#toc-entry-11">12.0.3.0.0 (2019-12-02)</a></h3>
<p>Fixes:</p>
<ul class="simple">
<li>Edit Reviews Table</li>
</ul>
</div>
<div class="section" id="section-9">
<h3><a class="toc-backref" href="#toc-entry-12">12.0.2.1.0 (2019-05-29)</a></h3>
<p>Fixes:</p>
<ul class="simple">
<li>Edit drop-down style width and position</li>
</ul>
</div>
<div class="section" id="section-10">
<h3><a class="toc-backref" href="#toc-entry-13">12.0.2.0.0 (2019-05-28)</a></h3>
<p>New features:</p>
<ul class="simple">
<li>Pass parameters as functions.</li>
<li>Add Systray.</li>
</ul>
</div>
<div class="section" id="section-11">
<h3><a class="toc-backref" href="#toc-entry-14">12.0.1.0.0 (2019-02-18)</a></h3>
<p>Migrated to Odoo 12.</p>
</div>
<div class="section" id="section-12">
<h3><a class="toc-backref" href="#toc-entry-15">11.0.1.0.0 (2018-05-09)</a></h3>
<p>Migrated to Odoo 11.</p>
</div>
<div class="section" id="section-13">
<h3><a class="toc-backref" href="#toc-entry-16">10.0.1.0.0 (2018-03-26)</a></h3>
<p>Migrated to Odoo 10.</p>
</div>
<div class="section" id="section-14">
<h3><a class="toc-backref" href="#toc-entry-17">9.0.1.0.0 (2017-12-02)</a></h3>
<p>First version.</p>
</div>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-18">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%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-19">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-20">Authors</a></h3>
<ul class="simple">
<li>ForgeFlow</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-21">Contributors</a></h3>
<ul class="simple">
<li>Lois Rilo &lt;<a class="reference external" href="mailto:lois.rilo&#64;forgeflow.com">lois.rilo&#64;forgeflow.com</a>&gt;</li>
<li>Naglis Jonaitis &lt;<a class="reference external" href="mailto:naglis&#64;versada.eu">naglis&#64;versada.eu</a>&gt;</li>
<li>Adrià Gil Sorribes &lt;<a class="reference external" href="mailto:adria.gil&#64;forgeflow.com">adria.gil&#64;forgeflow.com</a>&gt;</li>
<li>Pimolnat Suntian &lt;<a class="reference external" href="mailto:pimolnats&#64;ecosoft.co.th">pimolnats&#64;ecosoft.co.th</a>&gt;</li>
<li>Pedro Gonzalez &lt;<a class="reference external" href="mailto:pedro.gonzalez&#64;pesol.es">pedro.gonzalez&#64;pesol.es</a>&gt;</li>
<li>Kitti U. &lt;<a class="reference external" href="mailto:kittiu&#64;ecosoft.co.th">kittiu&#64;ecosoft.co.th</a>&gt;</li>
<li>Saran Lim. &lt;<a class="reference external" href="mailto:saranl&#64;ecosoft.co.th">saranl&#64;ecosoft.co.th</a>&gt;</li>
<li>Evan Soh &lt;<a class="reference external" href="mailto:evan.soh&#64;omnisoftsolution.com">evan.soh&#64;omnisoftsolution.com</a>&gt;</li>
<li>Manuel Regidor &lt;<a class="reference external" href="mailto:manuel.regidor&#64;sygel.es">manuel.regidor&#64;sygel.es</a>&gt;</li>
<li>Eduardo de Miguel &lt;<a class="reference external" href="mailto:edu&#64;moduon.team">edu&#64;moduon.team</a>&gt;</li>
<li><a class="reference external" href="https://xcg-consulting.fr">XCG Consulting</a>:<ul>
<li>Houzéfa Abbasbhay</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-22">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/LoisRForgeFlow"><img alt="LoisRForgeFlow" src="https://github.com/LoisRForgeFlow.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">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,29 @@
/** @odoo-module **/
import {attr, one} from "@mail/model/model_field";
import {registerModel} from "@mail/model/model_core";
registerModel({
name: "ir.model.review",
fields: {
/**
* Determines the name of the views that are available for this model.
*/
availableWebViews: attr({
compute() {
return ["kanban", "list", "form", "activity"];
},
}),
reviewGroup: one("ReviewGroup", {
inverse: "irModel",
}),
iconUrl: attr(),
id: attr({
identifying: true,
}),
model: attr({
required: true,
}),
name: attr(),
},
});

View file

@ -0,0 +1,7 @@
/** @odoo-module **/
import {registry} from "@web/core/registry";
import {systrayService} from "@base_tier_validation/js/systray_service.esm";
const serviceRegistry = registry.category("services");
serviceRegistry.add("review_systray_service", systrayService);

View file

@ -0,0 +1,51 @@
/** @odoo-module **/
import {one} from "@mail/model/model_field";
import {registerModel} from "@mail/model/model_core";
registerModel({
name: "ReviewGroupView",
recordMethods: {
/**
* @param {MouseEvent} ev
*/
onClickFilterButton(ev) {
this.reviewMenuViewOwner.update({isOpen: false});
// Fetch the data from the button otherwise fetch the ones from the parent (.o_ActivityMenuView_activityGroup).
const data = _.extend({}, $(ev.currentTarget).data(), $(ev.target).data());
const context = {};
var domain = [["can_review", "=", true]];
console.log(data);
if (data.active_field) {
domain.push(["active", "in", [true, false]]);
}
this.env.services.action.doAction(
{
context,
name: data.model_name,
res_model: data.res_model,
search_view_id: [false],
type: "ir.actions.act_window",
domain: domain,
views: this.reviewGroup.irModel.availableWebViews.map(
(viewName) => [false, viewName]
),
},
{
clearBreadcrumbs: true,
}
);
},
},
fields: {
reviewGroup: one("ReviewGroup", {
identifying: true,
inverse: "reviewGroupViews",
}),
reviewMenuViewOwner: one("ReviewerMenuView", {
identifying: true,
inverse: "reviewGroupViews",
}),
},
});

View file

@ -0,0 +1,52 @@
/** @odoo-module **/
import {attr, many, one} from "@mail/model/model_field";
import {registerModel} from "@mail/model/model_core";
registerModel({
name: "ReviewGroup",
modelMethods: {
convertData(data) {
return {
domain: data.domain,
irModel: {
iconUrl: data.icon,
id: data.id,
model: data.model,
name: data.name,
},
pending_count: data.pending_count,
};
},
},
recordMethods: {
/**
* @private
*/
_onChangePendingCount() {
if (this.type === "tier_review" && this.pending_count === 0) {
this.delete();
}
},
},
fields: {
reviewGroupViews: many("ReviewGroupView", {
inverse: "reviewGroup",
}),
domain: attr(),
irModel: one("ir.model.review", {
identifying: true,
inverse: "reviewGroup",
}),
pending_count: attr({
default: 0,
}),
type: attr(),
},
onChanges: [
{
dependencies: ["pending_count", "type"],
methodName: "_onChangePendingCount",
},
],
});

View file

@ -0,0 +1,26 @@
/** @odoo-module **/
import {decrement, increment} from "@mail/model/model_field_command";
import {registerPatch} from "@mail/model/model_core";
registerPatch({
name: "MessagingNotificationHandler",
recordMethods: {
/**
* @override
*/
async _handleNotification(message) {
if (message.type === "base.tier.validation/updated") {
for (const reviewMenuView of this.messaging.models.ReviewerMenuView.all()) {
if (message.payload.review_created) {
reviewMenuView.update({extraCount: increment()});
}
if (message.payload.review_deleted) {
reviewMenuView.update({extraCount: decrement()});
}
}
}
return this._super(message);
},
},
});

View file

@ -0,0 +1,25 @@
/** @odoo-module **/
// ensure components are registered beforehand.
import {getMessagingComponent} from "@mail/utils/messaging_component";
const {Component} = owl;
export class ReviewerMenuContainer extends Component {
/**
* @override
*/
setup() {
super.setup();
this.env.services.messaging.modelManager.messagingCreatedPromise.then(() => {
this.reviewerMenuView =
this.env.services.messaging.modelManager.messaging.models.ReviewerMenuView.insert();
this.render();
});
}
}
Object.assign(ReviewerMenuContainer, {
components: {ReviewerMenuView: getMessagingComponent("ReviewerMenuView")},
template: "base_tier_validation.ReviewerMenuContainer",
});

View file

@ -0,0 +1,29 @@
/** @odoo-module **/
import {registerMessagingComponent} from "@mail/utils/messaging_component";
import {useComponentToModel} from "@mail/component_hooks/use_component_to_model";
const {Component} = owl;
export class ReviewerMenuView extends Component {
/**
* @override
*/
setup() {
super.setup();
useComponentToModel({fieldName: "component"});
}
/**
* @returns {ReviewerMenuView}
*/
get reviewerMenuView() {
return this.props.record;
}
}
Object.assign(ReviewerMenuView, {
props: {record: Object},
template: "base_tier_validation.ReviewerMenuView",
});
registerMessagingComponent(ReviewerMenuView);

View file

@ -0,0 +1,104 @@
/** @odoo-module **/
import {attr, many} from "@mail/model/model_field";
import {registerModel} from "@mail/model/model_core";
import session from "web.session";
registerModel({
name: "ReviewerMenuView",
lifecycleHooks: {
_created() {
this.fetchData();
document.addEventListener("click", this._onClickCaptureGlobal, true);
},
_willDelete() {
document.removeEventListener("click", this._onClickCaptureGlobal, true);
},
},
recordMethods: {
close() {
this.update({isOpen: false});
},
async fetchData() {
const data = await this.messaging.rpc({
model: "res.users",
method: "review_user_count",
args: [],
kwargs: {context: session.user_context},
});
this.update({
reviewGroups: data.map((vals) =>
this.messaging.models.ReviewGroup.convertData(vals)
),
extraCount: 0,
});
},
/**
* @param {MouseEvent} ev
*/
onClickDropdownToggle(ev) {
ev.preventDefault();
if (this.isOpen) {
this.update({isOpen: false});
} else {
this.update({isOpen: true});
this.fetchData();
}
},
/**
* Closes the menu when clicking outside, if appropriate.
*
* @private
* @param {MouseEvent} ev
*/
_onClickCaptureGlobal(ev) {
if (!this.exists()) {
return;
}
if (!this.component || !this.component.root.el) {
return;
}
if (this.component.root.el.contains(ev.target)) {
return;
}
this.close();
},
},
fields: {
reviewGroups: many("ReviewGroup", {
sort: [["smaller-first", "irModel.id"]],
}),
reviewGroupViews: many("ReviewGroupView", {
compute() {
return this.reviewGroups.map((reviewGroup) => {
return {
reviewGroup,
};
});
},
inverse: "reviewMenuViewOwner",
}),
component: attr(),
counter: attr({
compute() {
return this.reviewGroups.reduce(
(total, group) => total + group.pending_count,
this.extraCount
);
},
}),
/**
* Determines the number of activities that have been added in the
* system but not yet taken into account in each activity group counter.
*
* @deprecated this field should be replaced by directly updating the
* counter of each group.
*/
extraCount: attr(),
isOpen: attr({
default: false,
}),
},
});

View file

@ -0,0 +1,17 @@
/** @odoo-module **/
import {ReviewerMenuContainer} from "./reviewer_menu_container.esm";
import {registry} from "@web/core/registry";
const systrayRegistry = registry.category("systray");
export const systrayService = {
start() {
systrayRegistry.add(
"base_tier_validation.ReviewerMenu",
{Component: ReviewerMenuContainer},
{sequence: 99}
);
},
};

View file

@ -0,0 +1,36 @@
/** @odoo-module **/
import {registry} from "@web/core/registry";
import {useService} from "@web/core/utils/hooks";
const {Component, useState} = owl;
export class ReviewsTable extends Component {
setup() {
this.docs = useState({});
this.collapse = false;
this.orm = useService("orm");
this.reviews = [];
}
_getReviewData() {
const records = this.env.model.root.data.review_ids.records;
const reviews = [];
for (var i = 0; i < records.length; i++) {
reviews.push(records[i].data);
}
return reviews;
}
onToggleCollapse(ev) {
var $panelHeading = $(ev.currentTarget).closest(".panel-heading");
if (this.collapse) {
$panelHeading.next("div#collapse1").hide();
} else {
$panelHeading.next("div#collapse1").show();
}
this.collapse = !this.collapse;
}
}
ReviewsTable.template = "base_tier_validation.Collapse";
registry.category("fields").add("form.tier_validation", ReviewsTable);

View file

@ -0,0 +1,41 @@
ul.o_review {
min-width: 600px;
max-width: 800px;
}
.panel-group {
min-height: auto !important;
margin-top: -6px !important;
padding: 16px 16px 8px 16px !important;
}
.panel-heading {
background-color: initial !important;
}
.panel {
border: 0px !important;
}
.panel-body {
overflow-y: hidden;
overflow-x: auto;
}
.panel-title > a,
.panel-title > a:active {
display: block;
}
.panel-heading a:before {
font-family: FontAwesome;
content: "\f0d7";
float: right;
transition: all 0.5s;
}
.panel-heading.active a:before {
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
transform: rotate(180deg);
}

View file

@ -0,0 +1,143 @@
// Navbar icon and dropdown
.o_tier_navbar_item {
> a {
opacity: 1;
> i {
font-size: larger;
}
}
&.o_no_notification > a {
opacity: 0.5;
> i {
transform: translateY(0px);
}
.o_notification_counter {
display: none;
}
}
&.show .o_tier_systray_dropdown {
display: flex;
flex-flow: column nowrap;
}
.o_notification_counter {
margin-top: -0.8rem;
margin-right: 0;
margin-left: -0.6rem;
background: #00a09d;
color: white;
vertical-align: super;
font-size: 0.7em;
}
.o_tier_systray_dropdown {
direction: ltr;
width: 350px;
padding: 0;
.o_spinner {
display: flex;
align-items: center;
justify-content: center;
color: $o-main-text-color;
height: 50px;
}
.o_tier_systray_dropdown_top {
display: flex;
flex: 0 0 auto;
justify-content: space-between;
border-bottom: 1px solid gray("400");
box-shadow: 0 0 2px gray("400");
.o_filter_button,
.o_new_message {
padding: 5px;
}
.o_filter_button {
color: $o-main-color-muted;
&:hover,
&.active {
color: $o-brand-primary;
}
&.active {
cursor: default;
font-weight: bold;
}
}
}
.o_tier_systray_dropdown_items {
flex: 0 1 auto;
max-height: 400px;
min-height: 50px;
overflow-y: auto;
@include media-breakpoint-up(md) {
.o_tier_preview {
min-height: 50px;
padding: 5px;
.o_tier_preview_image {
width: 40px;
height: 40px;
}
.o_preview_info {
margin-left: 10px;
.o_preview_title {
.o_last_message_date {
padding-top: 2px;
font-size: x-small;
margin-left: 10px;
}
}
}
}
}
}
.o_activity_filter_button {
padding: 2px;
}
.o_no_activity {
cursor: initial;
align-items: center;
color: grey;
opacity: 0.5;
padding: 3px;
}
}
}
.o_no_thread_window .o_tier_systray_dropdown .o_new_message {
display: none; // hide 'new message' button if chat windows are disabled
}
// Mobile rules
// Goal: mock the design of Discuss in mobile
@include media-breakpoint-down(sm) {
.o_tier_systray_item {
.o_notification_counter {
top: 10%;
}
.o_tier_systray_dropdown {
position: relative;
.o_tier_systray_dropdown_top {
padding: 5px;
}
.o_tier_systray_mobile_header {
padding: 5px;
height: 44px;
border-bottom: 1px solid #ebebeb;
box-shadow: 0 0 2px gray("400");
}
.o_tier_systray_dropdown_items {
max-height: none;
padding-bottom: 52px; // leave space for tabs
}
.o_tier_mobile_tabs {
position: fixed;
bottom: 0px;
left: 0px;
right: 0px;
background-color: white;
color: $o-main-text-color;
}
}
}
}

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates xml:space="preserve">
<t t-name="base_tier_validation.ReviewerMenuContainer" owl="1">
<t t-if="reviewerMenuView">
<ReviewerMenuView record="reviewerMenuView" />
</t>
</t>
</templates>

View file

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<t t-name="base_tier_validation.ReviewerMenuView" owl="1">
<div class="o_ActivityMenuView dropdown" t-ref="root">
<a
class="o_ActivityMenuView_dropdownToggle dropdown-toggle o-no-caret o-dropdown--narrow"
t-att-aria-expanded="reviewerMenuView.isOpen ? 'true' : 'false'"
title="Reviews"
href="#"
role="button"
t-on-click="reviewerMenuView.onClickDropdownToggle"
>
<i
class="fa fa-pencil-square-o"
role="img"
aria-label="Reviews"
/> <span
t-if="reviewerMenuView.counter > 0"
class="o_ActivityMenuView_counter badge"
t-esc="reviewerMenuView.counter"
/>
</a>
<div
t-if="reviewerMenuView.isOpen"
class="o_ActivityMenuView_dropdownMenu o-dropdown-menu dropdown-menu-end show bg-view"
role="menu"
>
<div class="o_ActivityMenuView_activityGroups">
<t t-if="reviewerMenuView.reviewGroupViews.length === 0">
<div
class="o_ActivityMenuView_noActivity dropdown-item-text text-center d-flex justify-content-center"
>
<span>No reviews to do.</span>
</div>
</t>
<t
t-foreach="reviewerMenuView.reviewGroupViews"
t-as="reviewGroupView"
t-key="reviewGroupView.localId"
name="activityGroupLoop"
>
<div
class="o_ActivityMenuView_activityGroup"
t-att-data-res_model="reviewGroupView.reviewGroup.irModel.model"
t-att-data-model_name="reviewGroupView.reviewGroup.irModel.name"
t-att-data-active_field="reviewGroupView.reviewGroup.irModel.active_field"
t-att-data-domain="reviewGroupView.reviewGroup.domain"
data-filter='my'
t-att-data-activity-group-view-local-id="reviewGroupView.localId"
t-on-click="reviewGroupView.onClickFilterButton"
>
<div
t-if="reviewGroupView.reviewGroup.irModel.iconUrl"
class="o_ActivityMenuView_activityGroupIconContainer"
>
<img
t-att-src="reviewGroupView.reviewGroup.irModel.iconUrl"
alt="Activity"
/>
</div>
<div class="o_ActivityMenuView_activityGroupInfo">
<div class="o_ActivityMenuView_activityGroupTitle">
<span class="o_ActivityMenuView_activityGroupName">
<t
t-esc="reviewGroupView.reviewGroup.irModel.name"
/>
</span>
</div>
<div>
<button
t-if="reviewGroupView.reviewGroup.pending_count"
type="button"
class="btn btn-link o_activity_filter_button mr16"
t-att-data-res_model="reviewGroupView.reviewGroup.irModel.model"
t-att-data-model_name="reviewGroupView.reviewGroup.irModel.name"
data-filter="pending_count"
>
<t
t-esc="reviewGroupView.reviewGroup.pending_count"
/>
Pending
</button>
<span
t-if="!reviewGroupView.reviewGroup.pending_count"
class="o_no_activity mr16"
>
0 Pending
</span>
</div>
</div>
</div>
</t>
</div>
</div>
</div>
</t>
</templates>

View file

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<t t-name="base_tier_validation.Collapse" owl="1">
<div class="o_form_sheet panel-group">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a
class="o_info_btn"
data-toggle="collapse"
href="#"
data-target="#collapse1"
t-on-click="onToggleCollapse"
>
Reviews
</a>
</h4>
</div>
<div id="collapse1" class="panel-collapse collapse active">
<div class="panel-body o_review">
<table class="oe_mt32 table table-condensed">
<thead>
<tr>
<th
name="th_sequence"
class="text-center"
>Sequence</th>
<th
name="th_requested_by"
class="text-left"
>Requested by</th>
<th
name="th_name"
class="text-right"
>Description</th>
<th
name="th_display_status"
class="text-right"
>Status</th>
<th
name="th_todo_by"
class="text-right"
>Todo by</th>
<th
name="th_done_by"
class="text-right"
>Done by</th>
<th
name="th_reviewed_date"
class="text-right"
>Validation Date</th>
<th
name="th_comment"
class="text-right"
>Comment</th>
</tr>
</thead>
<tbody class="sale_tbody">
<t
t-foreach="_getReviewData()"
t-as="review"
t-key="review.id"
>
<t
t-if="review.status == 'pending'"
t-set="status_class"
t-value=""
/>
<t
t-if="review.status == 'approved'"
t-set="status_class"
t-value="'alert-success'"
/>
<t
t-if="review.status == 'rejected'"
t-set="status_class"
t-value="'alert-danger'"
/>
<tr t-att-class="status_class">
<td name="td_sequence" class="text-center">
<span t-esc="review.sequence" />
</td>
<td name="td_requested_by" class="text-left">
<span t-esc="review.requested_by[1]" />
</td>
<td name="td_name" class="text-right">
<span t-esc="review.name" />
</td>
<td name="td_display_status" class="text-right">
<span t-esc="review.display_status" />
</td>
<td name="td_todo_by" class="text-right">
<span t-esc="review.todo_by" />
</td>
<td name="td_done_by" class="text-right">
<span t-esc="review.done_by[1]" />
</td>
<td name="td_reviewed_date" class="text-right">
<t t-if="review.reviewed_formated_date">
<span
t-esc="review.reviewed_formated_date"
/>
</t>
</td>
<td name="td_comment" class="text-left">
<t t-if="review.comment">
<span t-esc="review.comment" />
</t>
</td>
</tr>
</t>
</tbody>
</table>
</div>
</div>
</div>
</div>
</t>
</templates>

View file

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="tier_validation_buttons">
<div>
<field name="validation_status" invisible="1" />
<button
name="request_validation"
string="Request Validation"
t-attf-attrs="{'invisible': ['|', '|', '|',
('need_validation', '!=', True),
('validation_status', '=', 'pending'),
('validation_status','=','rejected'),('#{state_field}', '#{state_operator}', #{state_value})]}"
type="object"
/>
<button
name="restart_validation"
string="Restart Validation"
t-attf-attrs="{'invisible': ['|',
('review_ids', '=', []),
('#{state_field}', '#{state_operator}', #{state_value})]}"
type="object"
/>
<button
name="reevaluate_reviews"
string="Reevaluate Reviews"
t-attf-attrs="{'invisible': ['|',('is_reevaluation_required', '!=', True),('#{state_field}', '#{state_operator}', #{state_value})]}"
type="object"
/>
</div>
</template>
<template id="tier_validation_label">
<div>
<field name="need_validation" invisible="1" />
<field name="is_reevaluation_required" invisible="1" />
<field name="validation_status" invisible="1" />
<div
class="alert alert-warning mb-0 pb-1 px-4"
role="alert"
t-attf-attrs="{'invisible': ['|', '|', '|',
('validation_status', '=', 'validated'),
('#{state_field}', '#{state_operator}', #{state_value}),
('validation_status', '=', 'rejected'),
('review_ids', '=', [])]}"
>
<p>
<i class="fa fa-info-circle" /> This Record needs to be validated.
<field name="can_review" invisible="1" />
<button
name="validate_tier"
string="Validate"
attrs="{'invisible': [('can_review', '=', False)]}"
type="object"
class="btn-sm btn-success mx-1"
icon="fa-thumbs-up"
/>
<button
name="reject_tier"
string="Reject"
attrs="{'invisible': [('can_review', '=', False)]}"
type="object"
class="btn-sm btn-danger mx-1"
icon="fa-thumbs-down"
/>
<field name="next_review" readonly="1" class="float-end pt-1" />
</p>
</div>
<div
class="alert alert-success mb-0 pb-1 px-4"
role="alert"
t-attf-attrs="{'invisible': ['|', '|',
('validation_status', '!=', 'validated'),
('#{state_field}', '#{state_operator}', #{state_value}),
('review_ids', '=', [])]}"
>
<p>
<i class="fa fa-thumbs-up" /> Operation has been <b>validated</b>!
</p>
</div>
<div
class="alert alert-danger mb-0 pb-1 px-4"
role="alert"
t-attf-attrs="{'invisible': ['|', '|',
('validation_status', '!=', 'rejected'),
('#{state_field}', '#{state_operator}', #{state_value}),
('review_ids', '=', [])]}"
>
<p>
<i class="fa fa-thumbs-down" /> Operation has been <b>rejected</b>.
</p>
</div>
</div>
</template>
<template id="tier_validation_reviews">
<field
name="review_ids"
widget="tier_validation"
attrs="{'invisible':[('review_ids', '=', [])]}"
style="width:100%%; margin-top: 10px;"
>
<tree>
<field name="id" />
<field name="name" />
<field name="sequence" />
<field name="requested_by" />
<field name="status" />
<field name="display_status" />
<field name="todo_by" />
<field name="done_by" />
<field name="reviewed_date" />
<field name="reviewed_formated_date" />
<field name="comment" />
</tree>
</field>
</template>
</odoo>

View file

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

View file

@ -0,0 +1,161 @@
# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from odoo_test_helper import FakeModelLoader
from odoo.tests import common
from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
class CommonTierValidation(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().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 .tier_validation_tester import (
TierDefinition,
TierValidationTester,
TierValidationTester2,
)
cls.loader.update_registry(
(TierValidationTester, TierValidationTester2, TierDefinition)
)
cls.test_model = cls.env[TierValidationTester._name]
cls.test_model_2 = cls.env[TierValidationTester2._name]
cls.tester_model = cls.env["ir.model"].search(
[("model", "=", "tier.validation.tester")]
)
cls.tester_model_2 = cls.env["ir.model"].search(
[("model", "=", "tier.validation.tester2")]
)
# 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,
}
)
cls.env["ir.model.access"].create(
{
"name": "access.tester2",
"model_id": cls.tester_model_2.id,
"perm_read": 1,
"perm_write": 1,
"perm_create": 1,
"perm_unlink": 1,
}
)
# Create a multi-company
cls.main_company = cls.env.ref("base.main_company")
cls.other_company = cls.env["res.company"].create({"name": "My Company"})
# Define views to avoid automatic views with all fields.
for model in cls.test_model._name, cls.test_model_2._name:
cls.env["ir.ui.view"].create(
{
"model": model,
"name": f"Demo view for {model}",
"arch": """<form>
<header>
<button name="action_confirm" type="object" string="Confirm" />
<field name="state" widget="statusbar" />
</header>
<sheet>
<field name="test_field" />
</sheet>
</form>""",
}
)
# Create users:
group_ids = cls.env.ref("base.group_system").ids
cls.test_user_1 = cls.env["res.users"].create(
{
"name": "John",
"login": "test1",
"email": "john@yourcompany.example.com",
"groups_id": [(6, 0, group_ids)],
}
)
cls.test_user_2 = cls.env["res.users"].create(
{"name": "Mike", "login": "test2", "email": "mike@yourcompany.example.com"}
)
cls.test_user_3_multi_company = cls.env["res.users"].create(
{
"name": "Jane",
"login": "test3",
"email": "jane@mycompany.example.com",
"company_ids": [(6, 0, [cls.main_company.id, cls.other_company.id])],
}
)
# Create tier definitions:
cls.tier_def_obj = cls.env["tier.definition"]
cls.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)]",
"sequence": 30,
}
)
cls.test_record = cls.test_model.create({"test_field": 2.5})
cls.test_record_2 = cls.test_model_2.create({"test_field": 2.5})
# Create definition for test 28, 29
# Main company tier definition
cls.tier_def_obj.create(
{
"model_id": cls.tester_model_2.id,
"review_type": "individual",
"reviewer_id": cls.test_user_1.id,
"definition_domain": "[('test_field', '>=', 1.0)]",
"approve_sequence": True,
"sequence": 30,
"name": "Definition for test 30 - sequence - user 1 - main company",
"company_id": cls.main_company.id,
}
)
cls.tier_def_obj.create(
{
"model_id": cls.tester_model_2.id,
"review_type": "individual",
"reviewer_id": cls.test_user_3_multi_company.id,
"definition_domain": "[('test_field', '>=', 1.0)]",
"approve_sequence": True,
"sequence": 20,
"name": "Definition for test 30 - sequence - user 3 - main company",
"company_id": cls.main_company.id,
}
)
# Other company tier definition
cls.tier_def_obj.create(
{
"model_id": cls.tester_model_2.id,
"review_type": "individual",
"reviewer_id": cls.test_user_3_multi_company.id,
"definition_domain": "[('test_field', '>=', 1.0)]",
"approve_sequence": True,
"sequence": 30,
"name": "Definition for test 30 - sequence - user 3 - other company",
"company_id": cls.other_company.id,
}
)
@classmethod
def tearDownClass(cls):
cls.loader.restore_registry()
return super(CommonTierValidation, cls).tearDownClass()

View file

@ -0,0 +1,46 @@
# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from freezegun import freeze_time
from odoo import fields
from odoo.tests.common import tagged
from .common import CommonTierValidation
@tagged("post_install", "-at_install")
class TierTierValidation(CommonTierValidation):
def test_validation_reminder(self):
"""Check the posting of reminder to reviews."""
tier_definition = self.tier_definition
tier_definition.notify_reminder_delay = 3
# Request a review today
self.test_record.with_user(self.test_user_2.id).request_validation()
review = self.env["tier.review"].search(
[("definition_id", "=", tier_definition.id)]
)
self.assertTrue(review)
self.assertEqual(review.last_reminder_date, False)
# 2 days later no reminder should be posted
in_2_days = fields.Datetime.add(fields.Datetime.now(), days=2)
with freeze_time(in_2_days):
tier_definition._cron_send_review_reminder()
self.assertEqual(review.last_reminder_date, False)
# 4 days later first reminder
in_4_days = fields.Datetime.add(fields.Datetime.now(), days=4)
with freeze_time(in_4_days):
self.tier_definition._cron_send_review_reminder()
self.assertEqual(review.last_reminder_date, in_4_days)
# 5 days later no new reminder
in_6_days = fields.Datetime.add(fields.Datetime.now(), days=6)
with freeze_time(in_6_days):
self.tier_definition._cron_send_review_reminder()
self.assertEqual(review.last_reminder_date, in_4_days)
# 9 days later second reminder
in_9_days = fields.Datetime.add(fields.Datetime.now(), days=9)
with freeze_time(in_9_days):
self.tier_definition._cron_send_review_reminder()
self.assertEqual(review.last_reminder_date, in_9_days)

View file

@ -0,0 +1,60 @@
# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class TierValidationTester(models.Model):
_name = "tier.validation.tester"
_description = "Tier Validation Tester"
_inherit = ["tier.validation", "mail.thread"]
_tier_validation_manual_config = True
state = fields.Selection(
selection=[
("draft", "Draft"),
("confirmed", "Confirmed"),
("cancel", "Cancel"),
],
default="draft",
)
test_validation_field = fields.Integer(default=0)
test_field = fields.Float()
user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users")
def action_confirm(self):
self.write({"state": "confirmed"})
class TierValidationTester2(models.Model):
_name = "tier.validation.tester2"
_description = "Tier Validation Tester 2"
_inherit = ["tier.validation"]
_tier_validation_manual_config = False
state = fields.Selection(
selection=[
("draft", "Draft"),
("confirmed", "Confirmed"),
("cancel", "Cancel"),
],
default="draft",
)
test_field = fields.Float()
test_validation_field = fields.Float()
user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users")
company_id = fields.Many2one(comodel_name="res.company")
def action_confirm(self):
self.write({"state": "confirmed"})
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("tier.validation.tester")
res.append("tier.validation.tester2")
return res

View file

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Uncomment me when related modules are migrated-->
<record id="res_config_settings_view_form_budget" model="ir.ui.view">
<field name="name">res.config.settings.view.form.budget</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="25" />
<field name="inherit_id" ref="base_setup.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[@id='companies']" position="inside">
<div id="base_tier_validation">
<h2>Tier Validation</h2>
<div
class="row mt16 o_settings_container"
name="base_tier_validation_option_setting_container"
>
<div
class="col-12 col-lg-6 o_setting_box"
id="module_base_tier_validation_formula"
>
<div class="o_setting_left_pane">
<field name="module_base_tier_validation_formula" />
</div>
<div class="o_setting_right_pane">
<label for="module_base_tier_validation_formula" />
<div class="text-muted">
Option to use python formula to get reviewers and find documents
</div>
</div>
</div>
<!-- <div
class="col-12 col-lg-6 o_setting_box"
id="module_base_tier_validation_server_action"
>
<div class="o_setting_left_pane">
<field
name="module_base_tier_validation_server_action"
/>
</div>
<div class="o_setting_right_pane">
<label
for="module_base_tier_validation_server_action"
/>
<div class="text-muted">
Option to trigger server actions on completion of tier reviews
</div>
</div>
</div> -->
<div
class="col-12 col-lg-6 o_setting_box"
id="module_base_tier_validation_forward"
>
<div class="o_setting_left_pane">
<field name="module_base_tier_validation_forward" />
</div>
<div class="o_setting_right_pane">
<label for="module_base_tier_validation_forward" />
<div class="text-muted">
Option to forward a tier validation to other reviewer, and backward
</div>
</div>
</div>
<!-- <div
class="col-12 col-lg-6 o_setting_box"
id="module_base_tier_validation_report"
>
<div class="o_setting_left_pane">
<field name="module_base_tier_validation_report" />
</div>
<div class="o_setting_right_pane">
<label for="module_base_tier_validation_report" />
<div class="text-muted">
More reports about tier validations, i.e., summary of all my reviews
</div>
</div>
</div> -->
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,163 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="tier_definition_view_tree" model="ir.ui.view">
<field name="name">tier.definition.tree</field>
<field name="model">tier.definition</field>
<field name="arch" type="xml">
<tree>
<field name="model_id" />
<field name="name" />
<field name="review_type" />
<field name="reviewer_id" />
<field name="reviewer_group_id" />
<field name="reviewer_field_id" />
<field name="sequence" />
<field name="company_id" groups="base.group_multi_company" />
<field name="active" />
</tree>
</field>
</record>
<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="arch" type="xml">
<form string="Tier Definition">
<sheet>
<div class="oe_button_box" name="button_box" />
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<div class="oe_title">
<span class="oe_edit_only">Name</span>
<h1>
<field
name="name"
required="1"
placeholder="e.g. Tier Validation for..."
/>
</h1>
</div>
<group>
<field name="active" invisible="1" />
<group name="left">
<field name="model_id" options="{'no_create': True}" />
<field name="model" invisible="1" />
<field name="review_type" />
<field
name="reviewer_id"
attrs="{'invisible': [('review_type', '!=', 'individual')]}"
/>
<field
name="reviewer_group_id"
attrs="{'invisible': [('review_type', '!=', 'group')]}"
/>
<field
name="reviewer_field_id"
attrs="{'invisible': [('review_type', '!=', 'field')]}"
options="{'no_create': True}"
/>
<field name="valid_reviewer_field_ids" invisible="1" />
</group>
<group name="right">
<field
name="company_id"
groups="base.group_multi_company"
options="{'no_create': True}"
/>
<field name="sequence" />
<field name="approve_sequence" />
<label
for="approve_sequence_bypass"
class="o_form_label"
attrs="{'invisible': [('approve_sequence', '=', False)]}"
/>
<div
name="approve_sequence_bypass_div"
class="o_wrap_field d-flex d-sm-contents flex-column mb-3 mb-sm-0"
attrs="{'invisible': [('approve_sequence', '=', False)]}"
>
<field name="approve_sequence_bypass" />
<span
>Bypass, if previous tier was validated by same reviewer</span>
</div>
</group>
</group>
<notebook>
<page name="apply" string="Apply On">
<group name="bottom">
<field name="definition_type" />
<field
name="definition_domain"
widget="domain"
options="{'model': 'model'}"
attrs="{'invisible': [('definition_type', '!=', 'domain')]}"
/>
</group>
</page>
<page name="options" string="More Options">
<group name="more_option">
<group name="notify">
<field name="notify_on_create" />
<field name="notify_on_accepted" />
<field name="notify_on_rejected" />
<field name="notify_on_restarted" />
<field name="has_comment" />
<field name="notify_reminder_delay" />
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="tier_definition_view_search" model="ir.ui.view">
<field name="name">tier.definition.search</field>
<field name="model">tier.definition</field>
<field name="arch" type="xml">
<search>
<field name="model_id" />
<field name="reviewer_id" />
<field name="reviewer_group_id" />
<field name="active" />
<separator />
<filter
string="All"
name="all"
domain="['|', ('active', '=', False), ('active', '=', True)]"
/>
<group expand="0" string="Group By">
<filter
string="Model"
name="model_id"
domain="[]"
context="{'group_by':'model_id'}"
/>
</group>
</search>
</field>
</record>
<record id="tier_definition_action" model="ir.actions.act_window">
<field name="name">Tier Definition</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">tier.definition</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_all': 1}</field>
</record>
<menuitem
id="menu_tier_confirmation"
name="Tier Validations"
parent="base.menu_custom"
/>
<menuitem
id="menu_tier_definition"
parent="menu_tier_confirmation"
action="tier_definition_action"
sequence="10"
/>
</odoo>

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="tier_review_view_tree" model="ir.ui.view">
<field name="name">tier.review.tree</field>
<field name="model">tier.review</field>
<field name="arch" type="xml">
<tree
decoration-danger="status=='rejected'"
decoration-success="status=='approved'"
>
<field name="sequence" />
<field name="requested_by" />
<field name="review_type" />
<field name="name" />
<field name="status" />
<field name="todo_by" />
<field name="done_by" />
<field name="reviewed_date" />
<field name="comment" />
</tree>
</field>
</record>
</odoo>

View file

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2024 Moduon Team (https://www.moduon.team)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="tier_validation_exception_tree" model="ir.ui.view">
<field name="name">tier.validation.exception.tree</field>
<field name="model">tier.validation.exception</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="model_id" />
<field name="field_ids" widget="many2many_tags" optional="show" />
<field name="company_id" groups="base.group_multi_company" />
<field name="allowed_to_write_under_validation" />
<field name="allowed_to_write_after_validation" />
<field name="group_ids" widget="many2many_tags" />
</tree>
</field>
</record>
<record id="tier_validation_exception_form" model="ir.ui.view">
<field name="name">tier.validation.exception.form</field>
<field name="model">tier.validation.exception</field>
<field name="arch" type="xml">
<form string="Tier Validation Exception">
<sheet>
<div class="oe_title">
<label for="name" />
<h1>
<field name="name" nolabel="1" />
</h1>
</div>
<group>
<group name="left">
<field
name="model_id"
options="{'no_create': True, 'no_open': True}"
/>
<field name="valid_model_field_ids" invisible="1" />
<field
name="field_ids"
widget="many2many_tags"
options="{'no_create': True}"
/>
<field
name="company_id"
groups="base.group_multi_company"
/>
</group>
<group name="right">
<field name="group_ids" widget="many2many_tags" />
<field name="allowed_to_write_under_validation" />
<field name="allowed_to_write_after_validation" />
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="tier_validation_exception_search" model="ir.ui.view">
<field name="name">tier.validation.exception.search</field>
<field name="model">tier.validation.exception</field>
<field name="arch" type="xml">
<search>
<field name="name" />
<field name="model_id" />
<field name="field_ids" />
<field name="company_id" groups="base.group_multi_company" />
<field name="group_ids" />
<separator />
<filter
string="Write under validation"
name="flt_allowed_to_write_under_validation_true"
domain="[('allowed_to_write_under_validation', '=', True)]"
/>
<filter
string="Write after validation"
name="flt_allowed_to_write_after_validation_true"
domain="[('allowed_to_write_after_validation', '=', True)]"
/>
<group>
<filter
string="Model"
name="grp_model"
domain="[]"
context="{'group_by': 'model_id'}"
/>
<filter
string="Company"
name="grp_company"
domain="[]"
context="{'group_by': 'company_id'}"
/>
</group>
</search>
</field>
</record>
<record id="tier_validation_exception_action" model="ir.actions.act_window">
<field name="name">Tier Validation Exception</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">tier.validation.exception</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p
class="o_view_nocontent_smiling_face"
>Create a new Validation Exception!</p>
<p
>Once created, you can decide which fields you want to be editable when the record:</p>
<ul>
<li>It's in the validation process</li>
<li>It's fully validated</li>
</ul>
</field>
</record>
<menuitem
id="menu_tier_validation_exception"
parent="menu_tier_confirmation"
action="tier_validation_exception_action"
sequence="20"
/>
</odoo>

View file

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

View file

@ -0,0 +1,25 @@
# Copyright 2019 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 CommentWizard(models.TransientModel):
_name = "comment.wizard"
_description = "Comment Wizard"
validate_reject = fields.Char()
res_model = fields.Char()
res_id = fields.Integer()
review_ids = fields.Many2many(comodel_name="tier.review")
comment = fields.Char(required=True)
def add_comment(self):
self.ensure_one()
rec = self.env[self.res_model].browse(self.res_id)
self.review_ids.write({"comment": self.comment})
if self.validate_reject == "validate":
rec._validate_tier(self.review_ids)
if self.validate_reject == "reject":
rec._rejected_tier(self.review_ids)
rec._update_counter({"review_deleted": True})

View file

@ -0,0 +1,26 @@
<?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_comment_wizard" model="ir.ui.view">
<field name="name">Comment Wizard</field>
<field name="model">comment.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Comment">
<group>
<field colspan="2" name="comment" nolabel="1" />
</group>
<footer>
<button
name="add_comment"
string="Comment"
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 Module - base_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 base_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,5 @@
# Dependencies
This addon depends on:
- [mail](../../odoo-bringout-oca-ocb-mail)

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 or install in UI.

View file

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

View file

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

View file

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

View file

@ -0,0 +1,41 @@
# Security
Access control and security definitions in base_tier_validation.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../base_tier_validation/security/ir.model.access.csv)**
- 6 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[tier_validation_security.xml](../base_tier_validation/security/tier_validation_security.xml)**
```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/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
- **[tier_validation_security.xml](../base_tier_validation/security/tier_validation_security.xml)**
- Security groups, categories, and XML-based rules
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
```

View file

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

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-server-ux-base_tier_validation"
version = "16.0.0"
description = "Base Tier Validation - Implement a validation process based on tiers."
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-mail>=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"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]