Merge PR #854 into 13.0

Signed-off-by LoisRForgeFlow
This commit is contained in:
OCA-git-bot
2020-03-20 12:31:49 +00:00
44 changed files with 4428 additions and 0 deletions

View File

@@ -0,0 +1 @@
../../../../stock_request_kanban

View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

View File

@@ -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 <https://github.com/OCA/stock-logistics-warehouse/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 <https://github.com/OCA/stock-logistics-warehouse/issues/new?body=module:%20stock_request_kanban%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Creu Blanca
* Eficent
Contributors
~~~~~~~~~~~~
* Enric Tobella <etobella@creublanca.es>
* Kitti Upariphutthiphong <kittiu@ecosoft.co.th>
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 <https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_request_kanban>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -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

View File

@@ -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,
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data noupdate="1">
<record id="seq_stock_request_kanban" model="ir.sequence">
<field name="name">Stock Request Kanban</field>
<field name="code">stock.request.kanban</field>
<field name="prefix">KB</field>
<field name="padding">5</field>
<field name="company_id" eval="False" />
</record>
<record id="seq_stock_inventory_kanban" model="ir.sequence">
<field name="name">Stock Inventory Kanban</field>
<field name="code">stock.inventory.kanban</field>
<field name="prefix">IKB</field>
<field name="padding">5</field>
<field name="company_id" eval="False" />
</record>
</data>
</odoo>

View File

@@ -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 <etobella@creublanca.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 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"

View File

@@ -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 ""

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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())

View File

@@ -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)

View File

@@ -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)]
)

View File

@@ -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

View File

@@ -0,0 +1,2 @@
* Enric Tobella <etobella@creublanca.es>
* Kitti Upariphutthiphong <kittiu@ecosoft.co.th>

View File

@@ -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.

View File

@@ -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

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="kanban_paper_format" model="report.paperformat">
<field name="name">Kanban format</field>
<field name="format">A4</field>
<field name="orientation">Portrait</field>
<field name="margin_top">0.0</field>
<field name="margin_bottom">0.0</field>
<field name="margin_left">0.0</field>
<field name="margin_right">0.0</field>
<field name="header_spacing">0</field>
<field name="dpi">72</field>
</record>
</odoo>

View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017-2020 ForgeFlow, S.L.
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). -->
<odoo>
<template id="report_simple_label">
<div class="col-3" style="padding:20;height:350px;">
<div class="container">
<div class="row">
<div
class="col-12"
style="height:15%;border:2px solid black;text-align:center;vertical-align:middle;display:table;"
>
<div style="display: table-cell; vertical-align: middle;">
<strong t-field="o.location_id.name" />
</div>
</div>
</div>
<div class="row" t-if="o.product_id.default_code">
<div
class="col-12"
style="height:15%;border:2px solid black;text-align:center;vertical-align:middle;display:table;"
>
<div style="display: table-cell; vertical-align: middle;">
<strong
t-field="o.product_id.default_code"
t-if="o.product_id.default_code"
/>
</div>
</div>
</div>
<div class="row">
<div
class="col-12 align-middle"
style="height:40%;border:2px solid black;text-align:center;vertical-align:middle;display:table;"
>
<div style="display: table-cell; vertical-align: middle;">
<strong t-field="o.product_id.name" />
</div>
</div>
</div>
<div class="row">
<div
class="col-6"
style="height:10%;border:2px solid black;text-align:center;vertical-align:middle;"
>
<div style="vertical-align: middle;">
<span t-esc="float(o.product_qty)" />
<span t-field="o.product_id.uom_id.name" />
</div>
</div>
<div
class="col-6"
style="height:10%;border:2px solid black;text-align:center;vertical-align:middle;"
>
<div style="vertical-align: middle;">
<span t-esc="float(o.product_uom_qty)" />
<span t-field="o.product_uom_id.name" />
</div>
</div>
</div>
<div class="row">
<div
class="col-12"
style="height:10%;border:2px solid black;text-align:center;vertical-align:middle;display:table;"
>
<div style="display: table-cell; vertical-align: middle;">
<span t-field="o.name" />
</div>
</div>
</div>
<div class="row">
<div class="col-12" style="height:10%;">
<img
t-att-src="'/report/barcode/%s/%s?width=%s&amp;height=%s' % (o.get_barcode_format(), o.name, 320, 20)"
style="height:80%; width: 100%;"
/>
</div>
</div>
</div>
</div>
</template>
<template id="report_kanban_label">
<t t-call="web.basic_layout">
<t t-foreach="docs" t-as="o">
<div class="page">
<t t-call="stock_request_kanban.report_simple_label">
<t t-set="o" t-value="o" />
</t>
</div>
</t>
</t>
</template>
<report
id="action_report_kanban"
string="Print kanban"
model="stock.request.kanban"
report_type="qweb-pdf"
name="stock_request_kanban.report_kanban_label"
file="stock_request_kanban.report_kanban_label"
paperformat="stock_request_kanban.kanban_paper_format"
menu="True"
/>
</odoo>

