diff --git a/ddmrp/README.rst b/ddmrp/README.rst new file mode 100644 index 000000000..9f5d82828 --- /dev/null +++ b/ddmrp/README.rst @@ -0,0 +1,334 @@ +===== +DDMRP +===== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/15.0/ddmrp + :alt: OCA/ddmrp +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/ddmrp-15-0/ddmrp-15-0-ddmrp + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/255/15.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Demand Driven Material Requirements Planning is a formal multi-echelon +planning and execution method developed by Ms. Carol Ptak and Mr. Chad Smith. + +DDMRP combines blended aspects of Material Requirements Planning (MRP), +Distribution Requirements Planning (DRP) with the pull and visibility +emphases found in Lean and the Theory of Constraints and the variability +reduction emphasis of Six Sigma. + +This method has five sequential components: + +#. *Strategic Inventory Positioning*. Answers the question "Given our system + and environment, where should we place inventory to have the best + protection?" and determines where should decoupling points of inventory be + placed. + +#. *Buffer Profiles and Levels*. Determine the amount of protection at those + decoupling points. + +#. *Dynamic Adjustments*. Allow the company to adapt buffers to group and + individual part trait changes over time through the use of several types + of adjustments. + +#. *Demand Driven Planning*. Allow to launch purchase orders (POs), + manufacturing orders (MOs) and Transfer Orders (TOs) based on the priority + dictated by the buffers. + +#. *Visible and Collaborative Execution*. These POs, MOs and TOs have to be + effectively managed to synchronize with the changes that often occur within + the "execution horizon." + +These five components work together to greatly dampen, if not eliminate, +the nervousness of traditional MRP systems and the bullwhip effect in +complex and challenging environments. + +This approach provides real information about those parts that are +truly at risk of negatively impacting the planned availability of inventory. + +DDMRP sorts the significant few items that require attention from +the many parts that are being managed. Under the DDMRP approach, +fewer planners can make better decisions more quickly. That means companies +will be better able to leverage their working and human capital. + +Demand Driven Material Requirements Planning is quickly being adopted +by a wide variety of leading companies across the world. + +Some of the benefits reported by the DDMRP method include: + +* High fill rate performance +* Lead time reductions +* Inventory reductions, while improving customer service +* Eliminate costs related to expedite +* Planners see priorities instead of constantly fighting the conflicting + messages of MRP + +It is highly recommended to read the book 'Demand Driven Material +Requirements Planning (DDMRP)' by Carol Ptak and Chad Smith. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +We strongly recommend to modify the configuration of the reservation method +to manual in the outgoing operation types (so deliveries +related to Sales Orders aren't automatically reserved) and to avoid to +reserve stock for specific moves, buffers are in fact a reservation of stock. +However, while **reservation is discouraged**, it is still available to be +used, in case of reserved stock be aware that the buffer will be blind to this +transfers and stock and you are bypassing the DDMRP reordering flow. + +Configuration +============= + +Scheduled actions +~~~~~~~~~~~~~~~~~ + +* Go to *Settings > Technical*. +* 'DDMRP Buffer ADU calculation'. Computes the Average Daily Usage for all + Buffers. +* 'Reordering Rule DDMRP calculation'. Computes the Qualified Demand, Net + Flow Position, Planning and Execution priorities for all Buffers. + +Decoupled Lead Time computation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The DLT is automatically computed by the system. + +For manufactured products' buffers just remember to provide and +set properly the following information: + +* The *Manufacturing Lead Time* for the manufactured product. It can be found + at the product form view under the tab *Sales*. +* The *Delivery Lead Time* for the preferred vendor of a product. This is + important for the products which are purchased and are components in any + Bill of Materials. + +For purchased/distributed products' buffers the logic is simpler. + +* In the first place the system will look if there are Vendors for the product, + if so it will use the *Delivery Lead Time* of the preferred one. +* In case of absence of vendors, the *Lead Time* at the bottom of the Buffer + form view will be used. + +Usage +===== + +To easily identify were are you maintaining buffers in your Bill of +Materials, you will need to first provide location information on the Bills +of Materials. + +* Go to *Manufacturing / Products / Bill of Materials* and update the + 'Location' in all the Bill of Materials and associated lines, + indicating where will the parts be placed/used during the manufacturing + process. + +* Print the report 'BOM Structure' to display where in your BOM are you + maintaining buffers, and to identify the Lead Time (LT) of each product, and + Decouple Lead Time (DLT). + + +Buffers +~~~~~~~ + +To list the list of inventory buffers, go to one of the following: +* *Inventory / Master Data / Stock Buffer Planning* +* *Inventory / Master Data / Reordering Rules* + + +Buffer Profiles +~~~~~~~~~~~~~~~ +Buffer profiles make maintenance of buffers easier by grouping them in +profiles. Changes applied to the profiles will be applicable in the +associated buffer calculations. + +* Go to *Inventory / Configuration / Buffer Profiles*. + +The Buffer Profile Lead Time Factor influences the size of the Buffer Green +zone. Items with longer lead times will usually have smaller green zones, which +will translate in more frequent supply order generation. + +* Go to *Inventory / Configuration / Buffer Profile Lead Time Factor* to + chan + +The Buffer Profile Variability Factor influences the size of the Buffer Red +Safety zone. Items with longer lead times will usually have smaller green +zones, which will translate in more frequent supply order generation. + +* Go to *Inventory / Configuration / Buffer Profile Lead Time Factor*. + +Usual factors should range from 0.2 (long lead time) to 0.8 (short lead time). + + +Product attributes +~~~~~~~~~~~~~~~~~~ + +* For manufactured products, go to *Manufacturing / Products* and + update the 'Manufacturing Lead Time' field, available in the tab *Inventory*. +* For purchased products, go to go to *Purchasing / Products* and update the + *Delivery Lead Time* for each vendor, available in tab *Purchase* and section + *Vendors*. + + +ADU Calculation Methods +~~~~~~~~~~~~~~~~~~~~~~~ + +The Average Daily Usage (ADU) defines the frequency of demand of a product in a +certain location. It can be computed in different ways, which you can configure +with ADU calculation methods as follows: + +#. Go to *Inventory / Configuration / DDMRP / ADU calculation methods*. +#. Indicate a name, a calculation method (fixed, past-looking, + future-looking or blended). +#. Fill the corresponding period (past, future or both for blended method) to + specify the length of period consideration (in days). +#. Indicate the source of information: stock moves or demand estimates. +#. If you use the blended method fill also the *Past Factor* and + *Future Factor*. + +If you do not have prior history of stock moves in your system, it is advised +to use fixed method or start to work on future estimates. If you have +past-history of stock moves, best use past-looking method or blended method. + +The ADU is computed every day by default in a background job independently +from the other buffer fields. This computation can be done with less frequency +but it is not recommended to run it less than weekly or more than daily. +Circumstantially, If you need to force the calculation of the ADU go to +*Inventory / Configuration / DDMRP / Run DDMRP* and click on +*Run ADU calculation*. + +Known issues / Roadmap +====================== + +The DDMRP `roadmap `_ +and `known issues `_ can +be found on GitHub. + +Changelog +========= + +13.0.1.1.0 (2020-07-01) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Features** + +- - New setting *Update NFP on Stock Buffers on relevant events*. + - New dedicated settings block. (`#50 `_) + + +13.0.1.0.0 (2020-06-11) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [MIG/REF] Migration of module to v13 and refactor (added new dedicated model + for stock buffer). + +11.0.1.3.0 (2019-02-21) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [ADD] New chart that depict information about the supply and demand ( + displaying also de order spike threshold and horizon) for a buffer. + (`#40 `_) + +11.0.1.2.0 (2019-01-29) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [IMP] Performance improvement of execution priority calculation and ADU. + (`#36 `_) +* [IMP] Use the minimum quantity to adjust the procure recommendation. + (`#37 `_) + +11.0.1.1.0 (2018-08-31) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [IMP] Implemented Blended ADU calculation method. + (`#23 `_) + +11.0.1.0.0 (2018-07-16) +~~~~~~~~~~~~~~~~~~~~~~~ + +* Start of the history + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Jordi Ballester Alomar +* Lois Rilo Antelo +* Guewen Baconnier +* Adria Gil Sorribes +* Christopher Ormaza + +Other credits +~~~~~~~~~~~~~ + +The initial development of this module has been financially supported by: + +* Aleph Objects, Inc. + +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-JordiBForgeFlow| image:: https://github.com/JordiBForgeFlow.png?size=40px + :target: https://github.com/JordiBForgeFlow + :alt: JordiBForgeFlow +.. |maintainer-LoisRForgeFlow| image:: https://github.com/LoisRForgeFlow.png?size=40px + :target: https://github.com/LoisRForgeFlow + :alt: LoisRForgeFlow +.. |maintainer-ChrisOForgeFlow| image:: https://github.com/ChrisOForgeFlow.png?size=40px + :target: https://github.com/ChrisOForgeFlow + :alt: ChrisOForgeFlow + +Current `maintainers `__: + +|maintainer-JordiBForgeFlow| |maintainer-LoisRForgeFlow| |maintainer-ChrisOForgeFlow| + +This module is part of the `OCA/ddmrp `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/ddmrp/__init__.py b/ddmrp/__init__.py new file mode 100644 index 000000000..7c4c8a90a --- /dev/null +++ b/ddmrp/__init__.py @@ -0,0 +1,3 @@ +from . import models +from . import wizards +from . import report diff --git a/ddmrp/__manifest__.py b/ddmrp/__manifest__.py new file mode 100644 index 000000000..3e8a56041 --- /dev/null +++ b/ddmrp/__manifest__.py @@ -0,0 +1,72 @@ +# Copyright 2016-20 ForgeFlow S.L. (https://www.forgeflow.com) +# Copyright 2016 Aleph Objects, Inc. (https://www.alephobjects.com/) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +{ + "name": "DDMRP", + "summary": "Demand Driven Material Requirements Planning", + "version": "16.0.1.0.0", + "license": "LGPL-3", + "development_status": "Beta", + "author": "ForgeFlow, " "Odoo Community Association (OCA)", + "maintainers": ["JordiBForgeFlow", "LoisRForgeFlow", "ChrisOForgeFlow"], + "website": "https://github.com/OCA/ddmrp", + "category": "Warehouse", + "depends": [ + "purchase_stock", + "mrp_bom_location", + "stock_demand_estimate", + "web_widget_bokeh_chart", + "mrp_multi_level", + "base_cron_exclusion", + "stock_warehouse_calendar", + "stock_helper", + ], + "data": [ + "data/product_adu_calculation_method_data.xml", + "data/stock_buffer_profile_variability_data.xml", + "data/stock_buffer_profile_lead_time_data.xml", + "data/stock_buffer_profile_data.xml", + "data/ir_sequence.xml", + "data/decimal_precision_data.xml", + "report/mrp_report_bom_structure.xml", + "security/ddmrp_groups.xml", + "security/ddmrp_rules.xml", + "security/ir.model.access.csv", + "wizards/make_procurement_buffer_view.xml", + "views/stock_buffer_profile_view.xml", + "views/stock_buffer_profile_variability_view.xml", + "views/stock_buffer_profile_lead_time_view.xml", + "views/product_adu_calculation_method_view.xml", + "views/stock_warehouse_views.xml", + "views/mrp_production_view.xml", + "views/purchase_order_view.xml", + "views/purchase_order_line_view.xml", + "views/product_view.xml", + "views/mrp_bom_view.xml", + "views/stock_move_views.xml", + "views/stock_buffer_view.xml", + "views/stock_picking.xml", + "data/ir_cron.xml", + "wizards/ddmrp_run_view.xml", + "wizards/res_config_settings_views.xml", + ], + "demo": [ + "demo/ddmrp_demo_user.xml", + "demo/res_partner_demo.xml", + "demo/product_category_demo.xml", + "demo/product_product_demo.xml", + "demo/product_supplierinfo_demo.xml", + "demo/mrp_bom_demo.xml", + "demo/stock_buffer_demo.xml", + ], + "assets": { + "web.assets_backend": [ + "ddmrp/static/src/**/*.js", + "ddmrp/static/src/**/*.scss", + "ddmrp/static/src/**/*.xml", + ], + }, + "installable": True, + "application": True, +} diff --git a/ddmrp/data/decimal_precision_data.xml b/ddmrp/data/decimal_precision_data.xml new file mode 100644 index 000000000..c73fec1f1 --- /dev/null +++ b/ddmrp/data/decimal_precision_data.xml @@ -0,0 +1,19 @@ + + + + Lead Time + + + + Average Daily Usage + + + diff --git a/ddmrp/data/ir_cron.xml b/ddmrp/data/ir_cron.xml new file mode 100644 index 000000000..5c18b2e0e --- /dev/null +++ b/ddmrp/data/ir_cron.xml @@ -0,0 +1,39 @@ + + + + DDMRP Buffer calculation + code + + 8 + hours + -1 + 6 + + + model.cron_ddmrp(True) + + + DDMRP Buffer ADU calculation + code + + 1 + days + -1 + 3 + + + + model.cron_ddmrp_adu(True) + + diff --git a/ddmrp/data/ir_sequence.xml b/ddmrp/data/ir_sequence.xml new file mode 100644 index 000000000..6b8ce789f --- /dev/null +++ b/ddmrp/data/ir_sequence.xml @@ -0,0 +1,12 @@ + + + + Stock Buffer + stock.buffer + SB/ + 5 + 1 + 1 + + + diff --git a/ddmrp/data/product_adu_calculation_method_data.xml b/ddmrp/data/product_adu_calculation_method_data.xml new file mode 100644 index 000000000..1e305df7f --- /dev/null +++ b/ddmrp/data/product_adu_calculation_method_data.xml @@ -0,0 +1,22 @@ + + + + Fixed + fixed + + + Past (120 days) + past + actual + 120 + + + Future (120 days) + future + estimates + 120 + + diff --git a/ddmrp/data/stock_buffer_profile_data.xml b/ddmrp/data/stock_buffer_profile_data.xml new file mode 100644 index 000000000..e1f14efbf --- /dev/null +++ b/ddmrp/data/stock_buffer_profile_data.xml @@ -0,0 +1,894 @@ + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + replenish + + purchased + + + + replenish + + manufactured + + + + replenish + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + min_max + + purchased + + + + min_max + + manufactured + + + + min_max + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + + replenish_override + + purchased + + + + replenish_override + + manufactured + + + + replenish_override + + distributed + + + diff --git a/ddmrp/data/stock_buffer_profile_lead_time_data.xml b/ddmrp/data/stock_buffer_profile_lead_time_data.xml new file mode 100644 index 000000000..7bd537d13 --- /dev/null +++ b/ddmrp/data/stock_buffer_profile_lead_time_data.xml @@ -0,0 +1,24 @@ + + + + Short + 0.75 + + + Medium + 0.5 + + + Long + 0.25 + + diff --git a/ddmrp/data/stock_buffer_profile_variability_data.xml b/ddmrp/data/stock_buffer_profile_variability_data.xml new file mode 100644 index 000000000..7d9cfff7a --- /dev/null +++ b/ddmrp/data/stock_buffer_profile_variability_data.xml @@ -0,0 +1,24 @@ + + + + Low + 0.25 + + + Medium + 0.5 + + + High + 0.75 + + diff --git a/ddmrp/demo/ddmrp_demo_user.xml b/ddmrp/demo/ddmrp_demo_user.xml new file mode 100644 index 000000000..a90ce6616 --- /dev/null +++ b/ddmrp/demo/ddmrp_demo_user.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/ddmrp/demo/mrp_bom_demo.xml b/ddmrp/demo/mrp_bom_demo.xml new file mode 100644 index 000000000..8f87bb371 --- /dev/null +++ b/ddmrp/demo/mrp_bom_demo.xml @@ -0,0 +1,41 @@ + + + + + + + + 5 + + + + 1 + + + 5 + + + + + + + + 5 + + + + 1 + + 5 + + + + + + 1 + + 10 + + + + diff --git a/ddmrp/demo/product_category_demo.xml b/ddmrp/demo/product_category_demo.xml new file mode 100644 index 000000000..8bd64fd96 --- /dev/null +++ b/ddmrp/demo/product_category_demo.xml @@ -0,0 +1,6 @@ + + + + DDMRP + + diff --git a/ddmrp/demo/product_product_demo.xml b/ddmrp/demo/product_product_demo.xml new file mode 100644 index 000000000..d0e1a9f1f --- /dev/null +++ b/ddmrp/demo/product_product_demo.xml @@ -0,0 +1,49 @@ + + + + FP-01 + + product + + + 2 + + + + AS-01 + + product + + + 6 + + + + RM-01 + + product + + + + + + RM-02 + + product + + + + + diff --git a/ddmrp/demo/product_supplierinfo_demo.xml b/ddmrp/demo/product_supplierinfo_demo.xml new file mode 100644 index 000000000..28a7e90b0 --- /dev/null +++ b/ddmrp/demo/product_supplierinfo_demo.xml @@ -0,0 +1,17 @@ + + + + + + 25 + 50 + 100 + + + + + 14 + 10 + 100 + + diff --git a/ddmrp/demo/res_partner_demo.xml b/ddmrp/demo/res_partner_demo.xml new file mode 100644 index 000000000..3ee310380 --- /dev/null +++ b/ddmrp/demo/res_partner_demo.xml @@ -0,0 +1,19 @@ + + + + ForgeFlow + 1 + + forgeflow@yourcompany.example.com + Rambla de Catalunya + Barcelona + 08008 + https://www.forgeflow.com + + + + diff --git a/ddmrp/demo/stock_buffer_demo.xml b/ddmrp/demo/stock_buffer_demo.xml new file mode 100644 index 000000000..d7c970640 --- /dev/null +++ b/ddmrp/demo/stock_buffer_demo.xml @@ -0,0 +1,29 @@ + + + + + + + 60 + 15 + + + 5 + + + + + + 50 + 30 + + + 50 + + diff --git a/ddmrp/i18n/ddmrp.pot b/ddmrp/i18n/ddmrp.pot new file mode 100644 index 000000000..8df7375e1 --- /dev/null +++ b/ddmrp/i18n/ddmrp.pot @@ -0,0 +1,1839 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ddmrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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 +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__used_in_bom_count +msgid "# BoM Where Used" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_move_line__state +msgid "" +"* New: When the stock move is created and not yet confirmed.\n" +"* Waiting Another Move: This state can be seen when a move is waiting for another one, for example in a chained flow.\n" +"* Waiting Availability: This state is reached when the procurement resolution is not straight forward. It may need the scheduler to run, a component to be manufactured...\n" +"* Available: When products are reserved, it is set to 'Available'.\n" +"* Done: When the shipment is processed, the state is 'Done'." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu +msgid "ADU" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "ADU Calculation Method" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method +msgid "ADU calculation method" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.product_adu_calculation_method_form_action +#: model:ir.ui.menu,name:ddmrp.menu_product_adu_calculation_method +msgid "ADU calculation methods" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_as01 +#: model:product.template,name:ddmrp.product_product_as01_product_template +msgid "AS-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__active +msgid "Active" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Adds chatter and activities to stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Apply adjustments to dynamically alter stock buffers to respond to planned " +"or anticipated events." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Archived" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_template.py:0 +#, python-format +msgid "" +"At least one stock buffer for this product has a different Procurement unit " +"of measure category." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure +msgid "Auto Procure" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure_option +msgid "Auto Procure Option" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Auto update Net Flow Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__adu +msgid "Average Daily Usage" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_position +msgid "Avg On Hand Target Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_report_mrp_report_bom_structure +msgid "BOM Structure Report" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom +msgid "Bill of Material" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom_line +msgid "Bill of Material Line" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Bill of Materials" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Blended" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_count +msgid "Buffer Count" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__execution_priority_level +msgid "Buffer On-Hand Alert Level" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__execution_priority_level +msgid "Buffer On-Hand Status Level" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__buffer_profile_id +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_form +msgid "Buffer Profile" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_lead_time_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_lead_time +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_form +msgid "Buffer Profile Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_variability_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_variability +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_form +msgid "Buffer Profile Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_mgt +msgid "Buffer Profiles" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer summary" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +msgid "Buffered" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__is_buffered +msgid "Buffered?" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"By default, the qty is equal to the recommended quantity.\n" +" For distributed buffers, when the option on the profile is active,\n" +" the quantity is limited to the free quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method_type +msgid "Calculation method" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Cancel" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_change_buffer_procure_qty +msgid "Change quantity in manual procurements from Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_chatter +msgid "Chatter in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_form_action +msgid "Click to start a new buffer profile" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_lead_time_form_action +msgid "Click to start a new buffer profile lead time factor" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_variability_form_action +msgid "Click to start a new buffer profile variability factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_company +msgid "Companies" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__company_id +msgid "Company" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Company Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_warning +msgid "Configuration Warnings in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Create Procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__created_purchase_line_id +msgid "Created Purchase Order Line" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_uid +msgid "Created by" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_date +msgid "Created on" +msgstr "" + +#. module: ddmrp +#: model:ir.module.category,name:ddmrp.module_category_ddmrp +#: model:ir.ui.menu,name:ddmrp.menu_ddmrp_config +msgid "DDMRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP Adjustments" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +msgid "DDMRP Buffer ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +msgid "DDMRP Buffer calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart +msgid "DDMRP Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_demand_chart +msgid "DDMRP Demand Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart_execution +msgid "DDMRP Execution Chart" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP History" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_ddmrp_manager +msgid "DDMRP Manager" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_ddmrp_run +msgid "DDMRP Manual Run Wizard" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_supply_chart +msgid "DDMRP Supply Chart" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__dlt +msgid "DLT (days)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__dlt +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__dlt +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__dlt +msgid "Decoupled Lead Time (days)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Decoupled lead time of the BoM" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_uom +msgid "Default unit of measure used for all stock operations." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__display_name +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__display_name +msgid "Display Name" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__distributed +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Distributed" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"Error: The product default Unit of Measure and the procurement Unit of " +"Measure must be in the same category." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Estimates" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Execute" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Execution" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Extensions" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__extra_lead_time +msgid "Extra lead time (for Sizing)" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_fp01 +#: model:product.template,name:ddmrp.product_product_fp01_product_template +msgid "FP-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "" +"Factor used to compute the number of days to look into the future for " +"incoming shipments for the purposes of the Net Flow position calculation." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_fixed +#, python-format +msgid "Fixed ADU" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order__ddmrp_comment +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__ddmrp_comment +msgid "Follow-up Notes" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__virtual_location_qty +msgid "Forecast On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_future +msgid "Future Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Future Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_future +msgid "Future Source" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Future-looking" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Get configuration warnings for stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__3_green +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Green" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_override +msgid "Green Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green Zone Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green Zone Minimum Order Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green Zone Order Cycle" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_qty +msgid "Green Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Green zone" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green zone Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green zone qty option considering desired Order Cycle" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green zone qty option considering minimum order quantity" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Group By" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Long Term Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Stock In Source Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__id +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__id +msgid "ID" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_make_procurement_buffer__partner_id +msgid "If set, will be used as preferred vendor for purchase routes." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "" +"In blended method, past and future factors must be positive and sum exactly " +"1,0." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_adu_calc_include_scrap +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_adu_calc_include_scrap +msgid "Include scrap locations in ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_outside_dlt_qty +msgid "Incoming (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_dlt_qty +msgid "Incoming (Within DLT)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_location_qty +msgid "Incoming On Location" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Outside DLT" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Within DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_future +msgid "Information source used for future calculation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_past +msgid "Information source used for past calculation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_max +msgid "It denotes how far you are on average from the target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_position +msgid "" +"It denotes what the target stock on hand is. The computation is: OH Target =" +" TOR + Green Zone / 2 " +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_min +msgid "It denotes what the target stock on hand range is." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__item_type +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__item_type +msgid "Item Type" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__item_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Items" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "LT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item____last_update +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability____last_update +msgid "Last Modified on" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_date +msgid "Last Updated on" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__lead_days +msgid "Lead Time (Distributed)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__lead_time_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__factor +msgid "Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__lead_days +msgid "Lead time for distributed products." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Lead time of the product" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Length-of-period horizon in days looking forward." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Length-of-period horizon in days looking past." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "Limit replenishment to free quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__buffer_ids +msgid "Linked Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__location_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__location_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Location" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Main Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__main_supplier_id +msgid "Main Supplier" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Main supplier" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer_item +msgid "Make Procurements from Stock Buffer Item" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer +msgid "Make Procurements from Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__manufactured +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Manufactured" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__mrp_production_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Manufacturing Orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum Procure Batch" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum qty for a single procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__min_max +msgid "Min-max" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_cycle +msgid "Minimum Order Cycle (days)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__minimum_order_quantity +msgid "Minimum Order Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum Procure Batch" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum qty for a single procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__group_id +msgid "" +"Moves created through this buffer will be put in this procurement group. If " +"none is given, the moves generated by stock rules will be grouped into one " +"big picking." +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_multi_level +msgid "Multi Level MRP" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__name +msgid "Name" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position +msgid "Net Flow Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "Net Flow Position Incoming Safety Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position_percent +msgid "Net flow position (% of TOG)" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No demand detected." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "No stock available on source location for distributed buffer" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "No stock buffer found." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No supply detected." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Non-completed Moves" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "On Hand Alert Zones" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "On Hand Target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_min +msgid "On Hand Target Range" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_percent +msgid "On Hand/TOR (%)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "On-Hand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__execution_priority_level +msgid "On-Hand Alert Level" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Red" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Yellow" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Open Non-completed Moves" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "Operations" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_horizon +msgid "Order Spike Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_threshold +msgid "Order Spike Threshold" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__outgoing_location_qty +msgid "Outgoing On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.po_line_execution_action +#: model:ir.ui.menu,name:ddmrp.menu_pol_execution +msgid "PO lines On-Hand Status" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_past +msgid "Past Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Past Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_past +msgid "Past Source" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Past-looking" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__date_planned +msgid "Planned Date" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Planning" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__planning_priority_level +msgid "Planning Priority Level" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Planning Priority Zones" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Horizon." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Source." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Horizon." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Source." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_recommended_qty +msgid "Procure Recommendation" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_procurement_group +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__group_id +msgid "Procurement Group" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Procurement Request" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Procurement Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_uom_id +msgid "Procurement UoM" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement recommended" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_product +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__product_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_id +msgid "Product" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_adu_calculation_method +msgid "Product Average Daily Usage calculation method" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_picking_form +msgid "Product Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_template +msgid "Product Template" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_production +msgid "Production Order" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__purchase_line_ids +msgid "Purchase Order Lines" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Purchase Orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__purchased +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Purchased" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty +msgid "Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qty_multiple +msgid "Qty Multiple" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_qty_multiple_tolerance +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_qty_multiple_tolerance +msgid "Qty Multiple Tolerance" +msgstr "" + +#. module: ddmrp +#: model:ir.model.constraint,message:ddmrp.constraint_stock_buffer_qty_multiple_check +msgid "Qty Multiple must be greater than or equal to zero." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Qualified Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_mrp_move_ids +msgid "Qualified Demand Mrp Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_stock_move_ids +msgid "Qualified Demand Stock Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty_without_security +msgid "Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "Quantity On Hand (Unreserved)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty +msgid "Quantity On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "" +"Quantity available in this stock buffer, this is the total quantity on hand " +"minus the outgoing reservations." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "" +"Quantity free for distributed buffer in the source location. When a " +"procurement is requested, if the option is active on the profile, it will be" +" limited to this quantity." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "Quantity must be positive." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "RFQ Qty (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "RFQ Qty Outside DLT" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm01 +#: model:product.template,name:ddmrp.product_product_rm01_product_template +msgid "RM-01" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm02 +#: model:product.template,name:ddmrp.product_product_rm02_product_template +msgid "RM-02" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "Re-Schedule Procurement Max Proc. Time (minutes)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__recommended_qty +msgid "Recommended Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__1_red +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Red" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_base_qty +msgid "Red Base Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_safety_qty +msgid "Red Safety Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_override +msgid "Red Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_zone_qty +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_red +msgid "Red Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Red zone" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Refresh Buffer" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish +msgid "Replenished" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish_override +msgid "Replenished Override" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "Replenishment Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__replenish_method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_method +msgid "Replenishment method" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.act_make_procurement_from_buffer +msgid "Request Procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "" +"Request for Quotation total quantity that is planned outside of the DLT " +"horizon." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_run +#: model:ir.ui.menu,name:ddmrp.ddmrp_run_menu +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP Buffer calculation" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_search +msgid "Search ADU Calculatiion methods" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_search +msgid "Search Buffer Profile Lead Time" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_search +msgid "Search Buffer Profile Variability" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_search +msgid "Search Buffer Profiles" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Secondary Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Set a tolerance value to apply to quantity multiple in stock buffers.\n" +" If the quantity needed is below this tolerance threshold, the recommended\n" +" quantity will be reduced a bit instead of adding another bucket.\n" +" The value is a percentage of the quantity multiple." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Set an storage capacity limit on stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_config +msgid "Settings" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Show Coverage Days in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__show_execution_chart +msgid "Show Execution Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_coverage_days +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Shows the current on-hand for stock buffers expressed as coverage days." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "" +"Some incoming quantities are outside of the DLT Horizon and may require " +"rescheduling. Press this button to display the involved supply orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "Source Location Free Quantity (distributed)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "" +"Source location from where goods will be replenished. Computed when buffer " +"is refreshed from following the Stock Rules." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move_line__state +msgid "Status" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__buffer_id +msgid "Stock Buffer" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_stock_buffer_maintainer +msgid "Stock Buffer Maintainer" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile +msgid "Stock Buffer Profile" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_lead_time +msgid "Stock Buffer Profile Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_variability +msgid "Stock Buffer Profile Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_ids +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__buffer_ids +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer +#: model_terms:ir.ui.view,arch_db:ddmrp.product_normal_form_view_inherit +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_form +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_form2 +msgid "Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Stock Buffers & Packagings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_move_year_consumption_action +msgid "Stock Move Last Year Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_move_consumption_pivot +msgid "Stock Moves Yearly Consumption" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_rule +msgid "Stock Rule" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_stock_buffer_capacity_limit +msgid "Storage Capacity Limits" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_history +msgid "Store historical data from stock buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Store historical data from stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply & Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_max +msgid "Target On Hand (Max)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The green zone determines the average order frequency and the order size. It" +" is determined as the maximum of the following three factors: Minimum Order " +"Cycle, Lead Time Factor and Minimum Order Quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__main_supplier_id +msgid "" +"The main supplier is the first listed supplier defined on the product that " +"is valid for this product variant. Any date restrictions are not taken into " +"account." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__qty_multiple +msgid "" +"The procurement quantity will be rounded up to this multiple. If it is 0, " +"the exact quantity will be used." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The red zone is the embedded safety in the buffer. The larger the " +"variability associated with the product, the larger the red zone will be. It" +" is composed of two sub-zones: Red base and red safety." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The yellow zone represents the stock required to cover a full lead time." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_green +msgid "Top Of Green" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_yellow +msgid "Top Of Yellow" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Total Incoming" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,help:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Transfer status changes can trigger the update of relevant buffer's NFP." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,help:ddmrp.field_mrp_bom_line__is_buffered +msgid "True when the product has an DDMRP buffer associated." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_type +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Type" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__uom_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_uom +msgid "Unit of Measure" +msgstr "" + +#. module: ddmrp +#: model:product.product,uom_name:ddmrp.product_product_as01 +#: model:product.product,uom_name:ddmrp.product_product_fp01 +#: model:product.product,uom_name:ddmrp.product_product_rm01 +#: model:product.product,uom_name:ddmrp.product_product_rm02 +#: model:product.template,uom_name:ddmrp.product_product_as01_product_template +#: model:product.template,uom_name:ddmrp.product_product_fp01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm02_product_template +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_fp01 +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_rm01 +msgid "Units" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Unsupported operator %s" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "UoM" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +msgid "Update NFP on Stock Buffers on relevant events." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_packaging +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Use packagings on stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"Use this assistant to generate a procurement request for this\n" +" stock buffer. According to the product configuration,\n" +" this may trigger a draft purchase order, a manufacturing\n" +" order or a transfer picking." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Used In" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__variability_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__factor +msgid "Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__partner_id +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Vendor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_vendor_code +msgid "Vendor Code" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Future)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Past)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Incoming (Within DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from MRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from Pickings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_warehouse +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__warehouse_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__warehouse_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Warehouse" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "" +"When activated, the recommended quantity will be maxed at the quantity " +"available in the replenishment source location." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__extra_lead_time +msgid "" +"When defined, this lead time will be added to the decoupled lead time for the computation of the zones size (it won't affect planned date for procurements).\n" +"This is particularly useful in situations of infrequent but periodic demand. E.g. We receive a large order every 30 days, whereas the supplier takes 10 days to supply. \n" +"In this case the yellow zone must cover for the entire cycle of 30 days of demand.\n" +"In situations with infrequent demand the ADU tends to be very small, and every new order would be treated as a spike, when \n" +"in reality this is not an exceptional situation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__stockout +msgid "When in stockout" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__standard +msgid "When recommended (NFP below TOY)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_future +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"future part of the combination." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_past +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"past part of the combination." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "" +"When you request procurement from a buffer, their scheduled date is " +"rescheduled to now + this procurement time (in minutes). Their scheduled " +"date represents the latest the transfers should be done, and therefore, past" +" this timestamp, considered late." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__auto_procure +msgid "" +"Whenever the buffer is recomputed, if this option is set, it will procure " +"automatically if needed." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__wiz_id +msgid "Wizard" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__2_yellow +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Yellow" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_override +msgid "Yellow Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_zone_qty +msgid "Yellow Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Yellow zone" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"You have to select a product unit of measure that is inthe same category " +"than the default unit ofmeasure of the product" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Zones Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_adjustment +msgid "apply adjustments to dynamically alter buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "days" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "minutes" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "or" +msgstr "" diff --git a/ddmrp/i18n/es.po b/ddmrp/i18n/es.po new file mode 100644 index 000000000..2acae19ce --- /dev/null +++ b/ddmrp/i18n/es.po @@ -0,0 +1,1943 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ddmrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-03-06 10:46+0000\n" +"PO-Revision-Date: 2020-04-15 17:31+0200\n" +"Last-Translator: \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: \n" +"X-Generator: Poedit 2.3\n" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__used_in_bom_count +msgid "# BoM Where Used" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_move_line__state +msgid "" +"* New: When the stock move is created and not yet confirmed.\n" +"* Waiting Another Move: This state can be seen when a move is waiting for " +"another one, for example in a chained flow.\n" +"* Waiting Availability: This state is reached when the procurement " +"resolution is not straight forward. It may need the scheduler to run, a " +"component to be manufactured...\n" +"* Available: When products are reserved, it is set to 'Available'.\n" +"* Done: When the shipment is processed, the state is 'Done'." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu +msgid "ADU" +msgstr "CPD" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "ADU Calculation Method" +msgstr "Método de cálculo CPD" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method +msgid "ADU calculation method" +msgstr "Método de cálculo CPD" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.product_adu_calculation_method_form_action +#: model:ir.ui.menu,name:ddmrp.menu_product_adu_calculation_method +msgid "ADU calculation methods" +msgstr "Métodos de cálculo de CPD" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_as01 +#: model:product.template,name:ddmrp.product_product_as01_product_template +msgid "AS-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__active +msgid "Active" +msgstr "Activo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Adds chatter and activities to stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Apply adjustments to dynamically alter stock buffers to respond to planned " +"or anticipated events." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Archived" +msgstr "Archivado" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_template.py:0 +#, python-format +msgid "" +"At least one stock buffer for this product has a different Procurement unit " +"of measure category." +msgstr "" +"Como mínimo un búfer de inventario de este producto tiene una categoría de " +"unidad de medida de abastecimiento diferente." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure +msgid "Auto Procure" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure_option +msgid "Auto Procure Option" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +#, fuzzy +msgid "Auto update Net Flow Position" +msgstr "Posición de Flujo Neto" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__adu +msgid "Average Daily Usage" +msgstr "Consumo Promedio Diario" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_position +msgid "Avg On Hand Target Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_report_mrp_report_bom_structure +msgid "BOM Structure Report" +msgstr "Reporte de estructura de LdM" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom +msgid "Bill of Material" +msgstr "Lista de materiales" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom_line +msgid "Bill of Material Line" +msgstr "Línea de Lista de Materiales" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Bill of Materials" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Blended" +msgstr "Mezclado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_count +msgid "Buffer Count" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__execution_priority_level +msgid "Buffer On-Hand Alert Level" +msgstr "Nivel de Alerta de inventario en mano del Búfer" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__execution_priority_level +msgid "Buffer On-Hand Status Level" +msgstr "Estado del Nivel de Alerta de inventario en mano del Búfer" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__buffer_profile_id +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_form +msgid "Buffer Profile" +msgstr "Perfil del Búfer" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_lead_time_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_lead_time +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_form +msgid "Buffer Profile Lead Time Factor" +msgstr "Factor de Plazo de Entrega del Perfil de Búfer" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_variability_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_variability +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_form +msgid "Buffer Profile Variability Factor" +msgstr "Factor de Variabilidad del Perfil de Búfer" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_mgt +msgid "Buffer Profiles" +msgstr "Perfiles de Búfer" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer summary" +msgstr "Resumen del Búfer" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +msgid "Buffered" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__is_buffered +msgid "Buffered?" +msgstr "Amortiguado?" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Buffers" +msgstr "Búferes" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"By default, the qty is equal to the recommended quantity.\n" +" For distributed buffers, when the option on the profile " +"is active,\n" +" the quantity is limited to the free quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method_type +msgid "Calculation method" +msgstr "Método de Cálculo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Cancel" +msgstr "Cancelar" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_change_buffer_procure_qty +msgid "Change quantity in manual procurements from Stock Buffers" +msgstr "" +"Cambiar cantidad en reabastecimientos manuales desde Búferes de Inventario" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_chatter +msgid "Chatter in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_form_action +msgid "Click to start a new buffer profile" +msgstr "Puse para comenzar un nuevo perfil de búfer" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_lead_time_form_action +msgid "Click to start a new buffer profile lead time factor" +msgstr "" +"Pulse para comenzar un nuevo factor de plazo de entrega del perfil de búfer" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_variability_form_action +msgid "Click to start a new buffer profile variability factor" +msgstr "" +"Pulse para comenzar un nuevo factor de variabilidad del perfil de búfer" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_company +#, fuzzy +msgid "Companies" +msgstr "Compañía" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__company_id +msgid "Company" +msgstr "Compañía" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +#, fuzzy +msgid "Company Settings" +msgstr "Compañía" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "Otras Configuraciones" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_warning +msgid "Configuration Warnings in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Create Procurement" +msgstr "Crea Aprovisionamiento" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__created_purchase_line_id +msgid "Created Purchase Order Line" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: ddmrp +#: model:ir.module.category,name:ddmrp.module_category_ddmrp +#: model:ir.ui.menu,name:ddmrp.menu_ddmrp_config +msgid "DDMRP" +msgstr "DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP Adjustments" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +msgid "DDMRP Buffer ADU calculation" +msgstr "Cálculo del CPD del Búfer DDMRP" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +msgid "DDMRP Buffer calculation" +msgstr "Cálculo del Búfer DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart +msgid "DDMRP Chart" +msgstr "Gráfico DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_demand_chart +msgid "DDMRP Demand Chart" +msgstr "Gráfico de Demanda DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart_execution +msgid "DDMRP Execution Chart" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP History" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_ddmrp_manager +msgid "DDMRP Manager" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_ddmrp_run +msgid "DDMRP Manual Run Wizard" +msgstr "Asistente para ejecutar manualmente DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_supply_chart +msgid "DDMRP Supply Chart" +msgstr "Gráfico de Suministro DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "DLT" +msgstr "LTD" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__dlt +msgid "DLT (days)" +msgstr "LTD (días)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__dlt +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__dlt +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__dlt +msgid "Decoupled Lead Time (days)" +msgstr "Lead Time Desacoplado (días)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Decoupled lead time of the BoM" +msgstr "Lead Time desacoplado de la LdM" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_uom +msgid "Default unit of measure used for all stock operations." +msgstr "" +"Unidad de medida por defecto usada en todas las operaciones de inventario." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Demand" +msgstr "Demanda" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__display_name +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__distributed +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Distributed" +msgstr "Distribuído" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"Error: The product default Unit of Measure and the procurement Unit of " +"Measure must be in the same category." +msgstr "" +"Error: La Unidad de Medida por defecto del producto y la Unidad de Medida de " +"abastecimiento deben pertenecer a la misma categoría." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Estimates" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Execute" +msgstr "Ejecutar" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Execution" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Extensions" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__extra_lead_time +msgid "Extra lead time (for Sizing)" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_fp01 +#: model:product.template,name:ddmrp.product_product_fp01_product_template +msgid "FP-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "" +"Factor used to compute the number of days to look into the future for " +"incoming shipments for the purposes of the Net Flow position calculation." +msgstr "" +"Factor usado para calcular el número de días para mirar a futuro para " +"entregas entrantes para calcular la Posición de Flujo Neto." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_fixed +#, python-format +msgid "Fixed ADU" +msgstr "CPD Fijo" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order__ddmrp_comment +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__ddmrp_comment +msgid "Follow-up Notes" +msgstr "Notas de Seguimiento" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__virtual_location_qty +msgid "Forecast On Location" +msgstr "Previsto en Ubicación" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_future +msgid "Future Factor" +msgstr "Factor Futuro" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Future Horizon" +msgstr "Horizonte Futuro" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_future +msgid "Future Source" +msgstr "Fuente a Futuro" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Future-looking" +msgstr "A futuro" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Get configuration warnings for stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__3_green +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Green" +msgstr "Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_override +msgid "Green Zone (Override)" +msgstr "Zona Verde (Sobreescrita)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green Zone Lead Time Factor" +msgstr "Factor de Lead Time de Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green Zone Minimum Order Quantity" +msgstr "Cantidad Mínima de Pedido de Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green Zone Order Cycle" +msgstr "Ciclo de Pedido de Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_qty +msgid "Green Zone Qty" +msgstr "Cantidad Zona Verde" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Green zone" +msgstr "Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green zone Lead Time Factor" +msgstr "Factor de Lead Time de Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green zone qty option considering desired Order Cycle" +msgstr "Opción de Ctd. de Zona Verde considerando el Ciclo de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green zone qty option considering minimum order quantity" +msgstr "Opción de Ctd. de Zona Verde considerando la Cantidad Mínima de Pedido" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Group By" +msgstr "Agrupar po" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Long Term Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Stock In Source Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__id +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__id +msgid "ID" +msgstr "ID" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_make_procurement_buffer__partner_id +msgid "If set, will be used as preferred vendor for purchase routes." +msgstr "" +"Si establecido, se usará como el proveedor preferido para rutas de compra." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "" +"In blended method, past and future factors must be positive and sum exactly " +"1,0." +msgstr "" +"En el método de mezclado, los factores pasado y futuro deber de ser " +"positivos y sumar exactamente 1.0." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_adu_calc_include_scrap +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_adu_calc_include_scrap +msgid "Include scrap locations in ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_outside_dlt_qty +msgid "Incoming (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_dlt_qty +msgid "Incoming (Within DLT)" +msgstr "Entrante (Dentro de LTD)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_location_qty +msgid "Incoming On Location" +msgstr "Entrante en Ubicación" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Outside DLT" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Within DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_future +msgid "Information source used for future calculation." +msgstr "Fuente de información para cálculo a futuro." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_past +msgid "Information source used for past calculation." +msgstr "Fuente de información para cálculo a pasado." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_max +msgid "It denotes how far you are on average from the target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_position +msgid "" +"It denotes what the target stock on hand is. The computation is: OH Target = " +"TOR + Green Zone / 2 " +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_min +msgid "It denotes what the target stock on hand range is." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__item_type +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__item_type +msgid "Item Type" +msgstr "Tipo de Posición" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__item_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Items" +msgstr "Posiciones" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "LT" +msgstr "LT" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item____last_update +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability____last_update +msgid "Last Modified on" +msgstr "Última Modificación en" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_uid +msgid "Last Updated by" +msgstr "Última Modificación por" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_date +msgid "Last Updated on" +msgstr "Última Actualización en" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__lead_days +msgid "Lead Time (Distributed)" +msgstr "Lead Time (Distribuido)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__lead_time_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__factor +msgid "Lead Time Factor" +msgstr "Factor de Lead Time" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__lead_days +msgid "Lead time for distributed products." +msgstr "Lead Time para productos distribuidos." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Lead time of the product" +msgstr "Lead Time del producto" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Length-of-period horizon in days looking forward." +msgstr "Longitud del horizonte en días, mirando a futuro." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Length-of-period horizon in days looking past." +msgstr "Longitud del horizonte en días, mirando a pasado." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "Limit replenishment to free quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__buffer_ids +msgid "Linked Stock Buffers" +msgstr "Búferes de Inventario Enlazados" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__location_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__location_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Location" +msgstr "Ubicación" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Main Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__main_supplier_id +msgid "Main Supplier" +msgstr "Proveedor Principal" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Main supplier" +msgstr "Proveedor principal" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer_item +msgid "Make Procurements from Stock Buffer Item" +msgstr "Crear Abastecimientos desde Posición de Búfer de Inventario" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer +msgid "Make Procurements from Stock Buffers" +msgstr "Crear Abastecimientos desde Búfer de Inventario" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__manufactured +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Manufactured" +msgstr "Producido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__mrp_production_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Manufacturing Orders" +msgstr "Órdenes de Producción" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum Procure Batch" +msgstr "Lote Máximo de Abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum qty for a single procurement" +msgstr "Cantidad máxima para un solo abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__min_max +msgid "Min-max" +msgstr "Min-max" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_cycle +msgid "Minimum Order Cycle (days)" +msgstr "Ciclo Mínimo de Pedido (días)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__minimum_order_quantity +msgid "Minimum Order Quantity" +msgstr "Cantidad Mínima de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum Procure Batch" +msgstr "Lote Mínimo para Abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum qty for a single procurement" +msgstr "Ctd. mínima para un solo abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__group_id +msgid "" +"Moves created through this buffer will be put in this procurement group. If " +"none is given, the moves generated by stock rules will be grouped into one " +"big picking." +msgstr "" +"Movimientos creados a través de este búfer se pondrán en este grupo de " +"aprovisionamiento. Si no de especifica ninguno, los movimientos generados " +"por reglas de inventario se agruparán en un sólo albarán." + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_multi_level +msgid "Multi Level MRP" +msgstr "MRP Multi Nivel" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__name +msgid "Name" +msgstr "Nombre" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position +msgid "Net Flow Position" +msgstr "Posición de Flujo Neto" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "Net Flow Position Incoming Safety Factor" +msgstr "Factor de Seguridad en Entradas para Posición de Flujo Neto" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position_percent +msgid "Net flow position (% of TOG)" +msgstr "Posición de flujo neto (% de TDV)" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No demand detected." +msgstr "No hay demanda detectada." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "No stock available on source location for distributed buffer" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "No stock buffer found." +msgstr "No se encontró ningún Búfer de Inventario." + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No supply detected." +msgstr "No se detectó ningún suministro." + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Non-completed Moves" +msgstr "Movimientos no completados" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "On Hand Alert Zones" +msgstr "Zonas de Alerta de Inventario en Mano" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "On Hand Target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_min +msgid "On Hand Target Range" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_percent +msgid "On Hand/TOR (%)" +msgstr "En Mano / TDV (%)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "On-Hand" +msgstr "En Mano" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__execution_priority_level +msgid "On-Hand Alert Level" +msgstr "Nivel de Alerta de Inventario en Mano" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Red" +msgstr "Alerta de En Mano: Rojo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Yellow" +msgstr "Alerta de En Mano: Amarillo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Open Non-completed Moves" +msgstr "Abrir Movimientos no completados" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "Operations" +msgstr "Operaciones" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_horizon +msgid "Order Spike Horizon" +msgstr "Horizonte de Pico de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_threshold +msgid "Order Spike Threshold" +msgstr "Umbral de Pico de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__outgoing_location_qty +msgid "Outgoing On Location" +msgstr "Saliente en Ubicación" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.po_line_execution_action +#: model:ir.ui.menu,name:ddmrp.menu_pol_execution +msgid "PO lines On-Hand Status" +msgstr "Estado de En Mano para Líneas de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_past +msgid "Past Factor" +msgstr "Factor Pasado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Past Horizon" +msgstr "Horizonte a Pasado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_past +msgid "Past Source" +msgstr "Fuente a Pasado" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Past-looking" +msgstr "Hacia pasado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__date_planned +msgid "Planned Date" +msgstr "Fecha Planificada" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Planning" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__planning_priority_level +msgid "Planning Priority Level" +msgstr "Nivel Prioridad Planificación" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Planning Priority Zones" +msgstr "Zonas de Prioridad Planificación" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Horizon." +msgstr "Por favor, indicar un horizonte futuro." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Source." +msgstr "Por favor, indica un origen futuro." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Horizon." +msgstr "Por favor, indica un Horizonte pasado." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Source." +msgstr "Por favor, indica un Origen pasado." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_recommended_qty +msgid "Procure Recommendation" +msgstr "Recomendación Abastecimiento" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement" +msgstr "Abastecimiento" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_procurement_group +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__group_id +msgid "Procurement Group" +msgstr "Grupo de abastecimiento" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Procurement Request" +msgstr "Petición de Abastecimiento" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Procurement Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_uom_id +msgid "Procurement UoM" +msgstr "UdM Abastecimiento" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement recommended" +msgstr "Abastecimiento recomendado" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_product +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__product_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_id +msgid "Product" +msgstr "Producto" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_adu_calculation_method +msgid "Product Average Daily Usage calculation method" +msgstr "Método de cálculo del Consumo Medio Diario de Producto" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_picking_form +msgid "Product Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_production +msgid "Production Order" +msgstr "Orden de producción" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order +msgid "Purchase Order" +msgstr "Pedido de compra" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "Línea de pedido de compra" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__purchase_line_ids +msgid "Purchase Order Lines" +msgstr "Líneas de Pedido de Compra" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Purchase Orders" +msgstr "Pedidos de Compra" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__purchased +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Purchased" +msgstr "Comprado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty +msgid "Qty" +msgstr "Ctd." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qty_multiple +msgid "Qty Multiple" +msgstr "Múltiple de Ctd." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_qty_multiple_tolerance +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_qty_multiple_tolerance +msgid "Qty Multiple Tolerance" +msgstr "" + +#. module: ddmrp +#: model:ir.model.constraint,message:ddmrp.constraint_stock_buffer_qty_multiple_check +msgid "Qty Multiple must be greater than or equal to zero." +msgstr "Múltiple Ctd. debe ser mayor o igual a cero." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Qualified Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_mrp_move_ids +msgid "Qualified Demand Mrp Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_stock_move_ids +msgid "Qualified Demand Stock Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty_without_security +msgid "Quantity" +msgstr "Cantidad" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "Quantity On Hand (Unreserved)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty +msgid "Quantity On Location" +msgstr "Cantidad en Ubicación" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "" +"Quantity available in this stock buffer, this is the total quantity on hand " +"minus the outgoing reservations." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "" +"Quantity free for distributed buffer in the source location. When a " +"procurement is requested, if the option is active on the profile, it will be " +"limited to this quantity." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "Quantity must be positive." +msgstr "La cantidad debe ser positiva." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "RFQ Qty (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "RFQ Qty Outside DLT" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm01 +#: model:product.template,name:ddmrp.product_product_rm01_product_template +msgid "RM-01" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm02 +#: model:product.template,name:ddmrp.product_product_rm02_product_template +msgid "RM-02" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "Re-Schedule Procurement Max Proc. Time (minutes)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__recommended_qty +msgid "Recommended Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__1_red +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Red" +msgstr "Rojo" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_base_qty +msgid "Red Base Qty" +msgstr "Ctd. Rojo base" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_safety_qty +msgid "Red Safety Qty" +msgstr "Ctd. Rojo Seguridad" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_override +msgid "Red Zone (Override)" +msgstr "Zona Roja (Sobreescrita)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_zone_qty +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_red +msgid "Red Zone Qty" +msgstr "Ctd. Zona Roja" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Red zone" +msgstr "Zona roja" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Refresh Buffer" +msgstr "Refrescar Búfer" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish +msgid "Replenished" +msgstr "Reabastecido" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish_override +msgid "Replenished Override" +msgstr "Reabastecido con Sobreescritura" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "Replenishment Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__replenish_method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_method +msgid "Replenishment method" +msgstr "Método de Reabastecimiento" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.act_make_procurement_from_buffer +msgid "Request Procurement" +msgstr "Solicitar Abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "" +"Request for Quotation total quantity that is planned outside of the DLT " +"horizon." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run ADU calculation" +msgstr "Ejecutar cálculo de CPD" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_run +#: model:ir.ui.menu,name:ddmrp.ddmrp_run_menu +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP" +msgstr "Ejecutar DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP Buffer calculation" +msgstr "Ejectuar Cálculo de Búferes DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_search +msgid "Search ADU Calculatiion methods" +msgstr "Buscar métodos de cálculo de CPD" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_search +msgid "Search Buffer Profile Lead Time" +msgstr "Buscar Perfiles de Lead Time de Búferes" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_search +msgid "Search Buffer Profile Variability" +msgstr "Buscar Perfil de Variabildiad de Búferes" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_search +msgid "Search Buffer Profiles" +msgstr "Buscar Perfiles de Búfer" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Secondary Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Set a tolerance value to apply to quantity multiple in stock buffers.\n" +" If the quantity needed is below this " +"tolerance threshold, the recommended\n" +" quantity will be reduced a bit instead " +"of adding another bucket.\n" +" The value is a percentage of the " +"quantity multiple." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Set an storage capacity limit on stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_config +#, fuzzy +msgid "Settings" +msgstr "Otras Configuraciones" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Show Coverage Days in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__show_execution_chart +msgid "Show Execution Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_coverage_days +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Shows the current on-hand for stock buffers expressed as coverage days." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "" +"Some incoming quantities are outside of the DLT Horizon and may require " +"rescheduling. Press this button to display the involved supply orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "Source Location Free Quantity (distributed)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "" +"Source location from where goods will be replenished. Computed when buffer " +"is refreshed from following the Stock Rules." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move_line__state +msgid "Status" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__buffer_id +msgid "Stock Buffer" +msgstr "Búfer de Inventario" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_stock_buffer_maintainer +msgid "Stock Buffer Maintainer" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile +msgid "Stock Buffer Profile" +msgstr "Perfil de Búfer de Inventario" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_lead_time +msgid "Stock Buffer Profile Lead Time Factor" +msgstr "Factor de Lead Time en Perfil de Búfer de Inventario" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_variability +msgid "Stock Buffer Profile Variability Factor" +msgstr "Factor de Variabilidad en Perfil de Búfer de Inventario" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_ids +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__buffer_ids +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer +#: model_terms:ir.ui.view,arch_db:ddmrp.product_normal_form_view_inherit +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_form +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_form2 +msgid "Stock Buffers" +msgstr "Búferes de Inventario" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +#, fuzzy +msgid "Stock Buffers & Packagings" +msgstr "Búferes de Inventario" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_move_year_consumption_action +msgid "Stock Move Last Year Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_move_consumption_pivot +msgid "Stock Moves Yearly Consumption" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_rule +msgid "Stock Rule" +msgstr "Regla de Inventario" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_stock_buffer_capacity_limit +msgid "Storage Capacity Limits" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_history +msgid "Store historical data from stock buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Store historical data from stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply" +msgstr "Suministro" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply & Demand" +msgstr "Suministro y Demanda" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_max +msgid "Target On Hand (Max)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The green zone determines the average order frequency and the order size. It " +"is determined as the maximum of the following three factors: Minimum Order " +"Cycle, Lead Time Factor and Minimum Order Quantity." +msgstr "" +"La zona verde determina la frecuencia media de pedidos y el tamaño de " +"pedido. Se determina como el máximo de los siguientes tres factores: Ciclo " +"Mínimo de Pedido, Factor de Lead Time y Cantidad Mínima de Pedido." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__main_supplier_id +msgid "" +"The main supplier is the first listed supplier defined on the product that " +"is valid for this product variant. Any date restrictions are not taken into " +"account." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__qty_multiple +msgid "" +"The procurement quantity will be rounded up to this multiple. If it is 0, " +"the exact quantity will be used." +msgstr "" +"La cantidad de abastecimiento se redondeará hasta este múltiple. Si es 0, se " +"usará la cantidad exacta." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The red zone is the embedded safety in the buffer. The larger the " +"variability associated with the product, the larger the red zone will be. It " +"is composed of two sub-zones: Red base and red safety." +msgstr "" +"La zona roja es la seguridad contenida en el búfer. Cuanto más grande sea la " +"variabilidad asociada al producto." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The yellow zone represents the stock required to cover a full lead time." +msgstr "" +"La zona amarilla representa el inventario requerido para cubrir un plazo de " +"entrega completo." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_green +msgid "Top Of Green" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_yellow +msgid "Top Of Yellow" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Total Incoming" +msgstr "Total Entrante" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,help:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Transfer status changes can trigger the update of relevant buffer's NFP." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,help:ddmrp.field_mrp_bom_line__is_buffered +msgid "True when the product has an DDMRP buffer associated." +msgstr "Verdadero cuando el producto tiene un búfer DDMRP asociado." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_type +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Type" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__uom_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_uom +msgid "Unit of Measure" +msgstr "Unidad de Medida" + +#. module: ddmrp +#: model:product.product,uom_name:ddmrp.product_product_as01 +#: model:product.product,uom_name:ddmrp.product_product_fp01 +#: model:product.product,uom_name:ddmrp.product_product_rm01 +#: model:product.product,uom_name:ddmrp.product_product_rm02 +#: model:product.template,uom_name:ddmrp.product_product_as01_product_template +#: model:product.template,uom_name:ddmrp.product_product_fp01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm02_product_template +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_fp01 +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_rm01 +msgid "Units" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Unsupported operator %s" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "UoM" +msgstr "UdM" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +msgid "Update NFP on Stock Buffers on relevant events." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_packaging +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Use packagings on stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"Use this assistant to generate a procurement request for this\n" +" stock buffer. According to the product configuration,\n" +" this may trigger a draft purchase order, a " +"manufacturing\n" +" order or a transfer picking." +msgstr "" +"Use este asistente para generar peticiones de abastecimiento para este\n" +" búfer. De acuerdo con la configuración del producto,\n" +" esto podría generar un pedido de compra en borrador, una " +"orden de producción o un albarán interno." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Used In" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__variability_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__factor +msgid "Variability Factor" +msgstr "Factor de Variabilidad" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__partner_id +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Vendor" +msgstr "Proveedor" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_vendor_code +msgid "Vendor Code" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Future)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Past)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Incoming (Within DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from MRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from Pickings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_warehouse +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__warehouse_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__warehouse_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Warehouse" +msgstr "Almacén" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "" +"When activated, the recommended quantity will be maxed at the quantity " +"available in the replenishment source location." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__extra_lead_time +msgid "" +"When defined, this lead time will be added to the decoupled lead time for " +"the computation of the zones size (it won't affect planned date for " +"procurements).\n" +"This is particularly useful in situations of infrequent but periodic demand. " +"E.g. We receive a large order every 30 days, whereas the supplier takes 10 " +"days to supply. \n" +"In this case the yellow zone must cover for the entire cycle of 30 days of " +"demand.\n" +"In situations with infrequent demand the ADU tends to be very small, and " +"every new order would be treated as a spike, when \n" +"in reality this is not an exceptional situation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__stockout +msgid "When in stockout" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__standard +msgid "When recommended (NFP below TOY)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_future +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"future part of the combination." +msgstr "" +"Cuando use un método mezclado, este es el peso relativo asignado a la parte " +"futura de la combinación." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_past +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"past part of the combination." +msgstr "" +"Cuando use un método mezclado, este es el peso relativo asignado a la parte " +"pasada de la combinación." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "" +"When you request procurement from a buffer, their scheduled date is " +"rescheduled to now + this procurement time (in minutes). Their scheduled " +"date represents the latest the transfers should be done, and therefore, past " +"this timestamp, considered late." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__auto_procure +msgid "" +"Whenever the buffer is recomputed, if this option is set, it will procure " +"automatically if needed." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__wiz_id +msgid "Wizard" +msgstr "Asistente" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__2_yellow +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Yellow" +msgstr "Amarillo" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_override +msgid "Yellow Zone (Override)" +msgstr "Zona Amarilla (Sobreescrita)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_zone_qty +msgid "Yellow Zone Qty" +msgstr "Ctd. Zona Amarilla" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Yellow zone" +msgstr "Zona Amarilla" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"You have to select a product unit of measure that is inthe same category " +"than the default unit ofmeasure of the product" +msgstr "" +"Debe elegir una unidad de medida del producto que esté en la misma categoría " +"que la unidad de medida por defecto del producto" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Zones Information" +msgstr "Información Zonas" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_adjustment +msgid "apply adjustments to dynamically alter buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "days" +msgstr "días" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "minutes" +msgstr "minutos" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "or" +msgstr "o" + +#~ msgid "Buffer size factors" +#~ msgstr "Factores de tamaño del Búfer" + +#~ msgid "Buffer zones" +#~ msgstr "Zonas del Búfer" + +#~ msgid "Other Information" +#~ msgstr "Otra Información" + +#~ msgid "Other Settings" +#~ msgstr "Otras Configuraciones" + +#~ msgid "Product Unit of Measure" +#~ msgstr "Unidad de Medida del Producto" + +#~ msgid "MRP Move" +#~ msgstr "Movimientos MRP" + +#~ msgid "Quantity to release" +#~ msgstr "Cantidad a liberar" + +#~ msgid "Net flow position" +#~ msgstr "Posición de flujo neto" + +#~ msgid "Qualified demand" +#~ msgstr "Demanda Calificada" + +#~ msgid "Top of Green" +#~ msgstr "Top de Verde" + +#~ msgid "Top of Red" +#~ msgstr "Tope de Rojo" + +#~ msgid "Top of Yellow" +#~ msgstr "Tope de Amarillo" + +#, fuzzy +#~ msgid "Inventory Locations" +#~ msgstr "Entrante en Ubicación" + +#~ msgid "Quantity On Location (Unreserved)" +#~ msgstr "Cantidad en Ubicación (No Reservada)" + +#~ msgid "Incoming within DLT" +#~ msgstr "Entrante dentro de LTD" diff --git a/ddmrp/i18n/es_AR.po b/ddmrp/i18n/es_AR.po new file mode 100644 index 000000000..10e33ab23 --- /dev/null +++ b/ddmrp/i18n/es_AR.po @@ -0,0 +1,1971 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ddmrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-05-26 21:09+0000\n" +"Last-Translator: Ignacio Buioli \n" +"Language-Team: none\n" +"Language: es_AR\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 +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__used_in_bom_count +msgid "# BoM Where Used" +msgstr "# LdM Dónde se Utiliza" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_move_line__state +msgid "" +"* New: When the stock move is created and not yet confirmed.\n" +"* Waiting Another Move: This state can be seen when a move is waiting for " +"another one, for example in a chained flow.\n" +"* Waiting Availability: This state is reached when the procurement " +"resolution is not straight forward. It may need the scheduler to run, a " +"component to be manufactured...\n" +"* Available: When products are reserved, it is set to 'Available'.\n" +"* Done: When the shipment is processed, the state is 'Done'." +msgstr "" +"* Nuevo: Cuando se crea el movimiento de stock y aún no está confirmado.\n" +"* Esperando Otro Movimiento: Este estado se puede ver cuando un movimiento " +"está esperando otro, por ejemplo en un flujo encadenado.\n" +"* Disponibilidad de Espera: Este estado se alcanza cuando la resolución de " +"la contratación no es directa. Es posible que necesite el programador para " +"ejecutarse, un componente para ser fabricado...\n" +"* Disponible: Cuando los productos están reservados, se establece en " +"'Disponible'.\n" +"* Listo: Cuando se procesa el envío, el estado es 'Listo'." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"" +msgstr "" +"" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu +msgid "ADU" +msgstr "CPD" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "ADU Calculation Method" +msgstr "Método de cálculo CPD" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method +msgid "ADU calculation method" +msgstr "Método de cálculo CPD" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.product_adu_calculation_method_form_action +#: model:ir.ui.menu,name:ddmrp.menu_product_adu_calculation_method +msgid "ADU calculation methods" +msgstr "Métodos de cálculo de CPD" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_as01 +#: model:product.template,name:ddmrp.product_product_as01_product_template +msgid "AS-01" +msgstr "AS-01" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__active +msgid "Active" +msgstr "Activo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Adds chatter and activities to stock buffers." +msgstr "Añade chatter y actividades a los búferes de stock." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Apply adjustments to dynamically alter stock buffers to respond to planned " +"or anticipated events." +msgstr "" +"Aplique ajustes para alterar dinámicamente los búferes de stock para " +"responder a eventos planificados o anticipados." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Archived" +msgstr "Archivado" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_template.py:0 +#, python-format +msgid "" +"At least one stock buffer for this product has a different Procurement unit " +"of measure category." +msgstr "" +"Al menos un búfer de inventario de este producto tiene una categoría de " +"unidad de medida de abastecimiento diferente." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure +msgid "Auto Procure" +msgstr "Adquisición Automática" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure_option +msgid "Auto Procure Option" +msgstr "Opción de Adquisición Automática" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Auto update Net Flow Position" +msgstr "Actualizar Automáticamente Posición de Flujo Neto" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__adu +msgid "Average Daily Usage" +msgstr "Consumo Promedio Diario" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_position +msgid "Avg On Hand Target Position" +msgstr "Posición de Destino Promedio Disponible" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_report_mrp_report_bom_structure +msgid "BOM Structure Report" +msgstr "Reporte de estructura de LdM" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom +msgid "Bill of Material" +msgstr "Lista de materiales" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom_line +msgid "Bill of Material Line" +msgstr "Línea de Lista de Materiales" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Bill of Materials" +msgstr "Factura de Materiales" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Blended" +msgstr "Mezclado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_count +msgid "Buffer Count" +msgstr "Cuenta de Búfer" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer Information" +msgstr "Información de Búfer" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__execution_priority_level +msgid "Buffer On-Hand Alert Level" +msgstr "Nivel de Alerta de inventario en mano del Búfer" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__execution_priority_level +msgid "Buffer On-Hand Status Level" +msgstr "Estado del Nivel de Alerta de inventario en mano del Búfer" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__buffer_profile_id +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_form +msgid "Buffer Profile" +msgstr "Perfil del Búfer" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_lead_time_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_lead_time +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_form +msgid "Buffer Profile Lead Time Factor" +msgstr "Factor de Plazo de Entrega del Perfil de Búfer" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_variability_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_variability +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_form +msgid "Buffer Profile Variability Factor" +msgstr "Factor de Variabilidad del Perfil de Búfer" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_mgt +msgid "Buffer Profiles" +msgstr "Perfiles de Búfer" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer summary" +msgstr "Resumen del Búfer" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +msgid "Buffered" +msgstr "Bufereado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__is_buffered +msgid "Buffered?" +msgstr "¿Bufereado?" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Buffers" +msgstr "Búferes" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"By default, the qty is equal to the recommended quantity.\n" +" For distributed buffers, when the option on the profile " +"is active,\n" +" the quantity is limited to the free quantity." +msgstr "" +"De forma predeterminada, la cantidad es igual a la cantidad recomendada.\n" +" Para búferes distribuidos, cuando la opción en el " +"perfil está activa,\n" +" la cantidad está limitada a la cantidad libre." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method_type +msgid "Calculation method" +msgstr "Método de Cálculo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Cancel" +msgstr "Cancelar" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_change_buffer_procure_qty +msgid "Change quantity in manual procurements from Stock Buffers" +msgstr "" +"Cambiar cantidad en reabastecimientos manuales desde Búferes de Inventario" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_chatter +msgid "Chatter in Stock Buffers" +msgstr "Chatter en los Búferes de Stock" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_form_action +msgid "Click to start a new buffer profile" +msgstr "Puse para comenzar un nuevo perfil de búfer" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_lead_time_form_action +msgid "Click to start a new buffer profile lead time factor" +msgstr "" +"Pulse para comenzar un nuevo factor de plazo de entrega del perfil de búfer" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_variability_form_action +msgid "Click to start a new buffer profile variability factor" +msgstr "" +"Pulse para comenzar un nuevo factor de variabilidad del perfil de búfer" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__company_id +msgid "Company" +msgstr "Compañía" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Company Settings" +msgstr "Ajustes de Companía" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_config_settings +msgid "Config Settings" +msgstr "Configurar Ajustes" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_warning +msgid "Configuration Warnings in Stock Buffers" +msgstr "Configurar Advertencias en los Búferes de Stock" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Consumption" +msgstr "Consumo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Create Procurement" +msgstr "Crear Aprovisionamiento" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__created_purchase_line_id +msgid "Created Purchase Order Line" +msgstr "Línea de Pedido de Compra Creada" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: ddmrp +#: model:ir.module.category,name:ddmrp.module_category_ddmrp +#: model:ir.ui.menu,name:ddmrp.menu_ddmrp_config +msgid "DDMRP" +msgstr "DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP Adjustments" +msgstr "Ajustes DDMRP" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +msgid "DDMRP Buffer ADU calculation" +msgstr "Cálculo del CPD del Búfer DDMRP" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +msgid "DDMRP Buffer calculation" +msgstr "Cálculo del Búfer DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart +msgid "DDMRP Chart" +msgstr "Gráfico DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_demand_chart +msgid "DDMRP Demand Chart" +msgstr "Gráfico de Demanda DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart_execution +msgid "DDMRP Execution Chart" +msgstr "Gráfico de Ejecución DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP History" +msgstr "Historial DDMRP" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_ddmrp_manager +msgid "DDMRP Manager" +msgstr "Gestor DDMRP" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_ddmrp_run +msgid "DDMRP Manual Run Wizard" +msgstr "Asistente para ejecutar manualmente DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_supply_chart +msgid "DDMRP Supply Chart" +msgstr "Gráfico de Suministro DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "DLT" +msgstr "LTD" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__dlt +msgid "DLT (days)" +msgstr "LTD (días)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__dlt +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__dlt +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__dlt +msgid "Decoupled Lead Time (days)" +msgstr "Tiempo de Iniciativa Desacoplado (días)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Decoupled lead time of the BoM" +msgstr "Tiempo de Iniciativa desacoplado de la LdM" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_uom +msgid "Default unit of measure used for all stock operations." +msgstr "" +"Unidad de medida por defecto usada en todas las operaciones de inventario." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Demand" +msgstr "Demanda" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__display_name +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__display_name +msgid "Display Name" +msgstr "Nombre Mostrado" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__distributed +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Distributed" +msgstr "Distribuido" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"Error: The product default Unit of Measure and the procurement Unit of " +"Measure must be in the same category." +msgstr "" +"Error: La Unidad de Medida por defecto del producto y la Unidad de Medida de " +"abastecimiento deben pertenecer a la misma categoría." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Estimates" +msgstr "Estimados" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Execute" +msgstr "Ejecutar" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Execution" +msgstr "Ejecución" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Extensions" +msgstr "Extensiones" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__extra_lead_time +msgid "Extra lead time (for Sizing)" +msgstr "Tiempo de iniciativa extra (para Dimensionamiento)" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_fp01 +#: model:product.template,name:ddmrp.product_product_fp01_product_template +msgid "FP-01" +msgstr "FP-01" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "" +"Factor used to compute the number of days to look into the future for " +"incoming shipments for the purposes of the Net Flow position calculation." +msgstr "" +"Factor usado para calcular el número de días para mirar a futuro para " +"entregas entrantes para calcular la Posición de Flujo Neto." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_fixed +#, python-format +msgid "Fixed ADU" +msgstr "CPD Fijo" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order__ddmrp_comment +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__ddmrp_comment +msgid "Follow-up Notes" +msgstr "Notas de Seguimiento" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__virtual_location_qty +msgid "Forecast On Location" +msgstr "Previsto en Ubicación" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_future +msgid "Future Factor" +msgstr "Factor Futuro" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Future Horizon" +msgstr "Horizonte Futuro" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_future +msgid "Future Source" +msgstr "Fuente a Futuro" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Future-looking" +msgstr "A futuro" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Get configuration warnings for stock buffers." +msgstr "Obtener configuración de advertencias para búferes de stock." + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__3_green +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Green" +msgstr "Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_override +msgid "Green Zone (Override)" +msgstr "Zona Verde (Sobreescrita)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green Zone Lead Time Factor" +msgstr "Factor de Tiempo de Iniciativa de Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green Zone Minimum Order Quantity" +msgstr "Cantidad Mínima de Pedido de Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green Zone Order Cycle" +msgstr "Ciclo de Pedido de Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_qty +msgid "Green Zone Qty" +msgstr "Cantidad Zona Verde" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Green zone" +msgstr "Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green zone Lead Time Factor" +msgstr "Factor de Tiempo de Iniciativa de Zona Verde" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green zone qty option considering desired Order Cycle" +msgstr "Opción de Ctd. de Zona Verde considerando el Ciclo de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green zone qty option considering minimum order quantity" +msgstr "Opción de Ctd. de Zona Verde considerando la Cantidad Mínima de Pedido" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Group By" +msgstr "Agrupar Por" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Long Term Supply" +msgstr "Tiene Suministro a Largo Plazo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Stock In Source Location" +msgstr "Tiene Stock en la Ubicación de Origen" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__id +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__id +msgid "ID" +msgstr "ID" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_make_procurement_buffer__partner_id +msgid "If set, will be used as preferred vendor for purchase routes." +msgstr "" +"Si establecido, se usará como el proveedor preferido para rutas de compra." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "" +"In blended method, past and future factors must be positive and sum exactly " +"1,0." +msgstr "" +"En el método de mezclado, los factores pasado y futuro deber de ser " +"positivos y sumar exactamente 1.0." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_adu_calc_include_scrap +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_adu_calc_include_scrap +msgid "Include scrap locations in ADU calculation" +msgstr "Incluir ubicaciones de merma en el cálculo de CPD" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_outside_dlt_qty +msgid "Incoming (Outside DLT)" +msgstr "Entrante (Fuera de LTD)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_dlt_qty +msgid "Incoming (Within DLT)" +msgstr "Entrante (Dentro de LTD)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_location_qty +msgid "Incoming On Location" +msgstr "Entrante en Ubicación" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Outside DLT" +msgstr "Entrante Fuera de LTD" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Within DLT" +msgstr "Entrante Dentro de LTD" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_future +msgid "Information source used for future calculation." +msgstr "Fuente de información para cálculo a futuro." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_past +msgid "Information source used for past calculation." +msgstr "Fuente de información para cálculo a pasado." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_max +msgid "It denotes how far you are on average from the target" +msgstr "Indica qué tan lejos está en promedio del objetivo" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_position +msgid "" +"It denotes what the target stock on hand is. The computation is: OH Target = " +"TOR + Green Zone / 2 " +msgstr "" +"Indica cuál es el stock objetivo disponible. El cálculo es: Objetivo OH = " +"TOR + Zona verde / 2 " + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_min +msgid "It denotes what the target stock on hand range is." +msgstr "Indica cual es el rango objetivo de stock disponible." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__item_type +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__item_type +msgid "Item Type" +msgstr "Tipo de Posición" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__item_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Items" +msgstr "Posiciones" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "LT" +msgstr "LT" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item____last_update +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_uid +msgid "Last Updated by" +msgstr "Última Modificación por" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_date +msgid "Last Updated on" +msgstr "Última Actualización en" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__lead_days +msgid "Lead Time (Distributed)" +msgstr "Tiempo de Iniciativa (Distribuido)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__lead_time_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__factor +msgid "Lead Time Factor" +msgstr "Factor de Tiempo de Iniciativa" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__lead_days +msgid "Lead time for distributed products." +msgstr "Tiempo de Iniciativa para productos distribuidos." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Lead time of the product" +msgstr "Tiempo de Iniciativa del producto" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Length-of-period horizon in days looking forward." +msgstr "Longitud del horizonte en días, mirando a futuro." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Length-of-period horizon in days looking past." +msgstr "Longitud del horizonte en días, mirando a pasado." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "Limit replenishment to free quantity" +msgstr "Limita el reabastecimiento a la cantidad libre" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__buffer_ids +msgid "Linked Stock Buffers" +msgstr "Búferes de Inventario Enlazados" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__location_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__location_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Location" +msgstr "Ubicación" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Main Buffer size factors" +msgstr "Factores de tamaño del Búfer Principal" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__main_supplier_id +msgid "Main Supplier" +msgstr "Proveedor Principal" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Main supplier" +msgstr "Proveedor principal" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer_item +msgid "Make Procurements from Stock Buffer Item" +msgstr "Crear Abastecimientos desde Posición de Búfer de Inventario" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer +msgid "Make Procurements from Stock Buffers" +msgstr "Crear Abastecimientos desde Búfer de Inventario" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__manufactured +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Manufactured" +msgstr "Producido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__mrp_production_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Manufacturing Orders" +msgstr "Órdenes de Producción" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum Procure Batch" +msgstr "Lote Máximo de Abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum qty for a single procurement" +msgstr "Cantidad máxima para un solo abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__min_max +msgid "Min-max" +msgstr "Min-max" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_cycle +msgid "Minimum Order Cycle (days)" +msgstr "Ciclo Mínimo de Pedido (días)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__minimum_order_quantity +msgid "Minimum Order Quantity" +msgstr "Cantidad Mínima de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum Procure Batch" +msgstr "Lote Mínimo para Abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum qty for a single procurement" +msgstr "Ctd. mínima para un solo abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__group_id +msgid "" +"Moves created through this buffer will be put in this procurement group. If " +"none is given, the moves generated by stock rules will be grouped into one " +"big picking." +msgstr "" +"Movimientos creados a través de este búfer se pondrán en este grupo de " +"aprovisionamiento. Si no de especifica ninguno, los movimientos generados " +"por reglas de inventario se agruparán en un sólo albarán." + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_multi_level +msgid "Multi Level MRP" +msgstr "MRP Multi Nivel" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__name +msgid "Name" +msgstr "Nombre" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position +msgid "Net Flow Position" +msgstr "Posición de Flujo Neto" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "Net Flow Position Incoming Safety Factor" +msgstr "Factor de Seguridad en Entradas para Posición de Flujo Neto" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position_percent +msgid "Net flow position (% of TOG)" +msgstr "Posición de flujo neto (% de TDV)" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No demand detected." +msgstr "No hay demanda detectada." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "No stock available on source location for distributed buffer" +msgstr "" +"No hay stock disponible en la ubicación de origen para el búfer distribuido" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "No stock buffer found." +msgstr "No se encontró ningún Búfer de Inventario." + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No supply detected." +msgstr "No se detectó ningún suministro." + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Non-completed Moves" +msgstr "Movimientos no completados" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "On Hand Alert Zones" +msgstr "Zonas de Alerta de Inventario en Mano" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "On Hand Target" +msgstr "Objetivo Disponible" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_min +msgid "On Hand Target Range" +msgstr "Rango de Objetivo Disponible" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_percent +msgid "On Hand/TOR (%)" +msgstr "En Mano / TDV (%)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "On-Hand" +msgstr "En Mano" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__execution_priority_level +msgid "On-Hand Alert Level" +msgstr "Nivel de Alerta de Inventario en Mano" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Red" +msgstr "Alerta de En Mano: Rojo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Yellow" +msgstr "Alerta de En Mano: Amarillo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Open Non-completed Moves" +msgstr "Abrir Movimientos no completados" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "Operations" +msgstr "Operaciones" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_horizon +msgid "Order Spike Horizon" +msgstr "Horizonte de Pico de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_threshold +msgid "Order Spike Threshold" +msgstr "Umbral de Pico de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__outgoing_location_qty +msgid "Outgoing On Location" +msgstr "Saliente en Ubicación" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.po_line_execution_action +#: model:ir.ui.menu,name:ddmrp.menu_pol_execution +msgid "PO lines On-Hand Status" +msgstr "Estado de En Mano para Líneas de Pedido" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_past +msgid "Past Factor" +msgstr "Factor Pasado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Past Horizon" +msgstr "Horizonte a Pasado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_past +msgid "Past Source" +msgstr "Fuente a Pasado" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Past-looking" +msgstr "Hacia pasado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__date_planned +msgid "Planned Date" +msgstr "Fecha Planificada" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Planning" +msgstr "Planificación" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__planning_priority_level +msgid "Planning Priority Level" +msgstr "Nivel Prioridad Planificación" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Planning Priority Zones" +msgstr "Zonas de Prioridad Planificación" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Horizon." +msgstr "Por favor, indicar un horizonte futuro." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Source." +msgstr "Por favor, indica un origen futuro." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Horizon." +msgstr "Por favor, indica un Horizonte pasado." + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Source." +msgstr "Por favor, indica un Origen pasado." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_recommended_qty +msgid "Procure Recommendation" +msgstr "Recomendación Abastecimiento" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement" +msgstr "Abastecimiento" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_procurement_group +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__group_id +msgid "Procurement Group" +msgstr "Grupo de abastecimiento" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Procurement Request" +msgstr "Petición de Abastecimiento" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Procurement Settings" +msgstr "Configuración de Adquisiciones" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_uom_id +msgid "Procurement UoM" +msgstr "UdM Abastecimiento" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement recommended" +msgstr "Abastecimiento recomendado" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_product +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__product_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_id +msgid "Product" +msgstr "Producto" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_adu_calculation_method +msgid "Product Average Daily Usage calculation method" +msgstr "Método de cálculo del Consumo Medio Diario de Producto" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_picking_form +msgid "Product Buffers" +msgstr "Búferes de Producto" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimientos de Producto (Líneas de Movimiento de Inventario)" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_production +msgid "Production Order" +msgstr "Orden de producción" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order +msgid "Purchase Order" +msgstr "Pedido de compra" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "Línea de pedido de compra" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__purchase_line_ids +msgid "Purchase Order Lines" +msgstr "Líneas de Pedido de Compra" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Purchase Orders" +msgstr "Pedidos de Compra" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__purchased +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Purchased" +msgstr "Comprado" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty +msgid "Qty" +msgstr "Ctd." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qty_multiple +msgid "Qty Multiple" +msgstr "Cantidad Múltiple" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_qty_multiple_tolerance +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_qty_multiple_tolerance +msgid "Qty Multiple Tolerance" +msgstr "Tolerancia de Cantidad Múltiple" + +#. module: ddmrp +#: model:ir.model.constraint,message:ddmrp.constraint_stock_buffer_qty_multiple_check +msgid "Qty Multiple must be greater than or equal to zero." +msgstr "Múltiple Ctd. debe ser mayor o igual a cero." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Qualified Demand" +msgstr "Demanda Calificada" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_mrp_move_ids +msgid "Qualified Demand Mrp Move" +msgstr "Demanda Calificada en Movimiento Mrp" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_stock_move_ids +msgid "Qualified Demand Stock Move" +msgstr "Demanda Calificada en Movimiento de Inventario" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty_without_security +msgid "Quantity" +msgstr "Cantidad" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "Quantity On Hand (Unreserved)" +msgstr "Cantidad a Mano (Sin reservar)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty +msgid "Quantity On Location" +msgstr "Cantidad en Ubicación" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "" +"Quantity available in this stock buffer, this is the total quantity on hand " +"minus the outgoing reservations." +msgstr "" +"Cantidad disponible en este búfer de stock, esta es la cantidad total a mano " +"menos las reserva de salida." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "" +"Quantity free for distributed buffer in the source location. When a " +"procurement is requested, if the option is active on the profile, it will be " +"limited to this quantity." +msgstr "" +"Cantidad libre para el búfer distribuido en la ubicación de origen. Cuando " +"se solicita una adquisición, si la opción está activa en el perfil, se " +"limitará a esta cantidad." + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "Quantity must be positive." +msgstr "La cantidad debe ser positiva." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "RFQ Qty (Outside DLT)" +msgstr "Cantidad RFQ (Fuera de LTD)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "RFQ Qty Outside DLT" +msgstr "Cantidad RFQ Fuera de LTD" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm01 +#: model:product.template,name:ddmrp.product_product_rm01_product_template +msgid "RM-01" +msgstr "RM-01" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm02 +#: model:product.template,name:ddmrp.product_product_rm02_product_template +msgid "RM-02" +msgstr "RM-02" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "Re-Schedule Procurement Max Proc. Time (minutes)" +msgstr "Reprogramar Adquisiciones Max Proc. Tiempo (minutos)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__recommended_qty +msgid "Recommended Qty" +msgstr "Cantidad Recomendada" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__1_red +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Red" +msgstr "Rojo" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_base_qty +msgid "Red Base Qty" +msgstr "Ctd. Rojo base" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_safety_qty +msgid "Red Safety Qty" +msgstr "Ctd. Rojo Seguridad" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_override +msgid "Red Zone (Override)" +msgstr "Zona Roja (Sobreescrita)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_zone_qty +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_red +msgid "Red Zone Qty" +msgstr "Ctd. Zona Roja" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Red zone" +msgstr "Zona roja" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Refresh Buffer" +msgstr "Refrescar Búfer" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish +msgid "Replenished" +msgstr "Reabastecido" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish_override +msgid "Replenished Override" +msgstr "Reabastecido con Sobreescritura" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "Replenishment Location" +msgstr "Ubicación de Reposición" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__replenish_method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_method +msgid "Replenishment method" +msgstr "Método de Reabastecimiento" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.act_make_procurement_from_buffer +msgid "Request Procurement" +msgstr "Solicitar Abastecimiento" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "" +"Request for Quotation total quantity that is planned outside of the DLT " +"horizon." +msgstr "" +"Solicitud de cantidad total de Presupuesto planificado fuera del horizonte " +"LTD." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run ADU calculation" +msgstr "Ejecutar cálculo de CPD" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_run +#: model:ir.ui.menu,name:ddmrp.ddmrp_run_menu +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP" +msgstr "Ejecutar DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP Buffer calculation" +msgstr "Ejectuar Cálculo de Búferes DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_search +msgid "Search ADU Calculatiion methods" +msgstr "Buscar métodos de cálculo de CPD" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_search +msgid "Search Buffer Profile Lead Time" +msgstr "Buscar Perfiles de Tiempo de Iniciativa de Búferes" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_search +msgid "Search Buffer Profile Variability" +msgstr "Buscar Perfil de Variabildiad de Búferes" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_search +msgid "Search Buffer Profiles" +msgstr "Buscar Perfiles de Búfer" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Secondary Buffer size factors" +msgstr "Factores de tamaño del Búfer Secundario" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Set a tolerance value to apply to quantity multiple in stock buffers.\n" +" If the quantity needed is below this " +"tolerance threshold, the recommended\n" +" quantity will be reduced a bit instead " +"of adding another bucket.\n" +" The value is a percentage of the " +"quantity multiple." +msgstr "" +"Establezca un valor de tolerancia para aplicar a la cantidad múltiple en los " +"búferes de stock.\n" +" Si la cantidad necesaria está por " +"debajo de este umbral de tolerancia, la cantidad \n" +" recomendada se reducirá un poco en " +"lugar de agregar otro balde.\n" +" El valor es un porcentaje del múltiplo " +"de la cantidad." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Set an storage capacity limit on stock buffers." +msgstr "" +"Establece una capacidad límite de almacenamiento en los búferes de stock." + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_config +msgid "Settings" +msgstr "Ajustes" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Show Coverage Days in Stock Buffers" +msgstr "Muestra Días de Covertura en Búferes de Stock" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__show_execution_chart +msgid "Show Execution Chart" +msgstr "Mostrar Gráfico de Ejecución" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_coverage_days +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Shows the current on-hand for stock buffers expressed as coverage days." +msgstr "" +"Muestra el stock en-mano actual para los búferes de stock expresados como " +"días de covertura." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "" +"Some incoming quantities are outside of the DLT Horizon and may require " +"rescheduling. Press this button to display the involved supply orders" +msgstr "" +"Algunas cantidades entrantes están fuera del horizonte LTD y pueden requerir " +"una reprogramación. Presione este botón para mostrar las órdenes de " +"suministro involucradas" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "Source Location Free Quantity (distributed)" +msgstr "Ubicación de Origen de Cantidad Libre (distribuida)" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "" +"Source location from where goods will be replenished. Computed when buffer " +"is refreshed from following the Stock Rules." +msgstr "" +"Ubicación de Origen desde donde se repondrán los productos. Se calcula " +"cuando se actualiza el búfer siguiendo las Reglas de Stock." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move_line__state +msgid "Status" +msgstr "Estado" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__buffer_id +msgid "Stock Buffer" +msgstr "Búfer de Inventario" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_stock_buffer_maintainer +msgid "Stock Buffer Maintainer" +msgstr "Mantenedor de Almacenamiento en Búfer" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile +msgid "Stock Buffer Profile" +msgstr "Perfil de Búfer de Inventario" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_lead_time +msgid "Stock Buffer Profile Lead Time Factor" +msgstr "Factor de Tiempo de Iniciativa en Perfil de Búfer de Inventario" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_variability +msgid "Stock Buffer Profile Variability Factor" +msgstr "Factor de Variabilidad en Perfil de Búfer de Inventario" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_ids +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__buffer_ids +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer +#: model_terms:ir.ui.view,arch_db:ddmrp.product_normal_form_view_inherit +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_form +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_form2 +msgid "Stock Buffers" +msgstr "Búferes de Inventario" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Stock Buffers & Packagings" +msgstr "Búferes de Stock y Empaquetados" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de stock" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_move_year_consumption_action +msgid "Stock Move Last Year Consumption" +msgstr "Consumo del Año Pasado del Movimiento de Stock" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_move_consumption_pivot +msgid "Stock Moves Yearly Consumption" +msgstr "Consumo Anual de Movimientos de Stock" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_rule +msgid "Stock Rule" +msgstr "Regla de Inventario" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_stock_buffer_capacity_limit +msgid "Storage Capacity Limits" +msgstr "Límites de Capacidad de Almacenamiento" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_history +msgid "Store historical data from stock buffers" +msgstr "Almacenar datos histórico de los búferes de stock" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Store historical data from stock buffers." +msgstr "Almacenar datos histórico de los búferes de stock." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply" +msgstr "Suministro" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply & Demand" +msgstr "Suministro y Demanda" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_max +msgid "Target On Hand (Max)" +msgstr "Objetivo Disponible (Max)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The green zone determines the average order frequency and the order size. It " +"is determined as the maximum of the following three factors: Minimum Order " +"Cycle, Lead Time Factor and Minimum Order Quantity." +msgstr "" +"La zona verde determina la frecuencia media de pedidos y el tamaño de " +"pedido. Se determina como el máximo de los siguientes tres factores: Ciclo " +"Mínimo de Pedido, Factor de Tiempo de Iniciativa y Cantidad Mínima de Pedido." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__main_supplier_id +msgid "" +"The main supplier is the first listed supplier defined on the product that " +"is valid for this product variant. Any date restrictions are not taken into " +"account." +msgstr "" +"El proveedor principal es el primer proveedor enumerado definido en el " +"producto que es válido para esta variante de producto. No se tienen en " +"cuenta las restricciones de fecha." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__qty_multiple +msgid "" +"The procurement quantity will be rounded up to this multiple. If it is 0, " +"the exact quantity will be used." +msgstr "" +"La cantidad de abastecimiento se redondeará hasta este múltiple. Si es 0, se " +"usará la cantidad exacta." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The red zone is the embedded safety in the buffer. The larger the " +"variability associated with the product, the larger the red zone will be. It " +"is composed of two sub-zones: Red base and red safety." +msgstr "" +"La zona roja es la seguridad contenida en el búfer. Cuanto más grande sea la " +"variabilidad asociada al producto." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The yellow zone represents the stock required to cover a full lead time." +msgstr "" +"La zona amarilla representa el inventario requerido para cubrir un plazo de " +"entrega completo." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_green +msgid "Top Of Green" +msgstr "Tope De Verde" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_yellow +msgid "Top Of Yellow" +msgstr "Tope De Amarillo" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Total Incoming" +msgstr "Total Entrante" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_picking +msgid "Transfer" +msgstr "Transferir" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,help:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Transfer status changes can trigger the update of relevant buffer's NFP." +msgstr "" +"Los cambios de estado de transferencia pueden activar la actualización del " +"NFP del búfer correspondiente." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,help:ddmrp.field_mrp_bom_line__is_buffered +msgid "True when the product has an DDMRP buffer associated." +msgstr "Verdadero cuando el producto tiene un búfer DDMRP asociado." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_type +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Type" +msgstr "Tipo" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__uom_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_uom +msgid "Unit of Measure" +msgstr "Unidad de Medida" + +#. module: ddmrp +#: model:product.product,uom_name:ddmrp.product_product_as01 +#: model:product.product,uom_name:ddmrp.product_product_fp01 +#: model:product.product,uom_name:ddmrp.product_product_rm01 +#: model:product.product,uom_name:ddmrp.product_product_rm02 +#: model:product.template,uom_name:ddmrp.product_product_as01_product_template +#: model:product.template,uom_name:ddmrp.product_product_fp01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm02_product_template +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_fp01 +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_rm01 +msgid "Units" +msgstr "Unidades" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Unsupported operator %s" +msgstr "Operador no soportado %s" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "UoM" +msgstr "UdM" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +msgid "Update NFP on Stock Buffers on relevant events." +msgstr "Actualizar NFP en Búferes de Stock de eventos relevantes." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_packaging +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Use packagings on stock buffers." +msgstr "Usar empaquetados en búferes de stock." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"Use this assistant to generate a procurement request for this\n" +" stock buffer. According to the product configuration,\n" +" this may trigger a draft purchase order, a " +"manufacturing\n" +" order or a transfer picking." +msgstr "" +"Use este asistente para generar peticiones de abastecimiento para este\n" +" búfer. De acuerdo con la configuración del producto,\n" +" esto podría generar un pedido de compra en borrador,\n" +" una orden de producción o un albarán interno." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Used In" +msgstr "Usado En" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__variability_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__factor +msgid "Variability Factor" +msgstr "Factor de Variabilidad" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__partner_id +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Vendor" +msgstr "Proveedor" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_vendor_code +msgid "Vendor Code" +msgstr "Código de Vendedor" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Future)" +msgstr "Ver ADU (Futuro)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Past)" +msgstr "Ver ADU (Pasado)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Incoming (Within DLT)" +msgstr "Ver Recepción (Sin DLT)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from MRP" +msgstr "Ver Demanda Calificada desde MRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from Pickings" +msgstr "Ver Demanda Calificada desde Pickings" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_warehouse +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__warehouse_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__warehouse_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Warehouse" +msgstr "Almacén" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "" +"When activated, the recommended quantity will be maxed at the quantity " +"available in the replenishment source location." +msgstr "" +"Cuando está activado, la cantidad recomendada se maximizará en la cantidad " +"disponible en la ubicación de la fuente de reposición." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__extra_lead_time +msgid "" +"When defined, this lead time will be added to the decoupled lead time for " +"the computation of the zones size (it won't affect planned date for " +"procurements).\n" +"This is particularly useful in situations of infrequent but periodic demand. " +"E.g. We receive a large order every 30 days, whereas the supplier takes 10 " +"days to supply. \n" +"In this case the yellow zone must cover for the entire cycle of 30 days of " +"demand.\n" +"In situations with infrequent demand the ADU tends to be very small, and " +"every new order would be treated as a spike, when \n" +"in reality this is not an exceptional situation." +msgstr "" +"Cuando está definido, este plazo de entrega se agregará al plazo de entrega " +"desacoplado para el cálculo del tamaño de las zonas (no afectará la fecha " +"planificada para las adquisiciones).\n" +"Esto es particularmente útil en situaciones de demanda infrecuente pero " +"periódica. Por ej. Recibimos un pedido grande cada 30 días, mientras que el " +"proveedor tarda 10 días en surtirlo.\n" +"En este caso la zona amarilla deberá cubrir para todo el ciclo de 30 días de " +"demanda.\n" +"En situaciones con demanda poco frecuente, la CPD tiende a ser muy pequeña, " +"y cada nuevo pedido se trataría como un pico, cuando\n" +"en realidad no se trata de una situación excepcional." + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__stockout +msgid "When in stockout" +msgstr "Cuando se agota" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__standard +msgid "When recommended (NFP below TOY)" +msgstr "Cuando se recomienda (NFP por debajo de TOY)" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_future +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"future part of the combination." +msgstr "" +"Cuando use un método mezclado, este es el peso relativo asignado a la parte " +"futura de la combinación." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_past +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"past part of the combination." +msgstr "" +"Cuando use un método mezclado, este es el peso relativo asignado a la parte " +"pasada de la combinación." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "" +"When you request procurement from a buffer, their scheduled date is " +"rescheduled to now + this procurement time (in minutes). Their scheduled " +"date represents the latest the transfers should be done, and therefore, past " +"this timestamp, considered late." +msgstr "" +"Cuando solicita la adquisición de un búfer, su fecha programada se " +"reprograma para ahora + este tiempo de adquisición (en minutos). Su fecha " +"programada representa lo último que las transferencias deben realizar y, por " +"lo tanto, más allá de esta marca de tiempo, se considera tardía." + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__auto_procure +msgid "" +"Whenever the buffer is recomputed, if this option is set, it will procure " +"automatically if needed." +msgstr "" +"Cada vez que se vuelve a calcular el búfer, si se establece esta opción, se " +"obtendrá automáticamente si es necesario." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__wiz_id +msgid "Wizard" +msgstr "Asistente" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__2_yellow +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Yellow" +msgstr "Amarillo" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_override +msgid "Yellow Zone (Override)" +msgstr "Zona Amarilla (Sobreescrita)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_zone_qty +msgid "Yellow Zone Qty" +msgstr "Ctd. Zona Amarilla" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Yellow zone" +msgstr "Zona Amarilla" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"You have to select a product unit of measure that is inthe same category " +"than the default unit ofmeasure of the product" +msgstr "" +"Debe elegir una unidad de medida del producto que esté en la misma categoría " +"que la unidad de medida por defecto del producto" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Zones Information" +msgstr "Información Zonas" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_adjustment +msgid "apply adjustments to dynamically alter buffers" +msgstr "aplica ajustes para alterar búferes dinámicamente" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "days" +msgstr "días" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "minutes" +msgstr "minutos" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "or" +msgstr "o" + +#~ msgid "Buffer size factors" +#~ msgstr "Factores de tamaño del Búfer" + +#~ msgid "Buffer zones" +#~ msgstr "Zonas del Búfer" + +#~ msgid "Other Information" +#~ msgstr "Otra Información" + +#~ msgid "Other Settings" +#~ msgstr "Otras Configuraciones" diff --git a/ddmrp/i18n/fr.po b/ddmrp/i18n/fr.po new file mode 100644 index 000000000..00c72165b --- /dev/null +++ b/ddmrp/i18n/fr.po @@ -0,0 +1,1866 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ddmrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-22 14:19+0000\n" +"Last-Translator: c2cdidier \n" +"Language-Team: none\n" +"Language: fr\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 3.10\n" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__used_in_bom_count +msgid "# BoM Where Used" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_move_line__state +msgid "" +"* New: When the stock move is created and not yet confirmed.\n" +"* Waiting Another Move: This state can be seen when a move is waiting for " +"another one, for example in a chained flow.\n" +"* Waiting Availability: This state is reached when the procurement " +"resolution is not straight forward. It may need the scheduler to run, a " +"component to be manufactured...\n" +"* Available: When products are reserved, it is set to 'Available'.\n" +"* Done: When the shipment is processed, the state is 'Done'." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"" +msgstr "" +"" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu +msgid "ADU" +msgstr "CMJ" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "ADU Calculation Method" +msgstr "Méthode de calcul de la CMJ" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method +msgid "ADU calculation method" +msgstr "Méthode de calcul de la CMJ" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.product_adu_calculation_method_form_action +#: model:ir.ui.menu,name:ddmrp.menu_product_adu_calculation_method +msgid "ADU calculation methods" +msgstr "Méthode de calcul de la CMJ" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_as01 +#: model:product.template,name:ddmrp.product_product_as01_product_template +msgid "AS-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__active +msgid "Active" +msgstr "Actif" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Adds chatter and activities to stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Apply adjustments to dynamically alter stock buffers to respond to planned " +"or anticipated events." +msgstr "" +"Appliquer des ajustements afin de modifier dynamiquement les buffers en " +"réponse à des événements planifiés ou anticipés." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Archived" +msgstr "Archivé" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_template.py:0 +#, python-format +msgid "" +"At least one stock buffer for this product has a different Procurement unit " +"of measure category." +msgstr "" +"Au minimum un buffer de stock de ce produit possède une catégorie unité de " +"mesure d'approvisionnement différente." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure +msgid "Auto Procure" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure_option +msgid "Auto Procure Option" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Auto update Net Flow Position" +msgstr "Mise à jour automatique du Stock disponible (NFP)" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__adu +msgid "Average Daily Usage" +msgstr "Consommation Moyenne Journalière" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_position +msgid "Avg On Hand Target Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_report_mrp_report_bom_structure +msgid "BOM Structure Report" +msgstr "Rapport structure de nomenclature" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom +msgid "Bill of Material" +msgstr "Nomenclature" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom_line +msgid "Bill of Material Line" +msgstr "Ligne de nomenclature" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Bill of Materials" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Blended" +msgstr "Mixte" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_count +msgid "Buffer Count" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__execution_priority_level +msgid "Buffer On-Hand Alert Level" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__execution_priority_level +msgid "Buffer On-Hand Status Level" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__buffer_profile_id +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_form +msgid "Buffer Profile" +msgstr "Profil de buffer" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_lead_time_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_lead_time +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_form +msgid "Buffer Profile Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_variability_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_variability +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_form +msgid "Buffer Profile Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_mgt +msgid "Buffer Profiles" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer summary" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +msgid "Buffered" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__is_buffered +msgid "Buffered?" +msgstr "Protégé ?" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Buffers" +msgstr "Buffers" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"By default, the qty is equal to the recommended quantity.\n" +" For distributed buffers, when the option on the profile " +"is active,\n" +" the quantity is limited to the free quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method_type +msgid "Calculation method" +msgstr "Méthode de calcul" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Cancel" +msgstr "Annuler" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_change_buffer_procure_qty +msgid "Change quantity in manual procurements from Stock Buffers" +msgstr "" +"Changer la quantité en approvisionnement manuel depuis les buffers de stock" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_chatter +msgid "Chatter in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_form_action +msgid "Click to start a new buffer profile" +msgstr "Cliquer pour créer un nouveau profil de buffer" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_lead_time_form_action +msgid "Click to start a new buffer profile lead time factor" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_variability_form_action +msgid "Click to start a new buffer profile variability factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__company_id +msgid "Company" +msgstr "Société" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Company Settings" +msgstr "Paramètres Société" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de configuration" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_warning +msgid "Configuration Warnings in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Create Procurement" +msgstr "Créer approvisionnement" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__created_purchase_line_id +msgid "Created Purchase Order Line" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: ddmrp +#: model:ir.module.category,name:ddmrp.module_category_ddmrp +#: model:ir.ui.menu,name:ddmrp.menu_ddmrp_config +msgid "DDMRP" +msgstr "DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP Adjustments" +msgstr "Ajustements DDMRP" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +msgid "DDMRP Buffer ADU calculation" +msgstr "Buffers DDMRP calcul CMJ" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +msgid "DDMRP Buffer calculation" +msgstr "DDMRP calcul du buffer" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart +msgid "DDMRP Chart" +msgstr "Graphique DDMRP" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_demand_chart +msgid "DDMRP Demand Chart" +msgstr "DDMRP Graphique de la demande" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart_execution +msgid "DDMRP Execution Chart" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP History" +msgstr "DDMRP historique" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_ddmrp_manager +msgid "DDMRP Manager" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_ddmrp_run +msgid "DDMRP Manual Run Wizard" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_supply_chart +msgid "DDMRP Supply Chart" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__dlt +msgid "DLT (days)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__dlt +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__dlt +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__dlt +msgid "Decoupled Lead Time (days)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Decoupled lead time of the BoM" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_uom +msgid "Default unit of measure used for all stock operations." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__display_name +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__display_name +msgid "Display Name" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__distributed +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Distributed" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"Error: The product default Unit of Measure and the procurement Unit of " +"Measure must be in the same category." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Estimates" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Execute" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Execution" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Extensions" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__extra_lead_time +msgid "Extra lead time (for Sizing)" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_fp01 +#: model:product.template,name:ddmrp.product_product_fp01_product_template +msgid "FP-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "" +"Factor used to compute the number of days to look into the future for " +"incoming shipments for the purposes of the Net Flow position calculation." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_fixed +#, python-format +msgid "Fixed ADU" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order__ddmrp_comment +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__ddmrp_comment +msgid "Follow-up Notes" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__virtual_location_qty +msgid "Forecast On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_future +msgid "Future Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Future Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_future +msgid "Future Source" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Future-looking" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Get configuration warnings for stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__3_green +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Green" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_override +msgid "Green Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green Zone Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green Zone Minimum Order Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green Zone Order Cycle" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_qty +msgid "Green Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Green zone" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green zone Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green zone qty option considering desired Order Cycle" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green zone qty option considering minimum order quantity" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Group By" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Long Term Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Stock In Source Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__id +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__id +msgid "ID" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_make_procurement_buffer__partner_id +msgid "If set, will be used as preferred vendor for purchase routes." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "" +"In blended method, past and future factors must be positive and sum exactly " +"1,0." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_adu_calc_include_scrap +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_adu_calc_include_scrap +msgid "Include scrap locations in ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_outside_dlt_qty +msgid "Incoming (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_dlt_qty +msgid "Incoming (Within DLT)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_location_qty +msgid "Incoming On Location" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Outside DLT" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Within DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_future +msgid "Information source used for future calculation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_past +msgid "Information source used for past calculation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_max +msgid "It denotes how far you are on average from the target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_position +msgid "" +"It denotes what the target stock on hand is. The computation is: OH Target = " +"TOR + Green Zone / 2 " +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_min +msgid "It denotes what the target stock on hand range is." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__item_type +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__item_type +msgid "Item Type" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__item_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Items" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "LT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item____last_update +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability____last_update +msgid "Last Modified on" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_date +msgid "Last Updated on" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__lead_days +msgid "Lead Time (Distributed)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__lead_time_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__factor +msgid "Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__lead_days +msgid "Lead time for distributed products." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Lead time of the product" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Length-of-period horizon in days looking forward." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Length-of-period horizon in days looking past." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "Limit replenishment to free quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__buffer_ids +msgid "Linked Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__location_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__location_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Location" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Main Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__main_supplier_id +msgid "Main Supplier" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Main supplier" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer_item +msgid "Make Procurements from Stock Buffer Item" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer +msgid "Make Procurements from Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__manufactured +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Manufactured" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__mrp_production_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Manufacturing Orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum Procure Batch" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum qty for a single procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__min_max +msgid "Min-max" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_cycle +msgid "Minimum Order Cycle (days)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__minimum_order_quantity +msgid "Minimum Order Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum Procure Batch" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum qty for a single procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__group_id +msgid "" +"Moves created through this buffer will be put in this procurement group. If " +"none is given, the moves generated by stock rules will be grouped into one " +"big picking." +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_multi_level +msgid "Multi Level MRP" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__name +msgid "Name" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position +msgid "Net Flow Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "Net Flow Position Incoming Safety Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position_percent +msgid "Net flow position (% of TOG)" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No demand detected." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "No stock available on source location for distributed buffer" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "No stock buffer found." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No supply detected." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Non-completed Moves" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "On Hand Alert Zones" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "On Hand Target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_min +msgid "On Hand Target Range" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_percent +msgid "On Hand/TOR (%)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "On-Hand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__execution_priority_level +msgid "On-Hand Alert Level" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Red" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Yellow" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Open Non-completed Moves" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "Operations" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_horizon +msgid "Order Spike Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_threshold +msgid "Order Spike Threshold" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__outgoing_location_qty +msgid "Outgoing On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.po_line_execution_action +#: model:ir.ui.menu,name:ddmrp.menu_pol_execution +msgid "PO lines On-Hand Status" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_past +msgid "Past Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Past Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_past +msgid "Past Source" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Past-looking" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__date_planned +msgid "Planned Date" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Planning" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__planning_priority_level +msgid "Planning Priority Level" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Planning Priority Zones" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Horizon." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Source." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Horizon." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Source." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_recommended_qty +msgid "Procure Recommendation" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_procurement_group +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__group_id +msgid "Procurement Group" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Procurement Request" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Procurement Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_uom_id +msgid "Procurement UoM" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement recommended" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_product +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__product_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_id +msgid "Product" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_adu_calculation_method +msgid "Product Average Daily Usage calculation method" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_picking_form +msgid "Product Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_template +msgid "Product Template" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_production +msgid "Production Order" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__purchase_line_ids +msgid "Purchase Order Lines" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Purchase Orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__purchased +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Purchased" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty +msgid "Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qty_multiple +msgid "Qty Multiple" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_qty_multiple_tolerance +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_qty_multiple_tolerance +msgid "Qty Multiple Tolerance" +msgstr "" + +#. module: ddmrp +#: model:ir.model.constraint,message:ddmrp.constraint_stock_buffer_qty_multiple_check +msgid "Qty Multiple must be greater than or equal to zero." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Qualified Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_mrp_move_ids +msgid "Qualified Demand Mrp Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_stock_move_ids +msgid "Qualified Demand Stock Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty_without_security +msgid "Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "Quantity On Hand (Unreserved)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty +msgid "Quantity On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "" +"Quantity available in this stock buffer, this is the total quantity on hand " +"minus the outgoing reservations." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "" +"Quantity free for distributed buffer in the source location. When a " +"procurement is requested, if the option is active on the profile, it will be " +"limited to this quantity." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "Quantity must be positive." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "RFQ Qty (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "RFQ Qty Outside DLT" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm01 +#: model:product.template,name:ddmrp.product_product_rm01_product_template +msgid "RM-01" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm02 +#: model:product.template,name:ddmrp.product_product_rm02_product_template +msgid "RM-02" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "Re-Schedule Procurement Max Proc. Time (minutes)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__recommended_qty +msgid "Recommended Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__1_red +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Red" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_base_qty +msgid "Red Base Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_safety_qty +msgid "Red Safety Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_override +msgid "Red Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_zone_qty +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_red +msgid "Red Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Red zone" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Refresh Buffer" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish +msgid "Replenished" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish_override +msgid "Replenished Override" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "Replenishment Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__replenish_method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_method +msgid "Replenishment method" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.act_make_procurement_from_buffer +msgid "Request Procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "" +"Request for Quotation total quantity that is planned outside of the DLT " +"horizon." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_run +#: model:ir.ui.menu,name:ddmrp.ddmrp_run_menu +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP Buffer calculation" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_search +msgid "Search ADU Calculatiion methods" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_search +msgid "Search Buffer Profile Lead Time" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_search +msgid "Search Buffer Profile Variability" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_search +msgid "Search Buffer Profiles" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Secondary Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Set a tolerance value to apply to quantity multiple in stock buffers.\n" +" If the quantity needed is below this " +"tolerance threshold, the recommended\n" +" quantity will be reduced a bit instead " +"of adding another bucket.\n" +" The value is a percentage of the " +"quantity multiple." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Set an storage capacity limit on stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_config +msgid "Settings" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Show Coverage Days in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__show_execution_chart +msgid "Show Execution Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_coverage_days +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Shows the current on-hand for stock buffers expressed as coverage days." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "" +"Some incoming quantities are outside of the DLT Horizon and may require " +"rescheduling. Press this button to display the involved supply orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "Source Location Free Quantity (distributed)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "" +"Source location from where goods will be replenished. Computed when buffer " +"is refreshed from following the Stock Rules." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move_line__state +msgid "Status" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__buffer_id +msgid "Stock Buffer" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_stock_buffer_maintainer +msgid "Stock Buffer Maintainer" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile +msgid "Stock Buffer Profile" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_lead_time +msgid "Stock Buffer Profile Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_variability +msgid "Stock Buffer Profile Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_ids +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__buffer_ids +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer +#: model_terms:ir.ui.view,arch_db:ddmrp.product_normal_form_view_inherit +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_form +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_form2 +msgid "Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Stock Buffers & Packagings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_move_year_consumption_action +msgid "Stock Move Last Year Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_move_consumption_pivot +msgid "Stock Moves Yearly Consumption" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_rule +msgid "Stock Rule" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_stock_buffer_capacity_limit +msgid "Storage Capacity Limits" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_history +msgid "Store historical data from stock buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Store historical data from stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply & Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_max +msgid "Target On Hand (Max)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The green zone determines the average order frequency and the order size. It " +"is determined as the maximum of the following three factors: Minimum Order " +"Cycle, Lead Time Factor and Minimum Order Quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__main_supplier_id +msgid "" +"The main supplier is the first listed supplier defined on the product that " +"is valid for this product variant. Any date restrictions are not taken into " +"account." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__qty_multiple +msgid "" +"The procurement quantity will be rounded up to this multiple. If it is 0, " +"the exact quantity will be used." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The red zone is the embedded safety in the buffer. The larger the " +"variability associated with the product, the larger the red zone will be. It " +"is composed of two sub-zones: Red base and red safety." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The yellow zone represents the stock required to cover a full lead time." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_green +msgid "Top Of Green" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_yellow +msgid "Top Of Yellow" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Total Incoming" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,help:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Transfer status changes can trigger the update of relevant buffer's NFP." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,help:ddmrp.field_mrp_bom_line__is_buffered +msgid "True when the product has an DDMRP buffer associated." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_type +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Type" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__uom_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_uom +msgid "Unit of Measure" +msgstr "" + +#. module: ddmrp +#: model:product.product,uom_name:ddmrp.product_product_as01 +#: model:product.product,uom_name:ddmrp.product_product_fp01 +#: model:product.product,uom_name:ddmrp.product_product_rm01 +#: model:product.product,uom_name:ddmrp.product_product_rm02 +#: model:product.template,uom_name:ddmrp.product_product_as01_product_template +#: model:product.template,uom_name:ddmrp.product_product_fp01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm02_product_template +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_fp01 +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_rm01 +msgid "Units" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Unsupported operator %s" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "UoM" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +msgid "Update NFP on Stock Buffers on relevant events." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_packaging +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Use packagings on stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"Use this assistant to generate a procurement request for this\n" +" stock buffer. According to the product configuration,\n" +" this may trigger a draft purchase order, a " +"manufacturing\n" +" order or a transfer picking." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Used In" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__variability_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__factor +msgid "Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__partner_id +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Vendor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_vendor_code +msgid "Vendor Code" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Future)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Past)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Incoming (Within DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from MRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from Pickings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_warehouse +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__warehouse_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__warehouse_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Warehouse" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "" +"When activated, the recommended quantity will be maxed at the quantity " +"available in the replenishment source location." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__extra_lead_time +msgid "" +"When defined, this lead time will be added to the decoupled lead time for " +"the computation of the zones size (it won't affect planned date for " +"procurements).\n" +"This is particularly useful in situations of infrequent but periodic demand. " +"E.g. We receive a large order every 30 days, whereas the supplier takes 10 " +"days to supply. \n" +"In this case the yellow zone must cover for the entire cycle of 30 days of " +"demand.\n" +"In situations with infrequent demand the ADU tends to be very small, and " +"every new order would be treated as a spike, when \n" +"in reality this is not an exceptional situation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__stockout +msgid "When in stockout" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__standard +msgid "When recommended (NFP below TOY)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_future +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"future part of the combination." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_past +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"past part of the combination." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "" +"When you request procurement from a buffer, their scheduled date is " +"rescheduled to now + this procurement time (in minutes). Their scheduled " +"date represents the latest the transfers should be done, and therefore, past " +"this timestamp, considered late." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__auto_procure +msgid "" +"Whenever the buffer is recomputed, if this option is set, it will procure " +"automatically if needed." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__wiz_id +msgid "Wizard" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__2_yellow +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Yellow" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_override +msgid "Yellow Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_zone_qty +msgid "Yellow Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Yellow zone" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"You have to select a product unit of measure that is inthe same category " +"than the default unit ofmeasure of the product" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Zones Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_adjustment +msgid "apply adjustments to dynamically alter buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "days" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "minutes" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "or" +msgstr "" + +#~ msgid "Buffer zones" +#~ msgstr "Zones de buffer" diff --git a/ddmrp/i18n/id.po b/ddmrp/i18n/id.po new file mode 100644 index 000000000..0df457920 --- /dev/null +++ b/ddmrp/i18n/id.po @@ -0,0 +1,1859 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ddmrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-12-12 05:36+0000\n" +"Last-Translator: hitrosol \n" +"Language-Team: none\n" +"Language: id\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: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__used_in_bom_count +msgid "# BoM Where Used" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_move_line__state +msgid "" +"* New: When the stock move is created and not yet confirmed.\n" +"* Waiting Another Move: This state can be seen when a move is waiting for " +"another one, for example in a chained flow.\n" +"* Waiting Availability: This state is reached when the procurement " +"resolution is not straight forward. It may need the scheduler to run, a " +"component to be manufactured...\n" +"* Available: When products are reserved, it is set to 'Available'.\n" +"* Done: When the shipment is processed, the state is 'Done'." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu +msgid "ADU" +msgstr "ADU" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "ADU Calculation Method" +msgstr "Metode Perhitungan ADU" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method +msgid "ADU calculation method" +msgstr "Metode perhitungan ADU" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.product_adu_calculation_method_form_action +#: model:ir.ui.menu,name:ddmrp.menu_product_adu_calculation_method +msgid "ADU calculation methods" +msgstr "Metode-metode perhitungan ADU" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_as01 +#: model:product.template,name:ddmrp.product_product_as01_product_template +msgid "AS-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__active +msgid "Active" +msgstr "Aktif" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Adds chatter and activities to stock buffers." +msgstr "Menambahkan obrolan dan kegiatan ke buffer stok" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Apply adjustments to dynamically alter stock buffers to respond to planned " +"or anticipated events." +msgstr "" +"Terapkan penyesuaian untuk mengubah buffer stok secara dinamis untuk " +"merespons kegiatan yang direncanakan atau diantisipasi." + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Archived" +msgstr "Diarsipkan" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_template.py:0 +#, python-format +msgid "" +"At least one stock buffer for this product has a different Procurement unit " +"of measure category." +msgstr "" +"Setidaknya satu stok buffer untuk produk ini memiliki kategori unit satuan " +"Pembelian yang berbeda." + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure +msgid "Auto Procure" +msgstr "Pengadaan Otomatis" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure_option +msgid "Auto Procure Option" +msgstr "Opsi Pengadaaan Otomatis" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Auto update Net Flow Position" +msgstr "Perbaharui otomatis Posisi Net Flow" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__adu +msgid "Average Daily Usage" +msgstr "Penggunaan Harian Rata-rata" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_position +msgid "Avg On Hand Target Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_report_mrp_report_bom_structure +msgid "BOM Structure Report" +msgstr "Laporan Struktur Daftar Kebutuhan Material (BOM)" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom +msgid "Bill of Material" +msgstr "Daftar Kebutuhan Material" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom_line +msgid "Bill of Material Line" +msgstr "Baris dari Daftar Kebutuhan Material" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Bill of Materials" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Blended" +msgstr "Campuran" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_count +msgid "Buffer Count" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__execution_priority_level +msgid "Buffer On-Hand Alert Level" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__execution_priority_level +msgid "Buffer On-Hand Status Level" +msgstr "Tingkat Status Buffer di Tangan" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__buffer_profile_id +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_form +msgid "Buffer Profile" +msgstr "Profil Buffer" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_lead_time_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_lead_time +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_form +msgid "Buffer Profile Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_variability_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_variability +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_form +msgid "Buffer Profile Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_mgt +msgid "Buffer Profiles" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer summary" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +msgid "Buffered" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__is_buffered +msgid "Buffered?" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"By default, the qty is equal to the recommended quantity.\n" +" For distributed buffers, when the option on the profile " +"is active,\n" +" the quantity is limited to the free quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method_type +msgid "Calculation method" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Cancel" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_change_buffer_procure_qty +msgid "Change quantity in manual procurements from Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_chatter +msgid "Chatter in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_form_action +msgid "Click to start a new buffer profile" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_lead_time_form_action +msgid "Click to start a new buffer profile lead time factor" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_variability_form_action +msgid "Click to start a new buffer profile variability factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_company +msgid "Companies" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__company_id +msgid "Company" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Company Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_warning +msgid "Configuration Warnings in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Create Procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__created_purchase_line_id +msgid "Created Purchase Order Line" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_uid +msgid "Created by" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_date +msgid "Created on" +msgstr "" + +#. module: ddmrp +#: model:ir.module.category,name:ddmrp.module_category_ddmrp +#: model:ir.ui.menu,name:ddmrp.menu_ddmrp_config +msgid "DDMRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP Adjustments" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +msgid "DDMRP Buffer ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +msgid "DDMRP Buffer calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart +msgid "DDMRP Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_demand_chart +msgid "DDMRP Demand Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart_execution +msgid "DDMRP Execution Chart" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP History" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_ddmrp_manager +msgid "DDMRP Manager" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_ddmrp_run +msgid "DDMRP Manual Run Wizard" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_supply_chart +msgid "DDMRP Supply Chart" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__dlt +msgid "DLT (days)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__dlt +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__dlt +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__dlt +msgid "Decoupled Lead Time (days)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Decoupled lead time of the BoM" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_uom +msgid "Default unit of measure used for all stock operations." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__display_name +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__display_name +msgid "Display Name" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__distributed +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Distributed" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"Error: The product default Unit of Measure and the procurement Unit of " +"Measure must be in the same category." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Estimates" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Execute" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Execution" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Extensions" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__extra_lead_time +msgid "Extra lead time (for Sizing)" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_fp01 +#: model:product.template,name:ddmrp.product_product_fp01_product_template +msgid "FP-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "" +"Factor used to compute the number of days to look into the future for " +"incoming shipments for the purposes of the Net Flow position calculation." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_fixed +#, python-format +msgid "Fixed ADU" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order__ddmrp_comment +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__ddmrp_comment +msgid "Follow-up Notes" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__virtual_location_qty +msgid "Forecast On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_future +msgid "Future Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Future Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_future +msgid "Future Source" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Future-looking" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Get configuration warnings for stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__3_green +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Green" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_override +msgid "Green Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green Zone Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green Zone Minimum Order Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green Zone Order Cycle" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_qty +msgid "Green Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Green zone" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green zone Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green zone qty option considering desired Order Cycle" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green zone qty option considering minimum order quantity" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Group By" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Long Term Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Stock In Source Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__id +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__id +msgid "ID" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_make_procurement_buffer__partner_id +msgid "If set, will be used as preferred vendor for purchase routes." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "" +"In blended method, past and future factors must be positive and sum exactly " +"1,0." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_adu_calc_include_scrap +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_adu_calc_include_scrap +msgid "Include scrap locations in ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_outside_dlt_qty +msgid "Incoming (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_dlt_qty +msgid "Incoming (Within DLT)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_location_qty +msgid "Incoming On Location" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Outside DLT" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Within DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_future +msgid "Information source used for future calculation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_past +msgid "Information source used for past calculation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_max +msgid "It denotes how far you are on average from the target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_position +msgid "" +"It denotes what the target stock on hand is. The computation is: OH Target = " +"TOR + Green Zone / 2 " +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_min +msgid "It denotes what the target stock on hand range is." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__item_type +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__item_type +msgid "Item Type" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__item_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Items" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "LT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item____last_update +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability____last_update +msgid "Last Modified on" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_date +msgid "Last Updated on" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__lead_days +msgid "Lead Time (Distributed)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__lead_time_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__factor +msgid "Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__lead_days +msgid "Lead time for distributed products." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Lead time of the product" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_future +msgid "Length-of-period horizon in days looking forward." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Length-of-period horizon in days looking past." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "Limit replenishment to free quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__buffer_ids +msgid "Linked Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__location_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__location_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Location" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Main Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__main_supplier_id +msgid "Main Supplier" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Main supplier" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer_item +msgid "Make Procurements from Stock Buffer Item" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer +msgid "Make Procurements from Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__manufactured +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Manufactured" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__mrp_production_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Manufacturing Orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum Procure Batch" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum qty for a single procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__min_max +msgid "Min-max" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_cycle +msgid "Minimum Order Cycle (days)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__minimum_order_quantity +msgid "Minimum Order Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum Procure Batch" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum qty for a single procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__group_id +msgid "" +"Moves created through this buffer will be put in this procurement group. If " +"none is given, the moves generated by stock rules will be grouped into one " +"big picking." +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_multi_level +msgid "Multi Level MRP" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__name +msgid "Name" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position +msgid "Net Flow Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "Net Flow Position Incoming Safety Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position_percent +msgid "Net flow position (% of TOG)" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No demand detected." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "No stock available on source location for distributed buffer" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "No stock buffer found." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No supply detected." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Non-completed Moves" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "On Hand Alert Zones" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "On Hand Target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_min +msgid "On Hand Target Range" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_percent +msgid "On Hand/TOR (%)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "On-Hand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__execution_priority_level +msgid "On-Hand Alert Level" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Red" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Yellow" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Open Non-completed Moves" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "Operations" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_horizon +msgid "Order Spike Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_threshold +msgid "Order Spike Threshold" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__outgoing_location_qty +msgid "Outgoing On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.po_line_execution_action +#: model:ir.ui.menu,name:ddmrp.menu_pol_execution +msgid "PO lines On-Hand Status" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_past +msgid "Past Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_past +msgid "Past Horizon" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_past +msgid "Past Source" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Past-looking" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__date_planned +msgid "Planned Date" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Planning" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__planning_priority_level +msgid "Planning Priority Level" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Planning Priority Zones" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Horizon." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Source." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Horizon." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Source." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_recommended_qty +msgid "Procure Recommendation" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_procurement_group +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__group_id +msgid "Procurement Group" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Procurement Request" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Procurement Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_uom_id +msgid "Procurement UoM" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement recommended" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_product +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__product_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_id +msgid "Product" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_adu_calculation_method +msgid "Product Average Daily Usage calculation method" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_picking_form +msgid "Product Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_template +msgid "Product Template" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_production +msgid "Production Order" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__purchase_line_ids +msgid "Purchase Order Lines" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Purchase Orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__purchased +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Purchased" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty +msgid "Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qty_multiple +msgid "Qty Multiple" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_qty_multiple_tolerance +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_qty_multiple_tolerance +msgid "Qty Multiple Tolerance" +msgstr "" + +#. module: ddmrp +#: model:ir.model.constraint,message:ddmrp.constraint_stock_buffer_qty_multiple_check +msgid "Qty Multiple must be greater than or equal to zero." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Qualified Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_mrp_move_ids +msgid "Qualified Demand Mrp Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_stock_move_ids +msgid "Qualified Demand Stock Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty_without_security +msgid "Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "Quantity On Hand (Unreserved)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty +msgid "Quantity On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "" +"Quantity available in this stock buffer, this is the total quantity on hand " +"minus the outgoing reservations." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "" +"Quantity free for distributed buffer in the source location. When a " +"procurement is requested, if the option is active on the profile, it will be " +"limited to this quantity." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "Quantity must be positive." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "RFQ Qty (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "RFQ Qty Outside DLT" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm01 +#: model:product.template,name:ddmrp.product_product_rm01_product_template +msgid "RM-01" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm02 +#: model:product.template,name:ddmrp.product_product_rm02_product_template +msgid "RM-02" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "Re-Schedule Procurement Max Proc. Time (minutes)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__recommended_qty +msgid "Recommended Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__1_red +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Red" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_base_qty +msgid "Red Base Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_safety_qty +msgid "Red Safety Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_override +msgid "Red Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_zone_qty +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_red +msgid "Red Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Red zone" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Refresh Buffer" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish +msgid "Replenished" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish_override +msgid "Replenished Override" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "Replenishment Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__replenish_method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_method +msgid "Replenishment method" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.act_make_procurement_from_buffer +msgid "Request Procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "" +"Request for Quotation total quantity that is planned outside of the DLT " +"horizon." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_run +#: model:ir.ui.menu,name:ddmrp.ddmrp_run_menu +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP Buffer calculation" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_search +msgid "Search ADU Calculatiion methods" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_search +msgid "Search Buffer Profile Lead Time" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_search +msgid "Search Buffer Profile Variability" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_search +msgid "Search Buffer Profiles" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Secondary Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Set a tolerance value to apply to quantity multiple in stock buffers.\n" +" If the quantity needed is below this " +"tolerance threshold, the recommended\n" +" quantity will be reduced a bit instead " +"of adding another bucket.\n" +" The value is a percentage of the " +"quantity multiple." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Set an storage capacity limit on stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_config +msgid "Settings" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Show Coverage Days in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__show_execution_chart +msgid "Show Execution Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_coverage_days +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Shows the current on-hand for stock buffers expressed as coverage days." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "" +"Some incoming quantities are outside of the DLT Horizon and may require " +"rescheduling. Press this button to display the involved supply orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "Source Location Free Quantity (distributed)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "" +"Source location from where goods will be replenished. Computed when buffer " +"is refreshed from following the Stock Rules." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move_line__state +msgid "Status" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__buffer_id +msgid "Stock Buffer" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_stock_buffer_maintainer +msgid "Stock Buffer Maintainer" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile +msgid "Stock Buffer Profile" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_lead_time +msgid "Stock Buffer Profile Lead Time Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_variability +msgid "Stock Buffer Profile Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_ids +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__buffer_ids +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer +#: model_terms:ir.ui.view,arch_db:ddmrp.product_normal_form_view_inherit +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_form +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_form2 +msgid "Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Stock Buffers & Packagings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_move_year_consumption_action +msgid "Stock Move Last Year Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_move_consumption_pivot +msgid "Stock Moves Yearly Consumption" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_rule +msgid "Stock Rule" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_stock_buffer_capacity_limit +msgid "Storage Capacity Limits" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_history +msgid "Store historical data from stock buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Store historical data from stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply & Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_max +msgid "Target On Hand (Max)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The green zone determines the average order frequency and the order size. It " +"is determined as the maximum of the following three factors: Minimum Order " +"Cycle, Lead Time Factor and Minimum Order Quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__main_supplier_id +msgid "" +"The main supplier is the first listed supplier defined on the product that " +"is valid for this product variant. Any date restrictions are not taken into " +"account." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__qty_multiple +msgid "" +"The procurement quantity will be rounded up to this multiple. If it is 0, " +"the exact quantity will be used." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The red zone is the embedded safety in the buffer. The larger the " +"variability associated with the product, the larger the red zone will be. It " +"is composed of two sub-zones: Red base and red safety." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The yellow zone represents the stock required to cover a full lead time." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_green +msgid "Top Of Green" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_yellow +msgid "Top Of Yellow" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Total Incoming" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,help:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Transfer status changes can trigger the update of relevant buffer's NFP." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,help:ddmrp.field_mrp_bom_line__is_buffered +msgid "True when the product has an DDMRP buffer associated." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_type +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Type" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__uom_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_uom +msgid "Unit of Measure" +msgstr "" + +#. module: ddmrp +#: model:product.product,uom_name:ddmrp.product_product_as01 +#: model:product.product,uom_name:ddmrp.product_product_fp01 +#: model:product.product,uom_name:ddmrp.product_product_rm01 +#: model:product.product,uom_name:ddmrp.product_product_rm02 +#: model:product.template,uom_name:ddmrp.product_product_as01_product_template +#: model:product.template,uom_name:ddmrp.product_product_fp01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm02_product_template +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_fp01 +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_rm01 +msgid "Units" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Unsupported operator %s" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "UoM" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +msgid "Update NFP on Stock Buffers on relevant events." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_packaging +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Use packagings on stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"Use this assistant to generate a procurement request for this\n" +" stock buffer. According to the product configuration,\n" +" this may trigger a draft purchase order, a " +"manufacturing\n" +" order or a transfer picking." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Used In" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__variability_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__factor +msgid "Variability Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__partner_id +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Vendor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_vendor_code +msgid "Vendor Code" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Future)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Past)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Incoming (Within DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from MRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from Pickings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_warehouse +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__warehouse_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__warehouse_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Warehouse" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "" +"When activated, the recommended quantity will be maxed at the quantity " +"available in the replenishment source location." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__extra_lead_time +msgid "" +"When defined, this lead time will be added to the decoupled lead time for " +"the computation of the zones size (it won't affect planned date for " +"procurements).\n" +"This is particularly useful in situations of infrequent but periodic demand. " +"E.g. We receive a large order every 30 days, whereas the supplier takes 10 " +"days to supply. \n" +"In this case the yellow zone must cover for the entire cycle of 30 days of " +"demand.\n" +"In situations with infrequent demand the ADU tends to be very small, and " +"every new order would be treated as a spike, when \n" +"in reality this is not an exceptional situation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__stockout +msgid "When in stockout" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__standard +msgid "When recommended (NFP below TOY)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_future +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"future part of the combination." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_past +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"past part of the combination." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "" +"When you request procurement from a buffer, their scheduled date is " +"rescheduled to now + this procurement time (in minutes). Their scheduled " +"date represents the latest the transfers should be done, and therefore, past " +"this timestamp, considered late." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__auto_procure +msgid "" +"Whenever the buffer is recomputed, if this option is set, it will procure " +"automatically if needed." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__wiz_id +msgid "Wizard" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__2_yellow +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Yellow" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_override +msgid "Yellow Zone (Override)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_zone_qty +msgid "Yellow Zone Qty" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Yellow zone" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"You have to select a product unit of measure that is inthe same category " +"than the default unit ofmeasure of the product" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Zones Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_adjustment +msgid "apply adjustments to dynamically alter buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "days" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "minutes" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "or" +msgstr "" diff --git a/ddmrp/i18n/zh_Hans.po b/ddmrp/i18n/zh_Hans.po new file mode 100644 index 000000000..be314faa0 --- /dev/null +++ b/ddmrp/i18n/zh_Hans.po @@ -0,0 +1,1940 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ddmrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-10-21 12:20+0000\n" +"Last-Translator: Jeffery CHEN Fan \n" +"Language-Team: none\n" +"Language: zh_Hans\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.2.1\n" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__used_in_bom_count +msgid "# BoM Where Used" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_move_line__state +msgid "" +"* New: When the stock move is created and not yet confirmed.\n" +"* Waiting Another Move: This state can be seen when a move is waiting for " +"another one, for example in a chained flow.\n" +"* Waiting Availability: This state is reached when the procurement " +"resolution is not straight forward. It may need the scheduler to run, a " +"component to be manufactured...\n" +"* Available: When products are reserved, it is set to 'Available'.\n" +"* Done: When the shipment is processed, the state is 'Done'." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu +msgid "ADU" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "ADU Calculation Method" +msgstr "ADU 计算方法" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method +msgid "ADU calculation method" +msgstr "ADU 计算方法" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.product_adu_calculation_method_form_action +#: model:ir.ui.menu,name:ddmrp.menu_product_adu_calculation_method +msgid "ADU calculation methods" +msgstr "ADU 计算方法" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_as01 +#: model:product.template,name:ddmrp.product_product_as01_product_template +msgid "AS-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__active +msgid "Active" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Adds chatter and activities to stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Apply adjustments to dynamically alter stock buffers to respond to planned " +"or anticipated events." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Archived" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_template.py:0 +#, python-format +msgid "" +"At least one stock buffer for this product has a different Procurement unit " +"of measure category." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure +msgid "Auto Procure" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__auto_procure_option +msgid "Auto Procure Option" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +#, fuzzy +msgid "Auto update Net Flow Position" +msgstr "净流位置" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__adu +#, fuzzy +msgid "Average Daily Usage" +msgstr "日均用量 (ADU)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_position +msgid "Avg On Hand Target Position" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_report_mrp_report_bom_structure +msgid "BOM Structure Report" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom +msgid "Bill of Material" +msgstr "物料清单" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_bom_line +#, fuzzy +msgid "Bill of Material Line" +msgstr "物料清单" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Bill of Materials" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Blended" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_count +msgid "Buffer Count" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__execution_priority_level +msgid "Buffer On-Hand Alert Level" +msgstr "在手缓冲警报级别" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__execution_priority_level +msgid "Buffer On-Hand Status Level" +msgstr "在手缓冲状态级别" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__buffer_profile_id +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_form +msgid "Buffer Profile" +msgstr "缓冲设置" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_lead_time_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_lead_time +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_form +msgid "Buffer Profile Lead Time Factor" +msgstr "缓冲设置前置时间因子" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_variability_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_variability +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_form +msgid "Buffer Profile Variability Factor" +msgstr "缓冲设置变动因子" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_buffer_profile_form_action +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer_profile_mgt +msgid "Buffer Profiles" +msgstr "缓冲设置" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Buffer summary" +msgstr "缓冲摘要" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +msgid "Buffered" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__is_buffered +msgid "Buffered?" +msgstr "缓冲 ?" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Buffers" +msgstr "缓冲" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"By default, the qty is equal to the recommended quantity.\n" +" For distributed buffers, when the option on the profile " +"is active,\n" +" the quantity is limited to the free quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_calculation_method_type +msgid "Calculation method" +msgstr "计算方法" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Cancel" +msgstr "取消" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_change_buffer_procure_qty +msgid "Change quantity in manual procurements from Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_chatter +msgid "Chatter in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_form_action +msgid "Click to start a new buffer profile" +msgstr "点击开始新缓冲设置" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_lead_time_form_action +msgid "Click to start a new buffer profile lead time factor" +msgstr "点击开始新缓冲设置前置时间因子" + +#. module: ddmrp +#: model_terms:ir.actions.act_window,help:ddmrp.stock_buffer_profile_variability_form_action +msgid "Click to start a new buffer profile variability factor" +msgstr "点击开始缓冲设置变动因子" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_company +#, fuzzy +msgid "Companies" +msgstr "公司" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__company_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__company_id +msgid "Company" +msgstr "公司" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +#, fuzzy +msgid "Company Settings" +msgstr "公司" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_warning +msgid "Configuration Warnings in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Create Procurement" +msgstr "创建补货" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__created_purchase_line_id +msgid "Created Purchase Order Line" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_uid +msgid "Created by" +msgstr "创建人" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__create_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__create_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__create_date +msgid "Created on" +msgstr "创建时间" + +#. module: ddmrp +#: model:ir.module.category,name:ddmrp.module_category_ddmrp +#: model:ir.ui.menu,name:ddmrp.menu_ddmrp_config +msgid "DDMRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP Adjustments" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_adu_calculation_scheduler_action +msgid "DDMRP Buffer ADU calculation" +msgstr "DDMRP 缓冲ADU 计算" + +#. module: ddmrp +#: model:ir.actions.server,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action_ir_actions_server +#: model:ir.cron,cron_name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +#: model:ir.cron,name:ddmrp.ir_cron_ddmrp_calculation_scheduler_action +#, fuzzy +msgid "DDMRP Buffer calculation" +msgstr "运行DDMRP缓冲计算" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart +msgid "DDMRP Chart" +msgstr "DDMRP 图表" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_demand_chart +#, fuzzy +msgid "DDMRP Demand Chart" +msgstr "DDMRP 图表" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_chart_execution +msgid "DDMRP Execution Chart" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "DDMRP History" +msgstr "" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_ddmrp_manager +msgid "DDMRP Manager" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_ddmrp_run +msgid "DDMRP Manual Run Wizard" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__ddmrp_supply_chart +#, fuzzy +msgid "DDMRP Supply Chart" +msgstr "DDMRP 图表" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__dlt +msgid "DLT (days)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__dlt +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__dlt +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__dlt +msgid "Decoupled Lead Time (days)" +msgstr "解耦的前置时间(天)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +#, fuzzy +msgid "Decoupled lead time of the BoM" +msgstr "解耦的前置时间(天)" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_uom +msgid "Default unit of measure used for all stock operations." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__display_name +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__display_name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__distributed +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Distributed" +msgstr "分布" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"Error: The product default Unit of Measure and the procurement Unit of " +"Measure must be in the same category." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Estimates" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Execute" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Execution" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Extensions" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__extra_lead_time +msgid "Extra lead time (for Sizing)" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_fp01 +#: model:product.template,name:ddmrp.product_product_fp01_product_template +msgid "FP-01" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "" +"Factor used to compute the number of days to look into the future for " +"incoming shipments for the purposes of the Net Flow position calculation." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__adu_fixed +#, python-format +msgid "Fixed ADU" +msgstr "固定ADU" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order__ddmrp_comment +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__ddmrp_comment +msgid "Follow-up Notes" +msgstr "关注备注" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__virtual_location_qty +msgid "Forecast On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_future +msgid "Future Factor" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_future +#, fuzzy +msgid "Future Horizon" +msgstr "视界" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_future +msgid "Future Source" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Future-looking" +msgstr "未来样子" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Get configuration warnings for stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__3_green +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__3_green +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Green" +msgstr "绿" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_override +msgid "Green Zone (Override)" +msgstr "绿区(覆盖)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green Zone Lead Time Factor" +msgstr "绿区前置时间因子" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_moq +msgid "Green Zone Minimum Order Quantity" +msgstr "绿区最小订购数量" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green Zone Order Cycle" +msgstr "绿区订购周期" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__green_zone_qty +msgid "Green Zone Qty" +msgstr "绿区数量" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Green zone" +msgstr "绿区" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_lt_factor +msgid "Green zone Lead Time Factor" +msgstr "绿区前置时间因子" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_oc +msgid "Green zone qty option considering desired Order Cycle" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__green_zone_moq +#, fuzzy +msgid "Green zone qty option considering minimum order quantity" +msgstr "绿区最小订购数量" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Group By" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Long Term Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Has Stock In Source Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__id +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__id +msgid "ID" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_make_procurement_buffer__partner_id +msgid "If set, will be used as preferred vendor for purchase routes." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "" +"In blended method, past and future factors must be positive and sum exactly " +"1,0." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_adu_calc_include_scrap +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_adu_calc_include_scrap +msgid "Include scrap locations in ADU calculation" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_outside_dlt_qty +msgid "Incoming (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_dlt_qty +msgid "Incoming (Within DLT)" +msgstr "进入(在 DLT 内)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__incoming_location_qty +#, fuzzy +msgid "Incoming On Location" +msgstr "进入在 DLT 内" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Outside DLT" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Incoming Within DLT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_future +msgid "Information source used for future calculation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__source_past +msgid "Information source used for past calculation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_max +msgid "It denotes how far you are on average from the target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_position +msgid "" +"It denotes what the target stock on hand is. The computation is: OH Target = " +"TOR + Green Zone / 2 " +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__on_hand_target_min +msgid "It denotes what the target stock on hand range is." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__item_type +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__item_type +msgid "Item Type" +msgstr "项目类型" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__item_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "Items" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "LT" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item____last_update +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time____last_update +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability____last_update +msgid "Last Modified on" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_uid +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_ddmrp_run__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__write_date +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__write_date +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__write_date +msgid "Last Updated on" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__lead_days +#, fuzzy +msgid "Lead Time (Distributed)" +msgstr "分布" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__lead_time_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__factor +msgid "Lead Time Factor" +msgstr "前置时间因子" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__lead_days +msgid "Lead time for distributed products." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.report_mrpbomstructure_ddmrp +msgid "Lead time of the product" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_future +#, fuzzy +msgid "Length-of-period horizon in days looking forward." +msgstr "视界时期长度,按天" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__horizon_past +#, fuzzy +msgid "Length-of-period horizon in days looking past." +msgstr "视界时期长度,按天" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "Limit replenishment to free quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move__buffer_ids +#, fuzzy +msgid "Linked Stock Buffers" +msgstr "库存缓冲" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__location_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__location_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Location" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Main Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__main_supplier_id +msgid "Main Supplier" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Main supplier" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer_item +#, fuzzy +msgid "Make Procurements from Stock Buffer Item" +msgstr "从订购点创造补货" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_make_procurement_buffer +#, fuzzy +msgid "Make Procurements from Stock Buffers" +msgstr "从订购点创造补货" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__manufactured +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Manufactured" +msgstr "制造" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__mrp_production_ids +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Manufacturing Orders" +msgstr "制造订单" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum Procure Batch" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_max_qty +msgid "Maximum qty for a single procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__min_max +msgid "Min-max" +msgstr "最小-最大" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_cycle +msgid "Minimum Order Cycle (days)" +msgstr "最小订购周期(天)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__minimum_order_quantity +msgid "Minimum Order Quantity" +msgstr "最小订购数量" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_min_qty +#, fuzzy +msgid "Minimum Procure Batch" +msgstr "最小订购数量" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__procure_min_qty +msgid "Minimum qty for a single procurement" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__group_id +msgid "" +"Moves created through this buffer will be put in this procurement group. If " +"none is given, the moves generated by stock rules will be grouped into one " +"big picking." +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_multi_level +msgid "Multi Level MRP" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_lead_time__name +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__name +msgid "Name" +msgstr "名称" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position +msgid "Net Flow Position" +msgstr "净流位置" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_warehouse__nfp_incoming_safety_factor +msgid "Net Flow Position Incoming Safety Factor" +msgstr "净流位置进入安全因子" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__net_flow_position_percent +msgid "Net flow position (% of TOG)" +msgstr "净流位置 (% of TOG)" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No demand detected." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "No stock available on source location for distributed buffer" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "No stock buffer found." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "No supply detected." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Non-completed Moves" +msgstr "未完成的移动" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "On Hand Alert Zones" +msgstr "在手警报区" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "On Hand Target" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_min +msgid "On Hand Target Range" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__on_hand_percent +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_percent +msgid "On Hand/TOR (%)" +msgstr "在手/TOR (%)" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "On-Hand" +msgstr "在手" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__execution_priority_level +msgid "On-Hand Alert Level" +msgstr "在手警报级别" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Red" +msgstr "在手警报: 红" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_purchase_order_filter +msgid "On-Hand Alert: Yellow" +msgstr "在手警报: 黄" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Open Non-completed Moves" +msgstr "开放未完成的移动" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "Operations" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_horizon +msgid "Order Spike Horizon" +msgstr "订单尖峰视界" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__order_spike_threshold +msgid "Order Spike Threshold" +msgstr "订单尖峰阈值" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__outgoing_location_qty +msgid "Outgoing On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.po_line_execution_action +#: model:ir.ui.menu,name:ddmrp.menu_pol_execution +msgid "PO lines On-Hand Status" +msgstr "PO行在手状态" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__factor_past +#, fuzzy +msgid "Past Factor" +msgstr "变动因子" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__horizon_past +#, fuzzy +msgid "Past Horizon" +msgstr "视界" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_product_adu_calculation_method__source_past +msgid "Past Source" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Past-looking" +msgstr "过去的样子" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__date_planned +msgid "Planned Date" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Planning" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__planning_priority_level +msgid "Planning Priority Level" +msgstr "计划优先级级别" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Planning Priority Zones" +msgstr "计划优先级区" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Horizon." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Future Source." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Horizon." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/product_adu_calculation_method.py:0 +#, python-format +msgid "Please indicate a Past Source." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_recommended_qty +#, fuzzy +msgid "Procure Recommendation" +msgstr "补货建议" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement" +msgstr "补货" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_procurement_group +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__group_id +#, fuzzy +msgid "Procurement Group" +msgstr "补货规则" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +#, fuzzy +msgid "Procurement Request" +msgstr "补货请求" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Procurement Settings" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__procure_uom_id +#, fuzzy +msgid "Procurement UoM" +msgstr "补货" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Procurement recommended" +msgstr "补货建议" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_product +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__product_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_id +msgid "Product" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_adu_calculation_method +msgid "Product Average Daily Usage calculation method" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_picking_form +msgid "Product Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_product_template +msgid "Product Template" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_mrp_production +#, fuzzy +msgid "Production Order" +msgstr "制造订单" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order +msgid "Purchase Order" +msgstr "采购订单" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "采购订单行" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__purchase_line_ids +#, fuzzy +msgid "Purchase Order Lines" +msgstr "采购订单行" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#, fuzzy +msgid "Purchase Orders" +msgstr "采购订单" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__item_type__purchased +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Purchased" +msgstr "已采购" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty +msgid "Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qty_multiple +msgid "Qty Multiple" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_qty_multiple_tolerance +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_qty_multiple_tolerance +msgid "Qty Multiple Tolerance" +msgstr "" + +#. module: ddmrp +#: model:ir.model.constraint,message:ddmrp.constraint_stock_buffer_qty_multiple_check +msgid "Qty Multiple must be greater than or equal to zero." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Qualified Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_mrp_move_ids +msgid "Qualified Demand Mrp Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__qualified_demand_stock_move_ids +msgid "Qualified Demand Stock Move" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__qty_without_security +msgid "Quantity" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "Quantity On Hand (Unreserved)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_location_qty +msgid "Quantity On Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__product_location_qty_available_not_res +msgid "" +"Quantity available in this stock buffer, this is the total quantity on hand " +"minus the outgoing reservations." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "" +"Quantity free for distributed buffer in the source location. When a " +"procurement is requested, if the option is active on the profile, it will be " +"limited to this quantity." +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/wizards/make_procurement_buffer.py:0 +#, python-format +msgid "Quantity must be positive." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "RFQ Qty (Outside DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "RFQ Qty Outside DLT" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm01 +#: model:product.template,name:ddmrp.product_product_rm01_product_template +msgid "RM-01" +msgstr "" + +#. module: ddmrp +#: model:product.product,name:ddmrp.product_product_rm02 +#: model:product.template,name:ddmrp.product_product_rm02_product_template +msgid "RM-02" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "Re-Schedule Procurement Max Proc. Time (minutes)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__recommended_qty +msgid "Recommended Qty" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__1_red +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__1_red +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Red" +msgstr "红" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_base_qty +msgid "Red Base Qty" +msgstr "红基数" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_safety_qty +msgid "Red Safety Qty" +msgstr "红安全数量" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_override +msgid "Red Zone (Override)" +msgstr "红区(覆盖)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__red_zone_qty +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_red +msgid "Red Zone Qty" +msgstr "红区数量" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Red zone" +msgstr "红区" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Refresh Buffer" +msgstr "刷新缓冲" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish +msgid "Replenished" +msgstr "补给" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer_profile__replenish_method__replenish_override +msgid "Replenished Override" +msgstr "补给覆盖" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "Replenishment Location" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__replenish_method +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__replenish_method +msgid "Replenishment method" +msgstr "补给方法" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.act_make_procurement_from_buffer +#, fuzzy +msgid "Request Procurement" +msgstr "创建补货" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__rfq_outside_dlt_qty +msgid "" +"Request for Quotation total quantity that is planned outside of the DLT " +"horizon." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run ADU calculation" +msgstr "运行ADU计算" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_run +#: model:ir.ui.menu,name:ddmrp.ddmrp_run_menu +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP" +msgstr "运行DDMRP" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "Run DDMRP Buffer calculation" +msgstr "运行DDMRP缓冲计算" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_search +msgid "Search ADU Calculatiion methods" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_lead_time_search +msgid "Search Buffer Profile Lead Time" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_variability_search +msgid "Search Buffer Profile Variability" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_stock_buffer_profile_search +msgid "Search Buffer Profiles" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Secondary Buffer size factors" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Set a tolerance value to apply to quantity multiple in stock buffers.\n" +" If the quantity needed is below this " +"tolerance threshold, the recommended\n" +" quantity will be reduced a bit instead " +"of adding another bucket.\n" +" The value is a percentage of the " +"quantity multiple." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Set an storage capacity limit on stock buffers." +msgstr "" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_ddmrp_config +msgid "Settings" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Show Coverage Days in Stock Buffers" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__show_execution_chart +msgid "Show Execution Chart" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_coverage_days +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Shows the current on-hand for stock buffers expressed as coverage days." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "" +"Some incoming quantities are outside of the DLT Horizon and may require " +"rescheduling. Press this button to display the involved supply orders" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__distributed_source_location_qty +msgid "Source Location Free Quantity (distributed)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__distributed_source_location_id +msgid "" +"Source location from where goods will be replenished. Computed when buffer " +"is refreshed from following the Stock Rules." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_move_line__state +msgid "Status" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_bom_line__buffer_id +#: model:ir.model.fields,field_description:ddmrp.field_mrp_production__buffer_id +msgid "Stock Buffer" +msgstr "库存缓冲" + +#. module: ddmrp +#: model:res.groups,name:ddmrp.group_stock_buffer_maintainer +msgid "Stock Buffer Maintainer" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile +#, fuzzy +msgid "Stock Buffer Profile" +msgstr "缓冲设置" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_lead_time +#, fuzzy +msgid "Stock Buffer Profile Lead Time Factor" +msgstr "缓冲设置前置时间因子" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_buffer_profile_variability +#, fuzzy +msgid "Stock Buffer Profile Variability Factor" +msgstr "缓冲设置变动因子" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.action_stock_buffer +#: model:ir.model.fields,field_description:ddmrp.field_product_product__buffer_ids +#: model:ir.model.fields,field_description:ddmrp.field_purchase_order_line__buffer_ids +#: model:ir.ui.menu,name:ddmrp.menu_stock_buffer +#: model_terms:ir.ui.view,arch_db:ddmrp.product_normal_form_view_inherit +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_form +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_form2 +#, fuzzy +msgid "Stock Buffers" +msgstr "库存缓冲" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +#, fuzzy +msgid "Stock Buffers & Packagings" +msgstr "库存缓冲计划" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_move +#, fuzzy +msgid "Stock Move" +msgstr "库存缓冲" + +#. module: ddmrp +#: model:ir.actions.act_window,name:ddmrp.stock_move_year_consumption_action +msgid "Stock Move Last Year Consumption" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_move_consumption_pivot +msgid "Stock Moves Yearly Consumption" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_rule +#, fuzzy +msgid "Stock Rule" +msgstr "库存缓冲" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_stock_buffer_capacity_limit +msgid "Storage Capacity Limits" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_history +msgid "Store historical data from stock buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Store historical data from stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Supply & Demand" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__on_hand_target_max +msgid "Target On Hand (Max)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The green zone determines the average order frequency and the order size. It " +"is determined as the maximum of the following three factors: Minimum Order " +"Cycle, Lead Time Factor and Minimum Order Quantity." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__main_supplier_id +msgid "" +"The main supplier is the first listed supplier defined on the product that " +"is valid for this product variant. Any date restrictions are not taken into " +"account." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__qty_multiple +msgid "" +"The procurement quantity will be rounded up to this multiple. If it is 0, " +"the exact quantity will be used." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The red zone is the embedded safety in the buffer. The larger the " +"variability associated with the product, the larger the red zone will be. It " +"is composed of two sub-zones: Red base and red safety." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "" +"The yellow zone represents the stock required to cover a full lead time." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_green +msgid "Top Of Green" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__top_of_yellow +msgid "Top Of Yellow" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "Total Incoming" +msgstr "进入总和" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,help:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "" +"Transfer status changes can trigger the update of relevant buffer's NFP." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_mrp_bom__is_buffered +#: model:ir.model.fields,help:ddmrp.field_mrp_bom_line__is_buffered +msgid "True when the product has an DDMRP buffer associated." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_type +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Type" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__uom_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_uom +msgid "Unit of Measure" +msgstr "" + +#. module: ddmrp +#: model:product.product,uom_name:ddmrp.product_product_as01 +#: model:product.product,uom_name:ddmrp.product_product_fp01 +#: model:product.product,uom_name:ddmrp.product_product_rm01 +#: model:product.product,uom_name:ddmrp.product_product_rm02 +#: model:product.template,uom_name:ddmrp.product_product_as01_product_template +#: model:product.template,uom_name:ddmrp.product_product_fp01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm01_product_template +#: model:product.template,uom_name:ddmrp.product_product_rm02_product_template +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_fp01 +#: model:stock.buffer,product_uom_name:ddmrp.stock_buffer_rm01 +msgid "Units" +msgstr "" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "Unsupported operator %s" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree +msgid "UoM" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_company__ddmrp_auto_update_nfp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__ddmrp_auto_update_nfp +msgid "Update NFP on Stock Buffers on relevant events." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_packaging +#: model_terms:ir.ui.view,arch_db:ddmrp.res_config_settings_view_form +msgid "Use packagings on stock buffers." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_make_procurement_buffer_wizard +msgid "" +"Use this assistant to generate a procurement request for this\n" +" stock buffer. According to the product configuration,\n" +" this may trigger a draft purchase order, a " +"manufacturing\n" +" order or a transfer picking." +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Used In" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile__variability_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer_profile_variability__factor +msgid "Variability Factor" +msgstr "变动因子" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer__partner_id +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_execution_tree +msgid "Vendor" +msgstr "厂商" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__product_vendor_code +msgid "Vendor Code" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Future)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View ADU (Past)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Incoming (Within DLT)" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from MRP" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "View Qualified Demand from Pickings" +msgstr "" + +#. module: ddmrp +#: model:ir.model,name:ddmrp.model_stock_warehouse +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__warehouse_id +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__warehouse_id +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +msgid "Warehouse" +msgstr "仓库" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__replenish_distributed_limit_to_free_qty +msgid "" +"When activated, the recommended quantity will be maxed at the quantity " +"available in the replenishment source location." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__extra_lead_time +msgid "" +"When defined, this lead time will be added to the decoupled lead time for " +"the computation of the zones size (it won't affect planned date for " +"procurements).\n" +"This is particularly useful in situations of infrequent but periodic demand. " +"E.g. We receive a large order every 30 days, whereas the supplier takes 10 " +"days to supply. \n" +"In this case the yellow zone must cover for the entire cycle of 30 days of " +"demand.\n" +"In situations with infrequent demand the ADU tends to be very small, and " +"every new order would be treated as a spike, when \n" +"in reality this is not an exceptional situation." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__stockout +msgid "When in stockout" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__auto_procure_option__standard +msgid "When recommended (NFP below TOY)" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_future +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"future part of the combination." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_product_adu_calculation_method__factor_past +msgid "" +"When using a blended method, this is the relative weight assigned to the " +"past part of the combination." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer_profile__distributed_reschedule_max_proc_time +msgid "" +"When you request procurement from a buffer, their scheduled date is " +"rescheduled to now + this procurement time (in minutes). Their scheduled " +"date represents the latest the transfers should be done, and therefore, past " +"this timestamp, considered late." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,help:ddmrp.field_stock_buffer__auto_procure +msgid "" +"Whenever the buffer is recomputed, if this option is set, it will procure " +"automatically if needed." +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_make_procurement_buffer_item__wiz_id +msgid "Wizard" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__execution_priority_level__2_yellow +#: model:ir.model.fields.selection,name:ddmrp.selection__stock_buffer__planning_priority_level__2_yellow +#: model_terms:ir.ui.view,arch_db:ddmrp.purchase_order_line_search +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_search +#: model_terms:ir.ui.view,arch_db:ddmrp.view_mrp_production_filter +msgid "Yellow" +msgstr "黄" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_override +msgid "Yellow Zone (Override)" +msgstr "黄区(覆盖)" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_stock_buffer__yellow_zone_qty +msgid "Yellow Zone Qty" +msgstr "黄区数量" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Yellow zone" +msgstr "黄区" + +#. module: ddmrp +#: code:addons/ddmrp/models/stock_buffer.py:0 +#, python-format +msgid "" +"You have to select a product unit of measure that is inthe same category " +"than the default unit ofmeasure of the product" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +msgid "Zones Information" +msgstr "" + +#. module: ddmrp +#: model:ir.model.fields,field_description:ddmrp.field_res_config_settings__module_ddmrp_adjustment +msgid "apply adjustments to dynamically alter buffers" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form +#: model_terms:ir.ui.view,arch_db:ddmrp.view_product_adu_calculation_method_form +msgid "days" +msgstr "天" + +#. module: ddmrp +#: code:addons/ddmrp/hooks.py:0 +#, python-format +msgid "minutes" +msgstr "" + +#. module: ddmrp +#: model_terms:ir.ui.view,arch_db:ddmrp.view_run_ddmrp_wizard +msgid "or" +msgstr "" + +#~ msgid "Buffer size factors" +#~ msgstr "缓冲大小因子" + +#~ msgid "Buffer zones" +#~ msgstr "缓冲区" + +#~ msgid "Net flow position" +#~ msgstr "净流位置" + +#~ msgid "Qualified demand" +#~ msgstr "验证的需求" + +#~ msgid "Top of Green" +#~ msgstr "绿顶" + +#~ msgid "Top of Red" +#~ msgstr "红顶" + +#~ msgid "Top of Yellow" +#~ msgstr "黄顶" + +#, fuzzy +#~ msgid "Inventory Locations" +#~ msgstr "进入在 DLT 内" + +#~ msgid "Incoming within DLT" +#~ msgstr "进入在 DLT 内" + +#~ msgid "Buffer monitor" +#~ msgstr "缓冲监视器" + +#~ msgid "Green zone order cycle" +#~ msgstr "绿区订购周期" + +#~ msgid "Orderpoint" +#~ msgstr "订购点" + +#~ msgid "Reordering Rule DDMRP calculation" +#~ msgstr "订货规则DDMRP计算" + +#~ msgid "Run Scheduler Manually" +#~ msgstr "手动运行排程" + +#~ msgid "Reordering rule" +#~ msgstr "订货规则" + +#~ msgid "Use Estimates" +#~ msgstr "使用估算" diff --git a/ddmrp/migrations/14.0.1.6.0/post-migration.py b/ddmrp/migrations/14.0.1.6.0/post-migration.py new file mode 100644 index 000000000..6e0798d46 --- /dev/null +++ b/ddmrp/migrations/14.0.1.6.0/post-migration.py @@ -0,0 +1,20 @@ +# Copyright 2021 ForgeFlow +# License LGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +_logger = logging.getLogger(__name__) + + +def migrate(cr, version): + _logger.info("Set buffer profile data as no-update.") + cr.execute( + """ + UPDATE ir_model_data imd + SET noupdate = true + WHERE "module" = 'ddmrp' AND ( + name ILIKE 'stock_buffer_profile_replenish_%' + OR name ILIKE 'stock_buffer_profile_min_max%' + ); + """ + ) diff --git a/ddmrp/migrations/15.0.1.4.1/post-fix_distributed_source_location.py b/ddmrp/migrations/15.0.1.4.1/post-fix_distributed_source_location.py new file mode 100644 index 000000000..9dd43fd24 --- /dev/null +++ b/ddmrp/migrations/15.0.1.4.1/post-fix_distributed_source_location.py @@ -0,0 +1,10 @@ +from odoo import SUPERUSER_ID, api + + +def migrate(cr, version): + env = api.Environment(cr, SUPERUSER_ID, {}) + buffers = env["stock.buffer"].search( + [("buffer_profile_id.item_type", "=", "distributed")] + ) + if buffers: + buffers._calc_distributed_source_location() diff --git a/ddmrp/models/__init__.py b/ddmrp/models/__init__.py new file mode 100644 index 000000000..b1479884d --- /dev/null +++ b/ddmrp/models/__init__.py @@ -0,0 +1,17 @@ +from . import mrp_bom +from . import mrp_production +from . import procurement_group +from . import product_adu_calculation_method +from . import purchase_order +from . import stock_buffer_profile +from . import stock_buffer_profile_lead_time +from . import stock_buffer_profile_variability +from . import stock_rule +from . import stock_warehouse +from . import stock_buffer +from . import product_template +from . import stock_move +from . import stock_move_line +from . import stock_picking +from . import res_company +from . import product_product diff --git a/ddmrp/models/mrp_bom.py b/ddmrp/models/mrp_bom.py new file mode 100644 index 000000000..146d9be99 --- /dev/null +++ b/ddmrp/models/mrp_bom.py @@ -0,0 +1,150 @@ +# Copyright 2017-20 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import logging + +from odoo import api, fields, models + +_logger = logging.getLogger(__name__) + + +class MrpBom(models.Model): + _inherit = "mrp.bom" + + is_buffered = fields.Boolean( + string="Buffered?", + compute="_compute_is_buffered", + help="True when the product has an DDMRP buffer associated.", + ) + buffer_id = fields.Many2one( + comodel_name="stock.buffer", + string="Stock Buffer", + compute="_compute_buffer", + ) + dlt = fields.Float( + string="Decoupled Lead Time (days)", + compute="_compute_dlt", + ) + + def _get_search_buffer_domain(self): + product = self.product_id + if not product: + if self.product_tmpl_id.product_variant_ids: + product = self.product_tmpl_id.product_variant_ids[0] + domain = [("product_id", "=", product.id)] + if self.location_id: + domain.append(("location_id", "=", self.location_id.id)) + return domain + + @api.depends("product_id", "product_tmpl_id", "location_id") + def _compute_buffer(self): + for record in self: + domain = record._get_search_buffer_domain() + # NOTE: It can be possible to find multiple buffers. + # For example if the BoM has no location set, and there + # are buffers with the same product_id and buffer_profile_id + # You do not know which one the search function finds. + buffer = self.env["stock.buffer"].search(domain, limit=1) + record.buffer_id = buffer + + @api.depends("buffer_id") + def _compute_is_buffered(self): + for bom in self: + bom.is_buffered = True if bom.buffer_id else False + + def _get_produce_delay(self): + self.ensure_one() + return self.product_id.produce_delay or self.product_tmpl_id.produce_delay + + def _get_longest_path(self): + if not self.bom_line_ids: + return 0.0 + paths = [0] * len(self.bom_line_ids) + i = 0 + for line in self.bom_line_ids: + if line.is_buffered: + i += 1 + elif line.product_id.bom_ids: + # If the a component is manufactured we continue exploding. + location = line.location_id + line_boms = line.product_id.bom_ids + bom = line_boms.filtered( + lambda bom: bom.location_id == location + ) or line_boms.filtered(lambda bom: not bom.location_id) + if bom: + paths[i] += bom[0]._get_produce_delay() + paths[i] += bom[0]._get_longest_path() + else: + _logger.info( + "ddmrp (dlt): Product %s has no BOM for location " + "%s." % (line.product_id.name, location.name) + ) + i += 1 + else: + # assuming they are purchased, + if line.product_id.seller_ids: + paths[i] = line.product_id.seller_ids[0].delay + else: + _logger.info( + "ddmrp (dlt): Product %s has no seller set." + % line.product_id.name + ) + i += 1 + return max(paths) + + def _get_manufactured_dlt(self): + """Computes the Decoupled Lead Time exploding all the branches of the + BOM until a buffered position and then selecting the greatest.""" + self.ensure_one() + dlt = self._get_produce_delay() + dlt += self._get_longest_path() + return dlt + + def _compute_dlt(self): + for rec in self: + rec.dlt = rec._get_manufactured_dlt() + + +class MrpBomLine(models.Model): + _inherit = "mrp.bom.line" + + is_buffered = fields.Boolean( + string="Buffered?", + compute="_compute_is_buffered", + help="True when the product has an DDMRP buffer associated.", + ) + buffer_id = fields.Many2one( + comodel_name="stock.buffer", + string="Stock Buffer", + compute="_compute_is_buffered", + ) + dlt = fields.Float( + string="Decoupled Lead Time (days)", + compute="_compute_dlt", + ) + + def _get_search_buffer_domain(self): + product = self.product_id or self.product_tmpl_id.product_variant_ids[0] + domain = [("product_id", "=", product.id)] + if self.location_id: + domain.append(("location_id", "=", self.location_id.id)) + return domain + + def _compute_is_buffered(self): + for line in self: + domain = line._get_search_buffer_domain() + buffer = self.env["stock.buffer"].search(domain, limit=1) + line.buffer_id = buffer + line.is_buffered = True if buffer else False + + @api.depends("product_id") + def _compute_dlt(self): + for rec in self: + if rec.product_id.bom_ids: + rec.dlt = rec.product_id.bom_ids[0].dlt + else: + rec.dlt = ( + rec.product_id.seller_ids + and rec.product_id.seller_ids[0].delay + or 0.0 + ) diff --git a/ddmrp/models/mrp_production.py b/ddmrp/models/mrp_production.py new file mode 100644 index 000000000..ab5d2b3d4 --- /dev/null +++ b/ddmrp/models/mrp_production.py @@ -0,0 +1,75 @@ +# Copyright 2016-20 ForgeFlow S.L. (http://www.forgeflow.com) +# Copyright 2016 Aleph Objects, Inc. (https://www.alephobjects.com/) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import api, fields, models + +from .stock_buffer import _PRIORITY_LEVEL + + +class MrpProduction(models.Model): + _inherit = "mrp.production" + + buffer_id = fields.Many2one( + comodel_name="stock.buffer", + index=True, + string="Stock Buffer", + ) + execution_priority_level = fields.Selection( + string="Buffer On-Hand Alert Level", + selection=_PRIORITY_LEVEL, + readonly=True, + ) + on_hand_percent = fields.Float( + string="On Hand/TOR (%)", + ) + + @api.model + def create(self, vals): + record = super(MrpProduction, self).create(vals) + record._calc_execution_priority() + return record + + def _calc_execution_priority(self): + """Technical note: this method cannot be decorated with api.depends, + otherwise it would generate a infinite recursion.""" + prods = self.filtered( + lambda r: r.buffer_id and r.state not in ["done", "cancel"] + ) + for rec in prods: + rec.execution_priority_level = rec.buffer_id.execution_priority_level + rec.on_hand_percent = rec.buffer_id.on_hand_percent + to_update = (self - prods).filtered( + lambda r: r.execution_priority_level or r.on_hand_percent + ) + if to_update: + to_update.write({"execution_priority_level": None, "on_hand_percent": None}) + + def _search_execution_priority(self, operator, value): + """Search on the execution priority by evaluating on all + open manufacturing orders.""" + all_records = self.search([("state", "not in", ["done", "cancel"])]) + + if operator == "=": + found_ids = [ + a.id for a in all_records if a.execution_priority_level == value + ] + elif operator == "in" and isinstance(value, list): + found_ids = [ + a.id for a in all_records if a.execution_priority_level in value + ] + elif operator in ("!=", "<>"): + found_ids = [ + a.id for a in all_records if a.execution_priority_level != value + ] + elif operator == "not in" and isinstance(value, list): + found_ids = [ + a.id for a in all_records if a.execution_priority_level not in value + ] + else: + raise NotImplementedError( + "Search operator {} not implemented for value {}".format( + operator, value + ) + ) + return [("id", "in", found_ids)] diff --git a/ddmrp/models/procurement_group.py b/ddmrp/models/procurement_group.py new file mode 100644 index 000000000..0470e325b --- /dev/null +++ b/ddmrp/models/procurement_group.py @@ -0,0 +1,57 @@ +# Copyright 2016-20 ForgeFlow S.L. (http://www.forgeflow.com) +# Copyright 2016 Aleph Objects, Inc. (https://www.alephobjects.com/) +# Copyright 2018 Camptocamp SA https://www.camptocamp.com +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import api, models + + +class ProcurementGroup(models.Model): + _inherit = "procurement.group" + + @api.model + def _run_scheduler_tasks(self, use_new_cursor=False, company_id=False): + """Override the standard method to disable the possibility to + automatically procure from orderpoints and to automatically + reserve stock moves.""" + return True + + # UOM: (stock_orderpoint_uom): + @api.model + def run(self, procurements, raise_user_error=True): + Proc = self.env["procurement.group"].Procurement + indexes_to_pop = [] + new_procs = [] + for i, procurement in enumerate(procurements): + if "buffer_id" in procurement.values: + buffer = procurement.values.get("buffer_id") + if ( + buffer.procure_uom_id + and procurement.product_uom != buffer.procure_uom_id + ): + new_product_qty = procurement.product_uom._compute_quantity( + procurement.product_qty, buffer.procure_uom_id + ) + new_product_uom = buffer.procure_uom_id + new_procs.append( + Proc( + procurement.product_id, + new_product_qty, + new_product_uom, + procurement.location_id, + procurement.name, + procurement.origin, + procurement.company_id, + procurement.values, + ) + ) + indexes_to_pop.append(i) + if new_procs: + indexes_to_pop.reverse() + for index in indexes_to_pop: + procurements.pop(index) + procurements.extend(new_procs) + + return super(ProcurementGroup, self).run( + procurements, raise_user_error=raise_user_error + ) diff --git a/ddmrp/models/product_adu_calculation_method.py b/ddmrp/models/product_adu_calculation_method.py new file mode 100644 index 000000000..e436f997e --- /dev/null +++ b/ddmrp/models/product_adu_calculation_method.py @@ -0,0 +1,98 @@ +# Copyright 2016-20 ForgeFlow S.L. (http://www.forgeflow.com) +# Copyright 2016 Aleph Objects, Inc. (https://www.alephobjects.com/) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class ProductAduCalculationMethod(models.Model): + _name = "product.adu.calculation.method" + _description = "Product Average Daily Usage calculation method" + + @api.model + def _get_calculation_method(self): + return [ + ("fixed", _("Fixed ADU")), + ("past", _("Past-looking")), + ("future", _("Future-looking")), + ("blended", _("Blended")), + ] + + @api.model + def _get_source_selection(self): + return [ + ("actual", "Use actual Stock Moves"), + ("estimates", "Use Demand Estimates"), + ] + + name = fields.Char(required=True) + method = fields.Selection( + selection="_get_calculation_method", + string="Calculation method", + ) + source_past = fields.Selection( + selection="_get_source_selection", + string="Past Source", + help="Information source used for past calculation.", + ) + horizon_past = fields.Float( + string="Past Horizon", + help="Length-of-period horizon in days looking past.", + ) + factor_past = fields.Float( + string="Past Factor", + help="When using a blended method, this is the relative weight " + "assigned to the past part of the combination.", + default=0.5, + ) + source_future = fields.Selection( + selection="_get_source_selection", + string="Future Source", + help="Information source used for future calculation.", + ) + horizon_future = fields.Float( + string="Future Horizon", + help="Length-of-period horizon in days looking forward.", + ) + factor_future = fields.Float( + string="Future Factor", + help="When using a blended method, this is the relative weight " + "assigned to the future part of the combination.", + default=0.5, + ) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + ) + + @api.constrains("method", "horizon_past", "horizon_future") + def _check_horizon(self): + for rec in self: + if rec.method in ["past", "blended"] and not rec.horizon_past: + raise ValidationError(_("Please indicate a Past Horizon.")) + if rec.method in ["blended", "future"] and not rec.horizon_future: + raise ValidationError(_("Please indicate a Future Horizon.")) + + @api.constrains("method", "source_past", "source_future") + def _check_source(self): + for rec in self: + if rec.method in ["past", "blended"] and not rec.source_past: + raise ValidationError(_("Please indicate a Past Source.")) + if rec.method in ["blended", "future"] and not rec.source_future: + raise ValidationError(_("Please indicate a Future Source.")) + + @api.constrains("method", "factor_past", "factor_future") + def _check_factor(self): + for rec in self.filtered(lambda r: r.method == "blended"): + if ( + rec.factor_past + rec.factor_future != 1.0 + or rec.factor_future < 0.0 + or rec.factor_past < 0.0 + ): + raise ValidationError( + _( + "In blended method, past and future factors must be " + "positive and sum exactly 1,0." + ) + ) diff --git a/ddmrp/models/product_product.py b/ddmrp/models/product_product.py new file mode 100644 index 000000000..1b83c5717 --- /dev/null +++ b/ddmrp/models/product_product.py @@ -0,0 +1,35 @@ +# Copyright 2020 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import fields, models + + +class Product(models.Model): + _inherit = "product.product" + + buffer_ids = fields.One2many( + comodel_name="stock.buffer", + string="Stock Buffers", + inverse_name="product_id", + ) + + buffer_count = fields.Integer(compute="_compute_buffer_count") + + def write(self, values): + res = super().write(values) + if values.get("active") is False: + buffers = ( + self.env["stock.buffer"].sudo().search([("product_id", "in", self.ids)]) + ) + buffers.write({"active": False}) + return res + + def _compute_buffer_count(self): + for rec in self: + rec.buffer_count = len(rec.buffer_ids) + + def action_view_stock_buffers(self): + action = self.env["ir.actions.actions"]._for_xml_id("ddmrp.action_stock_buffer") + action["context"] = {} + action["domain"] = [("id", "in", self.buffer_ids.ids)] + return action diff --git a/ddmrp/models/product_template.py b/ddmrp/models/product_template.py new file mode 100644 index 000000000..0d8af2457 --- /dev/null +++ b/ddmrp/models/product_template.py @@ -0,0 +1,28 @@ +# Copyright 2019-20 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import _, api, models +from odoo.exceptions import ValidationError + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + # UOM: (stock_orderpoint_uom): + @api.constrains("uom_id") + def _check_buffer_procure_uom(self): + for rec in self: + buffer = self.env["stock.buffer"].search( + [ + ("procure_uom_id.category_id", "!=", rec.uom_id.category_id.id), + ("product_id", "in", rec.product_variant_ids.ids), + ], + limit=1, + ) + if buffer: + raise ValidationError( + _( + "At least one stock buffer for this product has a " + "different Procurement unit of measure category." + ) + ) diff --git a/ddmrp/models/purchase_order.py b/ddmrp/models/purchase_order.py new file mode 100644 index 000000000..04412e47e --- /dev/null +++ b/ddmrp/models/purchase_order.py @@ -0,0 +1,107 @@ +# Copyright 2017-20 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + +from .stock_buffer import _PRIORITY_LEVEL + + +class PurchaseOrder(models.Model): + _inherit = "purchase.order" + + ddmrp_comment = fields.Text(string="Follow-up Notes") + + +class PurchaseOrderLine(models.Model): + _inherit = "purchase.order.line" + + buffer_ids = fields.Many2many( + comodel_name="stock.buffer", + string="Stock Buffers", + copy=False, + readonly=True, + ) + execution_priority_level = fields.Selection( + string="Buffer On-Hand Status Level", + selection=_PRIORITY_LEVEL, + readonly=True, + ) + on_hand_percent = fields.Float( + string="On Hand/TOR (%)", + readonly=True, + ) + ddmrp_comment = fields.Text(related="order_id.ddmrp_comment", readonly=False) + + def create(self, vals): + record = super().create(vals) + if record.product_id: + record._find_buffer_link() + record._calc_execution_priority() + return record + + def write(self, vals): + res = super().write(vals) + for rec in self: + if rec.product_id: + rec._find_buffer_link() + return res + + def _product_id_change(self): + res = super()._product_id_change() + if self.product_id: + self._find_buffer_link() + return res + + def _calc_execution_priority(self): + # TODO: handle serveral buffers? worst scenario, average? + to_compute = self.filtered( + lambda r: r.buffer_ids and r.state not in ["done", "cancel"] + ) + for rec in to_compute: + rec.execution_priority_level = rec.buffer_ids[0].execution_priority_level + rec.on_hand_percent = rec.buffer_ids[0].on_hand_percent + (self - to_compute).write( + {"execution_priority_level": None, "on_hand_percent": None} + ) + + def _get_domain_buffer_link(self): + self.ensure_one() + if not self.product_id: + # Return impossible domain -> no buffer. + return [(0, "=", 1)] + return [ + ("product_id", "=", self.product_id.id), + ("company_id", "=", self.order_id.company_id.id), + ("buffer_profile_id.item_type", "=", "purchased"), + ("warehouse_id", "=", self.order_id.picking_type_id.warehouse_id.id), + ] + + def _find_buffer_link(self): + buffer_model = self.env["stock.buffer"] + move_model = self.env["stock.move"] + for rec in self.filtered(lambda r: not r.buffer_ids): + mto_move = move_model.search( + [("created_purchase_line_id", "=", rec.id)], limit=1 + ) + if mto_move: + # MTO lines are not accounted in MTS stock buffers. + continue + domain = rec._get_domain_buffer_link() + buffer = buffer_model.search(domain, limit=1) + if buffer: + rec.buffer_ids = buffer + rec._calc_execution_priority() + + def _prepare_purchase_order_line_from_procurement( + self, product_id, product_qty, product_uom, company_id, values, po + ): + vals = super()._prepare_purchase_order_line_from_procurement( + product_id, product_qty, product_uom, company_id, values, po + ) + # If the procurement was run directly by a reordering rule. + if "buffer_id" in values: + vals["buffer_ids"] = [(4, values["buffer_id"].id)] + # If the procurement was run by a stock move. + elif "buffer_ids" in values: + vals["buffer_ids"] = [(4, o.id) for o in values["buffer_ids"]] + return vals diff --git a/ddmrp/models/res_company.py b/ddmrp/models/res_company.py new file mode 100644 index 000000000..21d8a8f11 --- /dev/null +++ b/ddmrp/models/res_company.py @@ -0,0 +1,21 @@ +# Copyright 2020 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + ddmrp_auto_update_nfp = fields.Boolean( + string="Update NFP on Stock Buffers on relevant events.", + help="Transfer status changes can trigger the update of relevant " + "buffer's NFP.", + ) + ddmrp_adu_calc_include_scrap = fields.Boolean( + string="Include scrap locations in ADU calculation", + ) + ddmrp_qty_multiple_tolerance = fields.Float( + string="Qty Multiple Tolerance", + ) diff --git a/ddmrp/models/stock_buffer.py b/ddmrp/models/stock_buffer.py new file mode 100644 index 000000000..60dbd178b --- /dev/null +++ b/ddmrp/models/stock_buffer.py @@ -0,0 +1,2060 @@ +# Copyright 2019-20 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + + +import json +import logging +import operator as py_operator +import threading +from collections import defaultdict +from datetime import datetime, timedelta +from math import pi + +from odoo import _, api, exceptions, fields, models +from odoo.exceptions import ValidationError +from odoo.tools import float_compare, float_round +from odoo.tools.misc import split_every + +_logger = logging.getLogger(__name__) +try: + from bokeh.embed import components + from bokeh.models import ( + ColumnDataSource, + DatetimeTickFormatter, + HoverTool, + LabelSet, + Legend, + ) + from bokeh.plotting import figure + from bokeh.util.serialization import convert_datetime_type +except (ImportError, IOError) as err: + _logger.debug(err) + + +OPERATORS = { + "<": py_operator.lt, + ">": py_operator.gt, + "<=": py_operator.le, + ">=": py_operator.ge, + "==": py_operator.eq, + "=": py_operator.eq, + "!=": py_operator.ne, +} + + +_PRIORITY_LEVEL = [("1_red", "Red"), ("2_yellow", "Yellow"), ("3_green", "Green")] + +DDMRP_COLOR = { + "0_dark_red": "#8B0000", + "1_red": "#ff0000", + "2_yellow": "#ffff00", + "3_green": "#33cc33", +} + + +class StockBuffer(models.Model): + _name = "stock.buffer" + _description = "Stock Buffer" + _order = "planning_priority_level asc, net_flow_position_percent asc" + + CRON_DDMRP_CHUNKS = 50 + + @api.model + def default_get(self, fields): + res = super().default_get(fields) + warehouse = None + if "warehouse_id" not in res and res.get("company_id"): + warehouse = self.env["stock.warehouse"].search( + [("company_id", "=", res["company_id"])], limit=1 + ) + if warehouse: + res["warehouse_id"] = warehouse.id + res["location_id"] = warehouse.lot_stock_id.id + return res + + name = fields.Char( + copy=False, + required=True, + default=lambda self: self.env["ir.sequence"].next_by_code("stock.buffer"), + ) + active = fields.Boolean(default=True) + warehouse_id = fields.Many2one( + comodel_name="stock.warehouse", + string="Warehouse", + ondelete="cascade", + required=True, + ) + location_id = fields.Many2one( + comodel_name="stock.location", + string="Location", + ondelete="cascade", + required=True, + ) + product_id = fields.Many2one( + comodel_name="product.product", + string="Product", + domain=[("type", "=", "product")], + ondelete="cascade", + required=True, + ) + product_uom = fields.Many2one( + related="product_id.uom_id", + ) + # TODO: fix in method _compute_procure_recommended_qty. + # not sure maybe they are useful for tweak batches like in multi level mrp + procure_min_qty = fields.Float( + string="Minimum Procure Batch", + digits="Product Unit of Measure", + help="Minimum qty for a single procurement", + ) + procure_max_qty = fields.Float( + string="Maximum Procure Batch", + digits="Product Unit of Measure", + help="Maximum qty for a single procurement", + ) + qty_multiple = fields.Float( + digits="Product Unit of Measure", + default=1, + required=True, + help="The procurement quantity will be rounded up to this multiple. " + "If it is 0, the exact quantity will be used.", + ) + group_id = fields.Many2one( + comodel_name="procurement.group", + string="Procurement Group", + copy=False, + help="Moves created through this buffer will be put in this " + "procurement group. If none is given, the moves generated by " + "stock rules will be grouped into one big picking.", + ) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + required=True, + default=lambda self: self.env.company, + ) + # TODO: rename to manual LT ?? + lead_days = fields.Integer( + "Lead Time (Distributed)", + default=1, + help="Lead time for distributed products.", + ) + + _sql_constraints = [ + ( + "qty_multiple_check", + "CHECK( qty_multiple >= 0 )", + "Qty Multiple must be greater than or equal to zero.", + ), + ] + + def _quantity_in_progress(self): + """Return Quantities that are not yet in virtual stock but should + be deduced from buffers (example: purchases created from buffers)""" + res = {}.fromkeys(self.ids, 0.0) + polines = self.env["purchase.order.line"].search( + [ + ("state", "in", ("draft", "sent", "to approve")), + ("buffer_ids", "in", self.ids), + ] + ) + for poline in polines: + for buffer in poline.buffer_ids: + if buffer.id not in self.ids: + continue + res[buffer.id] += poline.product_uom._compute_quantity( + poline.product_qty, buffer.product_uom, round=False + ) + return res + + def action_view_purchase(self): + action = self.env["ir.actions.actions"]._for_xml_id("purchase.purchase_rfq") + # Remove the context since the action basically display RFQ and not PO. + action["context"] = {} + order_line_ids = self.env["purchase.order.line"].search( + [("buffer_ids", "in", self.ids)] + ) + purchase_ids = order_line_ids.mapped("order_id") + action["domain"] = [("id", "in", purchase_ids.ids)] + return action + + def action_view_yearly_consumption(self): + action = self.env["ir.actions.actions"]._for_xml_id( + "ddmrp.stock_move_year_consumption_action" + ) + locations = self.env["stock.location"].search( + [("id", "child_of", [self.location_id.id])] + ) + date_to = fields.Date.today() + # We take last five years, even though they will be initially + # filtered in the action to show only last year. + date_from = date_to - timedelta(days=5 * 365) + action["domain"] = self._past_moves_domain(date_from, date_to, locations) + return action + + def action_view_stock_demand_estimates(self): + result = self.env["ir.actions.actions"]._for_xml_id( + "stock_demand_estimate.stock_demand_estimate_action" + ) + recs = self.env["stock.demand.estimate"].search( + [ + ("product_id", "=", self.product_id.id), + ("location_id", "=", self.location_id.id), + ] + ) + result["domain"] = [("id", "in", recs.ids)] + return result + + def action_view_bom(self): + action = self.product_id.action_view_bom() + locations = self.env["stock.location"].search( + [("id", "child_of", [self.location_id.id])] + ) + action["domain"] += [ + "|", + ("location_id", "in", locations.ids), + ("location_id", "=", False), + ] + return action + + @api.constrains("product_id") + def _check_product_uom(self): + if any( + buffer.product_id.uom_id.category_id != buffer.product_uom.category_id + for buffer in self + ): + raise ValidationError( + _( + "You have to select a product unit of measure that is in" + "the same category than the default unit of" + "measure of the product" + ) + ) + + @api.onchange("warehouse_id") + def onchange_warehouse_id(self): + if self.warehouse_id: + self.location_id = self.warehouse_id.lot_stock_id.id + + @api.onchange("product_id") + def onchange_product_id(self): + if self.product_id: + self.product_uom = self.product_id.uom_id.id + return { + "domain": { + "product_uom": [ + ("category_id", "=", self.product_id.uom_id.category_id.id) + ] + } + } + return {"domain": {"product_uom": []}} + + def _prepare_procurement_values( + self, + product_qty, + date=False, + group=False, + ): + """Prepare specific key for moves or other components that will be + created from a stock rule comming from a buffer. This method could + be override in order to add other custom key that could + be used in move/po creation. + """ + return { + "date_planned": date or self._get_date_planned(), + "warehouse_id": self.warehouse_id, + "buffer_id": self, + "company_id": self.company_id, + "group_id": group or self.group_id, + } + + # MANUAL PROCUREMENT AND UOM + + def _get_date_planned(self, force_lt=None): + self.ensure_one() + profile = self.buffer_profile_id + dlt = int(self.dlt) + if force_lt and isinstance(force_lt, (int, float)): + dlt = force_lt + if profile.item_type == "distributed": + max_proc_time = profile.distributed_reschedule_max_proc_time + else: + max_proc_time = 0 + # For purchased items we always consider calendar days, + # not work days. + if profile.item_type == "purchased": + dt_planned = fields.datetime.today() + timedelta(days=dlt) + else: + if self.warehouse_id.calendar_id: + dt_planned = self.warehouse_id.wh_plan_days(fields.datetime.now(), dlt) + if max_proc_time: + calendar = self.warehouse_id.calendar_id + # We found the day with "wh_plan_day", now determine + # the first available hour in the day (wh_plan_day returns + # the stop hour), and add the procurement time. + dt_planned = calendar.plan_hours( + # expect hours + max_proc_time / 60, + # start from the first working hours available + dt_planned.replace(hour=0, minute=0, second=0), + ) + + else: + dt_planned = ( + fields.datetime.now() + + timedelta(days=dlt) + + timedelta(minutes=max_proc_time) + ) + return dt_planned + + procure_recommended_qty = fields.Float( + string="Procure Recommendation", + compute="_compute_procure_recommended_qty", + store=True, + ) + procure_uom_id = fields.Many2one( + comodel_name="uom.uom", + string="Procurement UoM", + compute="_compute_procure_uom_id", + readonly=False, + store=True, + ) + + @api.constrains("product_id", "procure_uom_id") + def _check_procure_uom(self): + if any( + buffer.product_uom + and buffer.procure_uom_id + and buffer.product_uom.category_id != buffer.procure_uom_id.category_id + for buffer in self + ): + raise ValidationError( + _( + "Error: The product default Unit of Measure and the " + "procurement Unit of Measure must be in the same category." + ) + ) + + # STOCK INFORMATION: + + product_location_qty = fields.Float( + string="Quantity On Location", compute="_compute_product_available_qty" + ) + incoming_location_qty = fields.Float( + string="Incoming On Location", compute="_compute_product_available_qty" + ) + outgoing_location_qty = fields.Float( + string="Outgoing On Location", compute="_compute_product_available_qty" + ) + virtual_location_qty = fields.Float( + string="Forecast On Location", compute="_compute_product_available_qty" + ) + product_location_qty_available_not_res = fields.Float( + string="Quantity On Hand (Unreserved)", + compute="_compute_product_available_qty", + help="Quantity available in this stock buffer, this is the total " + "quantity on hand minus the outgoing reservations.", + ) + + def _get_outgoing_reservation_qty(self): + """Return the qty reserved in operations that move products outside + of the buffer in the UoM of the product.""" + domain = [ + ("product_id", "=", self.product_id.id), + ("state", "in", ("partially_available", "assigned")), + ] + lines = self.env["stock.move.line"].search(domain) + lines = lines.filtered( + lambda line: line.location_id.is_sublocation_of(self.location_id) + and not line.location_dest_id.is_sublocation_of(self.location_id) + ) + return sum(lines.mapped("reserved_qty")) + + def _compute_product_available_qty(self): + operation_by_location = defaultdict(lambda: self.env["stock.buffer"]) + for rec in self: + operation_by_location[rec.location_id] |= rec + for location_id, buffer_in_location in operation_by_location.items(): + products = ( + buffer_in_location.mapped("product_id") + .with_context(location=location_id.id) + ._compute_quantities_dict( + lot_id=self.env.context.get("lot_id"), + owner_id=self.env.context.get("owner_id"), + package_id=self.env.context.get("package_id"), + ) + ) + for buffer in buffer_in_location: + product = products[buffer.product_id.id] + reserved_qty = buffer._get_outgoing_reservation_qty() + buffer.update( + { + "product_location_qty": product["qty_available"], + "incoming_location_qty": product["incoming_qty"], + "outgoing_location_qty": product["outgoing_qty"], + "virtual_location_qty": product["virtual_available"], + "product_location_qty_available_not_res": product[ + "qty_available" + ] + - reserved_qty, + } + ) + + # PURCHASES LINK: + + purchase_line_ids = fields.Many2many( + comodel_name="purchase.order.line", + string="Purchase Order Lines", + copy=False, + readonly=True, + ) + + # MRP LINK: + + def action_view_mrp_productions(self): + result = self.env["ir.actions.actions"]._for_xml_id("mrp.mrp_production_action") + result["context"] = {} + mrp_production_ids = self.env["mrp.production"].search( + [("buffer_id", "=", self.id)] + ) + result["domain"] = [("id", "in", mrp_production_ids.ids)] + return result + + product_type = fields.Selection(related="product_id.type", readonly=True) + used_in_bom_count = fields.Integer(related="product_id.used_in_bom_count") + + def action_used_in_bom(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id("mrp.mrp_bom_form_action") + action["domain"] = [("bom_line_ids.product_id", "=", self.product_id.id)] + return action + + # DDMRP SPECIFIC: + + @api.depends( + "dlt", + "extra_lead_time", + "adu", + "buffer_profile_id.lead_time_id.factor", + "red_override", + "buffer_profile_id.variability_id.factor", + "product_uom.rounding", + "lead_days", + "product_id.seller_ids.delay", + ) + def _compute_red_zone(self): + for rec in self: + if rec.product_id and rec.replenish_method in ["replenish", "min_max"]: + dlt = rec.dlt + rec.extra_lead_time + rec.red_base_qty = float_round( + dlt * rec.adu * rec.buffer_profile_id.lead_time_id.factor, + precision_rounding=rec.product_uom.rounding, + ) + rec.red_safety_qty = float_round( + rec.red_base_qty * rec.buffer_profile_id.variability_id.factor, + precision_rounding=rec.product_uom.rounding, + ) + rec.red_zone_qty = rec.red_base_qty + rec.red_safety_qty + elif rec.product_id and rec.replenish_method == "replenish_override": + rec.red_zone_qty = rec.red_override + else: + rec.red_zone_qty = 0.0 + + @api.depends( + "dlt", + "extra_lead_time", + "adu", + "buffer_profile_id.lead_time_id.factor", + "order_cycle", + "minimum_order_quantity", + "product_uom.rounding", + "green_override", + "top_of_yellow", + ) + def _compute_green_zone(self): + for rec in self: + if rec.product_id and rec.replenish_method in ["replenish", "min_max"]: + # Using imposed or desired minimum order cycle + rec.green_zone_oc = float_round( + rec.order_cycle * rec.adu, + precision_rounding=rec.product_uom.rounding, + ) + # Using lead time factor + dlt = rec.dlt + rec.extra_lead_time + rec.green_zone_lt_factor = float_round( + dlt * rec.adu * rec.buffer_profile_id.lead_time_id.factor, + precision_rounding=rec.product_uom.rounding, + ) + # Using minimum order quantity + rec.green_zone_moq = float_round( + rec.minimum_order_quantity, + precision_rounding=rec.product_uom.rounding, + ) + + # The biggest option of the above will be used as the green + # zone value + rec.green_zone_qty = max( + rec.green_zone_oc, rec.green_zone_lt_factor, rec.green_zone_moq + ) + elif rec.product_id and rec.replenish_method == "replenish_override": + rec.green_zone_qty = rec.green_override + else: + rec.green_zone_qty = 0.0 + rec.top_of_green = rec.green_zone_qty + rec.top_of_yellow + + @api.depends( + "dlt", + "extra_lead_time", + "adu", + "buffer_profile_id.lead_time_id.factor", + "buffer_profile_id.variability_id.factor", + "buffer_profile_id.replenish_method", + "order_cycle", + "minimum_order_quantity", + "product_uom.rounding", + "yellow_override", + "red_zone_qty", + ) + def _compute_yellow_zone(self): + for rec in self: + if rec.product_id and rec.replenish_method == "min_max": + rec.yellow_zone_qty = 0 + elif rec.product_id and rec.replenish_method == "replenish": + dlt = rec.dlt + rec.extra_lead_time + rec.yellow_zone_qty = float_round( + dlt * rec.adu, precision_rounding=rec.product_uom.rounding + ) + elif rec.product_id and rec.replenish_method == "replenish_override": + rec.yellow_zone_qty = rec.yellow_override + else: + rec.yellow_zone_qty = 0.0 + rec.top_of_yellow = rec.yellow_zone_qty + rec.red_zone_qty + + @api.depends( + "net_flow_position", + "top_of_green", + "qty_multiple", + "product_uom", + "procure_uom_id", + "product_uom.rounding", + ) + def _compute_procure_recommended_qty(self): + subtract_qty = self.sudo()._quantity_in_progress() + for rec in self: + + procure_recommended_qty = 0.0 + # uses _origin because onchange uses a NewId with the record wrapped + if rec._origin and rec.net_flow_position < rec.top_of_yellow: + qty = ( + rec.top_of_green + - rec.net_flow_position + - subtract_qty[rec._origin.id] + ) + if qty >= 0.0: + procure_recommended_qty = qty + elif rec._origin: + if subtract_qty[rec._origin.id] > 0.0: + procure_recommended_qty -= subtract_qty[rec._origin.id] + + adjusted_qty = 0.0 + if procure_recommended_qty > 0.0: + adjusted_qty = rec._adjust_procure_qty(procure_recommended_qty) + rec.procure_recommended_qty = adjusted_qty + + @api.depends("product_uom") + def _compute_procure_uom_id(self): + for rec in self: + rec.procure_uom_id = rec.product_uom.id + + def _adjust_procure_qty(self, qty): + self.ensure_one() + # If there is a procure UoM we apply it before anything. + # This means max, min and multiple quantities are relative to + # the procure UoM. + if self.procure_uom_id: + rounding = self.procure_uom_id.rounding + adjusted_qty = self.product_id.uom_id._compute_quantity( + qty, self.procure_uom_id + ) + else: + rounding = self.product_uom.rounding + adjusted_qty = qty + + # Apply qty multiple and minimum quantity (maximum quantity + # applies on the procure wizard) + remainder = self.qty_multiple > 0 and adjusted_qty % self.qty_multiple or 0.0 + multiple_tolerance = self.qty_multiple * ( + self.company_id.ddmrp_qty_multiple_tolerance / 100 + ) + if ( + float_compare(remainder, multiple_tolerance, precision_rounding=rounding) + > 0 + ): + adjusted_qty += self.qty_multiple - remainder + elif float_compare(remainder, 0.0, precision_rounding=rounding) > 0: + adjusted_qty -= remainder + if ( + float_compare( + adjusted_qty, self.procure_min_qty, precision_rounding=rounding + ) + < 0 + ): + adjusted_qty = self.procure_min_qty + return adjusted_qty + + def _compute_ddmrp_chart(self): + """This method use the Bokeh library to create a buffer depiction.""" + for rec in self: + div, script = rec.get_ddmrp_chart() + json_data = json.dumps( + { + "div": div, + "script": script, + } + ) + rec.ddmrp_chart = json_data + div, script = rec.get_ddmrp_chart_execution() + json_data = json.dumps( + { + "div": div, + "script": script, + } + ) + rec.ddmrp_chart_execution = json_data + + def _get_colors_hex_map(self, pallete="planning"): + return DDMRP_COLOR + + def get_ddmrp_chart(self): + p = figure(frame_width=300, frame_height=400, y_axis_label="Quantity") + p.xaxis.visible = False + p.toolbar.logo = None + hex_colors = self._get_colors_hex_map(pallete="planning") + red = p.vbar( + x=1, + bottom=0, + top=self.top_of_red, + width=1, + color=hex_colors.get("1_red", "red"), + ) + yellow = p.vbar( + x=1, + bottom=self.top_of_red, + top=self.top_of_yellow, + width=1, + color=hex_colors.get("2_yellow", "yellow"), + ) + green = p.vbar( + x=1, + bottom=self.top_of_yellow, + top=self.top_of_green, + width=1, + color=hex_colors.get("3_green", "green"), + ) + net_flow = p.line( + [0, 2], [self.net_flow_position, self.net_flow_position], line_width=2 + ) + on_hand = p.line( + [0, 2], + [ + self.product_location_qty_available_not_res, + self.product_location_qty_available_not_res, + ], + line_width=2, + line_dash="dotted", + ) + legend = Legend( + items=[ + ("Red zone", [red]), + ("Yellow zone", [yellow]), + ("Green zone", [green]), + ("Net Flow Position", [net_flow]), + ("On-Hand Position (Unreserved)", [on_hand]), + ], + ) + labels_source_data = { + "height": [ + self.net_flow_position, + self.product_location_qty_available_not_res, + self.top_of_red, + self.top_of_yellow, + self.top_of_green, + ], + "weight": [0.25, 1.75, 1, 1, 1], + "names": [ + str(self.net_flow_position), + str(self.product_location_qty_available_not_res), + str(self.top_of_red), + str(self.top_of_yellow), + str(self.top_of_green), + ], + } + source = ColumnDataSource(data=labels_source_data) + labels = LabelSet( + x="weight", + y="height", + text="names", + y_offset=1, + text_font_size="8pt", + source=source, + text_align="center", + ) + p.add_layout(labels) + p.add_layout(legend, "below") + + script, div = components(p, wrap_script=False) + return div, script + + def get_ddmrp_chart_execution(self): + p = figure(frame_width=300, frame_height=400, y_axis_label="Quantity") + p.xaxis.visible = False + p.toolbar.logo = None + tor_exec = float_round( + self.top_of_red / 2, + precision_rounding=self.product_uom.rounding, + ) + toy_exec = self.top_of_red + tog_exec = float_round( + self.top_of_red + self.green_zone_qty, + precision_rounding=self.product_uom.rounding, + ) + toy2_exec = self.top_of_yellow + tor2_exec = self.top_of_green + hex_colors = self._get_colors_hex_map(pallete="execution") + red = p.vbar( + x=1, + bottom=0, + top=tor_exec, + width=1, + color=hex_colors.get("1_red", "red"), + ) + yellow = p.vbar( + x=1, + bottom=tor_exec, + top=toy_exec, + width=1, + color=hex_colors.get("2_yellow", "yellow"), + ) + green = p.vbar( + x=1, + bottom=toy_exec, + top=tog_exec, + width=1, + color=hex_colors.get("3_green", "green"), + ) + yellow_2 = p.vbar( + x=1, + bottom=tog_exec, + top=toy2_exec, + width=1, + color=hex_colors.get("2_yellow", "yellow"), + ) + red_2 = p.vbar( + x=1, + bottom=toy2_exec, + top=tor2_exec, + width=1, + color=hex_colors.get("1_red", "red"), + ) + on_hand = p.line( + [0, 2], + [ + self.product_location_qty_available_not_res, + self.product_location_qty_available_not_res, + ], + line_width=2, + line_dash="dotted", + ) + legend = Legend( + items=[ + ("Red zone (Execution)", [red, red_2]), + ("Yellow zone (Execution)", [yellow, yellow_2]), + ("Green zone (Execution)", [green]), + ("On-Hand Position (Unreserved)", [on_hand]), + ] + ) + labels_source_data = { + "height": [ + self.product_location_qty_available_not_res, + tor_exec, + toy_exec, + tog_exec, + toy2_exec, + ], + "weight": [0.25, 1, 1, 1, 1], + "names": [ + str(self.product_location_qty_available_not_res), + str(tor_exec), + str(toy_exec), + str(tog_exec), + str(toy2_exec), + ], + } + source = ColumnDataSource(data=labels_source_data) + labels = LabelSet( + x="weight", + y="height", + text="names", + y_offset=1, + text_font_size="8pt", + source=source, + text_align="center", + ) + p.add_layout(labels) + p.add_layout(legend, "below") + + script, div = components(p, wrap_script=False) + return div, script + + def _compute_ddmrp_demand_supply_chart(self): + for rec in self: + if not rec.buffer_profile_id: + # Not a buffer, skip. + rec.ddmrp_demand_chart = "" + rec.ddmrp_supply_chart = "" + continue + + # Prepare data: + demand_data = rec._get_demand_by_days(rec.qualified_demand_stock_move_ids) + mrp_data = rec._get_qualified_mrp_moves(rec.qualified_demand_mrp_move_ids) + supply_data = rec._get_incoming_by_days() + width = timedelta(days=0.4) + date_format = ( + self.env["res.lang"]._lang_get(self.env.lang or "en_US").date_format + ) + + # Plot demand data: + if demand_data or mrp_data: + x_demand = list(convert_datetime_type(x) for x in demand_data.keys()) + y_demand = list(demand_data.values()) + x_mrp = list(convert_datetime_type(x) for x in mrp_data.keys()) + y_mrp = list(mrp_data.values()) + + p = figure( + frame_width=500, + frame_height=400, + y_axis_label="Quantity", + x_axis_type="datetime", + ) + p.toolbar.logo = None + p.sizing_mode = "stretch_both" + # TODO: # p.xaxis.label_text_font = "helvetica" + p.xaxis.formatter = DatetimeTickFormatter( + hours=date_format, + days=date_format, + months=date_format, + years=date_format, + ) + p.xaxis.major_label_orientation = pi / 4 + + if demand_data: + p.vbar( + x=x_demand, + width=width, + bottom=0, + top=y_demand, + color="firebrick", + ) + if mrp_data: + p.vbar( + x=x_mrp, width=width, bottom=0, top=y_mrp, color="lightsalmon" + ) + p.line( + [ + datetime.today() - timedelta(days=1), + datetime.today() + timedelta(days=rec.order_spike_horizon), + ], + [rec.order_spike_threshold, rec.order_spike_threshold], + line_width=2, + line_dash="dashed", + ) + + unit = rec.product_uom.name + hover = HoverTool( + tooltips=[("qty", "$y %s" % unit)], point_policy="follow_mouse" + ) + p.add_tools(hover) + + script, div = components(p, wrap_script=False) + json_data = json.dumps( + { + "div": div, + "script": script, + } + ) + rec.ddmrp_demand_chart = json_data + else: + rec.ddmrp_demand_chart = json.dumps( + { + "div": _("No demand detected."), + "script": "", + } + ) + + # Plot supply data: + if supply_data: + x_supply = list(convert_datetime_type(x) for x in supply_data.keys()) + y_supply = list(supply_data.values()) + + p = figure( + frame_width=500, + frame_height=400, + y_axis_label="Quantity", + x_axis_type="datetime", + ) + p.toolbar.logo = None + p.sizing_mode = "stretch_both" + p.xaxis.formatter = DatetimeTickFormatter( + hours=date_format, + days=date_format, + months=date_format, + years=date_format, + ) + p.xaxis.major_label_orientation = pi / 4 + + # White line to have similar proportion to demand chart. + p.line( + [ + datetime.today() - timedelta(days=1), + datetime.today() + timedelta(days=rec.order_spike_horizon), + ], + [rec.order_spike_threshold, rec.order_spike_threshold], + line_width=2, + line_dash="dashed", + color="white", + ) + + p.vbar(x=x_supply, width=width, bottom=0, top=y_supply, color="grey") + + unit = rec.product_uom.name + hover = HoverTool( + tooltips=[("qty", "$y %s" % unit)], point_policy="follow_mouse" + ) + p.add_tools(hover) + + script, div = components(p, wrap_script=False) + json_data = json.dumps( + { + "div": div, + "script": script, + } + ) + rec.ddmrp_supply_chart = json_data + else: + rec.ddmrp_supply_chart = json.dumps( + { + "div": _("No supply detected."), + "script": "", + } + ) + + @api.depends("red_zone_qty") + def _compute_order_spike_threshold(self): + for rec in self: + rec.order_spike_threshold = 0.5 * rec.red_zone_qty + + def _get_manufactured_bom(self): + return self.env["mrp.bom"].search( + [ + "|", + ("product_id", "=", self.product_id.id), + ("product_tmpl_id", "=", self.product_id.product_tmpl_id.id), + "|", + ("location_id", "=", self.location_id.id), + ("location_id", "=", False), + ], + limit=1, + ) + + @api.depends("lead_days", "product_id.seller_ids.delay") + def _compute_dlt(self): + for rec in self: + if rec.buffer_profile_id.item_type == "manufactured": + bom = rec._get_manufactured_bom() + dlt = bom.dlt + elif rec.buffer_profile_id.item_type == "distributed": + dlt = rec.lead_days + else: + sellers = rec._get_product_sellers() + dlt = sellers and fields.first(sellers).delay or rec.lead_days + rec.dlt = dlt + + def _get_product_sellers(self): + """:returns the default sellers for a single buffer.""" + self.ensure_one() + all_sellers = self.product_id.seller_ids.filtered( + lambda r: not r.company_id or r.company_id == self.company_id + ) + today = fields.Date.context_today(self) + sellers = all_sellers.filtered( + lambda s: ( + (s.product_id == self.product_id or not s.product_id) + and ( + (s.date_start <= today if s.date_start else True) + and (s.date_end >= today if s.date_end else True) + ) + ) + ) + if not sellers: + # fallback to all sellers + sellers = all_sellers + # When the current transaction changed the sequence, it may happen that + # the sellers' recordset is not correctly sorted by default. + sellers = sellers.sorted(key=lambda s: (s.sequence, -s.min_qty, s.price)) + return sellers + + @api.depends( + "buffer_profile_id", + "item_type", + "product_id.seller_ids", + "product_id.seller_ids.company_id", + "product_id.seller_ids.partner_id", + "product_id.seller_ids.product_id", + "product_id.seller_ids.sequence", + "product_id.seller_ids.min_qty", + "product_id.seller_ids.price", + ) + def _compute_main_supplier(self): + for rec in self: + if rec.item_type == "purchased": + suppliers = rec._get_product_sellers() + rec.main_supplier_id = suppliers[0].partner_id if suppliers else False + else: + rec.main_supplier_id = False + + @api.depends("main_supplier_id", "product_id.seller_ids") + def _compute_product_vendor_code(self): + for rec in self: + if not rec.main_supplier_id: + rec.product_vendor_code = False + continue + supplier_info = rec._get_product_sellers().filtered( + lambda r: r.partner_id == rec.main_supplier_id + and r.product_id == rec.product_id + ) + rec.product_vendor_code = fields.first(supplier_info).product_code + + buffer_profile_id = fields.Many2one( + comodel_name="stock.buffer.profile", + string="Buffer Profile", + required=True, + ) + replenish_method = fields.Selection( + related="buffer_profile_id.replenish_method", + ) + item_type = fields.Selection( + related="buffer_profile_id.item_type", + ) + main_supplier_id = fields.Many2one( + comodel_name="res.partner", + string="Main Supplier", + help=( + "The main supplier is the first listed supplier defined " + "on the product that is valid for this product variant. " + "Any date restrictions are not taken into account." + ), + compute="_compute_main_supplier", + store=True, + index=True, + ) + green_override = fields.Float( + string="Green Zone (Override)", + ) + yellow_override = fields.Float( + string="Yellow Zone (Override)", + ) + red_override = fields.Float( + string="Red Zone (Override)", + ) + product_vendor_code = fields.Char( + compute="_compute_product_vendor_code", string="Vendor Code" + ) + dlt = fields.Float( + string="DLT (days)", + compute="_compute_dlt", + help="Decoupled Lead Time (days)", + ) + adu = fields.Float( + string="ADU", + default=0.0, + digits="Average Daily Usage", + readonly=True, + help="Average Daily Usage", + ) + adu_calculation_method = fields.Many2one( + comodel_name="product.adu.calculation.method", + string="ADU calculation method", + required=True, + ) + adu_calculation_method_type = fields.Selection( + related="adu_calculation_method.method", + ) + adu_fixed = fields.Float( + string="Fixed ADU", + default=1.0, + digits="Average Daily Usage", + ) + order_cycle = fields.Float(string="Minimum Order Cycle (days)") + minimum_order_quantity = fields.Float( + digits="Product Unit of Measure", + ) + red_base_qty = fields.Float( + compute="_compute_red_zone", + digits="Product Unit of Measure", + store=True, + ) + red_safety_qty = fields.Float( + compute="_compute_red_zone", + digits="Product Unit of Measure", + store=True, + ) + red_zone_qty = fields.Float( + compute="_compute_red_zone", + digits="Product Unit of Measure", + store=True, + ) + top_of_red = fields.Float( + related="red_zone_qty", + store=True, + ) + green_zone_qty = fields.Float( + compute="_compute_green_zone", + digits="Product Unit of Measure", + store=True, + ) + green_zone_lt_factor = fields.Float( + string="Green Zone Lead Time Factor", + compute="_compute_green_zone", + store=True, + help="Green zone Lead Time Factor", + ) + green_zone_moq = fields.Float( + string="Green Zone Minimum Order Quantity", + compute="_compute_green_zone", + digits="Product Unit of Measure", + store=True, + help="Green zone qty option considering minimum order quantity", + ) + green_zone_oc = fields.Float( + string="Green Zone Order Cycle", + compute="_compute_green_zone", + store=True, + help="Green zone qty option considering desired Order Cycle", + ) + yellow_zone_qty = fields.Float( + compute="_compute_yellow_zone", + digits="Product Unit of Measure", + store=True, + ) + top_of_yellow = fields.Float( + compute="_compute_yellow_zone", + digits="Product Unit of Measure", + store=True, + ) + top_of_green = fields.Float( + compute="_compute_green_zone", + digits="Product Unit of Measure", + store=True, + ) + order_spike_horizon = fields.Float() + order_spike_threshold = fields.Float( + compute="_compute_order_spike_threshold", + digits="Product Unit of Measure", + store=True, + ) + qualified_demand = fields.Float( + digits="Product Unit of Measure", + readonly=True, + ) + qualified_demand_stock_move_ids = fields.Many2many( + comodel_name="stock.move", + ) + qualified_demand_mrp_move_ids = fields.Many2many( + comodel_name="mrp.move", + ) + incoming_dlt_qty = fields.Float( + string="Incoming (Within DLT)", + readonly=True, + ) + incoming_outside_dlt_qty = fields.Float( + string="Incoming (Outside DLT)", + readonly=True, + ) + rfq_outside_dlt_qty = fields.Float( + string="RFQ Qty (Outside DLT)", + readonly=True, + help="Request for Quotation total quantity that is planned outside of " + "the DLT horizon.", + ) + net_flow_position = fields.Float( + digits="Product Unit of Measure", + readonly=True, + ) + net_flow_position_percent = fields.Float( + string="Net flow position (% of TOG)", + readonly=True, + ) + planning_priority_level = fields.Selection( + selection=_PRIORITY_LEVEL, + readonly=True, + ) + execution_priority_level = fields.Selection( + string="On-Hand Alert Level", + selection=_PRIORITY_LEVEL, + store=True, + readonly=True, + ) + on_hand_percent = fields.Float( + string="On Hand/TOR (%)", + store=True, + readonly=True, + ) + on_hand_target_position = fields.Float( + string="Avg On Hand Target Position", + help="It denotes what the target stock on hand is. The " + "computation is: OH Target = TOR + Green Zone / 2 ", + compute="_compute_on_hand_target_position", + ) + on_hand_target_max = fields.Float( + string="Target On Hand (Max)", + help="It denotes how far you are on average from the target", + compute="_compute_on_hand_target_max", + ) + on_hand_target_min = fields.Float( + related="top_of_red", + string="On Hand Target Range", + help="It denotes what the target stock on hand range is.", + ) + mrp_production_ids = fields.One2many( + string="Manufacturing Orders", + comodel_name="mrp.production", + inverse_name="buffer_id", + ) + ddmrp_chart = fields.Text( + string="DDMRP Chart", + compute=_compute_ddmrp_chart, + ) + ddmrp_chart_execution = fields.Text( + string="DDMRP Execution Chart", compute=_compute_ddmrp_chart + ) + show_execution_chart = fields.Boolean() + ddmrp_demand_chart = fields.Text( + string="DDMRP Demand Chart", + compute="_compute_ddmrp_demand_supply_chart", + ) + ddmrp_supply_chart = fields.Text( + string="DDMRP Supply Chart", + compute="_compute_ddmrp_demand_supply_chart", + ) + auto_procure = fields.Boolean( + default=False, + help="Whenever the buffer is recomputed, if this option is set, it " + "will procure automatically if needed.", + ) + auto_procure_option = fields.Selection( + selection=[ + ("standard", "When recommended (NFP below TOY)"), + ("stockout", "When in stockout"), + ], + default="standard", + required=True, + ) + extra_lead_time = fields.Float( + string="Extra lead time (for Sizing)", + default=0.0, + help="When defined, this lead time will be added to the decoupled " + "lead time for the computation of the zones size (it won't affect " + "planned date for procurements).\n" + "This is particularly useful in situations of infrequent but " + "periodic demand. E.g. We receive a large order every 30 days, " + "whereas the supplier takes 10 days to supply. \n" + "In this case the yellow zone must cover for the " + "entire cycle of 30 days of demand.\n" + "In situations with infrequent demand the ADU tends to be very" + " small, and every new order would be treated as a spike, when \n" + "in reality this is not an exceptional situation.", + ) + distributed_source_location_id = fields.Many2one( + string="Replenishment Location", + comodel_name="stock.location", + readonly=True, + index=True, + help="Source location from where goods will be replenished. " + "Computed when buffer is refreshed from following the Stock Rules.", + ) + distributed_source_location_qty = fields.Float( + string="Source Location Free Quantity (distributed)", + compute="_compute_distributed_source_location_qty", + search="_search_distributed_source_location_qty", + help="Quantity free for distributed buffer in the source location. " + "When a procurement is requested, if the option is active on the profile," + " it will be limited to this quantity.", + ) + + @api.depends( + "top_of_green", + "top_of_yellow", + "top_of_red", + ) + def _compute_on_hand_target_position(self): + for rec in self: + green_zone_size = rec.top_of_green - rec.top_of_yellow + rec.on_hand_target_position = rec.top_of_red + green_zone_size / 2 + + @api.depends( + "top_of_green", + "top_of_yellow", + "top_of_red", + ) + def _compute_on_hand_target_max(self): + for rec in self: + green_zone_size = rec.top_of_green - rec.top_of_yellow + rec.on_hand_target_max = rec.top_of_red + green_zone_size + + @api.depends( + "distributed_source_location_id", + "distributed_source_location_id.quant_ids.quantity", + "distributed_source_location_id.quant_ids.reserved_quantity", + ) + def _compute_distributed_source_location_qty(self): + to_compute_per_location = {} + for record in self: + location = record.distributed_source_location_id + if not location: + record.distributed_source_location_qty = 0.0 + continue + to_compute_per_location.setdefault(location.id, set()) + to_compute_per_location[location.id].add(record.id) + + # batch computation per location + for location_id, buffer_ids in to_compute_per_location.items(): + buffers = self.browse(buffer_ids).with_context(location=location_id) + for buf in buffers: + buf.distributed_source_location_qty = buf.product_id.free_qty + + def _search_distributed_source_location_qty(self, operator, value): + if operator not in OPERATORS: + raise exceptions.UserError(_("Unsupported operator %s") % (operator,)) + buffers = self.search([("distributed_source_location_id", "!=", False)]) + operator_func = OPERATORS[operator] + buffers = buffers.filtered( + lambda buf: operator_func(buf.distributed_source_location_qty, value) + ) + return [("id", "in", buffers.ids)] + + def _search_open_stock_moves_domain(self): + self.ensure_one() + return [ + ("product_id", "=", self.product_id.id), + ( + "state", + "in", + ["draft", "waiting", "confirmed", "partially_available", "assigned"], + ), + ("location_dest_id", "=", self.location_id.id), + ] + + @api.model + def _stock_move_tree_view(self, lines): + views = [] + tree_view = self.env.ref("stock.view_move_tree", False) + if tree_view: + views += [(tree_view.id, "tree")] + form_view = self.env.ref("stock.view_move_form", False) + if form_view: + views += [(form_view.id, "form")] + + return { + "name": _("Non-completed Moves"), + "type": "ir.actions.act_window", + "res_model": "stock.move", + "view_type": "form", + "views": views, + "view_mode": "tree,form", + "domain": str([("id", "in", lines.ids)]), + } + + def open_moves(self): + self.ensure_one() + # Utility method used to add an "Open Moves" button in the buffer + # planning view + domain = self._search_open_stock_moves_domain() + records = self.env["stock.move"].search(domain) + return self._stock_move_tree_view(records) + + def _get_horizon_adu_past_demand(self): + return self.adu_calculation_method.horizon_past or 0 + + def _get_dates_adu_past_demand(self, horizon): + date_from = fields.Date.to_string( + self.warehouse_id.wh_plan_days(datetime.now(), -1 * horizon) + ) + date_to = fields.Date.to_string( + self.warehouse_id.wh_plan_days(datetime.now(), -1) + ) + return date_from, date_to + + def _past_demand_estimate_domain(self, date_from, date_to, locations): + self.ensure_one() + return [ + ("location_id", "in", locations.ids), + ("product_id", "=", self.product_id.id), + ("date_from", "<=", date_to), + ("date_to", ">=", date_from), + ] + + def _past_moves_domain(self, date_from, date_to, locations): + self.ensure_one() + domain = [ + ("state", "=", "done"), + ("location_id", "in", locations.ids), + ("location_dest_id", "not in", locations.ids), + ("location_dest_id.usage", "!=", "inventory"), + ("product_id", "=", self.product_id.id), + ("date", ">=", date_from), + ("date", "<=", date_to), + ] + if not self.env.company.ddmrp_adu_calc_include_scrap: + domain.append(("location_id.scrap_location", "=", False)) + return domain + + def _calc_adu_past_demand(self): + self.ensure_one() + horizon = self._get_horizon_adu_past_demand() + # today is excluded to be sure that is a past day and all moves + # for that day are done (or at least the expected date is in the past). + date_from, date_to = self._get_dates_adu_past_demand(horizon) + locations = self.env["stock.location"].search( + [("id", "child_of", [self.location_id.id])] + ) + if self.adu_calculation_method.source_past == "estimates": + qty = 0.0 + domain = self._past_demand_estimate_domain(date_from, date_to, locations) + for estimate in self.env["stock.demand.estimate"].search(domain): + qty += estimate.get_quantity_by_date_range( + fields.Date.from_string(date_from), fields.Date.from_string(date_to) + ) + return qty / horizon + elif self.adu_calculation_method.source_past == "actual": + qty = 0.0 + domain = self._past_moves_domain(date_from, date_to, locations) + for group in self.env["stock.move"].read_group( + domain, ["product_id", "product_qty"], ["product_id"] + ): + qty += group["product_qty"] + return qty / horizon + else: + return 0.0 + + def _get_horizon_adu_future_demand(self): + return self.adu_calculation_method.horizon_future or 1 + + def _get_dates_adu_future_demand(self, horizon): + date_from = fields.Datetime.now() + date_to = self.warehouse_id.wh_plan_days(date_from, horizon) + date_to = date_to.replace( + hour=date_from.hour, + minute=date_from.minute, + second=date_from.second, + ) + return date_from, date_to + + def _future_demand_estimate_domain(self, date_from, date_to, locations): + self.ensure_one() + return [ + ("location_id", "in", locations.ids), + ("product_id", "=", self.product_id.id), + ("date_from", "<=", date_to), + ("date_to", ">=", date_from), + ] + + def _future_moves_domain(self, date_from, date_to, locations): + self.ensure_one() + domain = [ + ("state", "not in", ["done", "cancel"]), + ("location_id", "in", locations.ids), + ("location_dest_id", "not in", locations.ids), + ("location_dest_id.usage", "!=", "inventory"), + ("product_id", "=", self.product_id.id), + ("date", ">=", date_from), + ("date", "<=", date_to), + ] + if not self.env.company.ddmrp_adu_calc_include_scrap: + domain.append(("location_id.scrap_location", "=", False)) + return domain + + def _calc_adu_future_demand(self): + self.ensure_one() + horizon = self._get_horizon_adu_future_demand() + date_from, date_to = self._get_dates_adu_future_demand(horizon) + locations = self.env["stock.location"].search( + [("id", "child_of", [self.location_id.id])] + ) + if self.adu_calculation_method.source_future == "estimates": + qty = 0.0 + domain = self._future_demand_estimate_domain(date_from, date_to, locations) + for estimate in self.env["stock.demand.estimate"].search(domain): + qty += estimate.get_quantity_by_date_range( + fields.Date.from_string(date_from), fields.Date.from_string(date_to) + ) + return qty / horizon + elif self.adu_calculation_method.source_future == "actual": + qty = 0.0 + domain = self._future_moves_domain(date_from, date_to, locations) + for group in self.env["stock.move"].read_group( + domain, ["product_id", "product_qty"], ["product_id"] + ): + qty += group["product_qty"] + return qty / horizon + else: + return 0.0 + + def _calc_adu_blended(self): + self.ensure_one() + past_comp = self._calc_adu_past_demand() + fp = self.adu_calculation_method.factor_past + future_comp = self._calc_adu_future_demand() + ff = self.adu_calculation_method.factor_future + return past_comp * fp + future_comp * ff + + def _calc_adu(self): + for rec in self: + if rec.adu_calculation_method.method == "fixed": + rec.adu = rec.adu_fixed + elif rec.adu_calculation_method.method == "past": + rec.adu = rec._calc_adu_past_demand() + elif rec.adu_calculation_method.method == "future": + rec.adu = rec._calc_adu_future_demand() + elif rec.adu_calculation_method.method == "blended": + rec.adu = rec._calc_adu_blended() + return True + + def _search_stock_moves_qualified_demand_domain(self): + self.ensure_one() + horizon = self.order_spike_horizon + date_to = self.warehouse_id.wh_plan_days(datetime.now(), horizon) + return [ + ("product_id", "=", self.product_id.id), + ( + "state", + "in", + ["waiting", "confirmed", "partially_available", "assigned"], + ), + ("date", "<=", date_to), + ] + + def _search_stock_moves_qualified_demand(self): + domain = self._search_stock_moves_qualified_demand_domain() + moves = self.env["stock.move"].search(domain) + moves = moves.filtered( + lambda move: move.location_id.is_sublocation_of(self.location_id) + and not move.location_dest_id.is_sublocation_of(self.location_id) + ) + return moves + + def _get_incoming_supply_date_limit(self): + # The safety factor allows to control the date limit + factor = self.warehouse_id.nfp_incoming_safety_factor or 1 + horizon = int(self.dlt) * factor + return self._get_date_planned(force_lt=horizon) + + def _search_stock_moves_incoming_domain(self, outside_dlt=False): + date_to = self._get_incoming_supply_date_limit() + date_operator = ">" if outside_dlt else "<=" + return [ + ("product_id", "=", self.product_id.id), + ( + "state", + "in", + ["waiting", "confirmed", "partially_available", "assigned"], + ), + ("date", date_operator, date_to), + ] + + def _search_stock_moves_incoming(self, outside_dlt=False): + domain = self._search_stock_moves_incoming_domain(outside_dlt=outside_dlt) + moves = self.env["stock.move"].search(domain) + moves = moves.filtered( + lambda move: not move.location_id.is_sublocation_of(self.location_id) + and move.location_dest_id.is_sublocation_of(self.location_id) + ) + return moves + + def _get_incoming_by_days(self): + self.ensure_one() + moves = self._search_stock_moves_incoming() + incoming_by_days = {} + move_dates = [dt.date() for dt in moves.mapped("date")] + for move_date in move_dates: + incoming_by_days[move_date] = 0.0 + for move in moves: + date = move.date.date() + incoming_by_days[date] += move.product_qty + return incoming_by_days + + def _get_demand_by_days(self, moves): + self.ensure_one() + demand_by_days = {} + move_dates = [dt.date() for dt in moves.mapped("date")] + for move_date in move_dates: + demand_by_days[move_date] = 0.0 + for move in moves: + date = move.date.date() + demand_by_days[date] += move.product_qty - move.reserved_availability + return demand_by_days + + def _search_mrp_moves_qualified_demand_domain(self): + self.ensure_one() + horizon = self.order_spike_horizon + date_to = self.warehouse_id.wh_plan_days(datetime.now(), horizon) + return [ + ("product_id", "=", self.product_id.id), + ("mrp_type", "=", "d"), + ("mrp_date", "<=", date_to), + ] + + def _search_mrp_moves_qualified_demand(self): + domain = self._search_mrp_moves_qualified_demand_domain() + moves = self.env["mrp.move"].search(domain) + moves = moves.filtered( + lambda move: move.mrp_area_id.location_id.is_sublocation_of( + self.location_id + ) + ) + return moves + + def _get_qualified_mrp_moves(self, moves): + self.ensure_one() + mrp_moves_by_days = {} + move_dates = [dt for dt in moves.mapped("mrp_date")] + for move_date in move_dates: + mrp_moves_by_days[move_date] = 0.0 + for move in moves: + date = move.mrp_date + mrp_moves_by_days[date] += abs(move.mrp_qty) + return mrp_moves_by_days + + def _calc_qualified_demand(self, current_date=False): + today = current_date or fields.date.today() + for rec in self: + qualified_demand = 0.0 + moves = rec._search_stock_moves_qualified_demand() + mrp_moves = rec._search_mrp_moves_qualified_demand() + demand_by_days = rec._get_demand_by_days(moves) + mrp_moves_by_days = rec._get_qualified_mrp_moves(mrp_moves) + dates = list(set(demand_by_days.keys()) | set(mrp_moves_by_days.keys())) + for date in dates: + if ( + demand_by_days.get(date, 0.0) >= rec.order_spike_threshold + or date <= today + ): + qualified_demand += demand_by_days.get(date, 0.0) + else: + moves = moves.filtered(lambda x: x.date != date) + if ( + mrp_moves_by_days.get(date, 0.0) >= rec.order_spike_threshold + or date <= today + ): + qualified_demand += mrp_moves_by_days.get(date, 0.0) + else: + mrp_moves = mrp_moves.filtered(lambda x: x.mrp_date != date) + rec.qualified_demand = qualified_demand + rec.qualified_demand_stock_move_ids = moves + rec.qualified_demand_mrp_move_ids = mrp_moves + return True + + def _calc_incoming_dlt_qty(self): + for rec in self: + moves = self._search_stock_moves_incoming() + rec.incoming_dlt_qty = sum(moves.mapped("product_qty")) + outside_dlt_moves = self._search_stock_moves_incoming(outside_dlt=True) + rec.incoming_outside_dlt_qty = sum(outside_dlt_moves.mapped("product_qty")) + if rec.item_type == "purchased": + cut_date = rec._get_incoming_supply_date_limit() + # FIXME: filter using order_id.state while + # https://github.com/odoo/odoo/pull/58966 is not merged. + # Can be changed in v14. + pols = rec.purchase_line_ids.filtered( + lambda l: l.date_planned > fields.Datetime.to_datetime(cut_date) + and l.order_id.state in ("draft", "sent") + ) + rec.rfq_outside_dlt_qty = sum(pols.mapped("product_qty")) + else: + rec.rfq_outside_dlt_qty = 0.0 + return True + + def _calc_net_flow_position(self): + for rec in self: + rec.net_flow_position = ( + rec.product_location_qty_available_not_res + + rec.incoming_dlt_qty + - rec.qualified_demand + ) + usage = 0.0 + if rec.top_of_green: + usage = round((rec.net_flow_position / rec.top_of_green * 100), 2) + rec.net_flow_position_percent = usage + return True + + def _calc_distributed_source_location(self): + """Compute source location used for replenishment of distributed buffer + + It follows the rules of the default route until it finds a "Take from + stock" rule. The source location depends on many factors (route on + warehouse, product, category, ...), that's why it is updated only + on refresh of the buffer. + """ + for record in self: + if record.item_type != "distributed": + record.distributed_source_location_id = self.env[ + "stock.location" + ].browse() + continue + + source_location = record._source_location_from_route() + record.distributed_source_location_id = source_location + + def _calc_planning_priority(self): + for rec in self: + if rec.net_flow_position >= rec.top_of_yellow: + rec.planning_priority_level = "3_green" + elif rec.net_flow_position >= rec.top_of_red: + rec.planning_priority_level = "2_yellow" + else: + rec.planning_priority_level = "1_red" + + def _calc_execution_priority(self): + for rec in self: + if rec.product_location_qty_available_not_res >= rec.top_of_red: + rec.execution_priority_level = "3_green" + elif rec.product_location_qty_available_not_res >= rec.top_of_red * 0.5: + rec.execution_priority_level = "2_yellow" + else: + rec.execution_priority_level = "1_red" + if rec.top_of_red: + rec.on_hand_percent = round( + ( + (rec.product_location_qty_available_not_res / rec.top_of_red) + * 100 + ), + 2, + ) + else: + rec.on_hand_percent = 0.0 + + @api.model_create_multi + def create(self, vals_list): + records = super().create(vals_list) + if not self.env.context.get("skip_adu_calculation", False): + records._calc_adu() + records._calc_distributed_source_location() + return records + + def write(self, vals): + res = super().write(vals) + if any(f in vals for f in ("adu_fixed", "adu_calculation_method")): + self._calc_adu() + return res + + def _procure_qty_to_order(self): + qty_to_order = self.procure_recommended_qty + rounding = self.procure_uom_id.rounding or self.product_uom.rounding + if ( + self.item_type == "distributed" + and self.buffer_profile_id.replenish_distributed_limit_to_free_qty + ): + # If we don't procure more than what we have in stock, we prevent + # backorders on the replenishment + if ( + float_compare( + self.distributed_source_location_qty, + self.procure_min_qty, + precision_rounding=rounding, + ) + < 0 + ): + # the free qty is below the minimum we want to move, do not + # move anything + return 0 + else: + # move only what we have in stock + return min(qty_to_order, self.distributed_source_location_qty) + return qty_to_order + + def do_auto_procure(self): + if not self.auto_procure: + return False + rounding = self.product_uom.rounding + qty_to_order = self._procure_qty_to_order() + if float_compare(qty_to_order, 0.0, precision_rounding=rounding) > 0 and ( + ( + self.auto_procure_option == "stockout" + and float_compare( + self.net_flow_position, 0.0, precision_rounding=rounding + ) + < 0 + ) + or self.auto_procure_option == "standard" + ): + wizard = ( + self.env["make.procurement.buffer"] + .with_context( + active_model="stock.buffer", active_ids=self.ids, active_id=self.id + ) + .create({}) + ) + wizard.make_procurement() + return True + + def _search_purchase_order_lines_incoming(self, outside_dlt=False): + cut_date = self._get_incoming_supply_date_limit() + if not outside_dlt: + pols = self.purchase_line_ids.filtered( + lambda l: l.date_planned <= fields.Datetime.to_datetime(cut_date) + and l.order_id.state in ("draft", "sent") + ) + else: + pols = self.purchase_line_ids.filtered( + lambda l: l.date_planned > fields.Datetime.to_datetime(cut_date) + and l.order_id.state in ("draft", "sent") + ) + return pols + + def action_view_supply(self, outside_dlt=False): + if self.item_type == "purchased": + pols = self._search_purchase_order_lines_incoming(outside_dlt) + moves = self._search_stock_moves_incoming(outside_dlt) + while moves.mapped("move_orig_ids"): + moves = moves.mapped("move_orig_ids") + pos = pols.mapped("order_id") + moves.mapped("purchase_line_id.order_id") + result = self.env["ir.actions.actions"]._for_xml_id("purchase.purchase_rfq") + # Remove the context since the action display RFQ and not PO. + result["context"] = {} + result["domain"] = [("id", "in", pos.ids)] + elif self.item_type == "manufactured": + moves = self._search_stock_moves_incoming(outside_dlt) + mos = moves.mapped("production_id") + result = self.env["ir.actions.actions"]._for_xml_id( + "mrp.mrp_production_action" + ) + result["context"] = {} + result["domain"] = [("id", "in", mos.ids)] + else: + moves = self._search_stock_moves_incoming(outside_dlt) + picks = moves.mapped("picking_id") + result = self.env["ir.actions.actions"]._for_xml_id( + "stock.action_picking_tree_all" + ) + result["context"] = {} + result["domain"] = [("id", "in", picks.ids)] + return result + + def action_view_supply_inside_dlt_window(self): + return self.action_view_supply() + + def action_view_supply_outside_dlt_window(self): + return self.action_view_supply(outside_dlt=True) + + def action_view_qualified_demand_pickings(self): + moves = self.qualified_demand_stock_move_ids + picks = moves.mapped("picking_id") + result = self.env["ir.actions.actions"]._for_xml_id( + "stock.action_picking_tree_all" + ) + result["context"] = {} + result["domain"] = [("id", "in", picks.ids)] + return result + + def action_view_qualified_demand_mrp(self): + mrp_moves = self.qualified_demand_mrp_move_ids + result = self.env["ir.actions.actions"]._for_xml_id( + "mrp_multi_level.mrp_move_action" + ) + result["context"] = {} + result["domain"] = [("id", "in", mrp_moves.ids)] + return result + + def action_view_past_adu(self): + horizon = self._get_horizon_adu_past_demand() + date_from, date_to = self._get_dates_adu_past_demand(horizon) + locations = self.env["stock.location"].search( + [("id", "child_of", [self.location_id.id])] + ) + if self.adu_calculation_method.source_past == "actual": + domain = self._past_moves_domain(date_from, date_to, locations) + moves = self.env["stock.move"].search(domain) + result = self.env["ir.actions.actions"]._for_xml_id( + "stock.stock_move_action" + ) + result["context"] = {} + result["domain"] = [("id", "in", moves.ids)] + else: + domain = self._past_demand_estimate_domain(date_from, date_to, locations) + estimates = self.env["stock.demand.estimate"].search(domain) + result = self.env["ir.actions.actions"]._for_xml_id( + "stock_demand_estimate.stock_demand_estimate_action" + ) + result["context"] = {} + result["domain"] = [("id", "in", estimates.ids)] + return result + + def action_view_future_adu(self): + horizon = self._get_horizon_adu_future_demand() + date_from, date_to = self._get_dates_adu_future_demand(horizon) + locations = self.env["stock.location"].search( + [("id", "child_of", [self.location_id.id])] + ) + if self.adu_calculation_method.source_future == "actual": + domain = self._future_moves_domain(date_from, date_to, locations) + moves = self.env["stock.move"].search(domain) + result = self.env["ir.actions.actions"]._for_xml_id( + "stock.stock_move_action" + ) + result["context"] = {} + result["domain"] = [("id", "in", moves.ids)] + else: + domain = self._future_demand_estimate_domain(date_from, date_to, locations) + estimates = self.env["stock.demand.estimate"].search(domain) + result = self.env["ir.actions.actions"]._for_xml_id( + "stock_demand_estimate.stock_demand_estimate_action" + ) + result["context"] = {} + result["domain"] = [("id", "in", estimates.ids)] + return result + + @api.model + def cron_ddmrp_adu(self, automatic=False): + """calculate ADU for each DDMRP buffer. Called by cronjob.""" + auto_commit = not getattr(threading.current_thread(), "testing", False) + _logger.info("Start cron_ddmrp_adu.") + 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_adu: {}. ({}/{})".format(b.name, i, j)) + if automatic: + with self.env.cr.savepoint(): + b._calc_adu() + else: + b._calc_adu() + except Exception: + _logger.exception("Fail to compute ADU for buffer %s", b.name) + if not automatic: + raise + if auto_commit: + self._cr.commit() # pylint: disable=E8102 + _logger.info("End cron_ddmrp_adu.") + return True + + def refresh_buffer(self): + self.ensure_one() + self.cron_actions(only_nfp=False) + return True + + def cron_actions(self, only_nfp=False): + """This method is meant to be inherited by other modules in order to + enhance extensibility.""" + self.ensure_one() + self.invalidate_recordset( + fnames=[ + "product_location_qty", + "incoming_location_qty", + "outgoing_location_qty", + "virtual_location_qty", + "product_location_qty_available_not_res", + "dlt", + "distributed_source_location_qty", + "qualified_demand", + ], + ) + if not only_nfp or only_nfp == "out": + self._calc_qualified_demand() + if not only_nfp or only_nfp == "in": + self._calc_incoming_dlt_qty() + self._calc_net_flow_position() + self._calc_distributed_source_location() + self._calc_planning_priority() + self._calc_execution_priority() + self.mrp_production_ids._calc_execution_priority() + self.mapped("purchase_line_ids")._calc_execution_priority() + if not only_nfp: + # re-compoute red to force in cascade the recalculation of zones. + self._compute_red_zone() + self.do_auto_procure() + return True + + @api.model + def cron_ddmrp(self, automatic=False): + """Calculate key DDMRP parameters for each buffer. + Called by cronjob.""" + auto_commit = not getattr(threading.current_thread(), "testing", False) + _logger.info("Start cron_ddmrp.") + 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(): + i += 1 + _logger.debug("ddmrp cron: {}. ({}/{})".format(b.name, i, j)) + try: + if automatic: + with self.env.cr.savepoint(): + b.cron_actions() + else: + b.cron_actions() + except Exception: + _logger.exception("Fail updating buffer %s", b.name) + if not automatic: + raise + if auto_commit: + self._cr.commit() # pylint: disable=E8102 + _logger.info("End cron_ddmrp.") + return True + + def _values_source_location_from_route(self): + return {"warehouse_id": self.warehouse_id} + + def _source_location_from_route(self, route=None): + """Return the replenishment source location for distributed buffers + If no route is passed, it follows the source location of the rules of + all the routes it finds until it can no longer find a path. + If a route is passed, it stops at the final source location of the + rules of this route only. + """ + current_location = self.location_id + rule_values = self._values_source_location_from_route() + while current_location: + rule = self.env["procurement.group"]._get_rule( + self.product_id, current_location, rule_values + ) + if rule.procure_method == "make_to_stock": + return rule.location_src_id + elif rule.procure_method == "make_to_order": + # If resupply from another warehouse, this rule can't be retrieved by + # method _get_rule, because that we try to get this rule bases on previous rule + pull_rule = self.env["stock.rule"].search( + [ + ("action", "in", ("pull", "pull_push")), + ("route_id", "=", rule.route_id.id), + ("location_dest_id", "=", rule.location_src_id.id), + ] + ) + if pull_rule: + if pull_rule.procure_method in ("make_to_stock", "mts_else_mto"): + return pull_rule.location_src_id + elif pull_rule.procure_method == "make_to_order": + current_location = pull_rule.location_src_id + rule_values.update( + { + "warehouse_id": pull_rule.location_src_id.warehouse_id, + } + ) + continue + current_location = rule.location_src_id + + def action_dummy(self): + # no action, used to show an image in the tree view + return diff --git a/ddmrp/models/stock_buffer_profile.py b/ddmrp/models/stock_buffer_profile.py new file mode 100644 index 000000000..259cc9da9 --- /dev/null +++ b/ddmrp/models/stock_buffer_profile.py @@ -0,0 +1,77 @@ +# Copyright 2016-20 ForgeFlow S.L. (http://www.forgeflow.com) +# Copyright 2016 Aleph Objects, Inc. (https://www.alephobjects.com/) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import api, fields, models + +_REPLENISH_METHODS = [ + ("replenish", "Replenished"), + ("replenish_override", "Replenished Override"), + ("min_max", "Min-max"), +] +_ITEM_TYPES = [ + ("manufactured", "Manufactured"), + ("purchased", "Purchased"), + ("distributed", "Distributed"), +] + + +class StockBufferProfile(models.Model): + _name = "stock.buffer.profile" + _description = "Stock Buffer Profile" + + @api.depends( + "item_type", + "lead_time_id", + "lead_time_id.name", + "lead_time_id.factor", + "variability_id", + "variability_id.name", + "variability_id.factor", + "distributed_reschedule_max_proc_time", + ) + def _compute_name(self): + """Get the right summary for this job.""" + for rec in self: + name = "{} {}, {}({}), {}({})".format( + rec.replenish_method, + rec.item_type, + rec.lead_time_id.name, + rec.lead_time_id.factor, + rec.variability_id.name, + rec.variability_id.factor, + ) + if rec.distributed_reschedule_max_proc_time > 0.0: + name += ", {}min".format(rec.distributed_reschedule_max_proc_time) + rec.name = name + + name = fields.Char(compute="_compute_name", store=True) + replenish_method = fields.Selection( + string="Replenishment method", selection=_REPLENISH_METHODS, required=True + ) + item_type = fields.Selection(selection=_ITEM_TYPES, required=True) + lead_time_id = fields.Many2one( + comodel_name="stock.buffer.profile.lead.time", string="Lead Time Factor" + ) + variability_id = fields.Many2one( + comodel_name="stock.buffer.profile.variability", string="Variability Factor" + ) + company_id = fields.Many2one( + "res.company", + "Company", + ) + + replenish_distributed_limit_to_free_qty = fields.Boolean( + string="Limit replenishment to free quantity", + default=False, + help="When activated, the recommended quantity will be maxed at " + "the quantity available in the replenishment source location.", + ) + distributed_reschedule_max_proc_time = fields.Float( + string="Re-Schedule Procurement Max Proc. Time (minutes)", + default=0.0, + help="When you request procurement from a buffer, their scheduled" + " date is rescheduled to now + this procurement time (in minutes)." + " Their scheduled date represents the latest the transfers should" + " be done, and therefore, past this timestamp, considered late.", + ) diff --git a/ddmrp/models/stock_buffer_profile_lead_time.py b/ddmrp/models/stock_buffer_profile_lead_time.py new file mode 100644 index 000000000..6e37517e5 --- /dev/null +++ b/ddmrp/models/stock_buffer_profile_lead_time.py @@ -0,0 +1,17 @@ +# Copyright 2016-20 ForgeFlow S.L. (http://www.forgeflow.com) +# Copyright 2016 Aleph Objects, Inc. (https://www.alephobjects.com/) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import fields, models + + +class StockBufferProfileLeadTime(models.Model): + _name = "stock.buffer.profile.lead.time" + _description = "Stock Buffer Profile Lead Time Factor" + + name = fields.Char(required=True) + factor = fields.Float(string="Lead Time Factor", required=True) + company_id = fields.Many2one( + "res.company", + "Company", + ) diff --git a/ddmrp/models/stock_buffer_profile_variability.py b/ddmrp/models/stock_buffer_profile_variability.py new file mode 100644 index 000000000..64dd4cb1e --- /dev/null +++ b/ddmrp/models/stock_buffer_profile_variability.py @@ -0,0 +1,17 @@ +# Copyright 2016-20 ForgeFlow S.L. (http://www.forgeflow.com) +# Copyright 2016 Aleph Objects, Inc. (https://www.alephobjects.com/) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import fields, models + + +class StockBufferProfileVariability(models.Model): + _name = "stock.buffer.profile.variability" + _description = "Stock Buffer Profile Variability Factor" + + name = fields.Char(required=True) + factor = fields.Float(string="Variability Factor", required=True) + company_id = fields.Many2one( + "res.company", + "Company", + ) diff --git a/ddmrp/models/stock_move.py b/ddmrp/models/stock_move.py new file mode 100644 index 000000000..29106999a --- /dev/null +++ b/ddmrp/models/stock_move.py @@ -0,0 +1,86 @@ +# Copyright 2019-20 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import api, fields, models + + +class StockMove(models.Model): + _inherit = "stock.move" + + buffer_ids = fields.Many2many( + comodel_name="stock.buffer", + string="Linked Stock Buffers", + ) + # Add an index as '_find_buffer_link' method is using it as search criteria + created_purchase_line_id = fields.Many2one(index=True) + + def _prepare_procurement_values(self): + res = super(StockMove, self)._prepare_procurement_values() + if self.buffer_ids: + res["buffer_ids"] = self.buffer_ids + return res + + def _merge_moves_fields(self): + res = super(StockMove, self)._merge_moves_fields() + res["buffer_ids"] = [(4, m.id) for m in self.mapped("buffer_ids")] + return res + + def write(self, vals): + res = super(StockMove, self).write(vals) + if self and self.env.company.ddmrp_auto_update_nfp: + # Stock moves changes can be triggered by users without + # access to write stock buffers, thus we do it with sudo. + if "state" in vals: + self.sudo()._update_ddmrp_nfp() + elif "location_id" in vals or "location_dest_id" in vals: + self.sudo().filtered( + lambda m: m.state + in ("confirmed", "partially_available", "assigned") + )._update_ddmrp_nfp() + return res + + @api.model_create_multi + def create(self, vals_list): + moves = super(StockMove, self).create(vals_list) + # TODO should we use @api.model_create_single instead? + moves_to_update_ids = [] + for vals, move in zip(vals_list, moves): + if ( + "state" in vals + and move.state not in ("draft", "cancel") + and self.env.company.ddmrp_auto_update_nfp + ): + moves_to_update_ids.append(move.id) + # Stock moves state changes can be triggered by users without + # access to write stock buffers, thus we do it with sudo. + if moves_to_update_ids: + self.browse(moves_to_update_ids).sudo()._update_ddmrp_nfp() + return moves + + def _find_buffers_to_update_nfp(self): + # Find buffers that can be affected. `out_buffers` will see the move as + # outgoing and `in_buffers` as incoming. + out_buffers = in_buffers = self.env["stock.buffer"] + for move in self: + out_buffers |= move.mapped("product_id.buffer_ids").filtered( + lambda buffer: ( + move.location_id.is_sublocation_of(buffer.location_id) + and not move.location_dest_id.is_sublocation_of(buffer.location_id) + ) + ) + in_buffers |= move.mapped("product_id.buffer_ids").filtered( + lambda buffer: ( + not move.location_id.is_sublocation_of(buffer.location_id) + and move.location_dest_id.is_sublocation_of(buffer.location_id) + ) + ) + return out_buffers, in_buffers + + def _update_ddmrp_nfp(self): + if self.env.context.get("no_ddmrp_auto_update_nfp"): + return True + out_buffers, in_buffers = self._find_buffers_to_update_nfp() + for buffer in out_buffers.with_context(no_ddmrp_history=True): + buffer.cron_actions(only_nfp="out") + for buffer in in_buffers.with_context(no_ddmrp_history=True): + buffer.cron_actions(only_nfp="in") diff --git a/ddmrp/models/stock_move_line.py b/ddmrp/models/stock_move_line.py new file mode 100644 index 000000000..ea61d23ac --- /dev/null +++ b/ddmrp/models/stock_move_line.py @@ -0,0 +1,12 @@ +# Copyright 2021 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import fields, models + + +class StockMoveLine(models.Model): + _inherit = "stock.move.line" + + # Override to make '_compute_product_available_qty' method of + # 'stock.buffer' more efficient. + state = fields.Selection(index=True) diff --git a/ddmrp/models/stock_picking.py b/ddmrp/models/stock_picking.py new file mode 100644 index 000000000..d3d5d2a77 --- /dev/null +++ b/ddmrp/models/stock_picking.py @@ -0,0 +1,20 @@ +# Copyright 2020 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +from odoo import models + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + def action_stock_buffer_open(self): + """Open a stock.buffer list related to products of the stock.picking.""" + self.ensure_one() + domain = [ + ("product_id", "in", self.mapped("move_ids.product_id.id")), + ("company_id", "=", self.company_id.id), + ] + action = self.env["ir.actions.actions"]._for_xml_id("ddmrp.action_stock_buffer") + action["domain"] = domain + action["context"] = {"search_default_procure_recommended": 1} + return action diff --git a/ddmrp/models/stock_rule.py b/ddmrp/models/stock_rule.py new file mode 100644 index 000000000..1deff551f --- /dev/null +++ b/ddmrp/models/stock_rule.py @@ -0,0 +1,92 @@ +# Copyright 2018 Camptocamp (https://www.camptocamp.com) +# Copyright 2019-20 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import models + + +class StockRule(models.Model): + _inherit = "stock.rule" + + def _prepare_mo_vals( + self, + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + company_id, + values, + bom, + ): + result = super(StockRule, self)._prepare_mo_vals( + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + company_id, + values, + bom, + ) + # TODO: stock_orderpoint_mrp_link: tests! + if "buffer_id" in values: + result["buffer_id"] = values["buffer_id"].id + elif "buffer_ids" in values: + # We take the always first value as in case of chain procurements, + # the procurements are resolved first and then the moves are + # merged. Thus here we are going to have only one buffer in + # in buffer_ids. + result["buffer_id"] = values["buffer_ids"][0].id + return result + + def _run_manufacture(self, procurements): + super()._run_manufacture(procurements) + for procurement, _rule in procurements: + buffer = procurement.values.get("buffer_id") + if buffer: + buffer.sudo().cron_actions() + return True + + # TODO: stock_orderpoint_move_link: tests! + def _get_stock_move_values( + self, + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + company_id, + values, + ): + vals = super()._get_stock_move_values( + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + company_id, + values, + ) + if "buffer_id" in values: + vals["buffer_ids"] = [(4, values["buffer_id"].id)] + elif "buffer_ids" in values: + vals["buffer_ids"] = [(4, o.id) for o in values["buffer_ids"]] + return vals + + def _update_purchase_order_line( + self, product_id, product_qty, product_uom, company_id, values, line + ): + vals = super()._update_purchase_order_line( + product_id, product_qty, product_uom, company_id, values, line + ) + if "buffer_id" in values: + vals["buffer_ids"] = [(4, values["buffer_id"].id)] + # If the procurement was run by a stock move. + elif "buffer_ids" in values: + vals["buffer_ids"] = [(4, o.id) for o in values["buffer_ids"]] + return vals diff --git a/ddmrp/models/stock_warehouse.py b/ddmrp/models/stock_warehouse.py new file mode 100644 index 000000000..4c7138ea6 --- /dev/null +++ b/ddmrp/models/stock_warehouse.py @@ -0,0 +1,15 @@ +# Copyright 2018-20 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import fields, models + + +class StockWarehouse(models.Model): + _inherit = "stock.warehouse" + + nfp_incoming_safety_factor = fields.Float( + "Net Flow Position Incoming Safety Factor", + help="Factor used to compute the number of days to look into the " + "future for incoming shipments for the purposes of the Net " + "Flow position calculation.", + ) diff --git a/ddmrp/readme/CONFIGURE.rst b/ddmrp/readme/CONFIGURE.rst new file mode 100644 index 000000000..71e6dfb35 --- /dev/null +++ b/ddmrp/readme/CONFIGURE.rst @@ -0,0 +1,29 @@ +Scheduled actions +~~~~~~~~~~~~~~~~~ + +* Go to *Settings > Technical*. +* 'DDMRP Buffer ADU calculation'. Computes the Average Daily Usage for all + Buffers. +* 'Reordering Rule DDMRP calculation'. Computes the Qualified Demand, Net + Flow Position, Planning and Execution priorities for all Buffers. + +Decoupled Lead Time computation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The DLT is automatically computed by the system. + +For manufactured products' buffers just remember to provide and +set properly the following information: + +* The *Manufacturing Lead Time* for the manufactured product. It can be found + at the product form view under the tab *Sales*. +* The *Delivery Lead Time* for the preferred vendor of a product. This is + important for the products which are purchased and are components in any + Bill of Materials. + +For purchased/distributed products' buffers the logic is simpler. + +* In the first place the system will look if there are Vendors for the product, + if so it will use the *Delivery Lead Time* of the preferred one. +* In case of absence of vendors, the *Lead Time* at the bottom of the Buffer + form view will be used. diff --git a/ddmrp/readme/CONTRIBUTORS.rst b/ddmrp/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..f05aae028 --- /dev/null +++ b/ddmrp/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Jordi Ballester Alomar +* Lois Rilo Antelo +* Guewen Baconnier +* Adria Gil Sorribes +* Christopher Ormaza diff --git a/ddmrp/readme/CREDITS.rst b/ddmrp/readme/CREDITS.rst new file mode 100644 index 000000000..259e3b85f --- /dev/null +++ b/ddmrp/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The initial development of this module has been financially supported by: + +* Aleph Objects, Inc. diff --git a/ddmrp/readme/DESCRIPTION.rst b/ddmrp/readme/DESCRIPTION.rst new file mode 100644 index 000000000..3e3035a97 --- /dev/null +++ b/ddmrp/readme/DESCRIPTION.rst @@ -0,0 +1,56 @@ +Demand Driven Material Requirements Planning is a formal multi-echelon +planning and execution method developed by Ms. Carol Ptak and Mr. Chad Smith. + +DDMRP combines blended aspects of Material Requirements Planning (MRP), +Distribution Requirements Planning (DRP) with the pull and visibility +emphases found in Lean and the Theory of Constraints and the variability +reduction emphasis of Six Sigma. + +This method has five sequential components: + +#. *Strategic Inventory Positioning*. Answers the question "Given our system + and environment, where should we place inventory to have the best + protection?" and determines where should decoupling points of inventory be + placed. + +#. *Buffer Profiles and Levels*. Determine the amount of protection at those + decoupling points. + +#. *Dynamic Adjustments*. Allow the company to adapt buffers to group and + individual part trait changes over time through the use of several types + of adjustments. + +#. *Demand Driven Planning*. Allow to launch purchase orders (POs), + manufacturing orders (MOs) and Transfer Orders (TOs) based on the priority + dictated by the buffers. + +#. *Visible and Collaborative Execution*. These POs, MOs and TOs have to be + effectively managed to synchronize with the changes that often occur within + the "execution horizon." + +These five components work together to greatly dampen, if not eliminate, +the nervousness of traditional MRP systems and the bullwhip effect in +complex and challenging environments. + +This approach provides real information about those parts that are +truly at risk of negatively impacting the planned availability of inventory. + +DDMRP sorts the significant few items that require attention from +the many parts that are being managed. Under the DDMRP approach, +fewer planners can make better decisions more quickly. That means companies +will be better able to leverage their working and human capital. + +Demand Driven Material Requirements Planning is quickly being adopted +by a wide variety of leading companies across the world. + +Some of the benefits reported by the DDMRP method include: + +* High fill rate performance +* Lead time reductions +* Inventory reductions, while improving customer service +* Eliminate costs related to expedite +* Planners see priorities instead of constantly fighting the conflicting + messages of MRP + +It is highly recommended to read the book 'Demand Driven Material +Requirements Planning (DDMRP)' by Carol Ptak and Chad Smith. diff --git a/ddmrp/readme/HISTORY.rst b/ddmrp/readme/HISTORY.rst new file mode 100644 index 000000000..1e25a3f33 --- /dev/null +++ b/ddmrp/readme/HISTORY.rst @@ -0,0 +1,40 @@ +13.0.1.1.0 (2020-07-01) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Features** + +- - New setting *Update NFP on Stock Buffers on relevant events*. + - New dedicated settings block. (`#50 `_) + + +13.0.1.0.0 (2020-06-11) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [MIG/REF] Migration of module to v13 and refactor (added new dedicated model + for stock buffer). + +11.0.1.3.0 (2019-02-21) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [ADD] New chart that depict information about the supply and demand ( + displaying also de order spike threshold and horizon) for a buffer. + (`#40 `_) + +11.0.1.2.0 (2019-01-29) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [IMP] Performance improvement of execution priority calculation and ADU. + (`#36 `_) +* [IMP] Use the minimum quantity to adjust the procure recommendation. + (`#37 `_) + +11.0.1.1.0 (2018-08-31) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [IMP] Implemented Blended ADU calculation method. + (`#23 `_) + +11.0.1.0.0 (2018-07-16) +~~~~~~~~~~~~~~~~~~~~~~~ + +* Start of the history diff --git a/ddmrp/readme/INSTALL.rst b/ddmrp/readme/INSTALL.rst new file mode 100644 index 000000000..dcf9f762d --- /dev/null +++ b/ddmrp/readme/INSTALL.rst @@ -0,0 +1,7 @@ +We strongly recommend to modify the configuration of the reservation method +to manual in the outgoing operation types (so deliveries +related to Sales Orders aren't automatically reserved) and to avoid to +reserve stock for specific moves, buffers are in fact a reservation of stock. +However, while **reservation is discouraged**, it is still available to be +used, in case of reserved stock be aware that the buffer will be blind to this +transfers and stock and you are bypassing the DDMRP reordering flow. diff --git a/ddmrp/readme/ROADMAP.rst b/ddmrp/readme/ROADMAP.rst new file mode 100644 index 000000000..a53387e87 --- /dev/null +++ b/ddmrp/readme/ROADMAP.rst @@ -0,0 +1,3 @@ +The DDMRP `roadmap `_ +and `known issues `_ can +be found on GitHub. diff --git a/ddmrp/readme/USAGE.rst b/ddmrp/readme/USAGE.rst new file mode 100644 index 000000000..8e2cf00c2 --- /dev/null +++ b/ddmrp/readme/USAGE.rst @@ -0,0 +1,82 @@ +To easily identify were are you maintaining buffers in your Bill of +Materials, you will need to first provide location information on the Bills +of Materials. + +* Go to *Manufacturing / Products / Bill of Materials* and update the + 'Location' in all the Bill of Materials and associated lines, + indicating where will the parts be placed/used during the manufacturing + process. + +* Print the report 'BOM Structure' to display where in your BOM are you + maintaining buffers, and to identify the Lead Time (LT) of each product, and + Decouple Lead Time (DLT). + + +Buffers +~~~~~~~ + +To list the list of inventory buffers, go to one of the following: +* *Inventory / Master Data / Stock Buffer Planning* +* *Inventory / Master Data / Reordering Rules* + + +Buffer Profiles +~~~~~~~~~~~~~~~ +Buffer profiles make maintenance of buffers easier by grouping them in +profiles. Changes applied to the profiles will be applicable in the +associated buffer calculations. + +* Go to *Inventory / Configuration / Buffer Profiles*. + +The Buffer Profile Lead Time Factor influences the size of the Buffer Green +zone. Items with longer lead times will usually have smaller green zones, which +will translate in more frequent supply order generation. + +* Go to *Inventory / Configuration / Buffer Profile Lead Time Factor* to + chan + +The Buffer Profile Variability Factor influences the size of the Buffer Red +Safety zone. Items with longer lead times will usually have smaller green +zones, which will translate in more frequent supply order generation. + +* Go to *Inventory / Configuration / Buffer Profile Lead Time Factor*. + +Usual factors should range from 0.2 (long lead time) to 0.8 (short lead time). + + +Product attributes +~~~~~~~~~~~~~~~~~~ + +* For manufactured products, go to *Manufacturing / Products* and + update the 'Manufacturing Lead Time' field, available in the tab *Inventory*. +* For purchased products, go to go to *Purchasing / Products* and update the + *Delivery Lead Time* for each vendor, available in tab *Purchase* and section + *Vendors*. + + +ADU Calculation Methods +~~~~~~~~~~~~~~~~~~~~~~~ + +The Average Daily Usage (ADU) defines the frequency of demand of a product in a +certain location. It can be computed in different ways, which you can configure +with ADU calculation methods as follows: + +#. Go to *Inventory / Configuration / DDMRP / ADU calculation methods*. +#. Indicate a name, a calculation method (fixed, past-looking, + future-looking or blended). +#. Fill the corresponding period (past, future or both for blended method) to + specify the length of period consideration (in days). +#. Indicate the source of information: stock moves or demand estimates. +#. If you use the blended method fill also the *Past Factor* and + *Future Factor*. + +If you do not have prior history of stock moves in your system, it is advised +to use fixed method or start to work on future estimates. If you have +past-history of stock moves, best use past-looking method or blended method. + +The ADU is computed every day by default in a background job independently +from the other buffer fields. This computation can be done with less frequency +but it is not recommended to run it less than weekly or more than daily. +Circumstantially, If you need to force the calculation of the ADU go to +*Inventory / Configuration / DDMRP / Run DDMRP* and click on +*Run ADU calculation*. diff --git a/ddmrp/report/__init__.py b/ddmrp/report/__init__.py new file mode 100644 index 000000000..d5f0e0470 --- /dev/null +++ b/ddmrp/report/__init__.py @@ -0,0 +1 @@ +from . import mrp_report_bom_structure diff --git a/ddmrp/report/mrp_report_bom_structure.py b/ddmrp/report/mrp_report_bom_structure.py new file mode 100644 index 000000000..7e971fe42 --- /dev/null +++ b/ddmrp/report/mrp_report_bom_structure.py @@ -0,0 +1,97 @@ +# Copyright 2017-23 ForgeFlow S.L. (http://www.forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import api, models + + +class BomStructureReport(models.AbstractModel): + _inherit = "report.mrp.report_bom_structure" + + def _get_pdf_doc(self, bom_id, data, quantity, product_variant_id=None): + doc = super()._get_pdf_doc(bom_id, data, quantity, product_variant_id) + doc["show_buffered"] = ( + True if data and data.get("show_buffered") == "true" else False + ) + return doc + + @api.model + def _get_bom_data( + self, + bom, + warehouse, + product=False, + line_qty=False, + bom_line=False, + level=0, + parent_bom=False, + index=0, + product_info=False, + ignore_stock=False, + ): + res = super(BomStructureReport, self)._get_bom_data( + bom, + warehouse, + product=product, + line_qty=line_qty, + bom_line=bom_line, + level=level, + parent_bom=parent_bom, + index=index, + product_info=product_info, + ignore_stock=ignore_stock, + ) + res["is_buffered"] = bom.is_buffered + res["dlt"] = bom.dlt + return res + + @api.model + def _get_component_data( + self, + parent_bom, + warehouse, + bom_line, + line_quantity, + level, + index, + product_info, + ignore_stock=False, + ): + res = super(BomStructureReport, self)._get_component_data( + parent_bom, + warehouse, + bom_line, + line_quantity, + level, + index, + product_info, + ignore_stock=ignore_stock, + ) + if bom_line.product_id.bom_ids: + lead_time = bom_line.product_id.produce_delay + else: + lead_time = ( + bom_line.product_id.seller_ids + and bom_line.product_id.seller_ids[0].delay + or 0.0 + ) + res["is_buffered"] = bom_line.is_buffered + res["lead_time"] = lead_time or "" + res["dlt"] = bom_line.dlt + return res + + def _get_bom_array_lines( + self, data, level, unfolded_ids, unfolded, parent_unfolded + ): + lines = super()._get_bom_array_lines( + data, level, unfolded_ids, unfolded, parent_unfolded + ) + for component in data.get("components", []): + if not component["bom_id"]: + continue + bom_line = next( + filter(lambda l: l.get("bom_id", None) == component["bom_id"], lines) + ) + if bom_line: + bom_line["is_buffered"] = component["is_buffered"] + bom_line["dlt"] = component["dlt"] + return lines diff --git a/ddmrp/report/mrp_report_bom_structure.xml b/ddmrp/report/mrp_report_bom_structure.xml new file mode 100644 index 000000000..e5752e76e --- /dev/null +++ b/ddmrp/report/mrp_report_bom_structure.xml @@ -0,0 +1,43 @@ + + + + + diff --git a/ddmrp/security/ddmrp_groups.xml b/ddmrp/security/ddmrp_groups.xml new file mode 100644 index 000000000..fec557942 --- /dev/null +++ b/ddmrp/security/ddmrp_groups.xml @@ -0,0 +1,36 @@ + + + + + DDMRP + 40 + + + + Change quantity in manual procurements from Stock Buffers + + + + + + Stock Buffer Maintainer + + + + + + DDMRP Manager + + + + + + diff --git a/ddmrp/security/ddmrp_rules.xml b/ddmrp/security/ddmrp_rules.xml new file mode 100644 index 000000000..87d03cf0a --- /dev/null +++ b/ddmrp/security/ddmrp_rules.xml @@ -0,0 +1,43 @@ + + + + Buffer Profile Variability multi-company + + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + + Buffer Profile Lead Time multi-company + + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + + Buffer Profile multi-company + + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + + Product ADU calculation method multi-company + + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + + Stock Buffer multi-company + + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + diff --git a/ddmrp/security/ir.model.access.csv b/ddmrp/security/ir.model.access.csv new file mode 100644 index 000000000..7ecaadb9c --- /dev/null +++ b/ddmrp/security/ir.model.access.csv @@ -0,0 +1,17 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_product_adu_calculation_method,product.adu.calculation.method,model_product_adu_calculation_method,stock.group_stock_user,1,0,0,0 +access_product_adu_calculation_method_system,product.adu.calculation.method system,model_product_adu_calculation_method,ddmrp.group_ddmrp_manager,1,1,1,1 +access_stock_buffer_profile,stock.buffer.profile,model_stock_buffer_profile,stock.group_stock_user,1,0,0,0 +access_stock_buffer_profile_system,stock.buffer.profile system,model_stock_buffer_profile,ddmrp.group_ddmrp_manager,1,1,1,1 +access_stock_buffer_profile_lead_time,stock.buffer.profile.lead.time stock user,model_stock_buffer_profile_lead_time,stock.group_stock_user,1,0,0,0 +access_stock_buffer_profile_lead_time_manager,stock.buffer.profile.lead.time stock user,model_stock_buffer_profile_lead_time,ddmrp.group_ddmrp_manager,1,1,1,1 +access_stock_buffer_profile_variability,stock.buffer.profile.variability stock user,model_stock_buffer_profile_variability,stock.group_stock_user,1,0,0,0 +access_stock_buffer_profile_variability_manager,stock.buffer.profile.variability stock manager,model_stock_buffer_profile_variability,ddmrp.group_ddmrp_manager,1,1,1,1 +access_stock_buffer,stock.buffer.user,model_stock_buffer,stock.group_stock_user,1,0,0,0 +access_stock_buffer_manager,stock.buffer.manager,model_stock_buffer,ddmrp.group_stock_buffer_maintainer,1,1,1,1 +access_stock_buffer_procurements,stock.buffer.procurements.user,model_make_procurement_buffer,stock.group_stock_user,1,0,0,0 +access_stock_buffer_procurements_manager,stock.buffer.procurements.manager,model_make_procurement_buffer,stock.group_stock_manager,1,1,1,1 +access_stock_buffer_procurements_item,stock.buffer.procurements.item.user,model_make_procurement_buffer_item,stock.group_stock_user,1,0,0,0 +access_stock_buffer_procurements_item_manager,stock.buffer.procurements.item.manager,model_make_procurement_buffer_item,stock.group_stock_manager,1,1,1,1 +ddmrp_access_run,ddmrp.run,model_ddmrp_run,stock.group_stock_user,1,0,0,0 +ddmrp_access_run_manager,ddmrp.run.manager,model_ddmrp_run,stock.group_stock_manager,1,1,1,1 diff --git a/ddmrp/static/description/icon.png b/ddmrp/static/description/icon.png new file mode 100644 index 000000000..b911602f4 Binary files /dev/null and b/ddmrp/static/description/icon.png differ diff --git a/ddmrp/static/description/index.html b/ddmrp/static/description/index.html new file mode 100644 index 000000000..5bd149594 --- /dev/null +++ b/ddmrp/static/description/index.html @@ -0,0 +1,680 @@ + + + + + + +DDMRP + + + +
+

