12.0 Add stock_location_bin_name (split from stock_location_zone)

This commit is contained in:
Akim Juillerat
2019-09-11 13:14:56 +02:00
committed by Hai Lang
parent bcdef7301b
commit 9e6885b574
7 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -0,0 +1,22 @@
# Copyright 2017 Syvain Van Hoof (Okia sprl) <sylvainvh@okia.be>
# Copyright 2016-2019 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
{
'name': 'Stock Location Bin Name',
'version': '12.0.1.0.0',
'author': "BCIM, Okia, Camptocamp, Odoo Community Association (OCA)",
'website': "https://github.com/OCA/stock-logistics-warehouse",
'summary': "Compute bin stock location name automatically",
'category': 'Stock Management',
'depends': [
'stock_location_zone',
'stock_location_attribute',
],
'data': [
'views/stock_location.xml',
],
'installable': True,
'development_status': 'Alpha',
'license': 'AGPL-3',
}

View File

@@ -0,0 +1 @@
from . import stock_location

View File

@@ -0,0 +1,52 @@
# Copyright 2017 Syvain Van Hoof (Okia sprl) <sylvainvh@okia.be>
# Copyright 2016-2019 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import api, fields, models
class StockLocation(models.Model):
_inherit = 'stock.location'
location_name_format = fields.Char(
'Location Name Format',
help="Format string that will compute the name of the location. "
"Use location fields. Example: "
"'{area}-{corridor:0>2}.{rack:0>3}"
".{level:0>2}'")
area = fields.Char(
'Area',
compute='_compute_area',
store=True,
)
@api.depends('name', 'location_kind', 'location_id.area')
def _compute_area(self):
for location in self:
if location.location_kind == 'area':
location.area = location.name
else:
location.area = location.location_id.area
@api.multi
@api.onchange('corridor', 'row', 'rack', 'level',
'posx', 'posy', 'posz')
def _onchange_attribute_compute_name(self):
for location in self:
if not location.location_kind == 'bin':
continue
area = location
while area and not area.location_name_format:
area = area.location_id
if not area:
continue
template = area.location_name_format
# We don't want to use the full browse record as it would
# give too much access to internals for the users.
# We cannot use location.read() as we may have a NewId.
# We should have the record's values in the cache at this
# point. We must be cautious not to leak an environment through
# relational fields.
location.name = template.format(**location._cache)

View File

@@ -0,0 +1,4 @@
* Syvain Van Hoof (Okia sprl) <sylvainvh@okia.be>
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
* Guewen Baconnier (Camptocamp) <guewen.baconnier@camptocamp.com>
* Akim Juillerat <akim.juillerat@camptocamp.com>

View File

@@ -0,0 +1,2 @@
This module allows to compute automatically Bin location names based on
locations attributes.

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="stock_location_form_inherit" model="ir.ui.view">
<field name="name">stock.location.name.format</field>
<field name="model">stock.location</field>
<field name="inherit_id" ref="stock.view_location_form"/>
<field name="arch" type="xml">
<field name="usage" position="after">
<field name="location_name_format" attrs="{'invisible': [('location_kind', '=', 'bin')]}" />
</field>
</field>
</record>
</odoo>