View File

@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_stock_request_kanban_user stock request kanban user model_stock_request_kanban stock_request.group_stock_request_user 1 1 1
3 access_stock_request_kanban_manager stock request kanban manager model_stock_request_kanban stock_request.group_stock_request_manager 1 1 1 1
4 access_stock_inventory_kanban_user stock inventory kanban user model_stock_inventory_kanban stock_request.group_stock_request_user 1 1 1
5 access_stock_inventory_kanban_manager stock inventory kanban manager model_stock_inventory_kanban stock_request.group_stock_request_manager 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,483 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Stock Request kanban</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="stock-request-kanban">
<h1 class="title">Stock Request kanban</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_request_kanban"><img alt="OCA/stock-logistics-warehouse" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--warehouse-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/stock-logistics-warehouse-12-0/stock-logistics-warehouse-12-0-stock_request_kanban"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/153/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>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.</p>
<p>It is created following the concept of lean kanban cards.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id2">Usage</a><ul>
<li><a class="reference internal" href="#creation" id="id3">Creation</a></li>
<li><a class="reference internal" href="#request-kanban" id="id4">Request kanban</a></li>
<li><a class="reference internal" href="#request-kanban-batch" id="id5">Request kanban batch</a></li>
</ul>
</li>
<li><a class="reference internal" href="#bug-tracker" id="id6">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id7">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id8">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id9">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id10">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<p>If you dont need to check the CRC of the kanban card, you should:</p>
<ul class="simple">
<li>Access on Development mode</li>
<li>Access Settings / Technical / Parameters / System Parameters</li>
<li>Create a parameter with name stock_request_kanban.crc and set it value to 0</li>
</ul>
<p>If you want to change the format of the QR, you should:</p>
<ul class="simple">
<li>Access on Development mode</li>
<li>Access Settings / Technical / Parameters / System Parameters</li>
<li>Create a parameter with name stock_request_kanban.barcode_format and set
the format of the barcode</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
<div class="section" id="creation">
<h2><a class="toc-backref" href="#id3">Creation</a></h2>
<ul class="simple">
<li>Go to Stock Requests / Stock Requests Kanban and create a new Kanban.</li>
<li>Indicate a product, quantity and location.</li>
<li>Press Save.</li>
<li>Print the kanban and put it in the storage of the product</li>
</ul>
</div>
<div class="section" id="request-kanban">
<h2><a class="toc-backref" href="#id4">Request kanban</a></h2>
<p>This should be used if you want to create the kanban when the card is consumed.</p>
<ul class="simple">
<li>Once the product is consumed, take the card</li>
<li>Go to Stock Requests / Order Kanban Card</li>
<li>Scan the card</li>
<li>The stock request is created</li>
</ul>
</div>
<div class="section" id="request-kanban-batch">
<h2><a class="toc-backref" href="#id5">Request kanban batch</a></h2>
<p>This should be used when you will store the cards and create request orders
for kanbans later.</p>
<ul class="simple">
<li>Once the product is consumed, take the card and store it</li>
<li>Create a store request order</li>
<li>Press the scan button</li>
<li>Scan all the pending kanban cards</li>
</ul>
</div>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id6">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/stock-logistics-warehouse/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/stock-logistics-warehouse/issues/new?body=module:%20stock_request_kanban%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id7">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id8">Authors</a></h2>
<ul class="simple">
<li>Creu Blanca</li>
<li>Eficent</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id9">Contributors</a></h2>
<ul class="simple">
<li>Enric Tobella &lt;<a class="reference external" href="mailto:etobella&#64;creublanca.es">etobella&#64;creublanca.es</a>&gt;</li>
<li>Kitti Upariphutthiphong &lt;<a class="reference external" href="mailto:kittiu&#64;ecosoft.co.th">kittiu&#64;ecosoft.co.th</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id10">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_request_kanban">OCA/stock-logistics-warehouse</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,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;
});

