mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
1
setup/stock_request_kanban/odoo/addons/stock_request_kanban
Symbolic link
1
setup/stock_request_kanban/odoo/addons/stock_request_kanban
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../stock_request_kanban
|
||||
6
setup/stock_request_kanban/setup.py
Normal file
6
setup/stock_request_kanban/setup.py
Normal file
@@ -0,0 +1,6 @@
|
||||
import setuptools
|
||||
|
||||
setuptools.setup(
|
||||
setup_requires=['setuptools-odoo'],
|
||||
odoo_addon=True,
|
||||
)
|
||||
130
stock_request_kanban/README.rst
Normal file
130
stock_request_kanban/README.rst
Normal 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.
|
||||
5
stock_request_kanban/__init__.py
Normal file
5
stock_request_kanban/__init__.py
Normal 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
|
||||
31
stock_request_kanban/__manifest__.py
Normal file
31
stock_request_kanban/__manifest__.py
Normal 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,
|
||||
}
|
||||
19
stock_request_kanban/data/stock_request_sequence_data.xml
Normal file
19
stock_request_kanban/data/stock_request_sequence_data.xml
Normal 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>
|
||||
721
stock_request_kanban/i18n/es.po
Normal file
721
stock_request_kanban/i18n/es.po
Normal 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"
|
||||
692
stock_request_kanban/i18n/stock_request_kanban.pot
Normal file
692
stock_request_kanban/i18n/stock_request_kanban.pot
Normal 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 ""
|
||||
|
||||
698
stock_request_kanban/i18n/zh_CN.po
Normal file
698
stock_request_kanban/i18n/zh_CN.po
Normal 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"
|
||||
7
stock_request_kanban/models/__init__.py
Normal file
7
stock_request_kanban/models/__init__.py
Normal 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
|
||||
53
stock_request_kanban/models/product.py
Normal file
53
stock_request_kanban/models/product.py
Normal 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
|
||||
153
stock_request_kanban/models/stock_inventory_kanban.py
Normal file
153
stock_request_kanban/models/stock_inventory_kanban.py
Normal 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())
|
||||
10
stock_request_kanban/models/stock_request.py
Normal file
10
stock_request_kanban/models/stock_request.py
Normal 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)
|
||||
59
stock_request_kanban/models/stock_request_kanban.py
Normal file
59
stock_request_kanban/models/stock_request_kanban.py
Normal 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)]
|
||||
)
|
||||
16
stock_request_kanban/readme/CONFIGURE.rst
Normal file
16
stock_request_kanban/readme/CONFIGURE.rst
Normal 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
|
||||
2
stock_request_kanban/readme/CONTRIBUTORS.rst
Normal file
2
stock_request_kanban/readme/CONTRIBUTORS.rst
Normal file
@@ -0,0 +1,2 @@
|
||||
* Enric Tobella <etobella@creublanca.es>
|
||||
* Kitti Upariphutthiphong <kittiu@ecosoft.co.th>
|
||||
8
stock_request_kanban/readme/DESCRIPTION.rst
Normal file
8
stock_request_kanban/readme/DESCRIPTION.rst
Normal 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.
|
||||
28
stock_request_kanban/readme/USAGE.rst
Normal file
28
stock_request_kanban/readme/USAGE.rst
Normal 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
|
||||
14
stock_request_kanban/report/report_paper_format.xml
Normal file
14
stock_request_kanban/report/report_paper_format.xml
Normal 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>
|
||||
103
stock_request_kanban/report/stock_request_kanban_templates.xml
Normal file
103
stock_request_kanban/report/stock_request_kanban_templates.xml
Normal 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&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>
|
||||
5
stock_request_kanban/security/ir.model.access.csv
Normal file
5
stock_request_kanban/security/ir.model.access.csv
Normal 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
|
||||
|
BIN
stock_request_kanban/static/description/icon.png
Normal file
BIN
stock_request_kanban/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
483
stock_request_kanban/static/description/index.html
Normal file
483
stock_request_kanban/static/description/index.html
Normal 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 don’t 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 <<a class="reference external" href="mailto:etobella@creublanca.es">etobella@creublanca.es</a>></li>
|
||||
<li>Kitti Upariphutthiphong <<a class="reference external" href="mailto:kittiu@ecosoft.co.th">kittiu@ecosoft.co.th</a>></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>
|
||||
@@ -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;
|
||||
});
|
||||
@@ -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;
|
||||
});
|
||||
@@ -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>
|
||||
2
stock_request_kanban/tests/__init__.py
Normal file
2
stock_request_kanban/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import test_kanban
|
||||
from . import test_inventory_kanban
|
||||
17
stock_request_kanban/tests/base_test.py
Normal file
17
stock_request_kanban/tests/base_test.py
Normal 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])
|
||||
112
stock_request_kanban/tests/test_inventory_kanban.py
Normal file
112
stock_request_kanban/tests/test_inventory_kanban.py
Normal 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)
|
||||
200
stock_request_kanban/tests/test_kanban.py
Normal file
200
stock_request_kanban/tests/test_kanban.py
Normal 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)])
|
||||
)
|
||||
57
stock_request_kanban/views/product_views.xml
Normal file
57
stock_request_kanban/views/product_views.xml
Normal 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>
|
||||
122
stock_request_kanban/views/stock_inventory_kanban_views.xml
Normal file
122
stock_request_kanban/views/stock_inventory_kanban_views.xml
Normal 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>
|
||||
198
stock_request_kanban/views/stock_request_kanban_views.xml
Normal file
198
stock_request_kanban/views/stock_request_kanban_views.xml
Normal 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>
|
||||
25
stock_request_kanban/views/stock_request_menu.xml
Normal file
25
stock_request_kanban/views/stock_request_menu.xml
Normal 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>
|
||||
20
stock_request_kanban/views/stock_request_order_views.xml
Normal file
20
stock_request_kanban/views/stock_request_order_views.xml
Normal 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>
|
||||
31
stock_request_kanban/views/stock_request_views.xml
Normal file
31
stock_request_kanban/views/stock_request_views.xml
Normal 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>
|
||||
7
stock_request_kanban/wizard/__init__.py
Normal file
7
stock_request_kanban/wizard/__init__.py
Normal 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
|
||||
33
stock_request_kanban/wizard/wizard_stock_inventory_kanban.py
Normal file
33
stock_request_kanban/wizard/wizard_stock_inventory_kanban.py
Normal 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
|
||||
@@ -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>
|
||||
51
stock_request_kanban/wizard/wizard_stock_request_kanban.py
Normal file
51
stock_request_kanban/wizard/wizard_stock_request_kanban.py
Normal 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,
|
||||
}
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user