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

[13.0] Add vertical lift support - alpha version #797

Merged
merged 41 commits into from
Sep 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
311fb24
Add stock_vertical_lift module
guewen Jun 11, 2019
e3020a2
Add method on location to fetch a tray
guewen Oct 8, 2019
ab764e1
Split the shuttle operations in different models/views
guewen Oct 9, 2019
178b456
Add default views to re-open the screen views properly
guewen Oct 10, 2019
bcfb269
Add Put-Away workflow
guewen Oct 10, 2019
0c9f88d
Implement inventory screen
guewen Oct 15, 2019
aeb3cfa
Fix 'fetch' buttons on move lines
guewen Oct 15, 2019
fc995a9
Add button on locations to fetch the tray
guewen Oct 15, 2019
82e5c5b
[IMP] abstract communication with shuttle
gurneyalex Nov 4, 2019
bbeb506
Add method to refresh a shuttle screen
guewen Nov 8, 2019
86e9e62
[IMP] add a proxy to communicate with the kardex server
gurneyalex Nov 14, 2019
e6733dd
[IMP] stock_vertical_lift: black, isort
guewen Dec 16, 2019
b574c82
[MIG] stock_vertical_lift{,_kardex}: Migration to 13.0
guewen Dec 16, 2019
141a0e6
Replace custom js by 'target': 'main'
guewen Jan 24, 2020
44576e6
Add +x on kardex-proxy.py script
guewen Mar 3, 2020
6b4c004
run pre-commit with new prettiers
guewen Mar 17, 2020
55c6e66
[IMP] Fix naming of the shuttle address
gurneyalex Jun 22, 2020
d5e8767
stock_vertical_lift_kardex: add missing dependency
gurneyalex May 18, 2020
97375bd
[FIX] laser pointer command
gurneyalex Jun 22, 2020
8c283b3
[FIX] command key must be a string
gurneyalex Jun 23, 2020
63dd8a5
[IMP] raise exceptions when config NOK
gurneyalex Jun 23, 2020
318f101
[FIX] laser position are integers
gurneyalex Jun 24, 2020
4dfc22f
Fix issues in Pick mode
guewen Jun 26, 2020
cf71354
Execute the barcode scanner method as side-effect method
guewen Jun 26, 2020
feb1aa1
Rework workflows using a small state machine
guewen Jun 29, 2020
1c56825
Add stock_vertical_lift_storage_type
guewen Jul 2, 2020
5fa7e38
Allow changing a putaway tray type after assigned
guewen Jul 2, 2020
823e11f
Ask to scan a tray type when no storage type is configured
guewen Jul 3, 2020
e01d754
Extract methods to allow more precise overrides
guewen Jul 3, 2020
c16a5e3
Ignore storage types constraints on quants in cells
guewen Jul 3, 2020
3f68e5c
Putaway: show rainbow man when all the lines are putaway
guewen Jul 3, 2020
912a3e9
Fix test incompatibility with stock_reserve_rule
guewen Jul 6, 2020
3711267
Add stock_vertical_lift_server_env
guewen Jul 13, 2020
a0794f4
Add release (close) of vertical lift trays
guewen Jul 21, 2020
a7d8fe6
Fix default value with server environment
guewen Jul 21, 2020
c228f27
Prevent crash if 2 packages have the same name
guewen Jul 23, 2020
43bac7a
stock_vertical_lift: packaging template more flexible
simahawk Sep 2, 2020
bd041a3
Add stock_vertical_lift_packaging_type
simahawk Sep 2, 2020
775a9f9
stock_vertical_lift: make pkg compute more solid (#16)
simahawk Sep 3, 2020
46cb50e
stock_vertical_lift: change x/y tray order
simahawk Sep 3, 2020
f3cf90a
inventory: always fetch tray
guewen Sep 9, 2020
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
2 changes: 2 additions & 0 deletions oca_dependencies.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
product-attribute
server-env
server-ux
web
wms
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,
)
6 changes: 6 additions & 0 deletions setup/stock_vertical_lift_packaging_type/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_server_env/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_storage_type/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,
)
1 change: 1 addition & 0 deletions stock_reserve_rule/demo/stock_reserve_rule_demo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<field name="sequence">1</field>
<field name="location_id" ref="stock.stock_location_stock" />
<field name="company_id" ref="base.main_company" />
<field name="active" eval="False" />
</record>
<record id="stock_reserve_rule_removal_1_demo" model="stock.reserve.rule.removal">
<field name="rule_id" ref="stock_reserve_rule_1_demo" />
Expand Down
4 changes: 2 additions & 2 deletions stock_reserve_rule/readme/USAGE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ A product: Funky Socks
Scenario:

