Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WMS][12.0] Add vertical lift support - alpha version #633

Closed
wants to merge 50 commits into from
Closed
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
7e4a750
Prototype for kardex UI
guewen Jun 11, 2019
bae9b34
Add tray types
guewen Jun 14, 2019
4096154
Autogenerate tray sublocations
guewen Jun 14, 2019
97ba5a8
Add kardex attribute on stock locations
guewen Jun 18, 2019
b2beb62
Add basic handling of Pick scenario
guewen Jun 18, 2019
b053444
Replace random matrix by actual location configuration
guewen Jun 18, 2019
404cf86
Color cells in blue when contains stock (remove random)
guewen Jun 19, 2019
488b5c7
Fix UI issues in kardex screen
guewen Jun 19, 2019
50e97fe
Rationalize stock location fields for kardex
guewen Jun 19, 2019
9c1c28c
Improve UX for locations management
guewen Jun 20, 2019
4b3254a
Make usage of Serialized field more robust
guewen Jun 20, 2019
a200080
Add demo data
guewen Jun 20, 2019
da836e6
Add test coverage
guewen Jun 20, 2019
4b3fe4c
Remove empty XML files
guewen Jun 20, 2019
3107750
Rename current_move_line → current_move_line_id
guewen Jun 20, 2019
e64f868
Rename German in trays by English words
guewen Jun 20, 2019
dd8ece2
Increase test coverage
guewen Jun 21, 2019
ebf703a
Add new fields on kardex view
guewen Jun 21, 2019
4cc84b4
Fix operation alignment
guewen Jun 24, 2019
837129e
Add a wizard to enter a barcode manually
guewen Jun 24, 2019
2c151ae
Add onclick handler on tray matrix widget
guewen Jun 26, 2019
2e99fff
Rename to stock_vertical_lift
guewen Jun 26, 2019
a653ad4
Add selection of hardware for shuttles
guewen Jun 26, 2019
e31ae19
Scan destination for pick operations
guewen Jun 26, 2019
24d07a2
Add svg files for the buttons barcodes
guewen Jun 26, 2019
d5e1546
Add option to generate custom name format for cells
guewen Aug 28, 2019
116ace8
Add position z in tray cells
damendieta Aug 28, 2019
6636b8e
Add development status, readme, pip files
guewen Aug 29, 2019
e74b74d
Remove tray type from vertical lift
guewen Sep 19, 2019
095e23c
Add temporary oca_dependencies until it's merged
guewen Sep 19, 2019
16e6b64
Add merge=union attribute on oca_dependencies.txt
guewen Sep 19, 2019
7a319cb
Adapt views xmlids to follow stock_location_tray changes
guewen Oct 8, 2019
8f5a6e8
Add method on location to fetch a tray
guewen Oct 8, 2019
8a9a2e5
fixup! Add method on location to fetch a tray
guewen Oct 8, 2019
55bb211
Remove vertical_lift_shuttle.address field
guewen Oct 8, 2019
08e450c
fixup! fixup! Add method on location to fetch a tray
guewen Oct 9, 2019
3ed2430
Split the shuttle operations in different models/views
guewen Oct 9, 2019
935ce97
fixup! Split the shuttle operations in different models/views
guewen Oct 10, 2019
a35742b
fixup! fixup! fixup! Add method on location to fetch a tray
guewen Oct 10, 2019
c9b397e
Add default views to re-open the screen views properly
guewen Oct 10, 2019
1e7c2bf
Add Put-Away workflow
guewen Oct 10, 2019
68412a3
fixup! Add Put-Away workflow
guewen Oct 14, 2019
c6ebd35
Implement inventory screen
guewen Oct 15, 2019
848f39e
Fix 'fetch' buttons on move lines
guewen Oct 15, 2019
c3cc49e
Remove useless file
guewen Oct 15, 2019
dbc01b2
Add button on locations to fetch the tray
guewen Oct 15, 2019
a3da5f2
[IMP] abstract communication with shuttle
gurneyalex Nov 4, 2019
60aed35
Fix super call
guewen Nov 8, 2019
cef82cb
Add method to refresh a shuttle screen
guewen Nov 8, 2019
ff501e9
[IMP] add a proxy to communicate with the kardex server
gurneyalex Nov 14, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
oca_dependencies.txt merge=union
2 changes: 2 additions & 0 deletions oca_dependencies.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ account-analytic
product-attribute
server-ux
web

