From 155aea612cb80872efca49f3783812c3e45ca9e2 Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Thu, 6 Sep 2018 18:09:58 +0200 Subject: [PATCH 01/43] 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 00000000000..e6007a65145 --- /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 00000000000..9cf5311493b --- /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 00000000000..182f19b8d49 --- /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 00000000000..57547ba5ec7 --- /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 00000000000..28f63028124 --- /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 00000000000..377e8ca6800 --- /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 00000000000..032cb5169bc --- /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 00000000000..0bddb053ae4 --- /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 00000000000..8e7c3841aa6 --- /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 00000000000..b1b77caabb1 --- /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 00000000000..fbe0e8a7fec --- /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 00000000000..26c695414ee --- /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 00000000000..44543ce4a6b --- /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 00000000000..be16e7e219f --- /dev/null +++ b/stock_location_lockdown/views/stock_location.xml @@ -0,0 +1,17 @@ + + + + + + + stock.location + + + + + + + + + From 87fddd0f64ff3cb6036a922f57510b24e7225309 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 5 Dec 2018 21:09:31 +0100 Subject: [PATCH 02/43] [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 182f19b8d49..c6e9b7a73cd 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 377e8ca6800..965144e8bde 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 032cb5169bc..9639eb3f0e1 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 8e7c3841aa6..4fc3faa4962 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 b1b77caabb1..a8727fb3b12 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 44543ce4a6b..e55a2edb709 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 776be311bca8ebec861f1332aa0a26eebbf530ec Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 10 Dec 2018 21:19:46 +0000 Subject: [PATCH 03/43] [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 e6007a65145..46e4f3fa9f8 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 fbe0e8a7fec..45dfeb269e4 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 704f8f2bedceb54aab697e6ec66aeda44b4fa23c Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 10 Dec 2018 21:33:36 +0000 Subject: [PATCH 04/43] [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 57547ba5ec7..da5b21bce12 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 00000000000..249d38b54ce --- /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 d7b1c9636c1aefdabd21999e6c636350ab48cf5e Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva Date: Thu, 27 Dec 2018 23:22:51 +0000 Subject: [PATCH 05/43] 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 00000000000..a4a48860552 --- /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 70691b7e361618bf4182dcfcfacce4d9f2d936c7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 3 Apr 2019 03:25:28 +0000 Subject: [PATCH 06/43] [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 566265a19d568d026b6a57cc5756ed486afb8f81 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/43] [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 9639eb3f0e1..89b6b45ef7e 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 e55a2edb709..51dc3938f7f 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 4d67bdd809577ecb118c5d329db664d654a12450 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 8 Jul 2019 15:52:15 +0000 Subject: [PATCH 08/43] [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 249d38b54ce..bba5e0fbd99 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 1ee718647136a2fc3b5201ee109f4afe0cb287df Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 8 Jul 2019 17:34:32 +0000 Subject: [PATCH 09/43] 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 c6e9b7a73cd..26c16a473ac 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 8e5d3d4960703d39e6f299945ad44a7a66380ab8 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 20 Jul 2019 12:14:50 +0000 Subject: [PATCH 10/43] 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 da5b21bce12..ee74fe5aaf6 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 a4a48860552..fea5bc5ccd3 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 8d9371bad1ed8beec851ad1e16ef3668b845877b Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 29 Jul 2019 03:42:43 +0000 Subject: [PATCH 11/43] [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 45dfeb269e4..3bdaeb6813c 100644 --- a/stock_location_lockdown/static/description/index.html +++ b/stock_location_lockdown/static/description/index.html @@ -3,7 +3,7 @@ - + Stock Location Lockdown