Add tray matrix on stock move lines

This commit is contained in:
Guewen Baconnier
2019-10-09 14:05:49 +02:00
committed by Hai Lang
parent 5b172758c8
commit 7e02249467
6 changed files with 130 additions and 4 deletions

View File

@@ -20,6 +20,7 @@
'views/stock_location_views.xml',
'views/stock_location_tray_type_views.xml',
'views/stock_location_tray_templates.xml',
'views/stock_move_line_views.xml',
'security/ir.model.access.csv',
],
'installable': True,

View File

@@ -1,2 +1,3 @@
from . import stock_location
from . import stock_location_tray_type
from . import stock_move_line

View File

@@ -51,10 +51,18 @@ class StockLocation(models.Model):
def _compute_tray_matrix(self):
for location in self:
if not (location.tray_type_id or location.cell_in_tray_type_id):
location.tray_matrix = {}
continue
location.tray_matrix = {
"selected": location._tray_cell_coords(),
"cells": location._tray_cell_matrix(),
location.tray_matrix = location._tray_matrix_for_widget()
def _tray_matrix_for_widget(self):
selected = self._tray_cell_coords()
cells = self._tray_cell_matrix()
return {
# x, y: position of the selected cell
"selected": selected,
# 0 is empty, 1 is not
"cells": cells,
}
@api.multi

View File

@@ -0,0 +1,52 @@
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, models
from odoo.addons.base_sparse_field.models.fields import Serialized
class StockMoveLine(models.Model):
_inherit = "stock.move.line"
tray_source_matrix = Serialized(
string="Source Cell", compute="_compute_tray_matrix"
)
tray_dest_matrix = Serialized(
string="Destination Cell", compute="_compute_tray_matrix"
)
@api.depends("location_id", "location_dest_id")
def _compute_tray_matrix(self):
for record in self:
record.tray_source_matrix = record.location_id.tray_matrix
record.tray_dest_matrix = record.location_dest_id.tray_matrix
def _action_show_tray(self, location_from):
assert location_from in ("source", "dest")
self.ensure_one()
view = self.env.ref("stock_location_tray.view_stock_move_line_tray")
context = self.env.context.copy()
if location_from == "source":
name = _("Source Tray")
context["show_source_tray"] = True
else:
name = _("Destination Tray")
context["show_dest_tray"] = True
return {
"name": name,
"type": "ir.actions.act_window",
"view_type": "form",
"view_mode": "form",
"res_model": "stock.move.line",
"views": [(view.id, "form")],
"view_id": view.id,
"target": "new",
"res_id": self.id,
"context": context,
}
def action_show_source_tray(self):
return self._action_show_tray("source")
def action_show_dest_tray(self):
return self._action_show_tray("dest")

View File

@@ -0,0 +1,5 @@
The buttons on operations opens a view with the tray matrix to show operators
where to pick/put goods. The issue is that Odoo allows only one modal popup
to be open at a time. The tray matrix replaces the operations window. We have
to find a way to prevent this. The tray matrix could be displayed through a
tooltip maybe, if we find how to render a widget in a tooltip.

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_stock_move_line_operation_tree" model="ir.ui.view">
<field name="name">stock.move.line.operations.tree.tray.type</field>
<field name="model">stock.move.line</field>
<field name="inherit_id" ref="stock.view_stock_move_line_operation_tree" />
<field name="arch" type="xml">
<field name="location_id" position="after">
<field name="tray_source_matrix" invisible="1"/>
<button name="action_show_source_tray"
string="Show Source Tray"
type="object" icon="fa-th"
attrs="{'invisible': [('tray_source_matrix', '=', {})]}"
invisible="not context.get('show_source_location')"
groups="stock.group_stock_multi_locations"
/>
</field>
<field name="location_dest_id" position="after">
<field name="tray_dest_matrix" invisible="1"/>
<button name="action_show_dest_tray"
string="Show Destination Tray"
type="object" icon="fa-th"
attrs="{'invisible': [('tray_dest_matrix', '=', {})]}"
invisible="not context.get('show_destination_location')"
groups="stock.group_stock_multi_locations"
/>
</field>
</field>
</record>
<record id="view_stock_move_line_tray" model="ir.ui.view">
<field name="name">stock.move.line.tray</field>
<field name="model">stock.move.line</field>
<field name="priority">1000</field>
<field name="arch" type="xml">
<form string="Tray" create="0" edit="0" delete="0">
<group name="source_tray"
invisible="not context.get('show_source_tray')">
<field name="location_id" readonly="1" />
<field name="tray_source_matrix"
widget="location_tray_matrix" />
</group>
<group name="destination_tray"
invisible="not context.get('show_dest_tray')">
<field name="location_dest_id" readonly="1" />
<field name="tray_dest_matrix"
widget="location_tray_matrix" />
</group>
<footer>
<button string="Close"
class="btn-secondary"
special="cancel" />
</footer>
</form>
</field>
</record>
</odoo>