View File

@@ -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;
});

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<templates id="template" xml:space="preserve">
<button t-name="StockRequestKanban.Buttons" class="btn-primary btn" type="button">
Scan Kanban
</button>
</templates>

View File

@@ -0,0 +1,2 @@
from . import test_kanban
from . import test_inventory_kanban

View File

@@ -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])

View File

@@ -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)

View File

@@ -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)])
)

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 ForgeFlow, S.L.
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). -->
<odoo>
<record id="product_product_form_view_kanban_card_button" model="ir.ui.view">
<field name="name">product.product.stock.request.kanban</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view" />
<field
name="groups_id"
eval="[(4, ref('stock_request.group_stock_request_user'))]"
/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button
class="oe_stat_button"
name="action_view_kanban_cards"
type="object"
attrs="{'invisible':[('type', 'not in', ['product', 'consu'])]}"
icon="fa-barcode"
>
<field
string="Kanban Cards"
name="kanban_card_count"
widget="statinfo"
/>
</button>
</div>
</field>
</record>
<record id="product_template_form_view_bom_button" model="ir.ui.view">
<field name="name">product.template.stock.request.kanban</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_only_form_view" />
<field
name="groups_id"
eval="[(4, ref('stock_request.group_stock_request_user'))]"
/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button
class="oe_stat_button"
name="action_view_kanban_cards"
type="object"
attrs="{'invisible':[('type', 'not in', ['product', 'consu'])]}"
icon="fa-barcode"
>
<field
string="Kanban Cards"
name="kanban_card_count"
widget="statinfo"
/>
</button>
</div>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_stock_inventory_kanban_tree" model="ir.ui.view">
<field name="name">stock.inventory.kanban.tree</field>
<field name="model">stock.inventory.kanban</field>
<field name="arch" type="xml">
<tree string="Stock Inventories">
<field name="name" />
<field name="count_missing_kanbans" />
<field name="state" />
</tree>
</field>
</record>
<record id="view_stock_inventory_kanban_form" model="ir.ui.view">
<field name="name">stock.inventory.kanban.form</field>
<field name="model">stock.inventory.kanban</field>
<field name="arch" type="xml">
<form string="Stock Inventories">
<header>
<button
name="start_inventory"
type="object"
string="Start"
states="draft"
class="btn-primary"
/>
<button
name="finish_inventory"
type="object"
string="Finish"
states="in_progress"
class="btn-primary"
/>
<button
name="print_missing_kanbans"
type="object"
string="Print missing"
states="finished"
/>
<button
name="close_inventory"
type="object"
string="Close"
states="finished"
class="btn-primary"
/>
<button
name="cancel"
type="object"
string="Cancel"
states="draft,in_progress,finished"
/>
<button
name="to_draft"
type="object"
string="Set to draft"
states="cancelled"
/>
<field name="state" widget="statusbar" />
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button
name="%(stock_request_kanban.wizard_stock_inventory_kanban_action)d"
type="action"
icon="fa-barcode"
string="Scan"
states="in_progress"
class="oe_read_only"
/>
</div>
<div class="oe_title">
<label for="name" string="Inventory Kanban" />
<h1>
<field name="name" readonly="1" />
</h1>
</div>
<group>
<field
name="warehouse_ids"
widget="many2many_tags"
groups="stock.group_stock_multi_locations"
/>
<field
name="location_ids"
widget="many2many_tags"
groups="stock.group_stock_multi_locations"
/>
<field name="product_ids" widget="many2many_tags" />
</group>
<notebook>
<page string="Kanban" id="kanban">
<field name="kanban_ids" />
</page>
<page string="Missing" id="missing">
<field name="missing_kanban_ids" />
</page>
<page string="Scanned" id="scanned">
<field name="scanned_kanban_ids" />
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" />
<field name="activity_ids" widget="mail_activity" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<record id="stock_inventory_kanban_action" model="ir.actions.act_window">
<field name="name">Stock Inventory Kanbans</field>
<field name="res_model">stock.inventory.kanban</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a Stock Inventory Kanban.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,198 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017-2020 ForgeFlow, S.L.
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). -->
<odoo>
<record id="view_stock_request_kanban_tree" model="ir.ui.view">
<field name="name">stock.request.kanban.tree</field>
<field name="model">stock.request.kanban</field>
<field name="arch" type="xml">
<tree
string="Stock Requests"
decoration-muted="active == 'false'"
decoration-bf="message_needaction==True"
>
<field name="message_needaction" invisible="1" />
<field name="name" />
<field name="warehouse_id" groups="stock.group_stock_multi_locations" />
<field name="location_id" groups="stock.group_stock_multi_locations" />
<field
name="route_id"
options="{'no_create': True}"
groups="stock.group_stock_multi_locations"
/>
<field name="product_id" />
<field
name="product_uom_id"
options="{'no_open': True, 'no_create': True}"
groups="uom.group_uom"
/>
<field name="product_uom_qty" />
<field name="active" invisible="1" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="stock_request_kanban_search">
<field name="name">stock.request.kanban.search</field>
<field name="model">stock.request.kanban</field>
<field name="arch" type="xml">
<search string="Stock Requests Kanban">
<field name="name" string="Stock Requests Kanban" />
<field name="warehouse_id" groups="stock.group_stock_multi_locations" />
<field name="location_id" groups="stock.group_stock_multi_locations" />
<field name="company_id" groups="base.group_multi_company" />
<field name="product_id" />
<filter
string="Archived"
name="inactive"
domain="[('active','=',False)]"
/>
<group expand="0" string="Group By">
<filter
name="warehouse"
string="Warehouse"
domain="[]"
context="{'group_by':'warehouse_id'}"
/>
<filter
name="location"
string="Location"
domain="[]"
context="{'group_by':'location_id'}"
/>
</group>
</search>
</field>
</record>
<record id="view_stock_request_kanban_form" model="ir.ui.view">
<field name="name">stock.request.kanban.form</field>
<field name="model">stock.request.kanban</field>
<field name="arch" type="xml">
<form string="Stock Requests">
<header />
<sheet>
<div class="oe_button_box" name="button_box" />
<div class="oe_title">
<label for="name" string="Stock Request Kanban" />
<h1>
<field name="name" readonly="1" />
</h1>
</div>
<group>
<group>
<field name="product_id" />
</group>
<group>
<field
name="warehouse_id"
widget="selection"
groups="stock.group_stock_multi_locations"
/>
<field
name="location_id"
groups="stock.group_stock_multi_locations"
/>
<field
name="route_id"
options="{'no_create': True}"
groups="stock.group_stock_multi_locations"
/>
<field name="route_ids" invisible="1" />
<field
name="procurement_group_id"
groups="stock.group_adv_location"
/>
<field
name="company_id"
groups="base.group_multi_company"
options="{'no_create': True}"
/>
</group>
<group name="quantities">
<label for="product_uom_qty" />
<div>
<field name="product_uom_qty" class="oe_inline" />
<field
name="product_uom_id"
class="oe_inline"
options="{'no_open': True, 'no_create': True}"
groups="uom.group_uom"
/>
</div>
</group>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" />
<field name="activity_ids" widget="mail_activity" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<!-- Partner Kanban View -->
<record model="ir.ui.view" id="stock_request_kanban_kanban_view">
<field name="name">stock.request.kanban.kanban</field>
<field name="model">stock.request.kanban</field>
<field name="arch" type="xml">
<kanban class="o_res_partner_kanban">
<field name="id" />
<field name="name" />
<field name="product_id" />
<field name="display_name" />
<field name="warehouse_id" />
<field name="location_id" />
<field name="product_qty" />
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click o_res_partner_kanban">
<div class="o_kanban_image">
<img
t-att-src="kanban_image('product.product', 'image_small', record.product_id.raw_value)"
alt="Kanban Image"
/>
</div>
<div class="oe_kanban_details">
<strong class="o_kanban_record_title">
<field name="display_name" />
</strong>
<div class="o_kanban_tags_section" />
<ul>
<li t-if="record.product_id.raw_value">
<field name="product_id" />
</li>
<li
t-if="record.warehouse_id.raw_value"
groups="stock.group_stock_multi_locations"
>
<field name="warehouse_id" />
</li>
<li
t-if="record.location_id.raw_value"
groups="stock.group_stock_multi_locations"
>
<field name="location_id" />
</li>
<li t-if="record.product_qty">
<field name="product_qty" />
<field name="product_uom_id" />
</li>
</ul>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="stock_request_kanban_action" model="ir.actions.act_window">
<field name="name">Stock Request Kanbans</field>
<field name="res_model">stock.request.kanban</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">kanban,tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a Stock Request Kanban.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<menuitem
id="stock_request_kanban_menu"
name="Kanban cards"
parent="stock_request.menu_stock_request_master_data"
action="stock_request_kanban_action"
groups="stock_request.group_stock_request_manager"
sequence="110"
/>
<menuitem
id="menu_wizard_stock_request_kanban"
name="Request from Kanban cards"
parent="stock_request.menu_stock_request_operations"
action="wizard_stock_request_kanban_action"
sequence="40"
/>
<menuitem
id="menu_wizard_stock_inventory_kanban"
name="Inventory"
parent="stock_request.menu_stock_request_operations"
action="stock_inventory_kanban_action"
sequence="60"
/>
</odoo>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record model="ir.ui.view" id="stock_request_order_form">
<field name="name">stock.request.order.form</field>
<field name="model">stock.request.order</field>
<field name="inherit_id" ref="stock_request.stock_request_order_form" />
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button
name="%(stock_request_kanban.wizard_stock_request_order_kanban_action)d"
type="action"
icon="fa-barcode"
string="Scan"
states="draft"
class="oe_read_only"
/>
</xpath>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017 Eficent
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). -->
<odoo>
<template
id="stock_request_kanban_assets_backend"
name="stock_request_kanban assets"
inherit_id="web.assets_backend"
>
<xpath expr="." position="inside">
<script
type="text/javascript"
src="/stock_request_kanban/static/src/js/stock_request_kanban_scan_controller.js"
/>
<script
type="text/javascript"
src="/stock_request_kanban/static/src/js/stock_request_kanban_scan_view.js"
/>
</xpath>
</template>
<record id="view_stock_request_tree" model="ir.ui.view">
<field name="name">stock.request.tree</field>
<field name="model">stock.request</field>
<field name="inherit_id" ref="stock_request.view_stock_request_tree" />
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="js_class">stock_request_kanban_list</attribute>
</tree>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,7 @@
# Copyright 2018 Creu Blanca
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from . import wizard_stock_request_kanban_abstract
from . import wizard_stock_request_kanban
from . import wizard_stock_request_order_kanban
from . import wizard_stock_inventory_kanban

