From 1a8b217c1559087a8f5fbad4a3b8db887f6789cc Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Thu, 6 Sep 2018 18:09:58 +0200 Subject: [PATCH 01/37] Add module stock_location_lockdown for v9 --- stock_location_lockdown/README.rst | 81 ++++ stock_location_lockdown/__init__.py | 5 + stock_location_lockdown/__openerp__.py | 21 + stock_location_lockdown/i18n/fr.po | 37 ++ stock_location_lockdown/models/__init__.py | 6 + .../models/stock_location.py | 13 + stock_location_lockdown/models/stock_quant.py | 19 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 4 + stock_location_lockdown/readme/USAGE.rst | 1 + .../static/description/index.html | 429 ++++++++++++++++++ stock_location_lockdown/tests/__init__.py | 5 + .../test_block_stock_location_entrance.py | 33 ++ .../views/stock_location.xml | 17 + 14 files changed, 672 insertions(+) create mode 100644 stock_location_lockdown/README.rst create mode 100644 stock_location_lockdown/__init__.py create mode 100644 stock_location_lockdown/__openerp__.py create mode 100644 stock_location_lockdown/i18n/fr.po create mode 100644 stock_location_lockdown/models/__init__.py create mode 100644 stock_location_lockdown/models/stock_location.py create mode 100644 stock_location_lockdown/models/stock_quant.py create mode 100644 stock_location_lockdown/readme/CONTRIBUTORS.rst create mode 100644 stock_location_lockdown/readme/DESCRIPTION.rst create mode 100644 stock_location_lockdown/readme/USAGE.rst create mode 100644 stock_location_lockdown/static/description/index.html create mode 100644 stock_location_lockdown/tests/__init__.py create mode 100644 stock_location_lockdown/tests/test_block_stock_location_entrance.py create mode 100644 stock_location_lockdown/views/stock_location.xml diff --git a/stock_location_lockdown/README.rst b/stock_location_lockdown/README.rst new file mode 100644 index 000000000000..e6007a65145d --- /dev/null +++ b/stock_location_lockdown/README.rst @@ -0,0 +1,81 @@ +======================= +Stock Location Lockdown +======================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |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/9.0/stock_location_lockdown + :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-9-0/stock-logistics-warehouse-9-0-stock_location_lockdown + :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/9.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +The aims of this module is to mark locations where no product should transit. +Indeed, in complex warehouse environment, we may have a complicated tree of locations with a lot of virtual ones, used to create the hierarchy of the locations. +We might want to avoid to put stock in these locations since they are not physical locations, they just represent a zone of the warehouse. +For these location, the usage should be internal as it belongs to a warehouse, so the usage 'view' can't be used for these purpose. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +* Once the module is installed, goes to any location for which you want to prevent stock entrance and check the box "Block Stock Entrance". Then, you won't be allow to add stock in these locations. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Akretion + +Contributors +~~~~~~~~~~~~ + +* Florian da Costa + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_location_lockdown/__init__.py b/stock_location_lockdown/__init__.py new file mode 100644 index 000000000000..9cf5311493b6 --- /dev/null +++ b/stock_location_lockdown/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Akretion +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/stock_location_lockdown/__openerp__.py b/stock_location_lockdown/__openerp__.py new file mode 100644 index 000000000000..182f19b8d494 --- /dev/null +++ b/stock_location_lockdown/__openerp__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Akretion +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Stock Location Lockdown", + "summary": "Prevent to add stock in flag locations", + "author": "Akretion, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/stock-logistics-warehouse", + "category": "Warehouse", + "version": "9.0.1.0.0", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "stock", + ], + "data": [ + "views/stock_location.xml", + ] +} diff --git a/stock_location_lockdown/i18n/fr.po b/stock_location_lockdown/i18n/fr.po new file mode 100644 index 000000000000..57547ba5ec7b --- /dev/null +++ b/stock_location_lockdown/i18n/fr.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_location_lockdown +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-06 13:10+0000\n" +"PO-Revision-Date: 2018-09-06 13:10+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: stock_location_lockdown +#: model:ir.model.fields,field_description:stock_location_lockdown.field_stock_location_lockdown_entrance +msgid "Block stock entrance" +msgstr "Bloquer les entrées de stock" + +#. module: stock_location_lockdown +#: model:ir.model,name:stock_location_lockdown.model_stock_location +msgid "Location" +msgstr "Emplacement" + +#. module: stock_location_lockdown +#: code:addons/stock_location_lockdown/models/stock_quant.py:17 +#, python-format +msgid "The location %s is not configured to receive stock." +msgstr "L'emplacement %s n'est pas configuré pour recevoir du stock." + +#. module: stock_location_lockdown +#: model:ir.model.fields,help:stock_location_lockdown.field_stock_location_block_stock_entrance +msgid "if this box is checked, put stock in this location won't be allowed. Usually used for virtual location, which has children" +msgstr "Si cette case est cochée, il ne sera pas possible d'ajouter du stock dans cette emplacement. Habituellement utilisée pour les emplacements virtuels ayant des enfants." diff --git a/stock_location_lockdown/models/__init__.py b/stock_location_lockdown/models/__init__.py new file mode 100644 index 000000000000..28f63028124f --- /dev/null +++ b/stock_location_lockdown/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Akretion +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import stock_location +from . import stock_quant diff --git a/stock_location_lockdown/models/stock_location.py b/stock_location_lockdown/models/stock_location.py new file mode 100644 index 000000000000..377e8ca6800d --- /dev/null +++ b/stock_location_lockdown/models/stock_location.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Akretion +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import fields, models + + +class StockLocation(models.Model): + _inherit = 'stock.location' + + block_stock_entrance = fields.Boolean( + help="if this box is checked, put stock in this location won't be " + "allowed. Usually used for virtual location, which has children") diff --git a/stock_location_lockdown/models/stock_quant.py b/stock_location_lockdown/models/stock_quant.py new file mode 100644 index 000000000000..032cb5169bce --- /dev/null +++ b/stock_location_lockdown/models/stock_quant.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Akretion +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import api, models, _ +from openerp.exceptions import UserError + + +class StockQuant(models.Model): + _inherit = 'stock.quant' + + @api.model + def _check_location(self, location): + res = super(StockQuant, self)._check_location(location) + if location.block_stock_entrance: + raise UserError( + _('The location %s is not configured to receive stock.') + % (location.name)) + return res diff --git a/stock_location_lockdown/readme/CONTRIBUTORS.rst b/stock_location_lockdown/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..0bddb053ae41 --- /dev/null +++ b/stock_location_lockdown/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Florian da Costa diff --git a/stock_location_lockdown/readme/DESCRIPTION.rst b/stock_location_lockdown/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..8e7c3841aa6d --- /dev/null +++ b/stock_location_lockdown/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +The aims of this module is to mark locations where no product should transit. +Indeed, in complex warehouse environment, we may have a complicated tree of locations with a lot of virtual ones, used to create the hierarchy of the locations. +We might want to avoid to put stock in these locations since they are not physical locations, they just represent a zone of the warehouse. +For these location, the usage should be internal as it belongs to a warehouse, so the usage 'view' can't be used for these purpose. diff --git a/stock_location_lockdown/readme/USAGE.rst b/stock_location_lockdown/readme/USAGE.rst new file mode 100644 index 000000000000..b1b77caabb1a --- /dev/null +++ b/stock_location_lockdown/readme/USAGE.rst @@ -0,0 +1 @@ +* Once the module is installed, goes to any location for which you want to prevent stock entrance and check the box "Block Stock Entrance". Then, you won't be allow to add stock in these locations. diff --git a/stock_location_lockdown/static/description/index.html b/stock_location_lockdown/static/description/index.html new file mode 100644 index 000000000000..fbe0e8a7fec8 --- /dev/null +++ b/stock_location_lockdown/static/description/index.html @@ -0,0 +1,429 @@ + + + + + + +Stock Location Lockdown + + + +
+