DDMRP

+ + +

Beta License: LGPL-3 OCA/ddmrp Translate me on Weblate Try me on Runbot

+

Demand Driven Material Requirements Planning is a formal multi-echelon +planning and execution method developed by Ms. Carol Ptak and Mr. Chad Smith.

+

DDMRP combines blended aspects of Material Requirements Planning (MRP), +Distribution Requirements Planning (DRP) with the pull and visibility +emphases found in Lean and the Theory of Constraints and the variability +reduction emphasis of Six Sigma.

+

This method has five sequential components:

+
    +
  1. Strategic Inventory Positioning. Answers the question “Given our system +and environment, where should we place inventory to have the best +protection?” and determines where should decoupling points of inventory be +placed.
  2. +
  3. Buffer Profiles and Levels. Determine the amount of protection at those +decoupling points.
  4. +
  5. Dynamic Adjustments. Allow the company to adapt buffers to group and +individual part trait changes over time through the use of several types +of adjustments.
  6. +
  7. Demand Driven Planning. Allow to launch purchase orders (POs), +manufacturing orders (MOs) and Transfer Orders (TOs) based on the priority +dictated by the buffers.
  8. +
  9. Visible and Collaborative Execution. These POs, MOs and TOs have to be +effectively managed to synchronize with the changes that often occur within +the “execution horizon.”
  10. +
