diff --git a/stock_location_bin_name/__init__.py b/stock_location_bin_name/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/stock_location_bin_name/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/stock_location_bin_name/__manifest__.py b/stock_location_bin_name/__manifest__.py new file mode 100644 index 000000000..8b7a3f3b7 --- /dev/null +++ b/stock_location_bin_name/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2017 Syvain Van Hoof (Okia sprl) +# Copyright 2016-2019 Jacques-Etienne Baudoux (BCIM) +# 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', +} diff --git a/stock_location_bin_name/models/__init__.py b/stock_location_bin_name/models/__init__.py new file mode 100644 index 000000000..88493e35d --- /dev/null +++ b/stock_location_bin_name/models/__init__.py @@ -0,0 +1 @@ +from . import stock_location diff --git a/stock_location_bin_name/models/stock_location.py b/stock_location_bin_name/models/stock_location.py new file mode 100644 index 000000000..d746b765c --- /dev/null +++ b/stock_location_bin_name/models/stock_location.py @@ -0,0 +1,52 @@ +# Copyright 2017 Syvain Van Hoof (Okia sprl) +# Copyright 2016-2019 Jacques-Etienne Baudoux (BCIM) +# 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) diff --git a/stock_location_bin_name/readme/CONTRIBUTORS.rst b/stock_location_bin_name/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..0425dda61 --- /dev/null +++ b/stock_location_bin_name/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* Syvain Van Hoof (Okia sprl) +* Jacques-Etienne Baudoux (BCIM) +* Guewen Baconnier (Camptocamp) +* Akim Juillerat diff --git a/stock_location_bin_name/readme/DESCRIPTION.rst b/stock_location_bin_name/readme/DESCRIPTION.rst new file mode 100644 index 000000000..d868c822f --- /dev/null +++ b/stock_location_bin_name/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows to compute automatically Bin location names based on +locations attributes. diff --git a/stock_location_bin_name/views/stock_location.xml b/stock_location_bin_name/views/stock_location.xml new file mode 100644 index 000000000..7bec3b6bd --- /dev/null +++ b/stock_location_bin_name/views/stock_location.xml @@ -0,0 +1,13 @@ + + + + stock.location.name.format + stock.location + + + + + + + +