Stock Location Lockdown

+ + +

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

+

The aims of this module is to mark locations where no product should transit. +Indeed, in complex warehouse environment, we may have a complicated tree of locations with a lot of virtual ones, used to create the hierarchy of the locations. +We might want to avoid to put stock in these locations since they are not physical locations, they just represent a zone of the warehouse. +For these location, the usage should be internal as it belongs to a warehouse, so the usage ‘view’ can’t be used for these purpose.

+

Table of contents

+ +
+

Usage

+
    +
  • Once the module is installed, goes to any location for which you want to prevent stock entrance and check the box “Block Stock Entrance”. Then, you won’t be allow to add stock in these locations.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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 project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/stock_location_lockdown/tests/__init__.py b/stock_location_lockdown/tests/__init__.py new file mode 100644 index 000000000000..26c695414eec --- /dev/null +++ b/stock_location_lockdown/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Akretion +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_block_stock_location_entrance diff --git a/stock_location_lockdown/tests/test_block_stock_location_entrance.py b/stock_location_lockdown/tests/test_block_stock_location_entrance.py new file mode 100644 index 000000000000..44543ce4a6b8 --- /dev/null +++ b/stock_location_lockdown/tests/test_block_stock_location_entrance.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.exceptions import UserError +from openerp.tests.common import TransactionCase + + +class TestStockLocationLockdown(TransactionCase): + + def setUp(self, *args, **kwargs): + super(TestStockLocationLockdown, self).setUp(*args, **kwargs) + self.main_stock_location = self.env.ref('stock.stock_location_stock') + self.main_stock_location.block_stock_entrance = True + self.supplier_location = self.env.ref('stock.stock_location_suppliers') + self.product = self.env.ref('product.product_product_35') + + def test_transfer_stock_in_locked_location(self): + """ + Test to move stock within a location that should not accept + Stock entrance. + """ + move_vals = { + 'location_id': self.supplier_location.id, + 'location_dest_id': self.main_stock_location.id, + 'product_id': self.product.id, + 'product_uom_qty': '2.0', + 'product_uom': 1, + 'name': 'test', + } + stock_move = self.env['stock.move'].create(move_vals) + with self.assertRaises(UserError): + stock_move.action_done() diff --git a/stock_location_lockdown/views/stock_location.xml b/stock_location_lockdown/views/stock_location.xml new file mode 100644 index 000000000000..be16e7e219f5 --- /dev/null +++ b/stock_location_lockdown/views/stock_location.xml @@ -0,0 +1,17 @@ + + + + + + + stock.location + + + + + + + + + From 9e6842c53fddb3d4c67614cf6df3ea4e1c95be5a Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 5 Dec 2018 21:09:31 +0100 Subject: [PATCH 02/37] [MIG] stock_location_lockdown from v9 to v10 Improve README --- .../{__openerp__.py => __manifest__.py} | 12 +++------ .../models/stock_location.py | 7 +++--- stock_location_lockdown/models/stock_quant.py | 25 ++++++++++++------- .../readme/DESCRIPTION.rst | 8 +++--- stock_location_lockdown/readme/USAGE.rst | 2 +- .../test_block_stock_location_entrance.py | 8 +++--- 6 files changed, 33 insertions(+), 29 deletions(-) rename stock_location_lockdown/{__openerp__.py => __manifest__.py} (68%) diff --git a/stock_location_lockdown/__openerp__.py b/stock_location_lockdown/__manifest__.py similarity index 68% rename from stock_location_lockdown/__openerp__.py rename to stock_location_lockdown/__manifest__.py index 182f19b8d494..c6e9b7a73cd1 100644 --- a/stock_location_lockdown/__openerp__.py +++ b/stock_location_lockdown/__manifest__.py @@ -4,18 +4,14 @@ { "name": "Stock Location Lockdown", - "summary": "Prevent to add stock in flag locations", + "summary": "Prevent to add stock on flagged locations", "author": "Akretion, Odoo Community Association (OCA)", "website": "https://github.com/OCA/stock-logistics-warehouse", "category": "Warehouse", - "version": "9.0.1.0.0", + "version": "10.0.1.0.0", "license": "AGPL-3", "application": False, "installable": True, - "depends": [ - "stock", - ], - "data": [ - "views/stock_location.xml", - ] + "depends": ["stock"], + "data": ["views/stock_location.xml"], } diff --git a/stock_location_lockdown/models/stock_location.py b/stock_location_lockdown/models/stock_location.py index 377e8ca6800d..965144e8bde0 100644 --- a/stock_location_lockdown/models/stock_location.py +++ b/stock_location_lockdown/models/stock_location.py @@ -2,12 +2,13 @@ # Copyright 2018 Akretion # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import fields, models +from odoo import fields, models class StockLocation(models.Model): _inherit = 'stock.location' block_stock_entrance = fields.Boolean( - help="if this box is checked, put stock in this location won't be " - "allowed. Usually used for virtual location, which has children") + help="if this box is checked, putting stock on this location won't be " + "allowed. Usually used for a virtual location that has " + "childrens.") diff --git a/stock_location_lockdown/models/stock_quant.py b/stock_location_lockdown/models/stock_quant.py index 032cb5169bce..9639eb3f0e1c 100644 --- a/stock_location_lockdown/models/stock_quant.py +++ b/stock_location_lockdown/models/stock_quant.py @@ -2,18 +2,25 @@ # Copyright 2018 Akretion # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import api, models, _ -from openerp.exceptions import UserError +from odoo import api, models, _ +from odoo.exceptions import UserError class StockQuant(models.Model): _inherit = 'stock.quant' @api.model - def _check_location(self, location): - res = super(StockQuant, self)._check_location(location) - if location.block_stock_entrance: - raise UserError( - _('The location %s is not configured to receive stock.') - % (location.name)) - return res + def quants_move( + self, quants, move, location_to, location_from=False, lot_id=False, + owner_id=False, src_package_id=False, dest_package_id=False, + entire_pack=False): + if ( + location_to.usage == 'internal' and + location_to.block_stock_entrance): + raise UserError(_( + "The location '%s' is not configured to receive stock.") + % location_to.display_name) + return super(StockQuant, self).quants_move( + quants, move, location_to, location_from=location_from, + lot_id=lot_id, owner_id=owner_id, src_package_id=src_package_id, + dest_package_id=dest_package_id, entire_pack=entire_pack) diff --git a/stock_location_lockdown/readme/DESCRIPTION.rst b/stock_location_lockdown/readme/DESCRIPTION.rst index 8e7c3841aa6d..4fc3faa49620 100644 --- a/stock_location_lockdown/readme/DESCRIPTION.rst +++ b/stock_location_lockdown/readme/DESCRIPTION.rst @@ -1,4 +1,4 @@ -The aims of this module is to mark locations where no product should transit. -Indeed, in complex warehouse environment, we may have a complicated tree of locations with a lot of virtual ones, used to create the hierarchy of the locations. -We might want to avoid to put stock in these locations since they are not physical locations, they just represent a zone of the warehouse. -For these location, the usage should be internal as it belongs to a warehouse, so the usage 'view' can't be used for these purpose. +The aim of this module is to mark internal locations where no product should transit. +Indeed, in complex warehouse setups, we may have a complicated tree of internal locations with parent locations only used to create the hierarchy of the internal locations. +We may want to avoid to put stock on these parent internal locations since they are not physical locations, they just represent a zone of the warehouse. +Theses locations must have *Location Type* set to *Internal Location* because they belong to a warehouse (they can't be configured with *Location Type* set to *View*, cf `Odoo bug #26679 `_). With this module, you will be able to enable a new option *Block stock entrance* for these locations. diff --git a/stock_location_lockdown/readme/USAGE.rst b/stock_location_lockdown/readme/USAGE.rst index b1b77caabb1a..a8727fb3b12b 100644 --- a/stock_location_lockdown/readme/USAGE.rst +++ b/stock_location_lockdown/readme/USAGE.rst @@ -1 +1 @@ -* Once the module is installed, goes to any location for which you want to prevent stock entrance and check the box "Block Stock Entrance". Then, you won't be allow to add stock in these locations. +* Once the module is installed, select any internal location for which you want to prevent stock entrance and check the box *Block Stock Entrance*. Then, you won't be allow to add stock on these locations. diff --git a/stock_location_lockdown/tests/test_block_stock_location_entrance.py b/stock_location_lockdown/tests/test_block_stock_location_entrance.py index 44543ce4a6b8..e55a2edb709f 100644 --- a/stock_location_lockdown/tests/test_block_stock_location_entrance.py +++ b/stock_location_lockdown/tests/test_block_stock_location_entrance.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2018 Akretion France # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp.exceptions import UserError -from openerp.tests.common import TransactionCase +from odoo.exceptions import UserError +from odoo.tests.common import TransactionCase class TestStockLocationLockdown(TransactionCase): @@ -13,7 +13,7 @@ def setUp(self, *args, **kwargs): self.main_stock_location = self.env.ref('stock.stock_location_stock') self.main_stock_location.block_stock_entrance = True self.supplier_location = self.env.ref('stock.stock_location_suppliers') - self.product = self.env.ref('product.product_product_35') + self.product = self.env.ref('product.product_product_27') def test_transfer_stock_in_locked_location(self): """ From c1a7b3e1112777f5f6d12cce3c09368be2bf1632 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 10 Dec 2018 21:19:46 +0000 Subject: [PATCH 03/37] [UPD] README.rst --- stock_location_lockdown/README.rst | 20 +++++++++---------- .../static/description/index.html | 16 +++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/stock_location_lockdown/README.rst b/stock_location_lockdown/README.rst index e6007a65145d..46e4f3fa9f87 100644 --- a/stock_location_lockdown/README.rst +++ b/stock_location_lockdown/README.rst @@ -14,21 +14,21 @@ Stock Location Lockdown :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/9.0/stock_location_lockdown + :target: https://github.com/OCA/stock-logistics-warehouse/tree/10.0/stock_location_lockdown :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-9-0/stock-logistics-warehouse-9-0-stock_location_lockdown + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-10-0/stock-logistics-warehouse-10-0-stock_location_lockdown :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/9.0 + :target: https://runbot.odoo-community.org/runbot/153/10.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| -The aims of this module is to mark locations where no product should transit. -Indeed, in complex warehouse environment, we may have a complicated tree of locations with a lot of virtual ones, used to create the hierarchy of the locations. -We might want to avoid to put stock in these locations since they are not physical locations, they just represent a zone of the warehouse. -For these location, the usage should be internal as it belongs to a warehouse, so the usage 'view' can't be used for these purpose. +The aim of this module is to mark internal locations where no product should transit. +Indeed, in complex warehouse setups, we may have a complicated tree of internal locations with parent locations only used to create the hierarchy of the internal locations. +We may want to avoid to put stock on these parent internal locations since they are not physical locations, they just represent a zone of the warehouse. +Theses locations must have *Location Type* set to *Internal Location* because they belong to a warehouse (they can't be configured with *Location Type* set to *View*, cf `Odoo bug #26679 `_). With this module, you will be able to enable a new option *Block stock entrance* for these locations. **Table of contents** @@ -38,7 +38,7 @@ For these location, the usage should be internal as it belongs to a warehouse, s Usage ===== -* Once the module is installed, goes to any location for which you want to prevent stock entrance and check the box "Block Stock Entrance". Then, you won't be allow to add stock in these locations. +* Once the module is installed, select any internal location for which you want to prevent stock entrance and check the box *Block Stock Entrance*. Then, you won't be allow to add stock on these locations. Bug Tracker =========== @@ -46,7 +46,7 @@ Bug Tracker Bugs are tracked on `GitHub 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -76,6 +76,6 @@ 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 `_ project on GitHub. +This module is part of the `OCA/stock-logistics-warehouse `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_location_lockdown/static/description/index.html b/stock_location_lockdown/static/description/index.html index fbe0e8a7fec8..45dfeb269e44 100644 --- a/stock_location_lockdown/static/description/index.html +++ b/stock_location_lockdown/static/description/index.html @@ -367,11 +367,11 @@