* Activate Storage Locations and Multi-Warehouses
* You can open Inventory > Configuration > Stock Reservation Rules to see the
rules
* You can open Inventory > Configuration > Stock Reservation Rules to activate
and see the rules (by default in demo, the rules are created inactive)
* Open Transfer: Outgoing shipment (reservation rules demo 1)
* Check availability: it has 150 units, as it will not empty Zone A, it will not
take products there, it should take 100 in B and 50 in C (following the rules
Expand Down
2 changes: 2 additions & 0 deletions stock_reserve_rule/tests/test_reserve_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ def setUpClass(cls):
"code": "WHTEST",
}
)
cls.rule = cls.env.ref("stock_reserve_rule.stock_reserve_rule_1_demo")
cls.rule.active = True

cls.customer_loc = cls.env.ref("stock.stock_location_customers")

Expand Down
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.
2 changes: 2 additions & 0 deletions stock_vertical_lift/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import controllers
41 changes: 41 additions & 0 deletions stock_vertical_lift/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# 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": "13.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
"web_ir_actions_act_view_reload", # 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/stock_move_line_views.xml",
"views/vertical_lift_shuttle_views.xml",
"views/vertical_lift_operation_base_views.xml",
"views/vertical_lift_operation_pick_views.xml",
"views/vertical_lift_operation_put_views.xml",
"views/vertical_lift_operation_inventory_views.xml",
"views/stock_vertical_lift_templates.xml",
"views/shuttle_screen_templates.xml",
"security/ir.model.access.csv",
"data/ir_sequence.xml",
],
"installable": True,
"development_status": "Alpha",
}
1 change: 1 addition & 0 deletions stock_vertical_lift/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import main
22 changes: 22 additions & 0 deletions stock_vertical_lift/controllers/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import logging
import os

from odoo import http
from odoo.http import request

_logger = logging.getLogger(__name__)


class VerticalLiftController(http.Controller):
@http.route(["/vertical-lift"], type="http", auth="public", csrf=False)
def vertical_lift(self, answer, secret):
if secret == os.environ.get("VERTICAL_LIFT_SECRET", ""):
rec = request.env["vertical.lift.command"].sudo().record_answer(answer)
return str(rec.id)
else:
_logger.error(
"secret mismatch: %r != %r",
secret,
os.environ.get("VERTICAL_LIFT_SECRET", ""),
)
raise http.AuthenticationError()
10 changes: 10 additions & 0 deletions stock_vertical_lift/data/ir_sequence.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record model="ir.sequence" id="sequence_kardex_command">
<field name="name">Vertical Lift Commands</field>
<field name="code">vertical.lift.command</field>
<field name="prefix">L</field>
<field name="padding">6</field>
<field name="company_id" eval="False" />
</record>
</odoo>
29 changes: 29 additions & 0 deletions stock_vertical_lift/demo/product_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?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="barcode">4491673293664</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" />
</record>
<record id="product_recovery_socks" model="product.product">
<field name="default_code">RS300</field>
<field name="barcode">2779891103531</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" />
</record>
</odoo>
30 changes: 30 additions & 0 deletions stock_vertical_lift/demo/stock_inventory_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?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_start">
<function
eval="[[('state','=','draft'),('id', '=', ref('stock_vertical_lift.stock_inventory_vertical_lift_0'))]]"
model="stock.inventory"
name="search"
/>
</function>
<function model="stock.inventory" name="action_validate">
<function
eval="[[('state','=','confirm'),('id', '=', ref('stock_vertical_lift.stock_inventory_vertical_lift_0'))]]"
model="stock.inventory"
name="search"
/>
</function>
</odoo>
Loading