Skip to content

Commit

Permalink
Merge PR #806 into 13.0
Browse files Browse the repository at this point in the history
Signed-off-by jgrandguillaume
  • Loading branch information
OCA-git-bot committed May 28, 2020
2 parents bb45eaf + 3939415 commit 2d2efb0
Show file tree
Hide file tree
Showing 9 changed files with 115 additions and 0 deletions.
6 changes: 6 additions & 0 deletions setup/stock_location_bin_name/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_location_bin_name/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
17 changes: 17 additions & 0 deletions stock_location_bin_name/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright 2017 Syvain Van Hoof (Okia sprl) <[email protected]>
# Copyright 2016-2019 Jacques-Etienne Baudoux (BCIM) <[email protected]>
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
{
"name": "Stock Location Bin Name",
"version": "13.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_position"],
"data": ["views/stock_location.xml"],
"installable": True,
"development_status": "Alpha",
"license": "AGPL-3",
}
1 change: 1 addition & 0 deletions stock_location_bin_name/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import stock_location
67 changes: 67 additions & 0 deletions stock_location_bin_name/models/stock_location.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Copyright 2017 Syvain Van Hoof (Okia sprl) <[email protected]>
# Copyright 2016-2019 Jacques-Etienne Baudoux (BCIM) <[email protected]>
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
import string

from odoo import api, fields, models


class PartialFormatter(string.Formatter):
def __init__(self, missing="~", bad_fmt="!"):
self.missing = missing
self.bad_fmt = bad_fmt

def get_field(self, field_name, args, kwargs):
# Handle a key not found
try:
val = super().get_field(field_name, args, kwargs)
except (KeyError, AttributeError):
val = None, field_name
return val

def format_field(self, value, spec):
# handle an invalid format
if value is None:
return self.missing
try:
return super().format_field(value, spec)
except ValueError:
if self.bad_fmt is not None:
return self.bad_fmt
else:
raise


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}'\n"
"Missing fields are replaced by '~' and formatting errors by '!'.",
)

@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.
values = dict(location._cache)
values["area"] = area.name
location.name = PartialFormatter().format(template, **values)
4 changes: 4 additions & 0 deletions stock_location_bin_name/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
* Syvain Van Hoof (Okia sprl) <[email protected]>
* Jacques-Etienne Baudoux (BCIM) <[email protected]>
* Guewen Baconnier (Camptocamp) <[email protected]>
* Akim Juillerat <[email protected]>
2 changes: 2 additions & 0 deletions stock_location_bin_name/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This module allows to compute automatically Bin location names based on
locations attributes.
16 changes: 16 additions & 0 deletions stock_location_bin_name/views/stock_location.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?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>

0 comments on commit 2d2efb0

Please sign in to comment.