Stock Location Lockdown

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

-

The aims of this module is to mark locations where no product should transit. -Indeed, in complex warehouse environment, we may have a complicated tree of locations with a lot of virtual ones, used to create the hierarchy of the locations. -We might want to avoid to put stock in these locations since they are not physical locations, they just represent a zone of the warehouse. -For these location, the usage should be internal as it belongs to a warehouse, so the usage ‘view’ can’t be used for these purpose.

+

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

+

The aim of this module is to mark internal locations where no product should transit. +Indeed, in complex warehouse setups, we may have a complicated tree of internal locations with parent locations only used to create the hierarchy of the internal locations. +We may want to avoid to put stock on these parent internal locations since they are not physical locations, they just represent a zone of the warehouse. +Theses locations must have Location Type set to Internal Location because they belong to a warehouse (they can’t be configured with Location Type set to View, cf Odoo bug #26679). With this module, you will be able to enable a new option Block stock entrance for these locations.

Table of contents

    @@ -388,7 +388,7 @@

    Stock Location Lockdown

    Usage

      -
    • Once the module is installed, goes to any location for which you want to prevent stock entrance and check the box “Block Stock Entrance”. Then, you won’t be allow to add stock in these locations.
    • +
    • Once the module is installed, select any internal location for which you want to prevent stock entrance and check the box Block Stock Entrance. Then, you won’t be allow to add stock on these locations.
    @@ -396,7 +396,7 @@

    Bug Tracker

    Bugs are tracked on GitHub 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.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -420,7 +420,7 @@

    Maintainers

    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 project on GitHub.

    +

    This module is part of the OCA/stock-logistics-warehouse project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 77e3cea1f35de3a075c32f6a19dbfcfb97500126 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 10 Dec 2018 21:33:36 +0000 Subject: [PATCH 04/37] [UPD] Update stock_location_lockdown.pot --- stock_location_lockdown/i18n/fr.po | 33 +++++++++++---- .../i18n/stock_location_lockdown.pot | 41 +++++++++++++++++++ 2 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 stock_location_lockdown/i18n/stock_location_lockdown.pot diff --git a/stock_location_lockdown/i18n/fr.po b/stock_location_lockdown/i18n/fr.po index 57547ba5ec7b..da5b21bce128 100644 --- a/stock_location_lockdown/i18n/fr.po +++ b/stock_location_lockdown/i18n/fr.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * stock_location_lockdown +# * stock_location_lockdown # msgid "" msgstr "" @@ -10,28 +10,43 @@ msgstr "" "PO-Revision-Date: 2018-09-06 13:10+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" #. module: stock_location_lockdown -#: model:ir.model.fields,field_description:stock_location_lockdown.field_stock_location_lockdown_entrance +#: model:ir.model.fields,field_description:stock_location_lockdown.field_stock_location_block_stock_entrance msgid "Block stock entrance" msgstr "Bloquer les entrées de stock" #. module: stock_location_lockdown #: model:ir.model,name:stock_location_lockdown.model_stock_location -msgid "Location" -msgstr "Emplacement" +msgid "Inventory Locations" +msgstr "" + +#. module: stock_location_lockdown +#: model:ir.model,name:stock_location_lockdown.model_stock_quant +msgid "Quants" +msgstr "" #. module: stock_location_lockdown -#: code:addons/stock_location_lockdown/models/stock_quant.py:17 -#, python-format -msgid "The location %s is not configured to receive stock." +#: code:addons/stock_location_lockdown/models/stock_quant.py:20 +#, fuzzy, python-format +msgid "The location '%s' is not configured to receive stock." msgstr "L'emplacement %s n'est pas configuré pour recevoir du stock." #. module: stock_location_lockdown #: model:ir.model.fields,help:stock_location_lockdown.field_stock_location_block_stock_entrance -msgid "if this box is checked, put stock in this location won't be allowed. Usually used for virtual location, which has children" -msgstr "Si cette case est cochée, il ne sera pas possible d'ajouter du stock dans cette emplacement. Habituellement utilisée pour les emplacements virtuels ayant des enfants." +#, fuzzy +msgid "" +"if this box is checked, putting stock on this location won't be allowed. " +"Usually used for a virtual location that has childrens." +msgstr "" +"Si cette case est cochée, il ne sera pas possible d'ajouter du stock dans " +"cette emplacement. Habituellement utilisée pour les emplacements virtuels " +"ayant des enfants." + +#~ msgid "Location" +#~ msgstr "Emplacement" diff --git a/stock_location_lockdown/i18n/stock_location_lockdown.pot b/stock_location_lockdown/i18n/stock_location_lockdown.pot new file mode 100644 index 000000000000..249d38b54ceb --- /dev/null +++ b/stock_location_lockdown/i18n/stock_location_lockdown.pot @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_location_lockdown +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: stock_location_lockdown +#: model:ir.model.fields,field_description:stock_location_lockdown.field_stock_location_block_stock_entrance +msgid "Block stock entrance" +msgstr "" + +#. module: stock_location_lockdown +#: model:ir.model,name:stock_location_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_location_lockdown +#: model:ir.model,name:stock_location_lockdown.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_location_lockdown +#: code:addons/stock_location_lockdown/models/stock_quant.py:20 +#, python-format +msgid "The location '%s' is not configured to receive stock." +msgstr "" + +#. module: stock_location_lockdown +#: model:ir.model.fields,help:stock_location_lockdown.field_stock_location_block_stock_entrance +msgid "if this box is checked, putting stock on this location won't be allowed. Usually used for a virtual location that has childrens." +msgstr "" + From cb6060acb5a2fd6ee106760747de4b0b1d0b5511 Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva Date: Thu, 27 Dec 2018 23:22:51 +0000 Subject: [PATCH 05/37] Added translation using Weblate (Portuguese) --- stock_location_lockdown/i18n/pt.po | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 stock_location_lockdown/i18n/pt.po diff --git a/stock_location_lockdown/i18n/pt.po b/stock_location_lockdown/i18n/pt.po new file mode 100644 index 000000000000..a4a48860552c --- /dev/null +++ b/stock_location_lockdown/i18n/pt.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_location_lockdown +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-12-28 01:41+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.3\n" + +#. module: stock_location_lockdown +#: model:ir.model.fields,field_description:stock_location_lockdown.field_stock_location_block_stock_entrance +msgid "Block stock entrance" +msgstr "Bloquear entradas de stock" + +#. module: stock_location_lockdown +#: model:ir.model,name:stock_location_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "Localizações de Inventário" + +#. module: stock_location_lockdown +#: model:ir.model,name:stock_location_lockdown.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_location_lockdown +#: code:addons/stock_location_lockdown/models/stock_quant.py:20 +#, python-format +msgid "The location '%s' is not configured to receive stock." +msgstr "A localização '%s' não está configurada para receber stock." + +#. module: stock_location_lockdown +#: model:ir.model.fields,help:stock_location_lockdown.field_stock_location_block_stock_entrance +msgid "if this box is checked, putting stock on this location won't be allowed. Usually used for a virtual location that has childrens." +msgstr "" +"Se esta caixa estiver selecionada, não será permitido colocar stock nesta " +"localização. É geralmente utilizada em localizações virtuais com " +"descendentes." From d021df9119974ec8dccd5e9be3af38a4cb466b59 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 3 Apr 2019 03:25:28 +0000 Subject: [PATCH 06/37] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 stock_location_lockdown/static/description/icon.png diff --git a/stock_location_lockdown/static/description/icon.png b/stock_location_lockdown/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From 87d7d2649816399d9987ac44d230fa354f7045fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Fri, 5 Jul 2019 17:46:07 +0200 Subject: [PATCH 07/37] [FIX] fix negative quant in blocked location When forcing an outgoing move and then moving it. Odoo create a negative quant. This quant should not be in the locked location because no quand will go in it and so the negative quant will stay here for ever --- stock_location_lockdown/models/stock_quant.py | 27 ++++++++----------- .../test_block_stock_location_entrance.py | 24 ++++++++++++++--- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/stock_location_lockdown/models/stock_quant.py b/stock_location_lockdown/models/stock_quant.py index 9639eb3f0e1c..89b6b45ef7ef 100644 --- a/stock_location_lockdown/models/stock_quant.py +++ b/stock_location_lockdown/models/stock_quant.py @@ -3,24 +3,19 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, models, _ -from odoo.exceptions import UserError +from odoo.exceptions import ValidationError class StockQuant(models.Model): _inherit = 'stock.quant' - @api.model - def quants_move( - self, quants, move, location_to, location_from=False, lot_id=False, - owner_id=False, src_package_id=False, dest_package_id=False, - entire_pack=False): - if ( - location_to.usage == 'internal' and - location_to.block_stock_entrance): - raise UserError(_( - "The location '%s' is not configured to receive stock.") - % location_to.display_name) - return super(StockQuant, self).quants_move( - quants, move, location_to, location_from=location_from, - lot_id=lot_id, owner_id=owner_id, src_package_id=src_package_id, - dest_package_id=dest_package_id, entire_pack=entire_pack) + @api.constrains('location_id') + def _check_location_blocked(self): + for record in self: + if record.location_id.block_stock_entrance: + raise ValidationError( + _('The location %s is blocked and can ' + 'not be used for moving the product %s') + % (record.location_id.name, record.product_id.name) + ) + return True diff --git a/stock_location_lockdown/tests/test_block_stock_location_entrance.py b/stock_location_lockdown/tests/test_block_stock_location_entrance.py index e55a2edb709f..51dc3938f7f5 100644 --- a/stock_location_lockdown/tests/test_block_stock_location_entrance.py +++ b/stock_location_lockdown/tests/test_block_stock_location_entrance.py @@ -2,7 +2,7 @@ # Copyright 2018 Akretion France # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.exceptions import UserError +from odoo.exceptions import ValidationError from odoo.tests.common import TransactionCase @@ -13,6 +13,7 @@ def setUp(self, *args, **kwargs): self.main_stock_location = self.env.ref('stock.stock_location_stock') self.main_stock_location.block_stock_entrance = True self.supplier_location = self.env.ref('stock.stock_location_suppliers') + self.customer_location = self.env.ref('stock.stock_location_customers') self.product = self.env.ref('product.product_product_27') def test_transfer_stock_in_locked_location(self): @@ -24,10 +25,27 @@ def test_transfer_stock_in_locked_location(self): 'location_id': self.supplier_location.id, 'location_dest_id': self.main_stock_location.id, 'product_id': self.product.id, - 'product_uom_qty': '2.0', + 'product_uom_qty': self.product.qty_available + 1, 'product_uom': 1, 'name': 'test', } stock_move = self.env['stock.move'].create(move_vals) - with self.assertRaises(UserError): + with self.assertRaises(ValidationError): + stock_move.action_done() + + def test_transfer_stock_out_locked_location(self): + """ + Test to move stock within a location that should not accept + Stock entrance. + """ + move_vals = { + 'location_id': self.main_stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product.id, + 'product_uom_qty': self.product.qty_available + 1, + 'product_uom': 1, + 'name': 'test', + } + stock_move = self.env['stock.move'].create(move_vals) + with self.assertRaises(ValidationError): stock_move.action_done() From 518fc3ad4356deb51d2eb5164700c2ef5c1d900d Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 8 Jul 2019 15:52:15 +0000 Subject: [PATCH 08/37] [UPD] Update stock_location_lockdown.pot --- stock_location_lockdown/i18n/stock_location_lockdown.pot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stock_location_lockdown/i18n/stock_location_lockdown.pot b/stock_location_lockdown/i18n/stock_location_lockdown.pot index 249d38b54ceb..bba5e0fbd99f 100644 --- a/stock_location_lockdown/i18n/stock_location_lockdown.pot +++ b/stock_location_lockdown/i18n/stock_location_lockdown.pot @@ -29,9 +29,9 @@ msgid "Quants" msgstr "" #. module: stock_location_lockdown -#: code:addons/stock_location_lockdown/models/stock_quant.py:20 +#: code:addons/stock_location_lockdown/models/stock_quant.py:17 #, python-format -msgid "The location '%s' is not configured to receive stock." +msgid "The location %s is blocked and can not be used for moving the product %s" msgstr "" #. module: stock_location_lockdown From 30afd0dd934a6ba9929609dfda3da539a7f93d2e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 8 Jul 2019 17:34:32 +0000 Subject: [PATCH 09/37] stock_location_lockdown 10.0.1.1.0 --- stock_location_lockdown/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stock_location_lockdown/__manifest__.py b/stock_location_lockdown/__manifest__.py index c6e9b7a73cd1..26c16a473ace 100644 --- a/stock_location_lockdown/__manifest__.py +++ b/stock_location_lockdown/__manifest__.py @@ -8,7 +8,7 @@ "author": "Akretion, Odoo Community Association (OCA)", "website": "https://github.com/OCA/stock-logistics-warehouse", "category": "Warehouse", - "version": "10.0.1.0.0", + "version": "10.0.1.1.0", "license": "AGPL-3", "application": False, "installable": True, From 318f35587a358b4bae6205c18dbf4329b95ca551 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 20 Jul 2019 12:14:50 +0000 Subject: [PATCH 10/37] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: stock-logistics-warehouse-10.0/stock-logistics-warehouse-10.0-stock_location_lockdown Translate-URL: https://translation.odoo-community.org/projects/stock-logistics-warehouse-10-0/stock-logistics-warehouse-10-0-stock_location_lockdown/ --- stock_location_lockdown/i18n/fr.po | 13 +++++++++---- stock_location_lockdown/i18n/pt.po | 16 +++++++++++----- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/stock_location_lockdown/i18n/fr.po b/stock_location_lockdown/i18n/fr.po index da5b21bce128..ee74fe5aaf6e 100644 --- a/stock_location_lockdown/i18n/fr.po +++ b/stock_location_lockdown/i18n/fr.po @@ -32,10 +32,11 @@ msgid "Quants" msgstr "" #. module: stock_location_lockdown -#: code:addons/stock_location_lockdown/models/stock_quant.py:20 -#, fuzzy, python-format -msgid "The location '%s' is not configured to receive stock." -msgstr "L'emplacement %s n'est pas configuré pour recevoir du stock." +#: code:addons/stock_location_lockdown/models/stock_quant.py:17 +#, python-format +msgid "" +"The location %s is blocked and can not be used for moving the product %s" +msgstr "" #. module: stock_location_lockdown #: model:ir.model.fields,help:stock_location_lockdown.field_stock_location_block_stock_entrance @@ -48,5 +49,9 @@ msgstr "" "cette emplacement. Habituellement utilisée pour les emplacements virtuels " "ayant des enfants." +#, fuzzy +#~ msgid "The location '%s' is not configured to receive stock." +#~ msgstr "L'emplacement %s n'est pas configuré pour recevoir du stock." + #~ msgid "Location" #~ msgstr "Emplacement" diff --git a/stock_location_lockdown/i18n/pt.po b/stock_location_lockdown/i18n/pt.po index a4a48860552c..fea5bc5ccd32 100644 --- a/stock_location_lockdown/i18n/pt.po +++ b/stock_location_lockdown/i18n/pt.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * stock_location_lockdown +# * stock_location_lockdown # msgid "" msgstr "" @@ -32,15 +32,21 @@ msgid "Quants" msgstr "" #. module: stock_location_lockdown -#: code:addons/stock_location_lockdown/models/stock_quant.py:20 +#: code:addons/stock_location_lockdown/models/stock_quant.py:17 #, python-format -msgid "The location '%s' is not configured to receive stock." -msgstr "A localização '%s' não está configurada para receber stock." +msgid "" +"The location %s is blocked and can not be used for moving the product %s" +msgstr "" #. module: stock_location_lockdown #: model:ir.model.fields,help:stock_location_lockdown.field_stock_location_block_stock_entrance -msgid "if this box is checked, putting stock on this location won't be allowed. Usually used for a virtual location that has childrens." +msgid "" +"if this box is checked, putting stock on this location won't be allowed. " +"Usually used for a virtual location that has childrens." msgstr "" "Se esta caixa estiver selecionada, não será permitido colocar stock nesta " "localização. É geralmente utilizada em localizações virtuais com " "descendentes." + +#~ msgid "The location '%s' is not configured to receive stock." +#~ msgstr "A localização '%s' não está configurada para receber stock." From f3fc7a4378bedcc72179b8e22a1d5d6be7a3fb4c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 29 Jul 2019 03:42:43 +0000 Subject: [PATCH 11/37] [UPD] README.rst --- stock_location_lockdown/static/description/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stock_location_lockdown/static/description/index.html b/stock_location_lockdown/static/description/index.html index 45dfeb269e44..3bdaeb6813c4 100644 --- a/stock_location_lockdown/static/description/index.html +++ b/stock_location_lockdown/static/description/index.html @@ -3,7 +3,7 @@ - + Stock Location Lockdown