View File

@@ -0,0 +1,33 @@
# 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 import _, fields, models
class WizardStockInventoryKanban(models.TransientModel):
_name = "wizard.stock.inventory.kanban"
_description = "Stock Inventory Kanban Wizard"
_inherit = "wizard.stock.request.kanban.abstract"
inventory_kanban_id = fields.Many2one("stock.inventory.kanban", readonly=True)
def barcode_ending(self):
super().barcode_ending()
self.inventory_kanban_id.write({"scanned_kanban_ids": [(4, self.kanban_id.id)]})
def validate_kanban(self, barcode):
res = super().validate_kanban(barcode)
if not self.inventory_kanban_id.kanban_ids.filtered(
lambda r: r == self.kanban_id
):
self.status = _("Barcode %s is not in the inventory") % barcode
self.status_state = 1
return False
if self.inventory_kanban_id.scanned_kanban_ids.filtered(
lambda r: r == self.kanban_id
):
self.status = _("Barcode %s is already scanned") % barcode
self.status_state = 1
return False
return res

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" ?>
<!--
Copyright 2017-2020 ForgeFlow, S.L.
Copyright 2017 Creu Blanca
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
-->
<odoo>
<record id="wizard_stock_inventory_kanban_form" model="ir.ui.view">
<field name="name">wizard.stock.inventory.kanban.form</field>
<field name="model">wizard.stock.inventory.kanban</field>
<field name="arch" type="xml">
<form string="Add Kanban">
<div
class="alert alert-success text-center o_form_header"
role="alert"
style="margin-bottom:0px;"
attrs="{'invisible':[('status_state', '!=', 0)]}"
>
<bold>
<field name="status" />
</bold>
</div>
<div
class="alert alert-danger alert-dismissable text-center"
role="alert"
style="margin-bottom:0px;"
attrs="{'invisible':[('status_state', '=', 0)]}"
>
<bold>
<field name="status" />
</bold>
</div>
<field name="status_state" invisible="1" />
<field name="kanban_id" invisible="1" />
<field name="inventory_kanban_id" invisible="1" />
<field name="_barcode_scanned" widget="barcode_handler" />
<footer>
<button
name="action_cancel"
string="Close"
class="oe_link"
special="cancel"
/>
</footer>
</form>
</field>
</record>
<act_window
id="wizard_stock_inventory_kanban_action"
name="Add Kanban"
res_model="wizard.stock.inventory.kanban"
view_mode="form"
context="{'default_inventory_kanban_id': active_id}"
target="new"
/>
</odoo>