+

These five components work together to greatly dampen, if not eliminate, +the nervousness of traditional MRP systems and the bullwhip effect in +complex and challenging environments.

+

This approach provides real information about those parts that are +truly at risk of negatively impacting the planned availability of inventory.

+

DDMRP sorts the significant few items that require attention from +the many parts that are being managed. Under the DDMRP approach, +fewer planners can make better decisions more quickly. That means companies +will be better able to leverage their working and human capital.

+

Demand Driven Material Requirements Planning is quickly being adopted +by a wide variety of leading companies across the world.

+

Some of the benefits reported by the DDMRP method include:

+
    +
  • High fill rate performance
  • +
  • Lead time reductions
  • +
  • Inventory reductions, while improving customer service
  • +
  • Eliminate costs related to expedite
  • +
  • Planners see priorities instead of constantly fighting the conflicting +messages of MRP
  • +
+

It is highly recommended to read the book ‘Demand Driven Material +Requirements Planning (DDMRP)’ by Carol Ptak and Chad Smith.

+

Table of contents

+ +
+

Installation

+

We strongly recommend to modify the configuration of the reservation method +to manual in the outgoing operation types (so deliveries +related to Sales Orders aren’t automatically reserved) and to avoid to +reserve stock for specific moves, buffers are in fact a reservation of stock. +However, while reservation is discouraged, it is still available to be +used, in case of reserved stock be aware that the buffer will be blind to this +transfers and stock and you are bypassing the DDMRP reordering flow.

