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..1a4eb5697 --- /dev/null +++ b/stock_request_kanban/README.rst @@ -0,0 +1,130 @@ +==================== +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-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--warehouse-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-warehouse/tree/12.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-12-0/stock-logistics-warehouse-12-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/12.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 you don't need to check the CRC of 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 value to 0 + +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 +* Eficent + +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..be526917b --- /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": "13.0.1.0.1", + "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..7819523ef --- /dev/null +++ b/stock_request_kanban/i18n/es.po @@ -0,0 +1,721 @@ +# 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_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 "Active" +msgid "Activities" +msgstr "Activo" + +#. 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 "Status State" +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:23 +#, 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:29 +#, 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:34 +#, 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:28 +#, 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:23 +#, 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:39 +#, 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 +#: selection:stock.inventory.kanban,state:0 +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 +#: selection:stock.inventory.kanban,state:0 +#, 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:32 +#, 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 +#: selection:stock.inventory.kanban,state:0 +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 +#: selection:stock.inventory.kanban,state:0 +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,help:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: 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_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction +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_request_kanban__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: stock_request_kanban +#: selection:stock.inventory.kanban,state:0 +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.stock_request_kanban_kanban_view +#, fuzzy +#| msgid "Kanban cards" +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:27 +#, 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:40 +#, 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 error" +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 +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +msgid "Overdue" +msgstr "" + +#. module: stock_request_kanban +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +#, fuzzy +msgid "Planned" +msgstr "Escanear" + +#. 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 must be the same" +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:38 +#, python-format +msgid "Procurement group must be the same" +msgstr "El grupo de reestablecimiento debe coincidir" + +#. module: stock_request_kanban +#: 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.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_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 +#: 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.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.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_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 +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +msgid "Today" +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:42 +#, 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 "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_inventory_kanban +#, fuzzy +msgid "wizard.stock.inventory.kanban" +msgstr "wizard.stock.request.kanban" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban +msgid "wizard.stock.request.kanban" +msgstr "wizard.stock.request.kanban" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban_abstract +msgid "wizard.stock.request.kanban.abstract" +msgstr "wizard.stock.request.kanban.abstract" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_order_kanban +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..4c716bffa --- /dev/null +++ b/stock_request_kanban/i18n/stock_request_kanban.pot @@ -0,0 +1,692 @@ +# 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" +"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_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_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:23 +#, 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:29 +#, 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:34 +#, python-format +msgid "Barcode %s is already scanned" +msgstr "" + +#. module: stock_request_kanban +#: code:addons/stock_request_kanban/wizard/wizard_stock_inventory_kanban.py:28 +#, 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:23 +#, 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:39 +#, 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 +#: selection:stock.inventory.kanban,state:0 +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 +#: selection:stock.inventory.kanban,state:0 +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:32 +#, 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 +#: selection:stock.inventory.kanban,state:0 +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 +#: selection:stock.inventory.kanban,state:0 +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,help:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: 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_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction +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_request_kanban__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: stock_request_kanban +#: selection:stock.inventory.kanban,state:0 +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.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:27 +#, 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:40 +#, 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 error" +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 +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +msgid "Overdue" +msgstr "" + +#. module: stock_request_kanban +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +msgid "Planned" +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:38 +#, python-format +msgid "Procurement group must be the same" +msgstr "" + +#. module: stock_request_kanban +#: 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.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_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 +#: 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.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.actions.act_window,name:stock_request_kanban.stock_request_kanban_action +msgid "Stock Request Kanbans" +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 +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +msgid "Today" +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:42 +#, 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 "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_inventory_kanban +msgid "wizard.stock.inventory.kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban +msgid "wizard.stock.request.kanban" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban_abstract +msgid "wizard.stock.request.kanban.abstract" +msgstr "" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_order_kanban +msgid "wizard.stock.request.order.kanban" +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..b31fdf9a6 --- /dev/null +++ b/stock_request_kanban/i18n/zh_CN.po @@ -0,0 +1,698 @@ +# 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_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_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:23 +#, 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:29 +#, 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:34 +#, 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:28 +#, 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:23 +#, 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:39 +#, 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 +#: selection:stock.inventory.kanban,state:0 +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 +#: selection:stock.inventory.kanban,state:0 +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:32 +#, 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 +#: selection:stock.inventory.kanban,state:0 +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 +#: selection:stock.inventory.kanban,state:0 +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,help:stock_request_kanban.field_stock_inventory_kanban__message_unread +#: 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_needaction +#: model:ir.model.fields,help:stock_request_kanban.field_stock_request_kanban__message_needaction +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_request_kanban__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "如果勾选此项, 某些信息将会产生传递错误。" + +#. module: stock_request_kanban +#: selection:stock.inventory.kanban,state:0 +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.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:27 +#, 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:40 +#, 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 error" +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 +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +msgid "Overdue" +msgstr "逾期" + +#. module: stock_request_kanban +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +msgid "Planned" +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:38 +#, python-format +msgid "Procurement group must be the same" +msgstr "补货组必须相同" + +#. module: stock_request_kanban +#: 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.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_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 +#: 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.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.actions.act_window,name:stock_request_kanban.stock_request_kanban_action +msgid "Stock Request Kanbans" +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 +#: selection:stock.inventory.kanban,activity_state:0 +#: selection:stock.request.kanban,activity_state:0 +msgid "Today" +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:42 +#, 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 "网站沟通记录" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_inventory_kanban +msgid "wizard.stock.inventory.kanban" +msgstr "wizard.stock.inventory.kanban" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban +msgid "wizard.stock.request.kanban" +msgstr "wizard.stock.request.kanban" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_kanban_abstract +msgid "wizard.stock.request.kanban.abstract" +msgstr "wizard.stock.request.kanban.abstract" + +#. module: stock_request_kanban +#: model:ir.model,name:stock_request_kanban.model_wizard_stock_request_order_kanban +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..06f5bed02 --- /dev/null +++ b/stock_request_kanban/models/stock_inventory_kanban.py @@ -0,0 +1,153 @@ +# 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..2d6f42c31 --- /dev/null +++ b/stock_request_kanban/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +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. 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..246e31fb7 --- /dev/null +++ b/stock_request_kanban/report/stock_request_kanban_templates.xml @@ -0,0 +1,103 @@ + + + + + + + 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..7692d87fe --- /dev/null +++ b/stock_request_kanban/security/ir.model.access.csv @@ -0,0 +1,5 @@ +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 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..4944b401d --- /dev/null +++ b/stock_request_kanban/static/description/index.html @@ -0,0 +1,483 @@ + + + + + + +Stock Request kanban + + + +
+

Stock Request kanban

+ + +

Beta License: AGPL-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 you don’t need to check the CRC of 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 value to 0
  • +
+

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
  • +
  • Eficent
  • +
+
+
+

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..2ba3b1e6b --- /dev/null +++ b/stock_request_kanban/static/src/js/stock_request_kanban_scan_controller.js @@ -0,0 +1,49 @@ +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($node) { + this._super.apply(this, arguments); + var $buttonScan = $(qweb.render("StockRequestKanban.Buttons")); + $buttonScan.on("click", this._onOpenWizard.bind(this)); + + $buttonScan.prependTo($node.find(".o_list_buttons")); + }, + + // ------------------------------------------------------------------------- + // 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..349d786d8 --- /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..9588c1027 --- /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..1e59ed68c --- /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.assertEqual(kanban.route_ids, self.route) + + 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 + + + +