View File

@@ -0,0 +1,51 @@
# 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 import _, fields, models
class WizardStockRequestKanban(models.TransientModel):
_name = "wizard.stock.request.kanban"
_description = "Stock Request Kanban Wizard"
_inherit = "wizard.stock.request.kanban.abstract"
stock_request_id = fields.Many2one("stock.request", readonly=True)
def barcode_ending(self):
super().barcode_ending()
self.stock_request_id = self.env["stock.request"].create(
self.stock_request_kanban_values()
)
self.stock_request_ending()
self.update_status()
def stock_request_ending(self):
self.stock_request_id.action_confirm()
def update_status(self):
self.update(
{
"status_state": 0,
"status": _(
"Added kanban %s for product %s"
% (
self.stock_request_id.kanban_id.name,
self.stock_request_id.product_id.display_name,
)
),
}
)
def stock_request_kanban_values(self):
return {
"company_id": self.kanban_id.company_id.id,
"procurement_group_id": self.kanban_id.procurement_group_id.id or False,
"location_id": self.kanban_id.location_id.id or False,
"warehouse_id": self.kanban_id.warehouse_id.id or False,
"product_id": self.kanban_id.product_id.id,
"product_uom_id": self.kanban_id.product_uom_id.id or False,
"route_id": self.kanban_id.route_id.id or False,
"product_uom_qty": self.kanban_id.product_uom_qty,
"kanban_id": self.kanban_id.id,
}