+
+
+

Configuration

+
+

Scheduled actions

+
    +
  • Go to Settings > Technical.
  • +
  • ‘DDMRP Buffer ADU calculation’. Computes the Average Daily Usage for all +Buffers.
  • +
  • ‘Reordering Rule DDMRP calculation’. Computes the Qualified Demand, Net +Flow Position, Planning and Execution priorities for all Buffers.
  • +
+
+
+

Decoupled Lead Time computation

+

The DLT is automatically computed by the system.

+

For manufactured products’ buffers just remember to provide and +set properly the following information:

+
    +
  • The Manufacturing Lead Time for the manufactured product. It can be found +at the product form view under the tab Sales.
  • +
  • The Delivery Lead Time for the preferred vendor of a product. This is +important for the products which are purchased and are components in any +Bill of Materials.
  • +
+

For purchased/distributed products’ buffers the logic is simpler.

+
    +
  • In the first place the system will look if there are Vendors for the product, +if so it will use the Delivery Lead Time of the preferred one.
  • +
  • In case of absence of vendors, the Lead Time at the bottom of the Buffer +form view will be used.
  • +
+
+
+
+

Usage

+

To easily identify were are you maintaining buffers in your Bill of +Materials, you will need to first provide location information on the Bills +of Materials.

+
    +
  • Go to Manufacturing / Products / Bill of Materials and update the +‘Location’ in all the Bill of Materials and associated lines, +indicating where will the parts be placed/used during the manufacturing +process.
  • +
  • Print the report ‘BOM Structure’ to display where in your BOM are you +maintaining buffers, and to identify the Lead Time (LT) of each product, and +Decouple Lead Time (DLT).
  • +
