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,44 @@
# DDMRP Warning
Odoo addon: ddmrp_warning
## Installation
```bash
pip install odoo-bringout-oca-ddmrp-ddmrp_warning
```
## Dependencies
This addon depends on:
- ddmrp
## Manifest Information
- **Name**: DDMRP Warning
- **Version**: 16.0.1.3.0
- **Category**: Warehouse Management
- **License**: LGPL-3
- **Installable**: True
## Source
Based on [OCA/ddmrp](https://github.com/OCA/ddmrp) branch 16.0, addon `ddmrp_warning`.
## License
This package maintains the original LGPL-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
- 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,95 @@
=============
DDMRP Warning
=============
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:a4ff0f8b466d634f6fb816d1f05864999320776bd7fa6aed23fd367316f7ec52
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fddmrp-lightgray.png?logo=github
:target: https://github.com/OCA/ddmrp/tree/16.0/ddmrp_warning
:alt: OCA/ddmrp
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/ddmrp-16-0/ddmrp-16-0-ddmrp_warning
: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/ddmrp&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
Adds configuration warnings on stock buffers based on different definitions.
This modules include some basic warnings but you can create your own based on
your environment.
**Table of contents**
.. contents::
:local:
Usage
=====
To use this module you can proceed as follows:
#. Use the filter *Has Warnings* in stock buffers.
#. In a buffer form view go to the *Warnings* tab and check the active warnings.
#. Fix the issues, and click on *Refresh Warnings*.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/ddmrp/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/ddmrp/issues/new?body=module:%20ddmrp_warning%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 Antelo <lois.rilo@forgeflow.com>
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/ddmrp <https://github.com/OCA/ddmrp/tree/16.0/ddmrp_warning>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

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

View file

@ -0,0 +1,25 @@
# Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
{
"name": "DDMRP Warning",
"version": "16.0.1.3.0",
"summary": "Adds configuration warnings on stock buffers.",
"author": "ForgeFlow, Odoo Community Association (OCA)",
"development_status": "Beta",
"maintainers": ["LoisRForgeFlow"],
"website": "https://github.com/OCA/ddmrp",
"category": "Warehouse Management",
"depends": ["ddmrp"],
"data": [
"security/ir.model.access.csv",
"security/ddmrp_warning_rules.xml",
"views/ddmrp_buffer_view.xml",
"views/ddmrp_warning_definition_views.xml",
"views/ddmrp_warning_item_views.xml",
"data/ir_cron.xml",
"data/ddmrp_warning_definition_data.xml",
],
"license": "LGPL-3",
"installable": True,
}

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record
id="ddmrp_warning_definition_dlt_and_spike_horizon"
model="ddmrp.warning.definition"
>
<field name="name">Spike horizon is smaller than DLT</field>
<field name="python_code">buffer.order_spike_horizon &lt; buffer.dlt</field>
<field name="severity">3_high</field>
</record>
<record
id="ddmrp_warning_definition_moq_and_qty_multiple"
model="ddmrp.warning.definition"
>
<field name="name">Quantity multiple bigger than MOQ</field>
<field
name="python_code"
>buffer.minimum_order_quantity &gt; 0 and buffer.minimum_order_quantity &lt; buffer.qty_multiple</field>
<field name="severity">2_mid</field>
</record>
<record
id="ddmrp_warning_definition_moq_and_procure_min_qty"
model="ddmrp.warning.definition"
>
<field name="name">Minimum Procure Batch bigger than MOQ</field>
<field
name="python_code"
>buffer.minimum_order_quantity &lt; buffer.procure_min_qty</field>
<field name="severity">2_mid</field>
</record>
<record id="ddmrp_warning_definition_adu_zero" model="ddmrp.warning.definition">
<field name="name">ADU is zero</field>
<field name="python_code">buffer.adu == 0.0</field>
<field name="severity">1_low</field>
</record>
</odoo>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record
id="ir_cron_ddmrp_warning_calculation_scheduler_action"
model="ir.cron"
forcecreate="True"
>
<field name="name">DDMRP Buffer Warning calculation</field>
<field name="state">code</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="priority">5</field>
<field
name="mutually_exclusive_cron_ids"
eval="[(6, 0, [ref('ddmrp.ir_cron_ddmrp_calculation_scheduler_action'),])]"
/>
<field eval="False" name="doall" />
<field name="model_id" ref="ddmrp.model_stock_buffer" />
<field name="code">model.cron_generate_ddmrp_warnings(True)</field>
</record>
</odoo>

View file

@ -0,0 +1,229 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * ddmrp_warning
#
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: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__active
msgid "Active"
msgstr "Aktivan"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_form
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_search
msgid "Archived"
msgstr "Arhivirano"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__buffer_id
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Buffer"
msgstr "Bafer"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid "Buffer Applicable Domain"
msgstr "Domen primjenjivosti bafera"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__company_id
msgid "Company"
msgstr "Preduzeće"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: ddmrp_warning
#: model:ir.actions.server,name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action_ir_actions_server
#: model:ir.cron,cron_name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action
msgid "DDMRP Buffer Warning calculation"
msgstr "DDMRP izračun upozorenja bafera"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_definition
msgid "DDMRP Warning Definition"
msgstr "DDMRP definicija upozorenja"
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_definition
msgid "DDMRP Warning Definitions"
msgstr "DDMRP definicije upozorenja"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_item
msgid "DDMRP Warning Item"
msgstr "DDMRP stavka upozorenja"
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_item
msgid "DDMRP Warning Items"
msgstr "DDMRP stavke upozorenja"
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_item
msgid "DDMRP Warnings"
msgstr "DDMRP upozorenja"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__ddmrp_warning_item_ids
#: model:ir.model.fields,field_description:ddmrp_warning.field_stock_buffer__ddmrp_warning_item_ids
msgid "Ddmrp Warning Item"
msgstr "DDMRP stavka upozorenja"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Definition"
msgstr "Definicija"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__name
msgid "Description"
msgstr "Opis"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__display_name
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid ""
"Domain based on Stock Buffer, to define if the warning is applicable or not."
msgstr ""
#. module: ddmrp_warning
#. odoo-python
#: code:addons/ddmrp_warning/models/ddmrp_warning_definition.py:0
#, python-format
msgid ""
"Error evaluating %(name)s.\n"
" %(error)s"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Group By"
msgstr "Grupiši po"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__3_high
msgid "High"
msgstr "Visoki"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__id
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__id
msgid "ID"
msgstr "ID"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition____last_update
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__location_id
msgid "Location"
msgstr "Lokacija"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__1_low
msgid "Low"
msgstr "Nizak"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__2_mid
msgid "Medium"
msgstr "Medijum"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__name
msgid "Name"
msgstr "Naziv:"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__product_id
msgid "Product"
msgstr "Artikal"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Refresh Warnings"
msgstr "Osvježi upozorenja"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__severity
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__severity
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Severity"
msgstr "Ozbiljnost"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_stock_buffer
msgid "Stock Buffer"
msgstr "Skladišni bafer"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__warning_definition_id
msgid "Warning Definition"
msgstr "Definicija upozorenja"
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_definition
msgid "Warning Definitions"
msgstr "Definicije upozorenja"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid "Warning Expression"
msgstr "Izraz upozorenja"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Warnings"
msgstr "Upozorenja"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_search
msgid "With Warnings"
msgstr "Sa upozorenjima"
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid ""
"Write Python code that defines when this warning should raise. The result of"
" executing the expression must be a boolean."
msgstr ""

View file

@ -0,0 +1,229 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * ddmrp_warning
#
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: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__active
msgid "Active"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_form
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_search
msgid "Archived"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__buffer_id
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Buffer"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid "Buffer Applicable Domain"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__company_id
msgid "Company"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_uid
msgid "Created by"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_date
msgid "Created on"
msgstr ""
#. module: ddmrp_warning
#: model:ir.actions.server,name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action_ir_actions_server
#: model:ir.cron,cron_name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action
msgid "DDMRP Buffer Warning calculation"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_definition
msgid "DDMRP Warning Definition"
msgstr ""
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_definition
msgid "DDMRP Warning Definitions"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_item
msgid "DDMRP Warning Item"
msgstr ""
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_item
msgid "DDMRP Warning Items"
msgstr ""
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_item
msgid "DDMRP Warnings"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__ddmrp_warning_item_ids
#: model:ir.model.fields,field_description:ddmrp_warning.field_stock_buffer__ddmrp_warning_item_ids
msgid "Ddmrp Warning Item"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Definition"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__name
msgid "Description"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__display_name
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__display_name
msgid "Display Name"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid ""
"Domain based on Stock Buffer, to define if the warning is applicable or not."
msgstr ""
#. module: ddmrp_warning
#. odoo-python
#: code:addons/ddmrp_warning/models/ddmrp_warning_definition.py:0
#, python-format
msgid ""
"Error evaluating %(name)s.\n"
" %(error)s"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Group By"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__3_high
msgid "High"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__id
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__id
msgid "ID"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition____last_update
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item____last_update
msgid "Last Modified on"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_uid
msgid "Last Updated by"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_date
msgid "Last Updated on"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__location_id
msgid "Location"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__1_low
msgid "Low"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__2_mid
msgid "Medium"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__name
msgid "Name"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__product_id
msgid "Product"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Refresh Warnings"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__severity
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__severity
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Severity"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_stock_buffer
msgid "Stock Buffer"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__warning_definition_id
msgid "Warning Definition"
msgstr ""
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_definition
msgid "Warning Definitions"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid "Warning Expression"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Warnings"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_search
msgid "With Warnings"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid ""
"Write Python code that defines when this warning should raise. The result of"
" executing the expression must be a boolean."
msgstr ""

View file

@ -0,0 +1,238 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * ddmrp_warning
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-11-14 14:36+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__active
msgid "Active"
msgstr "Activo"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_form
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_search
msgid "Archived"
msgstr "Archivado"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__buffer_id
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Buffer"
msgstr "Amortiguador"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid "Buffer Applicable Domain"
msgstr "Búfer Aplicable Dominio"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__company_id
msgid "Company"
msgstr "Compañía"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_date
msgid "Created on"
msgstr "Creado el"
#. module: ddmrp_warning
#: model:ir.actions.server,name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action_ir_actions_server
#: model:ir.cron,cron_name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action
msgid "DDMRP Buffer Warning calculation"
msgstr "Cálculo de Advertencia de búfer DDMRP"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_definition
msgid "DDMRP Warning Definition"
msgstr "Definición de advertencia DDMRP"
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_definition
msgid "DDMRP Warning Definitions"
msgstr "Definiciones de advertencia DDMRP"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_item
msgid "DDMRP Warning Item"
msgstr "Artículo de advertencia DDMRP"
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_item
msgid "DDMRP Warning Items"
msgstr "Artículos de advertencia DDMRP"
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_item
msgid "DDMRP Warnings"
msgstr "Advertencias DDMRP"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__ddmrp_warning_item_ids
#: model:ir.model.fields,field_description:ddmrp_warning.field_stock_buffer__ddmrp_warning_item_ids
msgid "Ddmrp Warning Item"
msgstr "Ddmrp Elemento de advertencia"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Definition"
msgstr "Definición"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__name
msgid "Description"
msgstr "Descripción"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__display_name
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__display_name
msgid "Display Name"
msgstr "Mostrar Nombre"
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid ""
"Domain based on Stock Buffer, to define if the warning is applicable or not."
msgstr ""
"Dominio basado en la Memoria intermedia de existencias, para definir si la "
"advertencia es aplicable o no."
#. module: ddmrp_warning
#. odoo-python
#: code:addons/ddmrp_warning/models/ddmrp_warning_definition.py:0
#, python-format
msgid ""
"Error evaluating %(name)s.\n"
" %(error)s"
msgstr ""
"Error al evaluar %(name)s.\n"
" %(error)s"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Group By"
msgstr "Agrupado por"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__3_high
msgid "High"
msgstr "Alto"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__id
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__id
msgid "ID"
msgstr "ID (identificación)"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition____last_update
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item____last_update
msgid "Last Modified on"
msgstr "Última Modificación el"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_uid
msgid "Last Updated by"
msgstr "Última Actualización Por"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_date
msgid "Last Updated on"
msgstr "Última Actualización el"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__location_id
msgid "Location"
msgstr "Localización"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__1_low
msgid "Low"
msgstr "Bajo/a"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__2_mid
msgid "Medium"
msgstr "Medio/a"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__name
msgid "Name"
msgstr "Nombre"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__product_id
msgid "Product"
msgstr "Producto"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Refresh Warnings"
msgstr "Actualizar Advertencias"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__severity
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__severity
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Severity"
msgstr "Severidad"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_stock_buffer
msgid "Stock Buffer"
msgstr "Amortiguador de Inventario"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__warning_definition_id
msgid "Warning Definition"
msgstr "Definición de Advertencia"
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_definition
msgid "Warning Definitions"
msgstr "Definiciones de advertencia"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid "Warning Expression"
msgstr "Expresión de Advertencia"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Warnings"
msgstr "Advertencias"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_search
msgid "With Warnings"
msgstr "Con Advertencias"
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid ""
"Write Python code that defines when this warning should raise. The result of "
"executing the expression must be a boolean."
msgstr ""
"Escriba código Python que defina cuándo debe saltar esta advertencia. El "
"resultado de ejecutar la expresión debe ser un booleano."

View file

@ -0,0 +1,238 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * ddmrp_warning
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-11-12 17:39+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__active
msgid "Active"
msgstr "Attiva"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_form
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_search
msgid "Archived"
msgstr "In archivio"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__buffer_id
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Buffer"
msgstr "Buffer"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid "Buffer Applicable Domain"
msgstr "Dominio buffer applicabile"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__company_id
msgid "Company"
msgstr "Azienda"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_date
msgid "Created on"
msgstr "Creato il"
#. module: ddmrp_warning
#: model:ir.actions.server,name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action_ir_actions_server
#: model:ir.cron,cron_name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action
msgid "DDMRP Buffer Warning calculation"
msgstr "Calcolo avviso buffer DDMRP"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_definition
msgid "DDMRP Warning Definition"
msgstr "Definizione avviso DDMRP"
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_definition
msgid "DDMRP Warning Definitions"
msgstr "Definizioni avviso DDMRP"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_item
msgid "DDMRP Warning Item"
msgstr "Elemento avviso DDRMP"
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_item
msgid "DDMRP Warning Items"
msgstr "Elementi avviso DDRMP"
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_item
msgid "DDMRP Warnings"
msgstr "Avvisi DDMRP"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__ddmrp_warning_item_ids
#: model:ir.model.fields,field_description:ddmrp_warning.field_stock_buffer__ddmrp_warning_item_ids
msgid "Ddmrp Warning Item"
msgstr "Elemento avviso DDRMP"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Definition"
msgstr "Definizione"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__name
msgid "Description"
msgstr "Descrizione"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__display_name
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid ""
"Domain based on Stock Buffer, to define if the warning is applicable or not."
msgstr ""
"Dominio basato sui buffer di materiale, per definire se la regola è "
"applicabile o meno."
#. module: ddmrp_warning
#. odoo-python
#: code:addons/ddmrp_warning/models/ddmrp_warning_definition.py:0
#, python-format
msgid ""
"Error evaluating %(name)s.\n"
" %(error)s"
msgstr ""
"Errore nella valutazione di %(name)s.\n"
" %(error)s"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Group By"
msgstr "Raggruppa per"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__3_high
msgid "High"
msgstr "Alta"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__id
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__id
msgid "ID"
msgstr "ID"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition____last_update
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__location_id
msgid "Location"
msgstr "Ubicazione"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__1_low
msgid "Low"
msgstr "Bassa"
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__2_mid
msgid "Medium"
msgstr "Media"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__name
msgid "Name"
msgstr "Nome"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__product_id
msgid "Product"
msgstr "Prodotto"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Refresh Warnings"
msgstr "Aggiorna avvisi"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__severity
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__severity
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Severity"
msgstr "Gravità"
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_stock_buffer
msgid "Stock Buffer"
msgstr "Buffer di materiale"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__warning_definition_id
msgid "Warning Definition"
msgstr "Definizione avviso"
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_definition
msgid "Warning Definitions"
msgstr "Definizioni avviso"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid "Warning Expression"
msgstr "Espressione avviso"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Warnings"
msgstr "Avvisi"
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_search
msgid "With Warnings"
msgstr "Con avvisi"
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid ""
"Write Python code that defines when this warning should raise. The result of "
"executing the expression must be a boolean."
msgstr ""
"Scrivere codice Python che definisce quando questo avviso dovrebbe "
"comparire. Il risultato dell'espressione deve essere un booleano."

View file

@ -0,0 +1,233 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * ddmrp_warning
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-05-29 15:36+0000\n"
"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
"translation.odoo-community.org>\n"
"Language-Team: none\n"
"Language: pt_BR\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: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__active
msgid "Active"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_form
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_definition_search
msgid "Archived"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__buffer_id
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Buffer"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid "Buffer Applicable Domain"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__company_id
msgid "Company"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_uid
msgid "Created by"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__create_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__create_date
msgid "Created on"
msgstr ""
#. module: ddmrp_warning
#: model:ir.actions.server,name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action_ir_actions_server
#: model:ir.cron,cron_name:ddmrp_warning.ir_cron_ddmrp_warning_calculation_scheduler_action
msgid "DDMRP Buffer Warning calculation"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_definition
msgid "DDMRP Warning Definition"
msgstr ""
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_definition
msgid "DDMRP Warning Definitions"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_ddmrp_warning_item
msgid "DDMRP Warning Item"
msgstr ""
#. module: ddmrp_warning
#: model:ir.actions.act_window,name:ddmrp_warning.action_ddmrp_warning_item
msgid "DDMRP Warning Items"
msgstr ""
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_item
msgid "DDMRP Warnings"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__ddmrp_warning_item_ids
#: model:ir.model.fields,field_description:ddmrp_warning.field_stock_buffer__ddmrp_warning_item_ids
msgid "Ddmrp Warning Item"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Definition"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__name
msgid "Description"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__display_name
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__display_name
msgid "Display Name"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__warning_domain
msgid ""
"Domain based on Stock Buffer, to define if the warning is applicable or not."
msgstr ""
#. module: ddmrp_warning
#. odoo-python
#: code:addons/ddmrp_warning/models/ddmrp_warning_definition.py:0
#, python-format
msgid ""
"Error evaluating %(name)s.\n"
" %(error)s"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Group By"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__3_high
msgid "High"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__id
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__id
msgid "ID"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition____last_update
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item____last_update
msgid "Last Modified on"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_uid
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_uid
msgid "Last Updated by"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__write_date
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__write_date
msgid "Last Updated on"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__location_id
msgid "Location"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__1_low
msgid "Low"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields.selection,name:ddmrp_warning.selection__ddmrp_warning_definition__severity__2_mid
msgid "Medium"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__name
msgid "Name"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__product_id
msgid "Product"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Refresh Warnings"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__severity
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__severity
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.view_ddmrp_warning_item_search
msgid "Severity"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model,name:ddmrp_warning.model_stock_buffer
msgid "Stock Buffer"
msgstr "Buffer de estoque"
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_item__warning_definition_id
msgid "Warning Definition"
msgstr ""
#. module: ddmrp_warning
#: model:ir.ui.menu,name:ddmrp_warning.menu_ddmrp_warning_definition
msgid "Warning Definitions"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,field_description:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid "Warning Expression"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_view_form
msgid "Warnings"
msgstr ""
#. module: ddmrp_warning
#: model_terms:ir.ui.view,arch_db:ddmrp_warning.stock_buffer_search
msgid "With Warnings"
msgstr ""
#. module: ddmrp_warning
#: model:ir.model.fields,help:ddmrp_warning.field_ddmrp_warning_definition__python_code
msgid ""
"Write Python code that defines when this warning should raise. The result of "
"executing the expression must be a boolean."
msgstr ""

View file

@ -0,0 +1,3 @@
from . import ddmrp_warning_definition
from . import ddmrp_warning_item
from . import stock_buffer

View file

@ -0,0 +1,79 @@
# Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from odoo import _, fields, models, tools
from odoo.exceptions import UserError
from odoo.osv import expression
from odoo.tools.safe_eval import safe_eval
class DdmrpWarningDefinition(models.Model):
_name = "ddmrp.warning.definition"
_description = "DDMRP Warning Definition"
name = fields.Char(
string="Description",
)
python_code = fields.Text(
string="Warning Expression",
help="Write Python code that defines when this warning should "
"raise. The result of executing the expression must be "
"a boolean.",
default="""# Available locals:\n# - buffer: A buffer record\nTrue""",
)
severity = fields.Selection(
selection=[("1_low", "Low"), ("2_mid", "Medium"), ("3_high", "High")],
default="2_mid",
)
active = fields.Boolean(default=True)
warning_domain = fields.Char(
string="Buffer Applicable Domain",
default="[]",
help="Domain based on Stock Buffer, to define if the "
"warning is applicable or not.",
)
ddmrp_warning_item_ids = fields.One2many(
comodel_name="ddmrp.warning.item",
inverse_name="warning_definition_id",
readonly=True,
)
def _eval_warning_domain(self, buffer, domain):
buffer_domain = [("id", "=", buffer.id)]
return bool(
self.env["stock.buffer"].search_count(
expression.AND([buffer_domain, domain])
)
)
def _is_warning_applicable(self, buffer):
domain = safe_eval(self.warning_domain) or []
if domain:
return self._eval_warning_domain(buffer, domain)
return True
def evaluate_definition(self, buffer):
self.ensure_one()
try:
res = safe_eval(
self.python_code,
globals_dict={
"buffer": buffer,
"time": tools.safe_eval.time,
"datetime": tools.safe_eval.datetime,
"dateutil": tools.safe_eval.dateutil,
},
)
except Exception as error:
raise UserError(
_("Error evaluating %(name)s.\n %(error)s")
% ({"name": self._name, "error": error})
) from error
return res
def write(self, vals):
# Unlink warning items when definition is archived
res = super().write(vals)
if "active" in vals and not vals.get("active"):
self.ddmrp_warning_item_ids.unlink()
return res

View file

@ -0,0 +1,39 @@
# Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from odoo import fields, models
class DdmrpWarningItem(models.Model):
_name = "ddmrp.warning.item"
_description = "DDMRP Warning Item"
_order = "severity desc, id"
warning_definition_id = fields.Many2one(
comodel_name="ddmrp.warning.definition",
ondelete="cascade",
)
buffer_id = fields.Many2one(comodel_name="stock.buffer", ondelete="cascade")
name = fields.Char(
compute="_compute_name",
)
product_id = fields.Many2one(related="buffer_id.product_id")
location_id = fields.Many2one(
related="buffer_id.location_id", groups="stock.group_stock_multi_locations"
)
severity = fields.Selection(
related="warning_definition_id.severity",
store=True,
readonly=True,
)
company_id = fields.Many2one(
related="buffer_id.company_id",
store=True,
)
def _compute_name(self):
for rec in self:
rec.name = "{} in {}".format(
rec.warning_definition_id.display_name,
rec.buffer_id.display_name,
)

View file

@ -0,0 +1,79 @@
# Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
import logging
import threading
from odoo import api, fields, models
from odoo.tools.misc import split_every
_logger = logging.getLogger(__name__)
class Buffer(models.Model):
_inherit = "stock.buffer"
ddmrp_warning_item_ids = fields.One2many(
comodel_name="ddmrp.warning.item",
inverse_name="buffer_id",
readonly=True,
)
def _generate_ddmrp_warnings(self):
definitions = self.env["ddmrp.warning.definition"].search([])
item_model = self.env["ddmrp.warning.item"]
for rec in self:
for d in definitions:
existing = item_model.search(
[("buffer_id", "=", rec.id), ("warning_definition_id", "=", d.id)]
)
warning_applicable = d._is_warning_applicable(rec)
if warning_applicable:
warning_raised = d.evaluate_definition(rec)
if warning_raised and not existing:
item_model.create(
{"buffer_id": rec.id, "warning_definition_id": d.id}
)
elif not warning_raised and existing:
existing.unlink()
elif not warning_applicable and existing:
existing.unlink()
def action_generate_warnings(self):
self._generate_ddmrp_warnings()
return True
@api.model
def cron_generate_ddmrp_warnings(self, automatic=False):
auto_commit = not getattr(threading.current_thread(), "testing", False)
buffer_ids = self.search([]).ids
i = 0
j = len(buffer_ids)
for buffer_chunk_ids in split_every(self.CRON_DDMRP_CHUNKS, buffer_ids):
for b in self.browse(buffer_chunk_ids).exists():
try:
i += 1
_logger.debug(
"ddmrp cron_generate_ddmrp_warnings: {}. ({}/{})".format(
b.name, i, j
)
)
if automatic:
with self.env.cr.savepoint():
b._generate_ddmrp_warnings()
else:
b._generate_ddmrp_warnings()
except Exception:
_logger.exception("Fail to compute Warnings for buffer %s", b.name)
if not automatic:
raise
if auto_commit:
self._cr.commit() # pylint: disable=E8102
return True
def write(self, vals):
# Unlink warning items when buffer is archived
res = super().write(vals)
if "active" in vals and not vals.get("active"):
self.ddmrp_warning_item_ids.unlink()
return res

View file

@ -0,0 +1 @@
* Lois Rilo Antelo <lois.rilo@forgeflow.com>

View file

@ -0,0 +1,3 @@
Adds configuration warnings on stock buffers based on different definitions.
This modules include some basic warnings but you can create your own based on
your environment.

View file

@ -0,0 +1,5 @@
To use this module you can proceed as follows:
#. Use the filter *Has Warnings* in stock buffers.
#. In a buffer form view go to the *Warnings* tab and check the active warnings.
#. Fix the issues, and click on *Refresh Warnings*.

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="0">
<record model="ir.rule" id="warning_item_comp_rule">
<field name="name">Warning Item multi-company</field>
<field name="model_id" ref="model_ddmrp_warning_item" />
<field name="global" eval="True" />
<field
name="domain_force"
>['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
</odoo>

View file

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
ddmrp_warning_definition_user,ddmrp.warning.definition.user,model_ddmrp_warning_definition,ddmrp.group_stock_buffer_maintainer,1,0,0,0
ddmrp_warning_definition_manager,ddmrp.warning.definition.manager,model_ddmrp_warning_definition,ddmrp.group_ddmrp_manager,1,1,1,1
ddmrp_warning_item_user,ddmrp.warning.item.user,model_ddmrp_warning_item,ddmrp.group_stock_buffer_maintainer,1,0,1,1
ddmrp_warning_item_manager,ddmrp.warning.item.manager,model_ddmrp_warning_item,ddmrp.group_ddmrp_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 ddmrp_warning_definition_user ddmrp.warning.definition.user model_ddmrp_warning_definition ddmrp.group_stock_buffer_maintainer 1 0 0 0
3 ddmrp_warning_definition_manager ddmrp.warning.definition.manager model_ddmrp_warning_definition ddmrp.group_ddmrp_manager 1 1 1 1
4 ddmrp_warning_item_user ddmrp.warning.item.user model_ddmrp_warning_item ddmrp.group_stock_buffer_maintainer 1 0 1 1
5 ddmrp_warning_item_manager ddmrp.warning.item.manager model_ddmrp_warning_item ddmrp.group_ddmrp_manager 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View file

@ -0,0 +1,437 @@
<!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>DDMRP Warning</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" id="ddmrp-warning">
<h1 class="title">DDMRP Warning</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:a4ff0f8b466d634f6fb816d1f05864999320776bd7fa6aed23fd367316f7ec52
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/ddmrp/tree/16.0/ddmrp_warning"><img alt="OCA/ddmrp" src="https://img.shields.io/badge/github-OCA%2Fddmrp-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/ddmrp-16-0/ddmrp-16-0-ddmrp_warning"><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/ddmrp&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>Adds configuration warnings on stock buffers based on different definitions.
This modules include some basic warnings but you can create your own based on
your environment.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>To use this module you can proceed as follows:</p>
<ol class="arabic simple">
<li>Use the filter <em>Has Warnings</em> in stock buffers.</li>
<li>In a buffer form view go to the <em>Warnings</em> tab and check the active warnings.</li>
<li>Fix the issues, and click on <em>Refresh Warnings</em>.</li>
</ol>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/ddmrp/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/ddmrp/issues/new?body=module:%20ddmrp_warning%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">
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>ForgeFlow</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>Lois Rilo Antelo &lt;<a class="reference external" href="mailto:lois.rilo&#64;forgeflow.com">lois.rilo&#64;forgeflow.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<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/ddmrp/tree/16.0/ddmrp_warning">OCA/ddmrp</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>
</body>
</html>

View file

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

View file

@ -0,0 +1,61 @@
# Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from odoo.addons.ddmrp.tests.common import TestDdmrpCommon
class TestDDMRPWarning(TestDdmrpCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.warning_item_model = cls.env["ddmrp.warning.item"]
cls.spike_warning = cls.env.ref(
"ddmrp_warning.ddmrp_warning_definition_dlt_and_spike_horizon"
)
cls.buffer_warnings = cls.bufferModel.create(
{
"buffer_profile_id": cls.buffer_profile_mmm.id,
"product_id": cls.productA.id,
"location_id": cls.location_shelf1.id,
"warehouse_id": cls.warehouse.id,
"qty_multiple": 1.0,
"adu_calculation_method": cls.adu_fixed.id,
"adu_fixed": 5.0,
"lead_days": 10.0,
"order_spike_horizon": 0.0,
}
)
@classmethod
def _refresh_involved_buffers(cls):
cls.buffer_warnings.cron_actions()
cls.buffer_warnings._generate_ddmrp_warnings()
def test_01_buffer_with_warnings(self):
self._refresh_involved_buffers()
self.assertTrue(self.buffer_warnings.ddmrp_warning_item_ids)
prev_count = len(self.buffer_warnings.ddmrp_warning_item_ids)
spike_warning_item = self.buffer_warnings.ddmrp_warning_item_ids.filtered(
lambda w: w.warning_definition_id == self.spike_warning
)
self.assertTrue(spike_warning_item)
# Fix issue:
self.buffer_warnings.write({"order_spike_horizon": 10.0})
self._refresh_involved_buffers()
new_count = len(self.buffer_warnings.ddmrp_warning_item_ids)
self.assertEqual(prev_count - new_count, 1)
def test_02_buffer_archive(self):
self._refresh_involved_buffers()
self.assertTrue(self.buffer_warnings.ddmrp_warning_item_ids)
self.buffer_warnings.active = False
self.assertFalse(self.buffer_warnings.ddmrp_warning_item_ids)
def test_03_definition_archive(self):
self._refresh_involved_buffers()
self.assertTrue(self.spike_warning.ddmrp_warning_item_ids)
self.assertTrue(self.buffer_warnings.ddmrp_warning_item_ids)
self.spike_warning.active = False
self.assertFalse(self.spike_warning.ddmrp_warning_item_ids)
self.assertFalse(self.buffer_warnings.ddmrp_warning_item_ids)

View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
-->
<odoo>
<record id="stock_buffer_view_form" model="ir.ui.view">
<field name="name">stock.buffer.form</field>
<field name="model">stock.buffer</field>
<field name="inherit_id" ref="ddmrp.stock_buffer_view_form" />
<field name="arch" type="xml">
<notebook position="inside">
<page name="warnings" string="Warnings">
<button
string="Refresh Warnings"
name="action_generate_warnings"
icon="fa-refresh"
type="object"
colspan="2"
/>
<field name="ddmrp_warning_item_ids" nolabel="1" colspan="2">
<tree
decoration-info="severity == '1_low'"
decoration-warning="severity == '2_mid'"
decoration-danger="severity == '3_high'"
>
<field name="name" />
<field name="severity" />
</tree>
</field>
</page>
</notebook>
</field>
</record>
<record id="stock_buffer_search" model="ir.ui.view">
<field name="name">stock.buffer.search - ddmrp_warning</field>
<field name="model">stock.buffer</field>
<field name="inherit_id" ref="ddmrp.stock_buffer_search" />
<field name="arch" type="xml">
<group name="procure_recommendation" position="after">
<separator />
<group name="warnings">
<filter
name="has_ddmrp_warnings"
string="With Warnings"
domain="[('ddmrp_warning_item_ids', '!=', False)]"
/>
</group>
</group>
</field>
</record>
</odoo>

View file

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
-->
<odoo>
<record id="view_ddmrp_warning_definition_tree" model="ir.ui.view">
<field name="name">ddmrp.warning.definition.tree</field>
<field name="model">ddmrp.warning.definition</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="severity" />
<field name="active" />
</tree>
</field>
</record>
<record id="view_ddmrp_warning_definition_form" model="ir.ui.view">
<field name="name">ddmrp.warning.definition.form</field>
<field name="model">ddmrp.warning.definition</field>
<field name="arch" type="xml">
<form>
<sheet>
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<div class="oe_title">
<h1>
<field name="name" />
</h1>
</div>
<group>
<field
name="warning_domain"
widget="domain"
options="{'model': 'stock.buffer', 'in_dialog': true}"
/>
<field name="severity" />
<field name="python_code" />
<field name="active" invisible="1" />
</group>
</sheet>
</form>
</field>
</record>
<record id="view_ddmrp_warning_definition_search" model="ir.ui.view">
<field name="name">ddmrp.warning.definition.search</field>
<field name="model">ddmrp.warning.definition</field>
<field name="arch" type="xml">
<search>
<field name="name" />
<field name="severity" />
<separator />
<filter
string="Archived"
name="inactive"
domain="[('active', '=', False)]"
/>
</search>
</field>
</record>
<record id="action_ddmrp_warning_definition" model="ir.actions.act_window">
<field name="name">DDMRP Warning Definitions</field>
<field name="res_model">ddmrp.warning.definition</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem
name="Warning Definitions"
parent="ddmrp.menu_ddmrp_config"
id="menu_ddmrp_warning_definition"
action="action_ddmrp_warning_definition"
sequence="85"
/>
</odoo>

View file

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2021 ForgeFlow S.L. (https://www.forgeflow.com)
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
-->
<odoo>
<record id="view_ddmrp_warning_item_tree" model="ir.ui.view">
<field name="name">ddmrp.warning.item.tree</field>
<field name="model">ddmrp.warning.item</field>
<field name="arch" type="xml">
<tree
decoration-info="severity == '1_low'"
decoration-warning="severity == '2_mid'"
decoration-danger="severity == '3_high'"
>
<field name="name" />
<field name="product_id" />
<field name="severity" />
<field name="location_id" groups="stock.group_stock_multi_locations" />
<field name="company_id" groups="base.group_multi_company" />
</tree>
</field>
</record>
<record id="view_ddmrp_warning_item_form" model="ir.ui.view">
<field name="name">ddmrp.warning.item.form</field>
<field name="model">ddmrp.warning.item</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="warning_definition_id" />
<field name="buffer_id" />
<field name="severity" />
</group>
<group>
<field name="product_id" />
<field
name="location_id"
groups="stock.group_stock_multi_locations"
/>
<field
name="company_id"
groups="base.group_multi_company"
/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_ddmrp_warning_item_search" model="ir.ui.view">
<field name="name">ddmrp.warning.item.search</field>
<field name="model">ddmrp.warning.item</field>
<field name="arch" type="xml">
<search>
<field name="buffer_id" />
<field name="product_id" />
<field name="location_id" groups="stock.group_stock_multi_locations" />
<field name="severity" />
<separator />
<group expand="0" string="Group By">
<filter
string="Buffer"
name="groupby_buffer"
domain="[]"
context="{'group_by':'buffer_id'}"
/>
<filter
string="Severity"
name="groupby_severity"
domain="[]"
context="{'group_by':'severity'}"
/>
<filter
string="Definition"
name="groupby_warning_definition_id"
domain="[]"
context="{'group_by':'warning_definition_id'}"
/>
</group>
</search>
</field>
</record>
<record id="action_ddmrp_warning_item" model="ir.actions.act_window">
<field name="name">DDMRP Warning Items</field>
<field name="res_model">ddmrp.warning.item</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem
name="DDMRP Warnings"
parent="stock.menu_warehouse_report"
id="menu_ddmrp_warning_item"
action="action_ddmrp_warning_item"
sequence="150"
/>
</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 Ddmrp_warning Module - ddmrp_warning
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 ddmrp_warning. 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:
- [ddmrp](../../odoo-bringout-oca-ddmrp-ddmrp)

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

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-ddmrp-ddmrp_warning"
# or
uv pip install odoo-bringout-oca-ddmrp-ddmrp_warning"
```

View file

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

View file

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

View file

@ -0,0 +1,42 @@
# Security
Access control and security definitions in ddmrp_warning.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../ddmrp_warning/security/ir.model.access.csv)**
- 4 model access rules
## Record Rules
Row-level security rules defined in:
- **[ddmrp_warning_rules.xml](../ddmrp_warning/security/ddmrp_warning_rules.xml)**
## Security Groups & Configuration
Security groups and permissions defined in:
- **[ddmrp_warning_rules.xml](../ddmrp_warning/security/ddmrp_warning_rules.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:
- **[ddmrp_warning_rules.xml](../ddmrp_warning/security/ddmrp_warning_rules.xml)**
- Security groups, categories, and XML-based rules
- **[ir.model.access.csv](../ddmrp_warning/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

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

View file

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

View file

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

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-ddmrp-ddmrp_warning"
version = "16.0.0"
description = "DDMRP Warning - Adds configuration warnings on stock buffers."
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ddmrp-ddmrp>=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 = ["ddmrp_warning"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]