View File

@@ -0,0 +1,44 @@
# 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 import _, fields, models
class WizardStockRequestKanbanAbstract(models.AbstractModel):
_name = "wizard.stock.request.kanban.abstract"
_description = "Stock Request Kanban Abstract Wizard"
_inherit = "barcodes.barcode_events_mixin"
kanban_id = fields.Many2one("stock.request.kanban", readonly=True)
status = fields.Text(readonly=True, default="Start scanning")
status_state = fields.Integer(default=0, readonly=True)
def on_barcode_scanned(self, barcode):
self.kanban_id = self.env["stock.request.kanban"].search_barcode(barcode)
if not self.kanban_id:
self.status = (
_(
"Barcode %s does not correspond to any "
"Kanban. Try with another barcode or "
"press Close to finish scanning."
)
% barcode
)
self.status_state = 1
return
if self.validate_kanban(barcode):
self.status_state = 0
self.barcode_ending()
return
def barcode_ending(self):
pass
def validate_kanban(self, barcode):
"""
It must return True if the kanban is valid, False otherwise
:param barcode:
:return:
"""
return True

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" ?>
<!--
Copyright 2017-2020 ForgeFlow, S.L.
Copyright 2017 Creu Blanca
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
-->
<odoo>
<record id="wizard_stock_request_kanban_form" model="ir.ui.view">
<field name="name">wizard.stock.request.kanban.form</field>
<field name="model">wizard.stock.request.kanban</field>
<field name="arch" type="xml">
<form string="Add Kanban">
<div
class="alert alert-success text-center o_form_header"
role="alert"
style="margin-bottom:0px;"
attrs="{'invisible':[('status_state', '!=', 0)]}"
>
<bold>
<field name="status" />
</bold>
</div>
<div
class="alert alert-danger alert-dismissable text-center"
role="alert"
style="margin-bottom:0px;"
attrs="{'invisible':[('status_state', '=', 0)]}"
>
<bold>
<field name="status" />
</bold>
</div>
<field name="status_state" invisible="1" />
<field name="kanban_id" invisible="1" />
<field name="stock_request_id" invisible="1" />
<field name="_barcode_scanned" widget="barcode_handler" />
<footer>
<button
name="action_cancel"
string="Close"
class="oe_link"
special="cancel"
/>
</footer>
</form>
</field>
</record>
<act_window
id="wizard_stock_request_kanban_action"
name="Add Kanban"
res_model="wizard.stock.request.kanban"
view_mode="form"
target="new"
/>
</odoo>