+
+

Buffers

+

To list the list of inventory buffers, go to one of the following: +* Inventory / Master Data / Stock Buffer Planning +* Inventory / Master Data / Reordering Rules

+
+
+

Buffer Profiles

+

Buffer profiles make maintenance of buffers easier by grouping them in +profiles. Changes applied to the profiles will be applicable in the +associated buffer calculations.

+
    +
  • Go to Inventory / Configuration / Buffer Profiles.
  • +
+

The Buffer Profile Lead Time Factor influences the size of the Buffer Green +zone. Items with longer lead times will usually have smaller green zones, which +will translate in more frequent supply order generation.

+
    +
  • Go to Inventory / Configuration / Buffer Profile Lead Time Factor to +chan
  • +
+

The Buffer Profile Variability Factor influences the size of the Buffer Red +Safety zone. Items with longer lead times will usually have smaller green +zones, which will translate in more frequent supply order generation.

+
    +
  • Go to Inventory / Configuration / Buffer Profile Lead Time Factor.
  • +
+

Usual factors should range from 0.2 (long lead time) to 0.8 (short lead time).

+
+
+

Product attributes

+
    +
  • For manufactured products, go to Manufacturing / Products and +update the ‘Manufacturing Lead Time’ field, available in the tab Inventory.
  • +
  • For purchased products, go to go to Purchasing / Products and update the +Delivery Lead Time for each vendor, available in tab Purchase and section +Vendors.
  • +
