diff --git a/setup/stock_request_kanban/odoo/addons/stock_request_kanban b/setup/stock_request_kanban/odoo/addons/stock_request_kanban new file mode 120000 index 000000000..ced508630 --- /dev/null +++ b/setup/stock_request_kanban/odoo/addons/stock_request_kanban @@ -0,0 +1 @@ +../../../../stock_request_kanban \ No newline at end of file diff --git a/setup/stock_request_kanban/setup.py b/setup/stock_request_kanban/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/stock_request_kanban/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/stock_request_kanban/README.rst b/stock_request_kanban/README.rst new file mode 100644 index 000000000..960ae5774 --- /dev/null +++ b/stock_request_kanban/README.rst @@ -0,0 +1,134 @@ +==================== +Stock Request kanban +==================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fstock--logistics--warehouse-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_request_kanban + :alt: OCA/stock-logistics-warehouse +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-13-0/stock-logistics-warehouse-13-0-stock_request_kanban + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/153/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +On most companies there is products that must be purchased often but cannot be +stored as a usual product because no consumption moves are made. +Usually, they are stored as consumables or putaway rules are defined. +In both cases, reordering rules cannot be used. +This module allows to use stock request as reordering rules for this kind of +products. + +It is created following the concept of lean kanban cards. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +If the barcode does not contain a CRC check digit on the kanban card, you should: + +* Access on Development mode +* Access 'Settings / Technical / Parameters / System Parameters' +* Create a parameter with name 'stock_request_kanban.crc' and set it to value to 0 + +If the barcode contains a CRC check digit and you want to ignore it: + +* Create a paramenter with name 'stock_request_kanban.ignore_crc' and set it to value to 1 + +If you want to change the format of the QR, you should: + +* Access on Development mode +* Access 'Settings / Technical / Parameters / System Parameters' +* Create a parameter with name 'stock_request_kanban.barcode_format' and set + the format of the barcode + +Usage +===== + +Creation +~~~~~~~~ + +* Go to 'Stock Requests / Stock Requests Kanban' and create a new Kanban. +* Indicate a product, quantity and location. +* Press 'Save'. +* Print the kanban and put it in the storage of the product + +Request kanban +~~~~~~~~~~~~~~ + +This should be used if you want to create the kanban when the card is consumed. + +* Once the product is consumed, take the card +* Go to 'Stock Requests / Order Kanban Card' +* Scan the card +* The stock request is created + +Request kanban batch +~~~~~~~~~~~~~~~~~~~~ + +This should be used when you will store the cards and create request orders +for kanbans later. + +* Once the product is consumed, take the card and store it +* Create a store request order +* Press the scan button +* Scan all the pending kanban cards + +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 +~~~~~~~ + +* Creu Blanca +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella +* Kitti Upariphutthiphong + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/stock-logistics-warehouse `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_request_kanban/__init__.py b/stock_request_kanban/__init__.py new file mode 100644 index 000000000..22ba14540 --- /dev/null +++ b/stock_request_kanban/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2018 Creu Blanca +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from . import models +from . import wizard diff --git a/stock_request_kanban/__manifest__.py b/stock_request_kanban/__manifest__.py new file mode 100644 index 000000000..862f1302f --- /dev/null +++ b/stock_request_kanban/__manifest__.py @@ -0,0 +1,31 @@ +# Copyright 2018 Creu Blanca +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +{ + "name": "Stock Request kanban", + "version": "14.0.1.0.0", + "category": "Warehouse Management", + "website": "https://github.com/OCA/stock-logistics-warehouse", + "author": "Creu Blanca, ForgeFlow, Odoo Community Association (OCA)", + "license": "LGPL-3", + "summary": "Adds a stock request order, and takes stock requests as lines", + "depends": ["stock_request", "barcodes"], + "data": [ + "data/stock_request_sequence_data.xml", + "report/report_paper_format.xml", + "wizard/wizard_stock_inventory_kanban_views.xml", + "wizard/wizard_stock_request_kanban_views.xml", + "wizard/wizard_stock_request_order_kanban_views.xml", + "views/stock_request_order_views.xml", + "views/stock_request_kanban_views.xml", + "views/stock_inventory_kanban_views.xml", + "views/stock_request_menu.xml", + "views/stock_request_views.xml", + "views/product_views.xml", + "report/stock_request_kanban_templates.xml", + "security/ir.model.access.csv", + ], + "qweb": ["static/src/xml/stock_request_kanban_scan.xml"], + "installable": True, + "application": False, +} diff --git a/stock_request_kanban/data/stock_request_sequence_data.xml b/stock_request_kanban/data/stock_request_sequence_data.xml new file mode 100644 index 000000000..04d8d3843 --- /dev/null +++ b/stock_request_kanban/data/stock_request_sequence_data.xml @@ -0,0 +1,19 @@ + + + + + Stock Request Kanban + stock.request.kanban + KB + 5 + + + + Stock Inventory Kanban + stock.inventory.kanban + IKB + 5 + + + + diff --git a/stock_request_kanban/i18n/es.po b/stock_request_kanban/i18n/es.po new file mode 100644 index 000000000..c3c3548b5 --- /dev/null +++ b/stock_request_kanban/i18n/es.po @@ -0,0 +1,774 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_request_kanban +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-09-06 11:53+0000\n" +"Last-Translator: Enric Tobella \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.1.1\n" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_product_product__kanban_card_count +#: model:ir.model.fields,field_description:stock_request_kanban.field_product_template__kanban_card_count +#, fuzzy +msgid "# Kanban Cards" +msgstr "Tarjetas Kanban" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_needaction +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__active +msgid "Active" +msgstr "Activo" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_ids +#, fuzzy +msgid "Activities" +msgstr "Activo" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_exception_decoration +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_state +#, fuzzy +msgid "Activity State" +msgstr "Estado del Status" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_inventory_kanban_action +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_request_kanban_action +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_request_order_kanban_action +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_request_kanban_form +msgid "Add Kanban" +msgstr "Añadir Kanban" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_kanban.py:0 +#, python-format +msgid "Added kanban %s for product %s" +msgstr "Se ha añadido el kanban %s para el product %s" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__allow_virtual_location +msgid "Allow Virtual locations on Stock Requests" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Archived" +msgstr "Archivado" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_attachment_count +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_kanban_abstract.py:0 +#, python-format +msgid "" +"Barcode %s does not correspond to any Kanban. Try with another barcode or " +"press Close to finish scanning." +msgstr "" +"El código de barras %s no corresponde a ningún Kanban. Prueba otro código de " +"barras o haz click en Cerrar para acabar de escanear." + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_inventory_kanban.py:0 +#, fuzzy, python-format +msgid "Barcode %s is already scanned" +msgstr "El código %s ya está en la petición" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_inventory_kanban.py:0 +#, fuzzy, python-format +msgid "Barcode %s is not in the inventory" +msgstr "El código %s ya está en la petición" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Barcode %s is on the order" +msgstr "El código %s ya está en la petición" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban___barcode_scanned +#, fuzzy +msgid "Barcode Scanned" +msgstr "El código %s ya está en la petición" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/models/stock_request_kanban.py:0 +#, python-format +msgid "CRC is not valid" +msgstr "El CRC no es válido" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Cancel" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__cancelled +msgid "Cancelled" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.actions.act_window,help:stock_request_kanban.stock_inventory_kanban_action +#, fuzzy +msgid "Click to add a Stock Inventory Kanban." +msgstr "Haz click para añadir un Kanban." + +#. module: stock_request_kanban +#: model_terms:ir.actions.act_window,help:stock_request_kanban.stock_request_kanban_action +msgid "Click to add a Stock Request Kanban." +msgstr "Haz click para añadir un Kanban." + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_request_kanban_form +msgid "Close" +msgstr "Cerrar" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__closed +#, fuzzy +msgid "Closed" +msgstr "Cerrar" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__company_id +msgid "Company" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Company must be the same" +msgstr "La Compañía debe ser la misma" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__draft +msgid "Draft" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Finish" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__finished +msgid "Finished" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_follower_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_channel_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_partner_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__id +msgid "ID" +msgstr "ID" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_exception_icon +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_exception_icon +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_sms_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__in_progress +msgid "In progress" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.menu_wizard_stock_inventory_kanban +msgid "Inventory" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__inventory_kanban_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Inventory Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_inventory_kanban +msgid "Inventory for Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_is_follower +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__kanban_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__kanban_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Kanban" +msgstr "Kanban" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.product_product_form_view_kanban_card_button +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.product_template_form_view_bom_button +#, fuzzy +msgid "Kanban Cards" +msgstr "Tarjetas Kanban" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_kanban_view +#, fuzzy +msgid "Kanban Image" +msgstr "Tarjetas Kanban" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.stock_request_kanban_menu +msgid "Kanban cards" +msgstr "Tarjetas Kanban" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__write_uid +msgid "Last Updated by" +msgstr "Actualizado por última vez por" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__write_date +msgid "Last Updated on" +msgstr "Actualizado por última vez el" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Lines only can be added on orders with draft state" +msgstr "Sólo se pueden añadir líneas en ordenes en estado borrador" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__location_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__location_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Location" +msgstr "Localización" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Location must be the same" +msgstr "La localización debe coincidir" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_main_attachment_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_error +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_ids +msgid "Messages" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Missing" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__missing_kanban_ids +#, fuzzy +msgid "Missing Kanban" +msgstr "Imprimir kanban" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__count_missing_kanbans +msgid "Missing Kanbans" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__procurement_group_id +msgid "" +"Moves created through this stock request will be put in this procurement " +"group. If none is given, the moves generated by procurement rules will be " +"grouped into one big picking." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__name +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__name +msgid "Name" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_date_deadline +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_summary +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_type_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_needaction_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_error_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_needaction_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_error_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_unread_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__order_id +msgid "Order" +msgstr "Pedido" + +#. module: stock_request_kanban +#: model:ir.actions.report,name:stock_request_kanban.action_report_kanban +msgid "Print kanban" +msgstr "Imprimir kanban" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Print missing" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__procurement_group_id +#, fuzzy +msgid "Procurement Group" +msgstr "El grupo de reestablecimiento debe coincidir" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Procurement group must be the same" +msgstr "El grupo de reestablecimiento debe coincidir" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_product_product +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_id +msgid "Product" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_product_template +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_template_id +msgid "Product Template" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_uom_id +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__product_ids +msgid "Products" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_uom_qty +msgid "Quantity" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__product_qty +msgid "Quantity in the default UoM of the product" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__product_uom_qty +msgid "Quantity, specified in the unit of measure indicated in the request." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_qty +msgid "Real Quantity" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.menu_wizard_stock_request_kanban +msgid "Request from Kanban cards" +msgstr "Solicitar desde tarjetas Kanban" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_user_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__route_id +msgid "Route" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__route_ids +msgid "Routes" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_sms_error +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_order_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Scan" +msgstr "Escanear" + +#. module: stock_request_kanban +#. openerp-web +#: code:addons/stock_request_kanban/static/src/xml/stock_request_kanban_scan.xml:0 +#, fuzzy, python-format +msgid "Scan Kanban" +msgstr "Añadir Kanban" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +#, fuzzy +msgid "Scanned" +msgstr "Escanear" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__scanned_kanban_ids +#, fuzzy +msgid "Scanned Kanban" +msgstr "Añadir Kanban" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Set to draft" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Start" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__state +#, fuzzy +msgid "State" +msgstr "Status" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__status +msgid "Status" +msgstr "Status" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__status_state +msgid "Status State" +msgstr "Estado del Status" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_state +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_tree +#, fuzzy +msgid "Stock Inventories" +msgstr "Solicitud de existencias" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_inventory_kanban +#, fuzzy +msgid "Stock Inventory Kanban Wizard" +msgstr "Kanbans de Solicitud de Existencias" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.stock_inventory_kanban_action +#, fuzzy +msgid "Stock Inventory Kanbans" +msgstr "Kanbans de Solicitud de Existencias" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_request +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__stock_request_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__stock_request_id +msgid "Stock Request" +msgstr "Solicitud de existencias" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_form +msgid "Stock Request Kanban" +msgstr "Kanban de Solicitud de Existencias" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban_abstract +#, fuzzy +msgid "Stock Request Kanban Abstract Wizard" +msgstr "Kanbans de Solicitud de Existencias" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban +#, fuzzy +msgid "Stock Request Kanban Wizard" +msgstr "Kanban de Solicitud de Existencias" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.stock_request_kanban_action +msgid "Stock Request Kanbans" +msgstr "Kanbans de Solicitud de Existencias" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_order_kanban +#, fuzzy +msgid "Stock Request Order Kanban Wizard" +msgstr "Kanban de Solicitud de Existencias" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_tree +msgid "Stock Requests" +msgstr "Solicitudes de existencias" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Stock Requests Kanban" +msgstr "Kanban de Solicitudes de Existencias" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_exception_decoration +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_unread_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_inventory_kanban___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_kanban___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_kanban_abstract___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_order_kanban___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__warehouse_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__warehouse_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Warehouse" +msgstr "Almacén" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Warehouse must be the same" +msgstr "El almacén debe coincidir" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__website_message_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__website_message_ids +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__website_message_ids +msgid "Website communication history" +msgstr "" + +#, fuzzy +#~ msgid "Planned" +#~ msgstr "Escanear" + +#, fuzzy +#~ msgid "wizard.stock.inventory.kanban" +#~ msgstr "wizard.stock.request.kanban" + +#~ msgid "wizard.stock.request.kanban" +#~ msgstr "wizard.stock.request.kanban" + +#~ msgid "wizard.stock.request.kanban.abstract" +#~ msgstr "wizard.stock.request.kanban.abstract" + +#~ msgid "wizard.stock.request.order.kanban" +#~ msgstr "wizard.stock.request.order.kanban" diff --git a/stock_request_kanban/i18n/stock_request_kanban.pot b/stock_request_kanban/i18n/stock_request_kanban.pot new file mode 100644 index 000000000..afe35b89f --- /dev/null +++ b/stock_request_kanban/i18n/stock_request_kanban.pot @@ -0,0 +1,733 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_request_kanban +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.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: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_product_product__kanban_card_count +#: model:ir.model.fields,field_description:stock_request_kanban.field_product_template__kanban_card_count +msgid "# Kanban Cards" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_needaction +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__active +msgid "Active" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_ids +msgid "Activities" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_exception_decoration +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_state +msgid "Activity State" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_inventory_kanban_action +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_request_kanban_action +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_request_order_kanban_action +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_request_kanban_form +msgid "Add Kanban" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_kanban.py:0 +#, python-format +msgid "Added kanban %s for product %s" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__allow_virtual_location +msgid "Allow Virtual locations on Stock Requests" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Archived" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_attachment_count +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_kanban_abstract.py:0 +#, python-format +msgid "" +"Barcode %s does not correspond to any Kanban. Try with another barcode or " +"press Close to finish scanning." +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_inventory_kanban.py:0 +#, python-format +msgid "Barcode %s is already scanned" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_inventory_kanban.py:0 +#, python-format +msgid "Barcode %s is not in the inventory" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Barcode %s is on the order" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/models/stock_request_kanban.py:0 +#, python-format +msgid "CRC is not valid" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Cancel" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__cancelled +msgid "Cancelled" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.actions.act_window,help:stock_request_kanban.stock_inventory_kanban_action +msgid "Click to add a Stock Inventory Kanban." +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.actions.act_window,help:stock_request_kanban.stock_request_kanban_action +msgid "Click to add a Stock Request Kanban." +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_request_kanban_form +msgid "Close" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__closed +msgid "Closed" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__company_id +msgid "Company" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Company must be the same" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__create_date +msgid "Created on" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__draft +msgid "Draft" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Finish" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__finished +msgid "Finished" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_follower_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_channel_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_partner_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Group By" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__id +msgid "ID" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_exception_icon +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_exception_icon +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_sms_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__in_progress +msgid "In progress" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.menu_wizard_stock_inventory_kanban +msgid "Inventory" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__inventory_kanban_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Inventory Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_inventory_kanban +msgid "Inventory for Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_is_follower +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__kanban_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__kanban_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.product_product_form_view_kanban_card_button +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.product_template_form_view_bom_button +msgid "Kanban Cards" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_kanban_view +msgid "Kanban Image" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.stock_request_kanban_menu +msgid "Kanban cards" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban____last_update +msgid "Last Modified on" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Lines only can be added on orders with draft state" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__location_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__location_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Location" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Location must be the same" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_main_attachment_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_error +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_ids +msgid "Messages" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Missing" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__missing_kanban_ids +msgid "Missing Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__count_missing_kanbans +msgid "Missing Kanbans" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__procurement_group_id +msgid "" +"Moves created through this stock request will be put in this procurement " +"group. If none is given, the moves generated by procurement rules will be " +"grouped into one big picking." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__name +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__name +msgid "Name" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_date_deadline +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_summary +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_type_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_needaction_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_error_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_needaction_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_error_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_unread_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__order_id +msgid "Order" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.actions.report,name:stock_request_kanban.action_report_kanban +msgid "Print kanban" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Print missing" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__procurement_group_id +msgid "Procurement Group" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Procurement group must be the same" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_product_product +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_id +msgid "Product" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_product_template +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_template_id +msgid "Product Template" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_uom_id +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__product_ids +msgid "Products" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_uom_qty +msgid "Quantity" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__product_qty +msgid "Quantity in the default UoM of the product" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__product_uom_qty +msgid "Quantity, specified in the unit of measure indicated in the request." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_qty +msgid "Real Quantity" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.menu_wizard_stock_request_kanban +msgid "Request from Kanban cards" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_user_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__route_id +msgid "Route" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__route_ids +msgid "Routes" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_sms_error +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_order_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Scan" +msgstr "" + +#. module: stock_request_kanban +#. openerp-web +#: code:addons/stock_request_kanban/static/src/xml/stock_request_kanban_scan.xml:0 +#, python-format +msgid "Scan Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Scanned" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__scanned_kanban_ids +msgid "Scanned Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Set to draft" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Start" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__state +msgid "State" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__status +msgid "Status" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__status_state +msgid "Status State" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_state +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_tree +msgid "Stock Inventories" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_inventory_kanban +msgid "Stock Inventory Kanban Wizard" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.stock_inventory_kanban_action +msgid "Stock Inventory Kanbans" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_request +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__stock_request_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__stock_request_id +msgid "Stock Request" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_form +msgid "Stock Request Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban_abstract +msgid "Stock Request Kanban Abstract Wizard" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban +msgid "Stock Request Kanban Wizard" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.stock_request_kanban_action +msgid "Stock Request Kanbans" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_order_kanban +msgid "Stock Request Order Kanban Wizard" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_tree +msgid "Stock Requests" +msgstr "" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Stock Requests Kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_exception_decoration +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_unread_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_inventory_kanban___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_kanban___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_kanban_abstract___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_order_kanban___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__warehouse_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__warehouse_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Warehouse" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Warehouse must be the same" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__website_message_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__website_message_ids +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__website_message_ids +msgid "Website communication history" +msgstr "" diff --git a/stock_request_kanban/i18n/zh_CN.po b/stock_request_kanban/i18n/zh_CN.po new file mode 100644 index 000000000..83e5f908c --- /dev/null +++ b/stock_request_kanban/i18n/zh_CN.po @@ -0,0 +1,775 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_request_kanban +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-10-16 15:58+0000\n" +"Last-Translator: 黎伟杰 <674416404@qq.com>\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 3.8\n" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_product_product__kanban_card_count +#: model:ir.model.fields,field_description:stock_request_kanban.field_product_template__kanban_card_count +#, fuzzy +msgid "# Kanban Cards" +msgstr "看板卡" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_needaction +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_needaction +msgid "Action Needed" +msgstr "需要采取行动" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__active +msgid "Active" +msgstr "有效" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_ids +msgid "Activities" +msgstr "活动" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_exception_decoration +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_state +msgid "Activity State" +msgstr "活动状态" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_inventory_kanban_action +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_request_kanban_action +#: model:ir.actions.act_window,name:stock_request_kanban.wizard_stock_request_order_kanban_action +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_request_kanban_form +msgid "Add Kanban" +msgstr "添加看板" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_kanban.py:0 +#, python-format +msgid "Added kanban %s for product %s" +msgstr "为产品%s添加了看板%s" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__allow_virtual_location +msgid "Allow Virtual locations on Stock Requests" +msgstr "允许库存请求中的虚拟位置" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Archived" +msgstr "已归档" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_attachment_count +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_attachment_count +msgid "Attachment Count" +msgstr "附件数量" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_kanban_abstract.py:0 +#, python-format +msgid "" +"Barcode %s does not correspond to any Kanban. Try with another barcode or " +"press Close to finish scanning." +msgstr "条形码%s与任何看板都不对应。尝试使用其他条形码或按“关闭”完成扫描。" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_inventory_kanban.py:0 +#, python-format +msgid "Barcode %s is already scanned" +msgstr "条码%s已被扫描" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_inventory_kanban.py:0 +#, python-format +msgid "Barcode %s is not in the inventory" +msgstr "条码%s不在库存中" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Barcode %s is on the order" +msgstr "条码%s在订单上" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract___barcode_scanned +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban___barcode_scanned +msgid "Barcode Scanned" +msgstr "条码扫描" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/models/stock_request_kanban.py:0 +#, python-format +msgid "CRC is not valid" +msgstr "CRC无效" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Cancel" +msgstr "取消" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__cancelled +msgid "Cancelled" +msgstr "已取消" + +#. module: stock_request_kanban +#: model_terms:ir.actions.act_window,help:stock_request_kanban.stock_inventory_kanban_action +msgid "Click to add a Stock Inventory Kanban." +msgstr "点击添加库存看板。" + +#. module: stock_request_kanban +#: model_terms:ir.actions.act_window,help:stock_request_kanban.stock_request_kanban_action +msgid "Click to add a Stock Request Kanban." +msgstr "点击添加库存请求看板。" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.wizard_stock_request_kanban_form +msgid "Close" +msgstr "关闭" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__closed +msgid "Closed" +msgstr "已关闭" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__company_id +msgid "Company" +msgstr "公司" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Company must be the same" +msgstr "公司必须相同" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__create_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__create_uid +msgid "Created by" +msgstr "创建者" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__create_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__create_date +msgid "Created on" +msgstr "创建时间" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__display_name +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__draft +msgid "Draft" +msgstr "草稿" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Finish" +msgstr "完成" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__finished +msgid "Finished" +msgstr "已完成" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_follower_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_follower_ids +msgid "Followers" +msgstr "关注者" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_channel_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_channel_ids +msgid "Followers (Channels)" +msgstr "关注者(频道)" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_partner_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_partner_ids +msgid "Followers (Partners)" +msgstr "关注者(业务伙伴)" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Group By" +msgstr "分组" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__id +msgid "ID" +msgstr "ID" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_exception_icon +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_exception_icon +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_unread +msgid "If checked, new messages require your attention." +msgstr "如果勾选此项,将会收到新消息提醒。" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_sms_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_error +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "如果勾选此项, 某些信息将会产生传递错误。" + +#. module: stock_request_kanban +#: model:ir.model.fields.selection,name:stock_request_kanban.selection__stock_inventory_kanban__state__in_progress +msgid "In progress" +msgstr "进行中" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.menu_wizard_stock_inventory_kanban +msgid "Inventory" +msgstr "库存" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__inventory_kanban_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Inventory Kanban" +msgstr "库存看板" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_inventory_kanban +msgid "Inventory for Kanban" +msgstr "库存看板" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_is_follower +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_is_follower +msgid "Is Follower" +msgstr "是关注者" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__kanban_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__kanban_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__kanban_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Kanban" +msgstr "看板" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.product_product_form_view_kanban_card_button +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.product_template_form_view_bom_button +#, fuzzy +msgid "Kanban Cards" +msgstr "看板卡" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_kanban_view +msgid "Kanban Image" +msgstr "看板图片" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.stock_request_kanban_menu +msgid "Kanban cards" +msgstr "看板卡" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract____last_update +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban____last_update +msgid "Last Modified on" +msgstr "最后修改时间" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__write_uid +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__write_uid +msgid "Last Updated by" +msgstr "最后更新者" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__write_date +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__write_date +msgid "Last Updated on" +msgstr "最后更新时间" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Lines only can be added on orders with draft state" +msgstr "只有处于草稿状态的订单才能添加行" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__location_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__location_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Location" +msgstr "位置" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Location must be the same" +msgstr "位置必须相同" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_main_attachment_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_main_attachment_id +msgid "Main Attachment" +msgstr "附件" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_error +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_error +msgid "Message Delivery error" +msgstr "消息递送错误" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_ids +msgid "Messages" +msgstr "消息" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Missing" +msgstr "缺失" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__missing_kanban_ids +msgid "Missing Kanban" +msgstr "看板缺失" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__count_missing_kanbans +msgid "Missing Kanbans" +msgstr "看板缺失" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__procurement_group_id +msgid "" +"Moves created through this stock request will be put in this procurement " +"group. If none is given, the moves generated by procurement rules will be " +"grouped into one big picking." +msgstr "" +"通过此库存请求创建的移动将放入此采购组。如果没有给出,则由采购规则生成的移动" +"将被分组为一个大拣货。" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__name +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__name +msgid "Name" +msgstr "名称" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_date_deadline +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "下一个活动截止日期" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_summary +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_summary +msgid "Next Activity Summary" +msgstr "下一个活动摘要" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_type_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_type_id +msgid "Next Activity Type" +msgstr "下一个活动类型" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_needaction_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_needaction_counter +msgid "Number of Actions" +msgstr "操作次数" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_error_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_error_counter +#, fuzzy +msgid "Number of errors" +msgstr "错误数" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_needaction_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "需要操作消息数量" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_has_error_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "传递错误的消息数量" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__message_unread_counter +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_unread_counter +msgid "Number of unread messages" +msgstr "未读消息的数量" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__order_id +msgid "Order" +msgstr "订单" + +#. module: stock_request_kanban +#: model:ir.actions.report,name:stock_request_kanban.action_report_kanban +msgid "Print kanban" +msgstr "打印看板" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Print missing" +msgstr "打印缺失" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__procurement_group_id +msgid "Procurement Group" +msgstr "补货组" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Procurement group must be the same" +msgstr "补货组必须相同" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_product_product +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_id +msgid "Product" +msgstr "产品" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_product_template +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_template_id +#, fuzzy +msgid "Product Template" +msgstr "产品" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_uom_id +msgid "Product Unit of Measure" +msgstr "产品计量单位" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__product_ids +msgid "Products" +msgstr "产品" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_uom_qty +msgid "Quantity" +msgstr "数量" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__product_qty +msgid "Quantity in the default UoM of the product" +msgstr "产品的默认计量单位数量" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__product_uom_qty +msgid "Quantity, specified in the unit of measure indicated in the request." +msgstr "数量,以请求中指示的计量单位指定。" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__product_qty +msgid "Real Quantity" +msgstr "实际数量" + +#. module: stock_request_kanban +#: model:ir.ui.menu,name:stock_request_kanban.menu_wizard_stock_request_kanban +msgid "Request from Kanban cards" +msgstr "来自看板卡的请求" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__activity_user_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__activity_user_id +msgid "Responsible User" +msgstr "责任用户" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__route_id +msgid "Route" +msgstr "路线" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__route_ids +msgid "Routes" +msgstr "路线" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_has_sms_error +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_has_sms_error +#, fuzzy +msgid "SMS Delivery error" +msgstr "消息递送错误" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_order_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Scan" +msgstr "扫描" + +#. module: stock_request_kanban +#. openerp-web +#: code:addons/stock_request_kanban/static/src/xml/stock_request_kanban_scan.xml:0 +#, fuzzy, python-format +msgid "Scan Kanban" +msgstr "已扫描看板" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Scanned" +msgstr "已扫描" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__scanned_kanban_ids +msgid "Scanned Kanban" +msgstr "已扫描看板" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Set to draft" +msgstr "设置为草稿" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +msgid "Start" +msgstr "开始" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__state +msgid "State" +msgstr "状态" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__status +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__status +msgid "Status" +msgstr "状态" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_inventory_kanban__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban_abstract__status_state +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__status_state +msgid "Status State" +msgstr "状态" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_state +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"基于活动的状态\n" +"逾期:已经超过截止日期\n" +"现今:活动日期是当天\n" +"计划:未来的活动。" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_inventory_kanban_tree +msgid "Stock Inventories" +msgstr "库存存货" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_inventory_kanban +#, fuzzy +msgid "Stock Inventory Kanban Wizard" +msgstr "库存存货看板" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.stock_inventory_kanban_action +msgid "Stock Inventory Kanbans" +msgstr "库存存货看板" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_request +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_kanban__stock_request_id +#: model:ir.model.fields,field_description:stock_request_kanban.field_wizard_stock_request_order_kanban__stock_request_id +msgid "Stock Request" +msgstr "库存请求" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_form +msgid "Stock Request Kanban" +msgstr "库存请求看板" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban_abstract +#, fuzzy +msgid "Stock Request Kanban Abstract Wizard" +msgstr "库存请求看板" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban +#, fuzzy +msgid "Stock Request Kanban Wizard" +msgstr "库存请求看板" + +#. module: stock_request_kanban +#: model:ir.actions.act_window,name:stock_request_kanban.stock_request_kanban_action +msgid "Stock Request Kanbans" +msgstr "库存请求看板" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_order_kanban +#, fuzzy +msgid "Stock Request Order Kanban Wizard" +msgstr "库存请求看板" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_form +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.view_stock_request_kanban_tree +msgid "Stock Requests" +msgstr "库存请求" + +#. module: stock_request_kanban +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Stock Requests Kanban" +msgstr "库存请求看板" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__activity_exception_decoration +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_unread +msgid "Unread Messages" +msgstr "未读消息" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__message_unread_counter +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__message_unread_counter +msgid "Unread Messages Counter" +msgstr "未读消息计数器" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_inventory_kanban___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_kanban___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_kanban_abstract___barcode_scanned +#: model:ir.model.fields,help:stock_request_kanban.field_wizard_stock_request_order_kanban___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "最后扫描条形码的值。" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__warehouse_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__warehouse_id +#: model_terms:ir.ui.view,arch_db:stock_request_kanban.stock_request_kanban_search +msgid "Warehouse" +msgstr "仓库" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_request_order_kanban.py:0 +#, python-format +msgid "Warehouse must be the same" +msgstr "仓库必须相同" + +#. module: stock_request_kanban +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_inventory_kanban__website_message_ids +#: model:ir.model.fields,field_description:stock_request_kanban.field_stock_request_kanban__website_message_ids +msgid "Website Messages" +msgstr "网站消息" + +#. module: stock_request_kanban +#: model:ir.model.fields,help:stock_request_kanban.field_stock_inventory_kanban__website_message_ids +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__website_message_ids +msgid "Website communication history" +msgstr "网站沟通记录" + +#~ msgid "If checked new messages require your attention." +#~ msgstr ".如果勾选此项,将会收到新消息提醒。" + +#~ msgid "Overdue" +#~ msgstr "逾期" + +#~ msgid "Planned" +#~ msgstr "计划" + +#~ msgid "Today" +#~ msgstr "今天" + +#~ msgid "wizard.stock.inventory.kanban" +#~ msgstr "wizard.stock.inventory.kanban" + +#~ msgid "wizard.stock.request.kanban" +#~ msgstr "wizard.stock.request.kanban" + +#~ msgid "wizard.stock.request.kanban.abstract" +#~ msgstr "wizard.stock.request.kanban.abstract" + +#~ msgid "wizard.stock.request.order.kanban" +#~ msgstr "wizard.stock.request.order.kanban" diff --git a/stock_request_kanban/models/__init__.py b/stock_request_kanban/models/__init__.py new file mode 100644 index 000000000..86624932d --- /dev/null +++ b/stock_request_kanban/models/__init__.py @@ -0,0 +1,7 @@ +# Copyright 2018 Creu Blanca +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from . import stock_request +from . import stock_request_kanban +from . import stock_inventory_kanban +from . import product diff --git a/stock_request_kanban/models/product.py b/stock_request_kanban/models/product.py new file mode 100644 index 000000000..b757b26af --- /dev/null +++ b/stock_request_kanban/models/product.py @@ -0,0 +1,53 @@ +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + kanban_card_count = fields.Integer( + "# Kanban Cards", compute="_compute_kanban_card_count", compute_sudo=False + ) + + def _compute_kanban_card_count(self): + for product in self: + count = 0 + for variant in product.product_variant_ids: + count += self.env["stock.request.kanban"].search_count( + [("product_id", "=", variant.id)] + ) + product.kanban_card_count = count + + def action_view_kanban_cards(self): + self.ensure_one() + action = self.env.ref( + "stock_request_kanban.stock_request_kanban_action" + ).read()[0] + action["context"] = {"default_product_id": self.product_variant_id.id} + action["domain"] = [ + ("active", "=", True), + ("product_template_id", "=", self.id), + ] + return action + + +class ProductProduct(models.Model): + _inherit = "product.product" + + kanban_card_count = fields.Integer( + "# Kanban Cards", compute="_compute_kanban_card_count", compute_sudo=False + ) + + def _compute_kanban_card_count(self): + for product in self: + product.kanban_card_count += self.env["stock.request.kanban"].search_count( + [("product_id", "=", product.id)] + ) + + def action_view_kanban_cards(self): + self.ensure_one() + action = self.env.ref( + "stock_request_kanban.stock_request_kanban_action" + ).read()[0] + action["context"] = {"default_product_id": self.id} + action["domain"] = [("active", "=", True), ("product_id", "=", self.id)] + return action diff --git a/stock_request_kanban/models/stock_inventory_kanban.py b/stock_request_kanban/models/stock_inventory_kanban.py new file mode 100644 index 000000000..a761b2d0c --- /dev/null +++ b/stock_request_kanban/models/stock_inventory_kanban.py @@ -0,0 +1,152 @@ +# Copyright 2018 Creu Blanca +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import api, fields, models +from odoo.osv import expression + + +class StockInventoryKanban(models.Model): + _name = "stock.inventory.kanban" + _description = "Inventory for Kanban" + _inherit = ["mail.thread", "mail.activity.mixin"] + + name = fields.Char( + readonly=True, states={"draft": [("readonly", False)]}, copy=False + ) + state = fields.Selection( + [ + ("draft", "Draft"), + ("in_progress", "In progress"), + ("finished", "Finished"), + ("closed", "Closed"), + ("cancelled", "Cancelled"), + ], + required=True, + default="draft", + readonly=True, + copy=False, + track_visibility="onchange", + ) + warehouse_ids = fields.Many2many( + "stock.warehouse", + string="Warehouse", + ondelete="cascade", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + location_ids = fields.Many2many( + "stock.location", + string="Location", + domain=[("usage", "in", ["internal", "transit"])], + ondelete="cascade", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + product_ids = fields.Many2many( + "product.product", + string="Products", + domain=[("type", "in", ["product", "consu"])], + ondelete="cascade", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + kanban_ids = fields.Many2many( + "stock.request.kanban", + relation="stock_inventory_kanban_kanban", + readonly=True, + copy=False, + ) + scanned_kanban_ids = fields.Many2many( + "stock.request.kanban", + relation="stock_inventory_kanban_scanned_kanban", + readonly=True, + copy=False, + ) + missing_kanban_ids = fields.Many2many( + "stock.request.kanban", readonly=True, compute="_compute_missing_kanban" + ) + + count_missing_kanbans = fields.Integer( + "Missing Kanbans", readonly=True, compute="_compute_missing_kanban" + ) + + @api.depends("kanban_ids", "scanned_kanban_ids") + def _compute_missing_kanban(self): + for rec in self: + rec.missing_kanban_ids = rec.kanban_ids.filtered( + lambda r: r.id not in rec.scanned_kanban_ids.ids + ) + rec.count_missing_kanbans = len(rec.missing_kanban_ids) + + def _get_inventory_kanban_domain(self): + domain = [] + if self.warehouse_ids: + domain = expression.AND( + (domain, [("warehouse_id", "in", self.warehouse_ids.ids)]) + ) + if self.product_ids: + domain = expression.AND( + (domain, [("product_id", "in", self.product_ids.ids)]) + ) + if self.location_ids: + domain = expression.AND( + (domain, [("location_id", "in", self.location_ids.ids)]) + ) + return domain + + def _start_inventory_values(self): + return {"state": "in_progress"} + + def _finish_inventory_values(self): + return {"state": "finished"} + + def _close_inventory_values(self): + return {"state": "closed"} + + @api.model + def create(self, vals): + if vals.get("name", "/") == "/": + vals["name"] = self.env["ir.sequence"].next_by_code( + "stock.inventory.kanban" + ) + return super().create(vals) + + def calculate_kanbans(self): + for rec in self: + if rec.state == "draft": + rec.kanban_ids = self.env["stock.request.kanban"].search( + rec._get_inventory_kanban_domain() + ) + + def start_inventory(self): + self.calculate_kanbans() + self.write(self._start_inventory_values()) + + def finish_inventory(self): + self.write(self._finish_inventory_values()) + + def close_inventory(self): + self.write(self._close_inventory_values()) + + def print_missing_kanbans(self): + """Print the missing kanban cards in order to restore them""" + self.ensure_one() + return self.env.ref("stock_request_kanban.action_report_kanban").report_action( + self.missing_kanban_ids + ) + + def _cancel_inventory_values(self): + return {"state": "cancelled"} + + def cancel(self): + self.write(self._cancel_inventory_values()) + + def _to_draft_inventory_values(self): + return { + "state": "draft", + "kanban_ids": [(5, 0)], + "scanned_kanban_ids": [(5, 0)], + } + + def to_draft(self): + self.write(self._to_draft_inventory_values()) diff --git a/stock_request_kanban/models/stock_request.py b/stock_request_kanban/models/stock_request.py new file mode 100644 index 000000000..3a4462eec --- /dev/null +++ b/stock_request_kanban/models/stock_request.py @@ -0,0 +1,10 @@ +# Copyright 2018 Creu Blanca +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import fields, models + + +class StockRequest(models.Model): + _inherit = "stock.request" + + kanban_id = fields.Many2one("stock.request.kanban", readonly=True) diff --git a/stock_request_kanban/models/stock_request_kanban.py b/stock_request_kanban/models/stock_request_kanban.py new file mode 100644 index 000000000..101f93ced --- /dev/null +++ b/stock_request_kanban/models/stock_request_kanban.py @@ -0,0 +1,59 @@ +# Copyright 2018 Creu Blanca +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from reportlab.graphics.barcode import getCodes + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class StockRequestKanban(models.Model): + _name = "stock.request.kanban" + _description = "Stock Request Kanban" + _inherit = "stock.request.abstract" + + active = fields.Boolean(default=True) + product_template_id = fields.Many2one(related="product_id.product_tmpl_id") + + @api.model + def create(self, vals): + if vals.get("name", "/") == "/": + vals["name"] = self.env["ir.sequence"].next_by_code("stock.request.kanban") + return super().create(vals) + + @api.model + def get_barcode_format(self): + return ( + self.env["ir.config_parameter"] + .sudo() + .get_param("stock_request_kanban.barcode_format", default="Standard39") + ) + + @api.model + def _recompute_barcode(self, barcode): + if ( + self.env["ir.config_parameter"] + .sudo() + .get_param("stock_request_kanban.crc", default="1") + == "0" + ): + return barcode + if ( + self.env["ir.config_parameter"] + .sudo() + .get_param("stock_request_kanban.ignore_crc", default="0") + == "0" + ): + bcc = getCodes()[self.get_barcode_format()](value=barcode[:-1]) + bcc.validate() + bcc.encode() + if bcc.encoded[1:-1] != barcode: + raise ValidationError(_("CRC is not valid")) + return barcode[:-1] + + @api.model + def search_barcode(self, barcode): + recomputed_barcode = self._recompute_barcode(barcode) + return self.env["stock.request.kanban"].search( + [("name", "ilike", recomputed_barcode)] + ) diff --git a/stock_request_kanban/readme/CONFIGURE.rst b/stock_request_kanban/readme/CONFIGURE.rst new file mode 100644 index 000000000..a26fd30c3 --- /dev/null +++ b/stock_request_kanban/readme/CONFIGURE.rst @@ -0,0 +1,16 @@ +If the barcode does not contain a CRC check digit on the kanban card, you should: + +* Access on Development mode +* Access 'Settings / Technical / Parameters / System Parameters' +* Create a parameter with name 'stock_request_kanban.crc' and set it to value to 0 + +If the barcode contains a CRC check digit and you want to ignore it: + +* Create a paramenter with name 'stock_request_kanban.ignore_crc' and set it to value to 1 + +If you want to change the format of the QR, you should: + +* Access on Development mode +* Access 'Settings / Technical / Parameters / System Parameters' +* Create a parameter with name 'stock_request_kanban.barcode_format' and set + the format of the barcode diff --git a/stock_request_kanban/readme/CONTRIBUTORS.rst b/stock_request_kanban/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..ed1b3be4a --- /dev/null +++ b/stock_request_kanban/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Enric Tobella +* Kitti Upariphutthiphong diff --git a/stock_request_kanban/readme/DESCRIPTION.rst b/stock_request_kanban/readme/DESCRIPTION.rst new file mode 100644 index 000000000..7772a50a1 --- /dev/null +++ b/stock_request_kanban/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +On most companies there are products that must be purchased often but cannot be +stored as a usual product because no consumption moves are made. +Usually, they are stored as consumables or putaway rules are defined. +In both cases, reordering rules cannot be used. +This module allows to use stock request as reordering rules for this kind of +products. + +It is created following the concept of lean kanban cards. diff --git a/stock_request_kanban/readme/USAGE.rst b/stock_request_kanban/readme/USAGE.rst new file mode 100644 index 000000000..446f62544 --- /dev/null +++ b/stock_request_kanban/readme/USAGE.rst @@ -0,0 +1,28 @@ +Creation +~~~~~~~~ + +* Go to 'Stock Requests / Stock Requests Kanban' and create a new Kanban. +* Indicate a product, quantity and location. +* Press 'Save'. +* Print the kanban and put it in the storage of the product + +Request kanban +~~~~~~~~~~~~~~ + +This should be used if you want to create the kanban when the card is consumed. + +* Once the product is consumed, take the card +* Go to 'Stock Requests / Order Kanban Card' +* Scan the card +* The stock request is created + +Request kanban batch +~~~~~~~~~~~~~~~~~~~~ + +This should be used when you will store the cards and create request orders +for kanbans later. + +* Once the product is consumed, take the card and store it +* Create a store request order +* Press the scan button +* Scan all the pending kanban cards diff --git a/stock_request_kanban/report/report_paper_format.xml b/stock_request_kanban/report/report_paper_format.xml new file mode 100644 index 000000000..1c29095e8 --- /dev/null +++ b/stock_request_kanban/report/report_paper_format.xml @@ -0,0 +1,14 @@ + + + + Kanban format + A4 + Portrait + 0.0 + 0.0 + 0.0 + 0.0 + 0 + 72 + + diff --git a/stock_request_kanban/report/stock_request_kanban_templates.xml b/stock_request_kanban/report/stock_request_kanban_templates.xml new file mode 100644 index 000000000..dc721b1cf --- /dev/null +++ b/stock_request_kanban/report/stock_request_kanban_templates.xml @@ -0,0 +1,103 @@ + + + + + + + Print kanban + stock.request.kanban + qweb-pdf + stock_request_kanban.report_kanban_label + stock_request_kanban.report_kanban_label + + + report + + diff --git a/stock_request_kanban/security/ir.model.access.csv b/stock_request_kanban/security/ir.model.access.csv new file mode 100644 index 000000000..244b3a41c --- /dev/null +++ b/stock_request_kanban/security/ir.model.access.csv @@ -0,0 +1,11 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_stock_request_kanban_user,stock request kanban user,model_stock_request_kanban,stock_request.group_stock_request_user,1,1,1, +access_stock_request_kanban_manager,stock request kanban manager,model_stock_request_kanban,stock_request.group_stock_request_manager,1,1,1,1 +access_stock_inventory_kanban_user,stock inventory kanban user,model_stock_inventory_kanban,stock_request.group_stock_request_user,1,1,1, +access_stock_inventory_kanban_manager,stock inventory kanban manager,model_stock_inventory_kanban,stock_request.group_stock_request_manager,1,1,1,1 +access_wizard_stock_request_kanban_user,wizard stock request kanban user,model_wizard_stock_request_kanban,stock_request.group_stock_request_user,1,1,1, +access_wizard_stock_request_kanban_manager,wizard stock request kanban manager,model_wizard_stock_request_kanban,stock_request.group_stock_request_manager,1,1,1,1 +access_wizard_stock_inventory_kanban_user,wizard stock inventory kanban user,model_wizard_stock_inventory_kanban,stock_request.group_stock_request_user,1,1,1, +access_wizard_stock_inventory_kanban_manager,wizard stock inventory kanban manager,model_wizard_stock_inventory_kanban,stock_request.group_stock_request_manager,1,1,1,1 +access_wizard_stock_request_order_kanban_user,wizard stock request order kanban user,model_wizard_stock_request_order_kanban,stock_request.group_stock_request_user,1,1,1, +access_wizard_stock_request_order_kanban_manager,wizard stock request order kanban manager,model_wizard_stock_request_order_kanban,stock_request.group_stock_request_manager,1,1,1,1 diff --git a/stock_request_kanban/static/description/icon.png b/stock_request_kanban/static/description/icon.png new file mode 100644 index 000000000..d4f6a65ac Binary files /dev/null and b/stock_request_kanban/static/description/icon.png differ diff --git a/stock_request_kanban/static/description/index.html b/stock_request_kanban/static/description/index.html new file mode 100644 index 000000000..023382aca --- /dev/null +++ b/stock_request_kanban/static/description/index.html @@ -0,0 +1,487 @@ + + + + + + +Stock Request kanban + + + +
+

Stock Request kanban

+ + +

Beta License: LGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

+

On most companies there is products that must be purchased often but cannot be +stored as a usual product because no consumption moves are made. +Usually, they are stored as consumables or putaway rules are defined. +In both cases, reordering rules cannot be used. +This module allows to use stock request as reordering rules for this kind of +products.

+

It is created following the concept of lean kanban cards.

+

Table of contents

+ +
+

Configuration

+

If the barcode does not contain a CRC check digit on the kanban card, you should:

+
    +
  • Access on Development mode
  • +
  • Access ‘Settings / Technical / Parameters / System Parameters’
  • +
  • Create a parameter with name ‘stock_request_kanban.crc’ and set it to value to 0
  • +
+

If the barcode contains a CRC check digit and you want to ignore it:

+
    +
  • Create a paramenter with name ‘stock_request_kanban.ignore_crc’ and set it to value to 1
  • +
+

If you want to change the format of the QR, you should:

+
    +
  • Access on Development mode
  • +
  • Access ‘Settings / Technical / Parameters / System Parameters’
  • +
  • Create a parameter with name ‘stock_request_kanban.barcode_format’ and set +the format of the barcode
  • +
+
+
+

Usage

+
+

Creation

+
    +
  • Go to ‘Stock Requests / Stock Requests Kanban’ and create a new Kanban.
  • +
  • Indicate a product, quantity and location.
  • +
  • Press ‘Save’.
  • +
  • Print the kanban and put it in the storage of the product
  • +
+
+
+

Request kanban

+

This should be used if you want to create the kanban when the card is consumed.

+
    +
  • Once the product is consumed, take the card
  • +
  • Go to ‘Stock Requests / Order Kanban Card’
  • +
  • Scan the card
  • +
  • The stock request is created
  • +
+
+
+

Request kanban batch

+

This should be used when you will store the cards and create request orders +for kanbans later.

+
    +
  • Once the product is consumed, take the card and store it
  • +
  • Create a store request order
  • +
  • Press the scan button
  • +
  • Scan all the pending kanban cards
  • +
+
+
+
+

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

+
    +
  • Creu Blanca
  • +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

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.

+

This module is part of the OCA/stock-logistics-warehouse project on GitHub.

+

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

+
+
+
+ + diff --git a/stock_request_kanban/static/src/js/stock_request_kanban_scan_controller.js b/stock_request_kanban/static/src/js/stock_request_kanban_scan_controller.js new file mode 100644 index 000000000..f246f69a5 --- /dev/null +++ b/stock_request_kanban/static/src/js/stock_request_kanban_scan_controller.js @@ -0,0 +1,50 @@ +odoo.define("stock_request_kanban.StockRequestKanbanController", function (require) { + "use strict"; + + var core = require("web.core"); + var ListController = require("web.ListController"); + + var qweb = core.qweb; + + var StockRequestKanbanController = ListController.extend({ + // ------------------------------------------------------------------------- + // Public + // ------------------------------------------------------------------------- + + init: function (parent, model, renderer) { + this.context = renderer.state.getContext(); + return this._super.apply(this, arguments); + }, + + /** + * @override + */ + + renderButtons: function () { + this._super.apply(this, arguments); + var $buttonScan = $(qweb.render("StockRequestKanban.Buttons")); + $buttonScan.on("click", this._onOpenWizard.bind(this)); + + this.$buttons.prepend($buttonScan); + }, + + // ------------------------------------------------------------------------- + // Handlers + // ------------------------------------------------------------------------- + + _onOpenWizard: function () { + var context = { + active_model: this.modelName, + }; + this.do_action({ + res_model: "wizard.stock.request.kanban", + views: [[false, "form"]], + target: "new", + type: "ir.actions.act_window", + context: context, + }); + }, + }); + + return StockRequestKanbanController; +}); diff --git a/stock_request_kanban/static/src/js/stock_request_kanban_scan_view.js b/stock_request_kanban/static/src/js/stock_request_kanban_scan_view.js new file mode 100644 index 000000000..f4e7fd4b7 --- /dev/null +++ b/stock_request_kanban/static/src/js/stock_request_kanban_scan_view.js @@ -0,0 +1,17 @@ +odoo.define("stock_request_kanban.StockRequestKanbanListView", function (require) { + "use strict"; + + var ListView = require("web.ListView"); + var StockRequestKanbanController = require("stock_request_kanban.StockRequestKanbanController"); + var viewRegistry = require("web.view_registry"); + + var StockRequestKanbanListView = ListView.extend({ + config: _.extend({}, ListView.prototype.config, { + Controller: StockRequestKanbanController, + }), + }); + + viewRegistry.add("stock_request_kanban_list", StockRequestKanbanListView); + + return StockRequestKanbanListView; +}); diff --git a/stock_request_kanban/static/src/xml/stock_request_kanban_scan.xml b/stock_request_kanban/static/src/xml/stock_request_kanban_scan.xml new file mode 100644 index 000000000..b99884dc5 --- /dev/null +++ b/stock_request_kanban/static/src/xml/stock_request_kanban_scan.xml @@ -0,0 +1,6 @@ + + + + diff --git a/stock_request_kanban/tests/__init__.py b/stock_request_kanban/tests/__init__.py new file mode 100644 index 000000000..4a5ebd197 --- /dev/null +++ b/stock_request_kanban/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_kanban +from . import test_inventory_kanban diff --git a/stock_request_kanban/tests/base_test.py b/stock_request_kanban/tests/base_test.py new file mode 100644 index 000000000..41e9b13d7 --- /dev/null +++ b/stock_request_kanban/tests/base_test.py @@ -0,0 +1,17 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017-2020 ForgeFlow, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from reportlab.graphics.barcode import getCodes + +from odoo.tests.common import TransactionCase + + +class TestBaseKanban(TransactionCase): + def pass_code(self, wizard, code): + bcc = getCodes()[self.env["stock.request.kanban"].get_barcode_format()]( + value=code + ) + bcc.validate() + bcc.encode() + wizard.on_barcode_scanned(bcc.encoded[1:-1]) diff --git a/stock_request_kanban/tests/test_inventory_kanban.py b/stock_request_kanban/tests/test_inventory_kanban.py new file mode 100644 index 000000000..1e0eab7cd --- /dev/null +++ b/stock_request_kanban/tests/test_inventory_kanban.py @@ -0,0 +1,112 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017-2020 ForgeFlow, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from .base_test import TestBaseKanban + + +class TestKanban(TestBaseKanban): + def setUp(self): + super().setUp() + self.main_company = self.env.ref("base.main_company") + self.route = self.env["stock.location.route"].create( + { + "name": "Transfer", + "product_categ_selectable": False, + "product_selectable": True, + "company_id": self.main_company.id, + "sequence": 10, + } + ) + self.product = self.env["product.product"].create( + {"name": "Product", "route_ids": [(4, self.route.id)], "company_id": False} + ) + self.product_2 = self.env["product.product"].create( + { + "name": "Product 2", + "route_ids": [(4, self.route.id)], + "company_id": False, + } + ) + self.kanban_1 = self.env["stock.request.kanban"].create( + { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + } + ) + self.kanban_2 = self.env["stock.request.kanban"].create( + { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + } + ) + self.kanban_3 = self.env["stock.request.kanban"].create( + { + "product_id": self.product_2.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + } + ) + + def test_inventory_warehouse(self): + inventory = self.env["stock.inventory.kanban"].create( + {"warehouse_ids": [(4, self.kanban_1.warehouse_id.id)]} + ) + inventory.start_inventory() + self.assertIn(self.kanban_1, inventory.kanban_ids) + self.assertIn(self.kanban_1, inventory.missing_kanban_ids) + + def test_inventory_location(self): + inventory = self.env["stock.inventory.kanban"].create( + {"location_ids": [(4, self.kanban_1.location_id.id)]} + ) + inventory.start_inventory() + self.assertIn(self.kanban_1, inventory.kanban_ids) + self.assertIn(self.kanban_1, inventory.missing_kanban_ids) + + def test_inventory_product(self): + inventory = self.env["stock.inventory.kanban"].create( + {"product_ids": [(4, self.product.id)]} + ) + inventory.start_inventory() + self.assertIn(self.kanban_1, inventory.kanban_ids) + self.assertNotIn(self.kanban_3, inventory.kanban_ids) + self.assertIn(self.kanban_1, inventory.missing_kanban_ids) + self.assertEqual(inventory.state, "in_progress") + wizard = ( + self.env["wizard.stock.inventory.kanban"] + .with_context(default_inventory_kanban_id=inventory.id) + .create({}) + ) + self.pass_code(wizard, self.kanban_3.name) + self.assertEqual(wizard.status_state, 1) + self.pass_code(wizard, self.kanban_1.name) + self.assertEqual(wizard.status_state, 0) + self.assertNotIn(self.kanban_1, inventory.missing_kanban_ids) + self.assertIn(self.kanban_1, inventory.scanned_kanban_ids) + self.pass_code(wizard, self.kanban_1.name) + self.assertEqual(wizard.status_state, 1) + self.assertNotIn(self.kanban_1, inventory.missing_kanban_ids) + self.assertIn(self.kanban_1, inventory.scanned_kanban_ids) + inventory.finish_inventory() + self.assertEqual(inventory.state, "finished") + inventory.close_inventory() + self.assertEqual(inventory.state, "closed") + + def test_cancel_inventory(self): + inventory = self.env["stock.inventory.kanban"].create( + {"product_ids": [(4, self.product.id)]} + ) + inventory.start_inventory() + self.assertIn(self.kanban_1, inventory.kanban_ids) + self.assertNotIn(self.kanban_3, inventory.kanban_ids) + self.assertIn(self.kanban_1, inventory.missing_kanban_ids) + self.assertEqual(inventory.state, "in_progress") + inventory.cancel() + self.assertEqual(inventory.state, "cancelled") + inventory.to_draft() + self.assertEqual(inventory.state, "draft") + self.assertFalse(inventory.kanban_ids) + self.assertFalse(inventory.scanned_kanban_ids) diff --git a/stock_request_kanban/tests/test_kanban.py b/stock_request_kanban/tests/test_kanban.py new file mode 100644 index 000000000..dd6c46020 --- /dev/null +++ b/stock_request_kanban/tests/test_kanban.py @@ -0,0 +1,200 @@ +# Copyright 2017 Creu Blanca +# Copyright 2017-2020 ForgeFlow, S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo.exceptions import ValidationError + +from .base_test import TestBaseKanban + + +class TestKanban(TestBaseKanban): + def setUp(self): + super().setUp() + self.main_company = self.env.ref("base.main_company") + self.warehouse = self.env.ref("stock.warehouse0") + self.categ_unit = self.env.ref("uom.product_uom_categ_unit") + + # common data + self.company_2 = self.env["res.company"].create({"name": "Comp2"}) + self.wh2 = self.env["stock.warehouse"].search( + [("company_id", "=", self.company_2.id)], limit=1 + ) + self.wh3 = self.env["stock.warehouse"].create( + { + "name": "Warehouse TEst", + "code": "WH-TEST", + "company_id": self.main_company.id, + } + ) + + self.ressuply_loc = self.env["stock.location"].create( + {"name": "Ressuply", "location_id": self.warehouse.view_location_id.id} + ) + self.route = self.env["stock.location.route"].create( + { + "name": "Transfer", + "product_categ_selectable": False, + "product_selectable": True, + "company_id": self.main_company.id, + "sequence": 10, + } + ) + self.product = self.env["product.product"].create( + {"name": "Product", "route_ids": [(4, self.route.id)], "company_id": False} + ) + self.uom_dozen = self.env["uom.uom"].create( + { + "name": "Test-DozenA", + "category_id": self.categ_unit.id, + "factor_inv": 12, + "uom_type": "bigger", + "rounding": 0.001, + } + ) + + self.env["stock.rule"].create( + { + "name": "Transfer", + "route_id": self.route.id, + "location_src_id": self.ressuply_loc.id, + "location_id": self.warehouse.lot_stock_id.id, + "action": "pull_push", + "picking_type_id": self.warehouse.int_type_id.id, + "procure_method": "make_to_stock", + "warehouse_id": self.warehouse.id, + "company_id": self.main_company.id, + } + ) + self.env["ir.config_parameter"].set_param("stock_request_kanban.crc", "1") + + def test_onchanges(self): + kanban = self.env["stock.request.kanban"].new({}) + kanban.product_id = self.product + kanban.onchange_product_id() + kanban.company_id = self.main_company + kanban.onchange_company_id() + self.assertTrue(kanban.warehouse_id) + kanban.warehouse_id = self.wh2 + kanban.onchange_warehouse_id() + self.assertEqual(kanban.company_id, self.company_2) + kanban.location_id = self.warehouse.view_location_id + kanban.onchange_location_id() + self.assertEqual(kanban.company_id, self.main_company) + self.assertEqual(kanban.warehouse_id, self.warehouse) + + def test_create(self): + kanban = self.env["stock.request.kanban"].new({}) + kanban.product_id = self.product + kanban.onchange_product_id() + kanban.product_uom_qty = 1 + kanban = kanban.create(kanban._convert_to_write(kanban._cache)) + self.assertTrue(kanban.company_id) + self.assertIn(self.route, kanban.route_ids) + + def test_order_barcodes(self): + kanban_1 = self.env["stock.request.kanban"].create( + { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + } + ) + kanban_2 = self.env["stock.request.kanban"].create( + { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + } + ) + kanban_3 = self.env["stock.request.kanban"].create( + { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + "company_id": self.main_company.id, + "warehouse_id": self.wh3.id, + "location_id": self.wh3.lot_stock_id.id, + } + ) + order = self.env["stock.request.order"].create( + { + "company_id": self.main_company.id, + "warehouse_id": self.warehouse.id, + "location_id": self.warehouse.lot_stock_id.id, + } + ) + wizard = ( + self.env["wizard.stock.request.order.kanban"] + .with_context(default_order_id=order.id) + .create({}) + ) + with self.assertRaises(ValidationError): + wizard.on_barcode_scanned(kanban_1.name) + self.pass_code(wizard, kanban_1.name) + self.assertEqual(wizard.status_state, 0) + self.assertTrue( + order.stock_request_ids.filtered(lambda r: r.kanban_id == kanban_1) + ) + self.pass_code(wizard, kanban_2.name) + self.assertTrue( + order.stock_request_ids.filtered(lambda r: r.kanban_id == kanban_2) + ) + self.assertEqual(wizard.status_state, 0) + self.pass_code(wizard, kanban_1.name) + self.assertEqual(wizard.status_state, 1) + self.pass_code(wizard, kanban_2.name + kanban_1.name) + self.assertEqual(wizard.status_state, 1) + with self.assertRaises(ValidationError): + self.pass_code(wizard, kanban_3.name) + + def test_barcodes(self): + kanban_1 = self.env["stock.request.kanban"].create( + { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + } + ) + kanban_2 = self.env["stock.request.kanban"].create( + { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + } + ) + kanban_3 = self.env["stock.request.kanban"].create( + { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 1, + } + ) + wizard = self.env["wizard.stock.request.kanban"].with_context().create({}) + with self.assertRaises(ValidationError): + wizard.on_barcode_scanned(kanban_1.name) + self.assertFalse( + self.env["stock.request"].search([("kanban_id", "=", kanban_1.id)]) + ) + self.pass_code(wizard, kanban_1.name) + self.assertEqual(wizard.status_state, 0) + self.assertTrue( + self.env["stock.request"].search([("kanban_id", "=", kanban_1.id)]) + ) + self.assertFalse( + self.env["stock.request"].search([("kanban_id", "=", kanban_2.id)]) + ) + self.pass_code(wizard, kanban_2.name) + self.assertTrue( + self.env["stock.request"].search([("kanban_id", "=", kanban_2.id)]) + ) + with self.assertRaises(ValidationError): + wizard.on_barcode_scanned(kanban_3.name) + self.assertFalse( + self.env["stock.request"].search([("kanban_id", "=", kanban_3.id)]) + ) + self.env["ir.config_parameter"].set_param("stock_request_kanban.crc", "0") + wizard.on_barcode_scanned(kanban_3.name) + self.assertEqual(wizard.status_state, 0) + self.assertTrue( + self.env["stock.request"].search([("kanban_id", "=", kanban_3.id)]) + ) diff --git a/stock_request_kanban/views/product_views.xml b/stock_request_kanban/views/product_views.xml new file mode 100644 index 000000000..3956621a4 --- /dev/null +++ b/stock_request_kanban/views/product_views.xml @@ -0,0 +1,57 @@ + + + + + product.product.stock.request.kanban + product.product + + + +
+ +
+
+
+ + product.template.stock.request.kanban + product.template + + + +
+ +
+
+
+
diff --git a/stock_request_kanban/views/stock_inventory_kanban_views.xml b/stock_request_kanban/views/stock_inventory_kanban_views.xml new file mode 100644 index 000000000..ec5239838 --- /dev/null +++ b/stock_request_kanban/views/stock_inventory_kanban_views.xml @@ -0,0 +1,122 @@ + + + + stock.inventory.kanban.tree + stock.inventory.kanban + + + + + + + + + + stock.inventory.kanban.form + stock.inventory.kanban + +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + +
+
+ + + +
+
+
+
+ + Stock Inventory Kanbans + stock.inventory.kanban + ir.actions.act_window + tree,form + +

+ Click to add a Stock Inventory Kanban. +

+
+
+
diff --git a/stock_request_kanban/views/stock_request_kanban_views.xml b/stock_request_kanban/views/stock_request_kanban_views.xml new file mode 100644 index 000000000..5b980b3b6 --- /dev/null +++ b/stock_request_kanban/views/stock_request_kanban_views.xml @@ -0,0 +1,198 @@ + + + + + stock.request.kanban.tree + stock.request.kanban + + + + + + + + + + + + + + + + stock.request.kanban.search + stock.request.kanban + + + + + + + + + + + + + + + + + stock.request.kanban.form + stock.request.kanban + +
+
+ +
+
+
+ + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + stock.request.kanban.kanban + stock.request.kanban + + + + + + + + + + + +
+
+ Kanban Image +
+
+ + + +
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + + +
  • +
+
+
+ + + + + + + Stock Request Kanbans + stock.request.kanban + ir.actions.act_window + kanban,tree,form + +

+ Click to add a Stock Request Kanban. +

+
+
+ diff --git a/stock_request_kanban/views/stock_request_menu.xml b/stock_request_kanban/views/stock_request_menu.xml new file mode 100644 index 000000000..8f9150392 --- /dev/null +++ b/stock_request_kanban/views/stock_request_menu.xml @@ -0,0 +1,25 @@ + + + + + + diff --git a/stock_request_kanban/views/stock_request_order_views.xml b/stock_request_kanban/views/stock_request_order_views.xml new file mode 100644 index 000000000..cc7b55200 --- /dev/null +++ b/stock_request_kanban/views/stock_request_order_views.xml @@ -0,0 +1,20 @@ + + + + stock.request.order.form + stock.request.order + + + +