View File

@@ -0,0 +1,55 @@
# 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 import _, fields, models
from odoo.exceptions import ValidationError
class WizardStockRequestOrderKanban(models.TransientModel):
_name = "wizard.stock.request.order.kanban"
_description = "Stock Request Order Kanban Wizard"
_inherit = "wizard.stock.request.kanban"
order_id = fields.Many2one("stock.request.order", required=True)
def validate_kanban(self, barcode):
res = super().validate_kanban(barcode)
if self.order_id.stock_request_ids.filtered(
lambda r: r.kanban_id == self.kanban_id
):
self.status = _("Barcode %s is on the order") % barcode
self.status_state = 1
return False
if self.order_id.state != "draft":
raise ValidationError(
_("Lines only can be added on orders with draft state")
)
if not self.order_id.company_id:
self.order_id.company_id = self.kanban_id.company_id
elif self.order_id.company_id != self.kanban_id.company_id:
raise ValidationError(_("Company must be the same"))
if (
self.kanban_id.procurement_group_id
and self.order_id.procurement_group_id
!= self.kanban_id.procurement_group_id
):
raise ValidationError(_("Procurement group must be the same"))
if self.order_id.location_id != self.kanban_id.location_id:
raise ValidationError(_("Location must be the same"))
if self.order_id.warehouse_id != self.kanban_id.warehouse_id:
raise ValidationError(_("Warehouse must be the same"))
return res
def stock_request_kanban_values(self):
res = super().stock_request_kanban_values()
res["order_id"] = (self.order_id.id,)
res["expected_date"] = fields.Datetime.to_string(self.order_id.expected_date)
return res
def stock_request_ending(self):
return
def barcode_ending(self):
super().barcode_ending()
self.order_id = self.stock_request_id.order_id

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" ?>
<!--
Copyright 2017-2020 ForgeFlow, S.L.
Copyright 2017 Creu Blanca
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
-->
<odoo>
<record id="wizard_stock_request_order_kanban_form" model="ir.ui.view">
<field name="name">wizard.stock.request.order.kanban.form</field>
<field name="model">wizard.stock.request.order.kanban</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="wizard_stock_request_kanban_form" />
<field name="arch" type="xml">
<field name="kanban_id" position="after">
<field name="order_id" invisible="1" />
</field>
</field>
</record>
<act_window
id="wizard_stock_request_order_kanban_action"
name="Add Kanban"
res_model="wizard.stock.request.order.kanban"
view_mode="form"
context="{'default_order_id': active_id}"
target="new"
/>
</odoo>