+
+
+

ADU Calculation Methods

+

The Average Daily Usage (ADU) defines the frequency of demand of a product in a +certain location. It can be computed in different ways, which you can configure +with ADU calculation methods as follows:

+
    +
  1. Go to Inventory / Configuration / DDMRP / ADU calculation methods.
  2. +
  3. Indicate a name, a calculation method (fixed, past-looking, +future-looking or blended).
  4. +
  5. Fill the corresponding period (past, future or both for blended method) to +specify the length of period consideration (in days).
  6. +
  7. Indicate the source of information: stock moves or demand estimates.
  8. +
  9. If you use the blended method fill also the Past Factor and +Future Factor.
  10. +
+

If you do not have prior history of stock moves in your system, it is advised +to use fixed method or start to work on future estimates. If you have +past-history of stock moves, best use past-looking method or blended method.

+

The ADU is computed every day by default in a background job independently +from the other buffer fields. This computation can be done with less frequency +but it is not recommended to run it less than weekly or more than daily. +Circumstantially, If you need to force the calculation of the ADU go to +Inventory / Configuration / DDMRP / Run DDMRP and click on +Run ADU calculation.

+
+
+
+

Known issues / Roadmap

+

The DDMRP roadmap +and known issues can +be found on GitHub.

+
+
+