stock-logistics-warehouse https://github.com/guewen/stock-logistics-warehouse 12.0-add-stock_location_tray
1 change: 1 addition & 0 deletions setup/stock_vertical_lift/odoo/addons/stock_vertical_lift
6 changes: 6 additions & 0 deletions setup/stock_vertical_lift/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
6 changes: 6 additions & 0 deletions setup/stock_vertical_lift_kardex/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
134 changes: 134 additions & 0 deletions stock_vertical_lift/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
=============
Vertical Lift
=============

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |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_vertical_lift
: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_vertical_lift
: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|

Add configuration and dedicated screens to work with Vertical Lift
systems (such as Kardex Remstar, Modula, ...). Drivers for controlling
the lifts physically must be added by additional addons.

.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/oca_module_lifecycle_development_status.rst>`_

**Table of contents**

.. contents::
:local:

Configuration
=============

General
~~~~~~~

In Inventory Settings, you must have:

* Storage Locations
* Multi-Warehouses
* Multi-Step Routes

Locations
~~~~~~~~~

Additional configuration parameters are added in Locations:

* Sub-locations of a location with the "Is a Vertical Lift View Location"
activated are considered as "Shuttles". A shuttle is a vertical lift shelf.
* Sub-locations of shuttles are considered as "Trays", which is a tier of a
shuttle. When a tray is created, a tray type must be selected. When saved, the
tray location will automatically create as many sub-locations - called
"Cells" - as the tray type contains.
* The tray type of a tray can be changed as long as none of its cell contains
products. When changed, it archives the cells and creates new ones as
configured on the new tray type.

Tray types
~~~~~~~~~~

Tray types can be configured in the Inventory settings.
A tray type defines how much cells a tray can hold. It is a square or rectangle
matrix of n cols * m rows.

Vertical Lift Shuttles
~~~~~~~~~~~~~~~~~~~~~~

The Shuttles are the Vertical Lift Trays. One Shuttle entity has to be created
in Odoo for each physical shuttle. Depending of the subsidiary addons installed
(eg. Kardex), different options may be required (host address, ...). The base
addon only includes shuttles of kind "simulation" which will not send orders to
the hardware.

Known issues / Roadmap
======================

* Extract the tray types and matrix widget in a module, they can be used
alone without vertical lift
* Consider merging the 'vertical_lift_kind' with the kind added by
stock_location_zone
* Complete Pick screen and workflow (currently enough for a demo, not for production)
* Implement Put-away screen and workflow
* Implement Inventory screen and workflow

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_vertical_lift%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
~~~~~~~

* Camptocamp

Contributors
~~~~~~~~~~~~

* Guewen Baconnier <[email protected]>

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_vertical_lift>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions stock_vertical_lift/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
34 changes: 34 additions & 0 deletions stock_vertical_lift/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': 'Vertical Lift',
'summary': 'Provides the core for integration with Vertical Lifts',
'version': '12.0.1.0.0',
'category': 'Stock',
'author': 'Camptocamp, Odoo Community Association (OCA)',
'license': 'AGPL-3',
'depends': [
'stock',
'barcodes',
'base_sparse_field',
'stock_location_tray', # OCA/stock-logistics-warehouse
'web_notify', # OCA/web
],
'website': 'https://github.com/OCA/stock-logistics-warehouse',
'demo': [
'demo/stock_location_demo.xml',
'demo/vertical_lift_shuttle_demo.xml',
'demo/product_demo.xml',
'demo/stock_inventory_demo.xml',
'demo/stock_picking_demo.xml',
],
'data': [
'views/stock_location_views.xml',
'views/vertical_lift_shuttle_views.xml',
'views/stock_vertical_lift_templates.xml',
'views/shuttle_screen_templates.xml',
'security/ir.model.access.csv',
],
'installable': True,
'development_status': 'Alpha',
}
32 changes: 32 additions & 0 deletions stock_vertical_lift/demo/product_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">

<record id="product_running_socks" model="product.product">
<field name="default_code">RS200</field>
<field name="name">Running Socks</field>
<field name="type">product</field>
<field name="categ_id" ref="product.product_category_6"/>
<field name="lst_price">30.0</field>
<field name="standard_price">20.0</field>
<field name="weight">1.0</field>
<field name="tracking">none</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="property_stock_inventory" ref="stock.location_inventory"/>
</record>

<record id="product_recovery_socks" model="product.product">
<field name="default_code">RS300</field>
<field name="name">Recovery Socks</field>
<field name="type">product</field>
<field name="categ_id" ref="product.product_category_6"/>
<field name="lst_price">30.0</field>
<field name="standard_price">20.0</field>
<field name="weight">1.0</field>
<field name="tracking">none</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="property_stock_inventory" ref="stock.location_inventory"/>
</record>

</odoo>
20 changes: 20 additions & 0 deletions stock_vertical_lift/demo/stock_inventory_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">

<record id="stock_inventory_vertical_lift_0" model="stock.inventory">
<field name="name">Starting Vertical Lift Inventory</field>
</record>

<record id="stock_inventory_vertical_lift_line_1" model="stock.inventory.line">
<field name="product_id" ref="product_running_socks"/>
<field name="product_uom_id" ref="uom.product_uom_unit"/>
<field name="inventory_id" ref="stock_inventory_vertical_lift_0"/>
<field name="product_qty">30.0</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_tray_1b_x3y2"/>
</record>

<function model="stock.inventory" name="action_validate">
<function eval="[[('state','=','draft'),('id', '=', ref('stock_vertical_lift.stock_inventory_vertical_lift_0'))]]" model="stock.inventory" name="search"/>
</function>

</odoo>
116 changes: 116 additions & 0 deletions stock_vertical_lift/demo/stock_location_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">

<record id="stock_location_vertical_lift" model="stock.location">
<field name="name">Vertical Lift</field>
<!-- Beware, must not be view, even if we must not have stock here.
Because stock moves targeting views are not included in the
inventory at date, and we want to be able to use "Vertical Lift View"
as destination (the final destination will be a "cell" in a Shuttle).
-->
<field name="location_id" ref="stock.stock_location_stock"/>
<field name="usage">internal</field>
<field name="vertical_lift_location" eval="True"/>
<field name="company_id"></field>
</record>

<record id="stock_location_vertical_lift_demo_shuttle_1" model="stock.location">
<field name="name">Shuttle 1</field>
<field name="location_id" ref="stock_location_vertical_lift"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_1a" model="stock.location">
<field name="name">Tray 1A</field>
<field name="barcode">T1A</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_1"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_small_8x"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_1b" model="stock.location">
<field name="name">Tray 1B</field>
<field name="barcode">T1B</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_1"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_large_16x"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_1c" model="stock.location">
<field name="name">Tray 1C</field>
<field name="barcode">T1C</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_1"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_large_32x"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_shuttle_2" model="stock.location">
<field name="name">Shuttle 2</field>
<field name="location_id" ref="stock_location_vertical_lift"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_2a" model="stock.location">
<field name="name">Tray 2A</field>
<field name="barcode">T2A</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_2"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_large_8x"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_2b" model="stock.location">
<field name="name">Tray 2B</field>
<field name="barcode">T2B</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_2"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_large_4x"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_2c" model="stock.location">
<field name="name">Tray 2C</field>
<field name="barcode">T2C</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_2"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_large_16x_2"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_2d" model="stock.location">
<field name="name">Tray 2D</field>
<field name="barcode">T2D</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_2"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_small_8x"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_shuttle_3" model="stock.location">
<field name="name">Shuttle 3</field>
<field name="location_id" ref="stock_location_vertical_lift"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_3a" model="stock.location">
<field name="name">Tray 3A</field>
<field name="barcode">T3A</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_3"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_small_32x"/>
<field name="usage">internal</field>
</record>

<record id="stock_location_vertical_lift_demo_tray_3b" model="stock.location">
<field name="name">Tray 3B</field>
<field name="barcode">T3B</field>
<field name="location_id" ref="stock_location_vertical_lift_demo_shuttle_3"/>
<field name="tray_type_id" ref="stock_location_tray.stock_location_tray_type_large_32x"/>
<field name="usage">internal</field>
</record>

<!-- When the trays are created, they will create their 'cell' locations.
This method will add xmlids on them to be able to reference them in
other demo data and tests.
-->
<function model="stock.location" name="_create_tray_xmlids">
<function eval="[[('cell_in_tray_type_id', '!=', False)]]" model="stock.location" name="search"/>
<value>stock_vertical_lift</value>
</function>

</odoo>
Loading