Changelog

+
+

13.0.1.1.0 (2020-07-01)

+

Features

+
    +
    • +
    • New setting Update NFP on Stock Buffers on relevant events.
    • +
    • New dedicated settings block. (#50)
    • +
    +
  • +
+
+
+

13.0.1.0.0 (2020-06-11)

+
    +
  • [MIG/REF] Migration of module to v13 and refactor (added new dedicated model +for stock buffer).
  • +
+
+
+

11.0.1.3.0 (2019-02-21)

+
    +
  • [ADD] New chart that depict information about the supply and demand ( +displaying also de order spike threshold and horizon) for a buffer. +(#40)
  • +
+
+
+

11.0.1.2.0 (2019-01-29)

+
    +
  • [IMP] Performance improvement of execution priority calculation and ADU. +(#36)
  • +
  • [IMP] Use the minimum quantity to adjust the procure recommendation. +(#37)
  • +
+
+
+

11.0.1.1.0 (2018-08-31)

+
    +
  • [IMP] Implemented Blended ADU calculation method. +(#23)
  • +
+
+
+

11.0.1.0.0 (2018-07-16)

+
    +
  • Start of the history
  • +
+
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

The initial development of this module has been financially supported by:

+
    +
  • Aleph Objects, Inc.
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

Current maintainers:

+

JordiBForgeFlow LoisRForgeFlow ChrisOForgeFlow

+

This module is part of the OCA/ddmrp project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/ddmrp/static/img/has_mto_rule.png b/ddmrp/static/img/has_mto_rule.png new file mode 100644 index 000000000..f568780bb Binary files /dev/null and b/ddmrp/static/img/has_mto_rule.png differ diff --git a/ddmrp/static/img/is_buffered.png b/ddmrp/static/img/is_buffered.png new file mode 100644 index 000000000..a0b0ed73a Binary files /dev/null and b/ddmrp/static/img/is_buffered.png differ diff --git a/ddmrp/static/img/res_partner_eficent-image.jpg b/ddmrp/static/img/res_partner_eficent-image.jpg new file mode 100644 index 000000000..0cb83687f Binary files /dev/null and b/ddmrp/static/img/res_partner_eficent-image.jpg differ diff --git a/ddmrp/static/img/res_partner_forgeflow-image.png b/ddmrp/static/img/res_partner_forgeflow-image.png new file mode 100644 index 000000000..40c8311b6 Binary files /dev/null and b/ddmrp/static/img/res_partner_forgeflow-image.png differ diff --git a/ddmrp/static/src/components/bom_overview/mrp_bom_overview.esm.js b/ddmrp/static/src/components/bom_overview/mrp_bom_overview.esm.js new file mode 100644 index 000000000..8d70e469d --- /dev/null +++ b/ddmrp/static/src/components/bom_overview/mrp_bom_overview.esm.js @@ -0,0 +1,20 @@ +/** @odoo-module **/ + +import {BomOverviewComponent} from "@mrp/components/bom_overview/mrp_bom_overview"; +import {patch} from "@web/core/utils/patch"; + +patch(BomOverviewComponent.prototype, "ddmrp", { + setup() { + this._super.apply(); + this.state.showOptions.is_buffered = true; + this.state.showOptions.dlt = true; + }, + + getReportName() { + return ( + this._super.apply(this, arguments) + + "&show_buffered=" + + this.state.showOptions.is_buffered + ); + }, +}); diff --git a/ddmrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.esm.js b/ddmrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.esm.js new file mode 100644 index 000000000..a1a18c851 --- /dev/null +++ b/ddmrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.esm.js @@ -0,0 +1,21 @@ +/** @odoo-module **/ + +import {BomOverviewDisplayFilter} from "@mrp/components/bom_overview_display_filter/mrp_bom_overview_display_filter"; +import {patch} from "@web/core/utils/patch"; + +patch(BomOverviewDisplayFilter.prototype, "ddmrp", { + setup() { + this._super.apply(); + this.displayOptions.is_buffered = this.env._t("Buffered"); + }, +}); + +patch(BomOverviewDisplayFilter, "ddmrp", { + props: { + ...BomOverviewDisplayFilter.props, + showOptions: { + ...BomOverviewDisplayFilter.showOptions, + is_buffered: Boolean, + }, + }, +}); diff --git a/ddmrp/static/src/components/bom_overview_line/mrp_bom_overview_line.esm.js b/ddmrp/static/src/components/bom_overview_line/mrp_bom_overview_line.esm.js new file mode 100644 index 000000000..2d2055a97 --- /dev/null +++ b/ddmrp/static/src/components/bom_overview_line/mrp_bom_overview_line.esm.js @@ -0,0 +1,14 @@ +/** @odoo-module **/ + +import {BomOverviewLine} from "@mrp/components/bom_overview_line/mrp_bom_overview_line"; +import {patch} from "@web/core/utils/patch"; + +patch(BomOverviewLine, "ddmrp", { + props: { + ...BomOverviewLine.props, + showOptions: { + ...BomOverviewLine.showOptions, + is_buffered: Boolean, + }, + }, +}); diff --git a/ddmrp/static/src/components/bom_overview_line/mrp_bom_overview_line.xml b/ddmrp/static/src/components/bom_overview_line/mrp_bom_overview_line.xml new file mode 100644 index 000000000..c98ac4bc0 --- /dev/null +++ b/ddmrp/static/src/components/bom_overview_line/mrp_bom_overview_line.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + Days + + + + + diff --git a/ddmrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.esm.js b/ddmrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.esm.js new file mode 100644 index 000000000..90063ce90 --- /dev/null +++ b/ddmrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.esm.js @@ -0,0 +1,14 @@ +/** @odoo-module **/ + +import {BomOverviewSpecialLine} from "@mrp/components/bom_overview_special_line/mrp_bom_overview_special_line"; +import {patch} from "@web/core/utils/patch"; + +patch(BomOverviewSpecialLine, "ddmrp", { + props: { + ...BomOverviewSpecialLine.props, + showOptions: { + ...BomOverviewSpecialLine.showOptions, + is_buffered: Boolean, + }, + }, +}); diff --git a/ddmrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.xml b/ddmrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.xml new file mode 100644 index 000000000..2e0c8ade8 --- /dev/null +++ b/ddmrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/ddmrp/static/src/components/bom_overview_table/mrp_bom_overview_table.esm.js b/ddmrp/static/src/components/bom_overview_table/mrp_bom_overview_table.esm.js new file mode 100644 index 000000000..745d7c03f --- /dev/null +++ b/ddmrp/static/src/components/bom_overview_table/mrp_bom_overview_table.esm.js @@ -0,0 +1,22 @@ +/** @odoo-module **/ + +import {BomOverviewTable} from "@mrp/components/bom_overview_table/mrp_bom_overview_table"; +import {patch} from "@web/core/utils/patch"; + +patch(BomOverviewTable.prototype, "ddmrp", { + // ---- Getters ---- + + get showBuffered() { + return this.props.showOptions.is_buffered; + }, +}); + +patch(BomOverviewTable, "ddmrp", { + props: { + ...BomOverviewTable.props, + showOptions: { + ...BomOverviewTable.showOptions, + is_buffered: Boolean, + }, + }, +}); diff --git a/ddmrp/static/src/components/bom_overview_table/mrp_bom_overview_table.xml b/ddmrp/static/src/components/bom_overview_table/mrp_bom_overview_table.xml new file mode 100644 index 000000000..1ef2b9643 --- /dev/null +++ b/ddmrp/static/src/components/bom_overview_table/mrp_bom_overview_table.xml @@ -0,0 +1,36 @@ + + + + + + Buffered + + + DLT + + + + + + + + + + + + + + + + + + diff --git a/ddmrp/static/src/scss/stock_buffer_info.scss b/ddmrp/static/src/scss/stock_buffer_info.scss new file mode 100644 index 000000000..fd5e675a7 --- /dev/null +++ b/ddmrp/static/src/scss/stock_buffer_info.scss @@ -0,0 +1,27 @@ +.circle { + padding: 0.3em 0.7em; + border-radius: 25em; + display: inline-cell; +} +.circle_dark_red { + background-color: #8b0000; + color: white; +} +.circle_red { + background-color: #ff0000; + color: white; +} +.circle_yellow { + background-color: #ffff00; + color: black; +} +.circle_green { + background-color: #33cc33; + color: white; +} +.popover { + display: inline-table; +} +body.with-scrollbar { + overflow-y: scroll; +} diff --git a/ddmrp/static/src/widgets/stock_buffer_info.esm.js b/ddmrp/static/src/widgets/stock_buffer_info.esm.js new file mode 100644 index 000000000..fc44d81cc --- /dev/null +++ b/ddmrp/static/src/widgets/stock_buffer_info.esm.js @@ -0,0 +1,167 @@ +/** @odoo-module **/ + +import {FloatField} from "@web/views/fields/float/float_field"; +import {formatDateTime} from "@web/core/l10n/dates"; +import {loadBundle} from "@web/core/assets"; +import {localization} from "@web/core/l10n/localization"; +import {registry} from "@web/core/registry"; +import {usePopover} from "@web/core/popover/popover_hook"; +import {useService} from "@web/core/utils/hooks"; + +const {Component, EventBus, onWillRender, onWillStart, markup} = owl; + +export class StockBufferPopover extends Component { + setup() { + this.actionService = useService("action"); + onWillStart(() => + loadBundle({ + jsLibs: [ + "/web_widget_bokeh_chart/static/src/lib/bokeh/bokeh-3.1.1.min.js", + "/web_widget_bokeh_chart/static/src/lib/bokeh/bokeh-api-3.1.1.min.js", + "/web_widget_bokeh_chart/static/src/lib/bokeh/bokeh-widgets-3.1.1.min.js", + "/web_widget_bokeh_chart/static/src/lib/bokeh/bokeh-tables-3.1.1.min.js", + "/web_widget_bokeh_chart/static/src/lib/bokeh/bokeh-mathjax-3.1.1.min.js", + "/web_widget_bokeh_chart/static/src/lib/bokeh/bokeh-gl-3.1.1.min.js", + ], + }) + ); + } + get json_value() { + try { + var value = JSON.parse(this.props.record.data[this.props.field]); + value.div = markup(value.div.trim()); + return value; + } catch (error) { + return {}; + } + } + + openForecast() { + this.actionService.doAction( + "stock.stock_replenishment_product_product_action", + { + additionalContext: { + active_model: "product.product", + active_id: this.props.record.data.product_id[0], + warehouse: + this.props.record.data.warehouse_id && + this.props.record.data.warehouse_id[0], + move_to_match_ids: this.props.record.data.move_ids.records.map( + (record) => record.data.id + ), + sale_line_to_match_id: this.props.record.data.id, + }, + } + ); + } +} +StockBufferPopover.template = "ddmrp.StockBufferPopover"; + +export class StockBufferInfoWidget extends FloatField { + setup() { + super.setup(); + this.bus = new EventBus(); + this.popover = usePopover(); + this.closePopover = null; + this.calcData = {}; + onWillRender(() => { + this.initCalcData(); + }); + } + + get classFromDecoration() { + var decorationName = this.props.record.data[this.props.color_from]; + if (decorationName !== "" && decorationName.length > 1) { + decorationName = "circle" + decorationName.slice(1); + return `${decorationName}`; + } + return ""; + } + + initCalcData() { + // Calculate data not in record + const {data} = this.props.record; + if (data.scheduled_date) { + // TODO: might need some round_decimals to avoid errors + if (data.state === "sale") { + this.calcData.will_be_fulfilled = + data.free_qty_today >= data.qty_to_deliver; + } else { + this.calcData.will_be_fulfilled = + data.virtual_available_at_date >= data.qty_to_deliver; + } + this.calcData.will_be_late = + data.forecast_expected_date && + data.forecast_expected_date > data.scheduled_date; + if (["draft", "sent"].includes(data.state)) { + // Moves aren't created yet, then the forecasted is only based on virtual_available of quant + this.calcData.forecasted_issue = + !this.calcData.will_be_fulfilled && !data.is_mto; + } else { + // Moves are created, using the forecasted data of related moves + this.calcData.forecasted_issue = + !this.calcData.will_be_fulfilled || this.calcData.will_be_late; + } + } + } + + updateCalcData() { + // Popup specific data + const {data} = this.props.record; + if (!data.scheduled_date) { + return; + } + this.calcData.delivery_date = formatDateTime(data.scheduled_date, { + format: localization.dateFormat, + }); + if (data.forecast_expected_date) { + this.calcData.forecast_expected_date_str = formatDateTime( + data.forecast_expected_date, + {format: localization.dateFormat} + ); + } + } + + showPopup(ev) { + ev.stopPropagation(); + ev.preventDefault(); + this.updateCalcData(); + this.closePopover = this.popover.add( + ev.currentTarget, + this.constructor.components.Popover, + { + bus: this.bus, + record: this.props.record, + calcData: this.calcData, + field: this.props.field, + color_from: this.props.color_from, + }, + { + position: "right", + } + ); + this.bus.addEventListener("close-popover", this.closePopover); + } +} + +StockBufferInfoWidget.components = { + ...StockBufferInfoWidget.components, + Popover: StockBufferPopover, +}; +StockBufferInfoWidget.template = "ddmrp.StockBufferInfoWidget"; + +StockBufferInfoWidget.props = { + ...StockBufferInfoWidget.props, + color_from: {type: String, optional: true}, + field: {type: String, optional: true}, +}; + +const StockBufferInfoWidgetExtractProps = StockBufferInfoWidget.extractProps; +StockBufferInfoWidget.extractProps = ({attrs, field}) => { + return Object.assign(StockBufferInfoWidgetExtractProps({attrs, field}), { + color_from: attrs.options.color_from, + field: attrs.options.field, + }); +}; + +registry.category("fields").add("stock_buffer_info", StockBufferInfoWidget); diff --git a/ddmrp/static/src/widgets/stock_buffer_info.xml b/ddmrp/static/src/widgets/stock_buffer_info.xml new file mode 100644 index 000000000..7aa88dd24 --- /dev/null +++ b/ddmrp/static/src/widgets/stock_buffer_info.xml @@ -0,0 +1,24 @@ + +