From 3e71bf04ed92f931ad8f32e114808964d3456b6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lionel=20Sausin=20=26=20Lo=C3=AFc=20Bellier?= Date: Mon, 21 Mar 2016 17:12:39 +0100 Subject: [PATCH 01/23] New module stock_inventory_lockdown This module is a feature extracted from stock_inventory_location. Ported to v8 and new API Adopted latest OCA standards Added tests --- stock_inventory_lockdown/README.rst | 63 +++++++++++++ stock_inventory_lockdown/__init__.py | 5 + stock_inventory_lockdown/__openerp__.py | 17 ++++ stock_inventory_lockdown/i18n/fr.po | 32 +++++++ .../i18n/stock_inventory_lockdown.pot | 31 +++++++ .../images/location_locked.png | Bin 0 -> 12899 bytes .../images/move_error.png | Bin 0 -> 14298 bytes stock_inventory_lockdown/models/__init__.py | 7 ++ .../models/stock_inventory.py | 29 ++++++ .../models/stock_location.py | 46 +++++++++ .../models/stock_quant.py | 58 ++++++++++++ stock_inventory_lockdown/tests/__init__.py | 5 + .../tests/test_stock_inventory_lockdown.py | 87 ++++++++++++++++++ 13 files changed, 380 insertions(+) create mode 100644 stock_inventory_lockdown/README.rst create mode 100644 stock_inventory_lockdown/__init__.py create mode 100644 stock_inventory_lockdown/__openerp__.py create mode 100644 stock_inventory_lockdown/i18n/fr.po create mode 100644 stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot create mode 100644 stock_inventory_lockdown/images/location_locked.png create mode 100644 stock_inventory_lockdown/images/move_error.png create mode 100644 stock_inventory_lockdown/models/__init__.py create mode 100644 stock_inventory_lockdown/models/stock_inventory.py create mode 100644 stock_inventory_lockdown/models/stock_location.py create mode 100644 stock_inventory_lockdown/models/stock_quant.py create mode 100644 stock_inventory_lockdown/tests/__init__.py create mode 100644 stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py diff --git a/stock_inventory_lockdown/README.rst b/stock_inventory_lockdown/README.rst new file mode 100644 index 000000000..a8dd6b5cd --- /dev/null +++ b/stock_inventory_lockdown/README.rst @@ -0,0 +1,63 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +====================================== +Lock down locations during inventories +====================================== +This module lets you lock down the locations during an inventory. + +Usage +===== + +.. image:: images/location_locked.png + :alt: Error message + +.. image:: images/move_error.png + :alt: Error message + +While an inventory is in the state "In progress", no stock moves +can be recorded in/out of the inventory's location: users will get an error +message. +Creating or modifying a locations is also forbidden. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/153/8.0 + +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 +`_. + +Credits +======= + +Contributors +------------ + +* Loïc Bellier (Numérigraphe) +* Lionel Sausin (Numérigraphe) +* Laetitia Gangloff (Acsone) + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/stock_inventory_lockdown/__init__.py b/stock_inventory_lockdown/__init__.py new file mode 100644 index 000000000..ef0c464f0 --- /dev/null +++ b/stock_inventory_lockdown/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/stock_inventory_lockdown/__openerp__.py b/stock_inventory_lockdown/__openerp__.py new file mode 100644 index 000000000..09bca4a4b --- /dev/null +++ b/stock_inventory_lockdown/__openerp__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Inventory lock down", + "summary": "Lock down stock locations during inventories.", + "version": "8.0.1.0.0", + "depends": ["stock"], + "author": u"Numérigraphe,Odoo Community Association (OCA)", + "category": "Warehouse Management", + "images": [ + "images/move_error.png", + "images/location_locked.png"], + 'license': 'AGPL-3', + "installable": True, +} diff --git a/stock_inventory_lockdown/i18n/fr.po b/stock_inventory_lockdown/i18n/fr.po new file mode 100644 index 000000000..2dcb99f55 --- /dev/null +++ b/stock_inventory_lockdown/i18n/fr.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-21 18:49+0000\n" +"PO-Revision-Date: 2016-03-21 18:49+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_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "Un inventaire est en cours aux emplacements suivants :\n" +"%s" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "Un inventaire est en cours à cet emplacement" + diff --git a/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot b/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot new file mode 100644 index 000000000..10e6d1ee2 --- /dev/null +++ b/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-21 18:49+0000\n" +"PO-Revision-Date: 2016-03-21 18:49+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_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + diff --git a/stock_inventory_lockdown/images/location_locked.png b/stock_inventory_lockdown/images/location_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..fd4448561a97748dbca70d36708db87d8c8fedcd GIT binary patch literal 12899 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 nH_WN$7=zF2yl7kKICI#}kwe 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 Di~(0R literal 0 HcmV?d00001 diff --git a/stock_inventory_lockdown/models/__init__.py b/stock_inventory_lockdown/models/__init__.py new file mode 100644 index 000000000..6062634c0 --- /dev/null +++ b/stock_inventory_lockdown/models/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import stock_quant +from . import stock_inventory +from . import stock_location diff --git a/stock_inventory_lockdown/models/stock_inventory.py b/stock_inventory_lockdown/models/stock_inventory.py new file mode 100644 index 000000000..4886be466 --- /dev/null +++ b/stock_inventory_lockdown/models/stock_inventory.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api + + +class StockInventory(models.Model): + _inherit = 'stock.inventory' + + @api.model + def _get_locations_open_inventories(self): + """IDs of location in open exhaustive inventories, with children""" + inventories = self.search([('state', '=', 'confirm')]) + if not inventories: + # Early exit if no match found + return [] + location_ids = inventories.mapped('location_id') + + # Extend to the children Locations + return self.env['stock.location'].search( + [('location_id', 'child_of', location_ids.ids), + ('usage', 'in', ['internal', 'transit'])]) + + @api.multi + def action_done(self): + """Add value in the context to ignore the lockdown""" + return super(StockInventory, + self.with_context(bypass_lockdown=True)).action_done() diff --git a/stock_inventory_lockdown/models/stock_location.py b/stock_inventory_lockdown/models/stock_location.py new file mode 100644 index 000000000..a15b8210f --- /dev/null +++ b/stock_inventory_lockdown/models/stock_location.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# © 2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api, _ +from openerp.exceptions import ValidationError + + +class StockLocation(models.Model): + """Refuse changes during exhaustive Inventories""" + _inherit = 'stock.location' + _order = 'name' + + @api.multi + def _check_inventory(self): + """Error if an inventory is being conducted here""" + location_inventory_open_ids = self.env['stock.inventory'].sudo( + )._get_locations_open_inventories() + for location in self: + if location in location_inventory_open_ids: + raise ValidationError( + _('An inventory is being conducted at this ' + 'location')) + + @api.multi + def write(self, vals): + """Refuse write if an inventory is being conducted""" + locations_to_check = self + # If changing the parent, no inventory must conducted there either + if vals.get('location_id'): + locations_to_check |= self.browse(vals['location_id']) + locations_to_check._check_inventory() + return super(StockLocation, self).write(vals) + + @api.model + def create(self, vals): + """Refuse create if an inventory is being conducted at the parent""" + if 'location_id' in vals: + self.browse(vals['location_id'])._check_inventory() + return super(StockLocation, self).create(vals) + + @api.multi + def unlink(self): + """Refuse unlink if an inventory is being conducted""" + self._check_inventory() + return super(StockLocation, self).unlink() diff --git a/stock_inventory_lockdown/models/stock_quant.py b/stock_inventory_lockdown/models/stock_quant.py new file mode 100644 index 000000000..ed3dbb3ad --- /dev/null +++ b/stock_inventory_lockdown/models/stock_quant.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# © 2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api, _ +from openerp.exceptions import ValidationError + + +class StockQuant(models.Model): + _inherit = 'stock.quant' + + @api.multi + def write(self, vals): + """Check that the location is not locked by an open inventory. + Check both the location as it was (source) and the location as + it will be (destination). + We verify the locations even if they are unchanged, because changing + ie. the quantity is not acceptable either. + @raise ValidationError if they are. + """ + if not self.env.context.get('bypass_lockdown', False): + # Find the locked locations + locked_location_ids = self.env[ + 'stock.inventory']._get_locations_open_inventories() + if locked_location_ids and 'location_id' in vals.keys(): + messages = set() + # Find the destination locations + location_dest_id = self.env['stock.location'].browse( + vals['location_id']) + for quant in self: + # Source locations + location_id = quant.location_id + # Moving to a location locked down + if location_dest_id in locked_location_ids: + messages.add(location_dest_id.name) + # Moving from a location locked down + if location_id in locked_location_ids: + messages.add(location_id.name) + if len(messages): + raise ValidationError( + _('An inventory is being conducted at the following ' + 'location(s):\n%s') % "\n - ".join(messages)) + return super(StockQuant, self).write(vals) + + @api.model + def create(self, vals): + """Check that the locations are not locked by an open inventory. + @raise ValidationError if they are. + """ + quant = super(StockQuant, self).create(vals) + if not self.env.context.get('bypass_lockdown', False): + locked_location_ids = self.env[ + 'stock.inventory']._get_locations_open_inventories() + if quant.location_id in locked_location_ids: + raise ValidationError( + _('An inventory is being conducted at the following ' + 'location(s):\n%s') % " - " + quant.location_id.name) + return quant diff --git a/stock_inventory_lockdown/tests/__init__.py b/stock_inventory_lockdown/tests/__init__.py new file mode 100644 index 000000000..c1942bfd6 --- /dev/null +++ b/stock_inventory_lockdown/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_stock_inventory_lockdown diff --git a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py new file mode 100644 index 000000000..905aad629 --- /dev/null +++ b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# © 2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.exceptions import ValidationError + +from openerp.addons.stock.tests.common import TestStockCommon + + +class StockInventoryLocationTest(TestStockCommon): + def setUp(self): + super(StockInventoryLocationTest, self).setUp() + # Make a new location + self.new_location = self.env['stock.location'].create( + {'name': 'Test location', + 'usage': 'internal'}) + self.new_sublocation = self.env['stock.location'].create( + {'name': 'Test sublocation', + 'usage': 'internal', + 'location_id': self.new_location.id}) + # Input goods + self.env['stock.quant'].create( + {'location_id': self.new_location.id, + 'product_id': self.productA.id, + 'qty': 10.0}) + # Prepare an inventory + self.inventory = self.env['stock.inventory'].create( + {'name': 'Lock down location', + 'filter': 'none', + 'location_id': self.new_location.id}) + self.inventory.prepare_inventory() + self.assertTrue(self.inventory.line_ids, 'The inventory is empty.') + + def test_update_parent_location(self): + """Updating the parent of a location is OK if no inv. in progress.""" + self.inventory.action_cancel_inventory() + self.inventory.location_id.location_id = self.env.ref( + 'stock.stock_location_4') + + def test_update_parent_location_locked_down(self): + """Updating the parent of a location must fail""" + with self.assertRaises(ValidationError): + self.inventory.location_id.location_id = self.env.ref( + 'stock.stock_location_4') + + def test_inventory(self): + """We must still be able to finish the inventory""" + self.assertTrue(self.inventory.line_ids) + self.inventory.line_ids.write({'product_qty': 42.0}) + for line in self.inventory.line_ids: + self.assertNotEqual(line.product_id.with_context( + location=line.location_id.id).qty_available, 42.0) + self.inventory.action_done() + for line in self.inventory.line_ids: + self.assertEqual(line.product_id.with_context( + location=line.location_id.id).qty_available, 42.0) + + def test_inventory_sublocation(self): + """We must be able to make an inventory in a sublocation""" + inventory_subloc = self.env['stock.inventory'].create( + {'name': 'Lock down location', + 'filter': 'partial', + 'location_id': self.new_sublocation.id}) + inventory_subloc.prepare_inventory() + line = self.env['stock.inventory.line'].create( + {'product_id': self.productA.id, + 'product_qty': 22.0, + 'location_id': self.new_sublocation.id, + 'inventory_id': inventory_subloc.id}) + self.assertTrue(inventory_subloc.line_ids) + inventory_subloc.action_done() + self.assertEqual(line.product_id.with_context( + location=line.location_id.id).qty_available, 22.0) + + def test_move(self): + """Stock move must be forbidden during inventory""" + move = self.env['stock.move'].create({ + 'name': 'Test move lock down', + 'product_id': self.productA.id, + 'product_uom_qty': 10.0, + 'product_uom': self.productA.uom_id.id, + 'location_id': self.inventory.location_id.id, + 'location_dest_id': self.customer_location + }) + with self.assertRaises(ValidationError): + move.action_done() From afd7344b4b8abd408e960f6f11e15b245b3113d6 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 17 Apr 2016 10:17:48 -0400 Subject: [PATCH 02/23] OCA Transbot updated translations from Transifex --- stock_inventory_lockdown/i18n/de.po | 49 ++++++++++++++++++++++++++ stock_inventory_lockdown/i18n/es.po | 48 +++++++++++++++++++++++++ stock_inventory_lockdown/i18n/es_ES.po | 48 +++++++++++++++++++++++++ stock_inventory_lockdown/i18n/fi.po | 48 +++++++++++++++++++++++++ stock_inventory_lockdown/i18n/fr.po | 40 ++++++++++++++------- stock_inventory_lockdown/i18n/it.po | 48 +++++++++++++++++++++++++ stock_inventory_lockdown/i18n/pt_BR.po | 48 +++++++++++++++++++++++++ stock_inventory_lockdown/i18n/sl.po | 49 ++++++++++++++++++++++++++ stock_inventory_lockdown/i18n/zh_CN.po | 48 +++++++++++++++++++++++++ 9 files changed, 414 insertions(+), 12 deletions(-) create mode 100644 stock_inventory_lockdown/i18n/de.po create mode 100644 stock_inventory_lockdown/i18n/es.po create mode 100644 stock_inventory_lockdown/i18n/es_ES.po create mode 100644 stock_inventory_lockdown/i18n/fi.po create mode 100644 stock_inventory_lockdown/i18n/it.po create mode 100644 stock_inventory_lockdown/i18n/pt_BR.po create mode 100644 stock_inventory_lockdown/i18n/sl.po create mode 100644 stock_inventory_lockdown/i18n/zh_CN.po diff --git a/stock_inventory_lockdown/i18n/de.po b/stock_inventory_lockdown/i18n/de.po new file mode 100644 index 000000000..a17acf496 --- /dev/null +++ b/stock_inventory_lockdown/i18n/de.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# Rudolf Schnapka , 2017 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-29 09:22+0000\n" +"PO-Revision-Date: 2017-04-10 11:53+0000\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "An folgenden Orten wird eine Inventur durchgeführt:\n%s" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "In diesem Lager wird gerade eine Inventur durchgeführt" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "Bestand" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "Bestandslagerorte" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "Quants" diff --git a/stock_inventory_lockdown/i18n/es.po b/stock_inventory_lockdown/i18n/es.po new file mode 100644 index 000000000..fb289407f --- /dev/null +++ b/stock_inventory_lockdown/i18n/es.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-15 02:42+0000\n" +"PO-Revision-Date: 2016-04-14 14:47+0000\n" +"Last-Translator: <>\n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "Inventario" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "Ubicaciones de inventario" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "Quants" diff --git a/stock_inventory_lockdown/i18n/es_ES.po b/stock_inventory_lockdown/i18n/es_ES.po new file mode 100644 index 000000000..63ffa2f01 --- /dev/null +++ b/stock_inventory_lockdown/i18n/es_ES.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-07 07:40+0000\n" +"PO-Revision-Date: 2016-04-14 14:47+0000\n" +"Last-Translator: <>\n" +"Language-Team: Spanish (Spain) (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/es_ES/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_ES\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "Inventario" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "" diff --git a/stock_inventory_lockdown/i18n/fi.po b/stock_inventory_lockdown/i18n/fi.po new file mode 100644 index 000000000..a7ac4c6bb --- /dev/null +++ b/stock_inventory_lockdown/i18n/fi.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-15 02:42+0000\n" +"PO-Revision-Date: 2016-04-14 14:47+0000\n" +"Last-Translator: <>\n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "Määrät" diff --git a/stock_inventory_lockdown/i18n/fr.po b/stock_inventory_lockdown/i18n/fr.po index 2dcb99f55..56d2d9220 100644 --- a/stock_inventory_lockdown/i18n/fr.po +++ b/stock_inventory_lockdown/i18n/fr.po @@ -1,28 +1,30 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * stock_inventory_lockdown -# +# * stock_inventory_lockdown +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-03-21 18:49+0000\n" -"PO-Revision-Date: 2016-03-21 18:49+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" +"POT-Creation-Date: 2016-04-15 02:42+0000\n" +"PO-Revision-Date: 2016-04-14 14:47+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: French (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 #: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 #, python-format -msgid "An inventory is being conducted at the following location(s):\n" -"%s" -msgstr "Un inventaire est en cours aux emplacements suivants :\n" +msgid "" +"An inventory is being conducted at the following location(s):\n" "%s" +msgstr "Un inventaire est en cours aux emplacements suivants :\n%s" #. module: stock_inventory_lockdown #: code:addons/stock_inventory_lockdown/models/stock_location.py:22 @@ -30,3 +32,17 @@ msgstr "Un inventaire est en cours aux emplacements suivants :\n" msgid "An inventory is being conducted at this location" msgstr "Un inventaire est en cours à cet emplacement" +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "Inventaire" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "Emplacements d'inventaire" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "Quants" diff --git a/stock_inventory_lockdown/i18n/it.po b/stock_inventory_lockdown/i18n/it.po new file mode 100644 index 000000000..70999a318 --- /dev/null +++ b/stock_inventory_lockdown/i18n/it.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-18 03:44+0000\n" +"PO-Revision-Date: 2016-04-14 14:47+0000\n" +"Last-Translator: <>\n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "Inventario" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "Quantità" diff --git a/stock_inventory_lockdown/i18n/pt_BR.po b/stock_inventory_lockdown/i18n/pt_BR.po new file mode 100644 index 000000000..ac986da0f --- /dev/null +++ b/stock_inventory_lockdown/i18n/pt_BR.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-15 02:42+0000\n" +"PO-Revision-Date: 2016-04-14 14:47+0000\n" +"Last-Translator: <>\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "Quants" diff --git a/stock_inventory_lockdown/i18n/sl.po b/stock_inventory_lockdown/i18n/sl.po new file mode 100644 index 000000000..bf979f248 --- /dev/null +++ b/stock_inventory_lockdown/i18n/sl.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# Matjaž Mozetič , 2016 +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-15 02:42+0000\n" +"PO-Revision-Date: 2016-04-15 04:54+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "Na naslednji lokaciji (lokacijah) se vodi inventar:\n%s" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "Na tej lokaciji se vodi inventar" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "Inventar" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "Lokacije inventarja" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "Kvant" diff --git a/stock_inventory_lockdown/i18n/zh_CN.po b/stock_inventory_lockdown/i18n/zh_CN.po new file mode 100644 index 000000000..ff8fdba19 --- /dev/null +++ b/stock_inventory_lockdown/i18n/zh_CN.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-29 09:22+0000\n" +"PO-Revision-Date: 2016-04-14 14:47+0000\n" +"Last-Translator: <>\n" +"Language-Team: Chinese (China) (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "源" From dd8f3821d06f03c57370d22e962d60b34c2d4fce Mon Sep 17 00:00:00 2001 From: mreficent Date: Fri, 12 May 2017 17:46:57 +0200 Subject: [PATCH 03/23] stock_inventory_lockdown --- stock_inventory_lockdown/README.rst | 13 ++---- stock_inventory_lockdown/__openerp__.py | 6 +-- .../images/location_locked.png | Bin 12899 -> 0 bytes .../images/move_error.png | Bin 14298 -> 11038 bytes .../models/stock_inventory.py | 18 +++++--- .../models/stock_location.py | 13 +++--- .../models/stock_quant.py | 39 +++++++----------- .../tests/test_stock_inventory_lockdown.py | 1 - 8 files changed, 40 insertions(+), 50 deletions(-) delete mode 100644 stock_inventory_lockdown/images/location_locked.png diff --git a/stock_inventory_lockdown/README.rst b/stock_inventory_lockdown/README.rst index a8dd6b5cd..eb9dc5bfe 100644 --- a/stock_inventory_lockdown/README.rst +++ b/stock_inventory_lockdown/README.rst @@ -10,20 +10,17 @@ This module lets you lock down the locations during an inventory. Usage ===== -.. image:: images/location_locked.png - :alt: Error message - .. image:: images/move_error.png :alt: Error message While an inventory is in the state "In progress", no stock moves can be recorded in/out of the inventory's location: users will get an error message. -Creating or modifying a locations is also forbidden. +Creating or modifying locations is also forbidden. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/153/8.0 + :target: https://runbot.odoo-community.org/runbot/153/9.0 Bug Tracker =========== @@ -31,11 +28,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 -`_. +help us smashing it by providing a detailed and welcomed feedback. Credits ======= diff --git a/stock_inventory_lockdown/__openerp__.py b/stock_inventory_lockdown/__openerp__.py index 09bca4a4b..abccecde3 100644 --- a/stock_inventory_lockdown/__openerp__.py +++ b/stock_inventory_lockdown/__openerp__.py @@ -3,11 +3,11 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - "name": "Inventory lock down", + "name": "Inventory Lock Down", "summary": "Lock down stock locations during inventories.", - "version": "8.0.1.0.0", + "version": "9.0.1.0.0", "depends": ["stock"], - "author": u"Numérigraphe,Odoo Community Association (OCA)", + "author": "Numérigraphe,Odoo Community Association (OCA)", "category": "Warehouse Management", "images": [ "images/move_error.png", diff --git a/stock_inventory_lockdown/images/location_locked.png b/stock_inventory_lockdown/images/location_locked.png deleted file mode 100644 index fd4448561a97748dbca70d36708db87d8c8fedcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12899 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 nH_WN$7=zF2yl7kKG_Lc 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 Di~(0R diff --git a/stock_inventory_lockdown/models/stock_inventory.py b/stock_inventory_lockdown/models/stock_inventory.py index 4886be466..71c001f6c 100644 --- a/stock_inventory_lockdown/models/stock_inventory.py +++ b/stock_inventory_lockdown/models/stock_inventory.py @@ -9,18 +9,24 @@ class StockInventory(models.Model): _inherit = 'stock.inventory' @api.model - def _get_locations_open_inventories(self): - """IDs of location in open exhaustive inventories, with children""" - inventories = self.search([('state', '=', 'confirm')]) + def _get_locations_open_inventories(self, locations_ids=None): + """IDs of locations in open exhaustive inventories, with children""" + inventory_domain = [('state', '=', 'confirm')] + if locations_ids: + inventory_domain.append(('location_id', 'child_of', locations_ids)) + inventories = self.search(inventory_domain) if not inventories: # Early exit if no match found return [] location_ids = inventories.mapped('location_id') # Extend to the children Locations - return self.env['stock.location'].search( - [('location_id', 'child_of', location_ids.ids), - ('usage', 'in', ['internal', 'transit'])]) + location_domain = [ + ('location_id', 'child_of', location_ids.ids), + ('usage', 'in', ['internal', 'transit'])] + if locations_ids: + location_domain.append(('location_id', 'child_of', locations_ids)) + return self.env['stock.location'].search(location_domain) @api.multi def action_done(self): diff --git a/stock_inventory_lockdown/models/stock_location.py b/stock_inventory_lockdown/models/stock_location.py index a15b8210f..574ac2866 100644 --- a/stock_inventory_lockdown/models/stock_location.py +++ b/stock_inventory_lockdown/models/stock_location.py @@ -14,13 +14,12 @@ class StockLocation(models.Model): @api.multi def _check_inventory(self): """Error if an inventory is being conducted here""" - location_inventory_open_ids = self.env['stock.inventory'].sudo( - )._get_locations_open_inventories() - for location in self: - if location in location_inventory_open_ids: - raise ValidationError( - _('An inventory is being conducted at this ' - 'location')) + location_inventory_open_ids = self.env['stock.inventory'].sudo().\ + _get_locations_open_inventories(self.ids) + if location_inventory_open_ids: + raise ValidationError( + _('An inventory is being conducted at this ' + 'location')) @api.multi def write(self, vals): diff --git a/stock_inventory_lockdown/models/stock_quant.py b/stock_inventory_lockdown/models/stock_quant.py index ed3dbb3ad..5cec98a4b 100644 --- a/stock_inventory_lockdown/models/stock_quant.py +++ b/stock_inventory_lockdown/models/stock_quant.py @@ -20,26 +20,19 @@ class StockQuant(models.Model): """ if not self.env.context.get('bypass_lockdown', False): # Find the locked locations - locked_location_ids = self.env[ - 'stock.inventory']._get_locations_open_inventories() - if locked_location_ids and 'location_id' in vals.keys(): - messages = set() - # Find the destination locations - location_dest_id = self.env['stock.location'].browse( - vals['location_id']) - for quant in self: - # Source locations - location_id = quant.location_id - # Moving to a location locked down - if location_dest_id in locked_location_ids: - messages.add(location_dest_id.name) - # Moving from a location locked down - if location_id in locked_location_ids: - messages.add(location_id.name) - if len(messages): - raise ValidationError( - _('An inventory is being conducted at the following ' - 'location(s):\n%s') % "\n - ".join(messages)) + locked_location_ids = [] + if 'location_id' in vals.keys(): + locked_location_ids = self.env[ + 'stock.inventory']._get_locations_open_inventories( + self.env['stock.location'].browse( + vals['location_id']).ids + self.mapped( + 'location_id').ids + ) + if locked_location_ids: + location_names = locked_location_ids.mapped('name') + raise ValidationError( + _('An inventory is being conducted at the following ' + 'location(s):\n%s') % "\n - ".join(location_names)) return super(StockQuant, self).write(vals) @api.model @@ -49,9 +42,9 @@ class StockQuant(models.Model): """ quant = super(StockQuant, self).create(vals) if not self.env.context.get('bypass_lockdown', False): - locked_location_ids = self.env[ - 'stock.inventory']._get_locations_open_inventories() - if quant.location_id in locked_location_ids: + locked_location_ids = self.env['stock.inventory'].\ + _get_locations_open_inventories(quant.location_id.ids) + if locked_location_ids: raise ValidationError( _('An inventory is being conducted at the following ' 'location(s):\n%s') % " - " + quant.location_id.name) diff --git a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py index 905aad629..cfcb7dfeb 100644 --- a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py +++ b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py @@ -4,7 +4,6 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp.exceptions import ValidationError - from openerp.addons.stock.tests.common import TestStockCommon From 0b4ffa3c5257fba6eb44a2da5419882576dc8b29 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 10 Jun 2017 12:35:17 +0200 Subject: [PATCH 04/23] OCA Transbot updated translations from Transifex --- stock_inventory_lockdown/i18n/de.po | 22 ++++++------ stock_inventory_lockdown/i18n/fr.po | 21 ++++++----- stock_inventory_lockdown/i18n/pt_BR.po | 20 ++++++----- stock_inventory_lockdown/i18n/ro.po | 49 ++++++++++++++++++++++++++ stock_inventory_lockdown/i18n/sl.po | 22 ++++++------ 5 files changed, 96 insertions(+), 38 deletions(-) create mode 100644 stock_inventory_lockdown/i18n/ro.po diff --git a/stock_inventory_lockdown/i18n/de.po b/stock_inventory_lockdown/i18n/de.po index a17acf496..e4581eeb0 100644 --- a/stock_inventory_lockdown/i18n/de.po +++ b/stock_inventory_lockdown/i18n/de.po @@ -3,15 +3,15 @@ # * stock_inventory_lockdown # # Translators: -# Rudolf Schnapka , 2017 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-03-29 09:22+0000\n" -"PO-Revision-Date: 2017-04-10 11:53+0000\n" -"Last-Translator: Rudolf Schnapka \n" -"Language-Team: German (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/de/)\n" +"POT-Creation-Date: 2017-06-10 05:35+0000\n" +"PO-Revision-Date: 2017-06-10 05:35+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -19,16 +19,18 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" "%s" -msgstr "An folgenden Orten wird eine Inventur durchgeführt:\n%s" +msgstr "" +"An folgenden Orten wird eine Inventur durchgeführt:\n" +"%s" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 #, python-format msgid "An inventory is being conducted at this location" msgstr "In diesem Lager wird gerade eine Inventur durchgeführt" diff --git a/stock_inventory_lockdown/i18n/fr.po b/stock_inventory_lockdown/i18n/fr.po index 56d2d9220..c8d9f4494 100644 --- a/stock_inventory_lockdown/i18n/fr.po +++ b/stock_inventory_lockdown/i18n/fr.po @@ -3,14 +3,15 @@ # * stock_inventory_lockdown # # Translators: +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-15 02:42+0000\n" -"PO-Revision-Date: 2016-04-14 14:47+0000\n" -"Last-Translator: OCA Transbot \n" -"Language-Team: French (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/fr/)\n" +"POT-Creation-Date: 2017-06-10 05:35+0000\n" +"PO-Revision-Date: 2017-06-10 05:35+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -18,16 +19,18 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" "%s" -msgstr "Un inventaire est en cours aux emplacements suivants :\n%s" +msgstr "" +"Un inventaire est en cours aux emplacements suivants :\n" +"%s" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 #, python-format msgid "An inventory is being conducted at this location" msgstr "Un inventaire est en cours à cet emplacement" diff --git a/stock_inventory_lockdown/i18n/pt_BR.po b/stock_inventory_lockdown/i18n/pt_BR.po index ac986da0f..34c18e7b8 100644 --- a/stock_inventory_lockdown/i18n/pt_BR.po +++ b/stock_inventory_lockdown/i18n/pt_BR.po @@ -3,14 +3,16 @@ # * stock_inventory_lockdown # # Translators: +# OCA Transbot , 2017 +# Felipe Lopes , 2017 msgid "" msgstr "" -"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-15 02:42+0000\n" -"PO-Revision-Date: 2016-04-14 14:47+0000\n" -"Last-Translator: <>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/pt_BR/)\n" +"POT-Creation-Date: 2017-06-10 05:35+0000\n" +"PO-Revision-Date: 2017-06-10 05:35+0000\n" +"Last-Translator: Felipe Lopes , 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -18,8 +20,8 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,7 +29,7 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 #, python-format msgid "An inventory is being conducted at this location" msgstr "" @@ -35,7 +37,7 @@ msgstr "" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory msgid "Inventory" -msgstr "" +msgstr "Inventário" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_location diff --git a/stock_inventory_lockdown/i18n/ro.po b/stock_inventory_lockdown/i18n/ro.po new file mode 100644 index 000000000..45a90ad6b --- /dev/null +++ b/stock_inventory_lockdown/i18n/ro.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# Dorin Hongu , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-10 05:35+0000\n" +"PO-Revision-Date: 2017-06-10 05:35+0000\n" +"Last-Translator: Dorin Hongu , 2017\n" +"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant +msgid "Quants" +msgstr "Poziții de stoc" diff --git a/stock_inventory_lockdown/i18n/sl.po b/stock_inventory_lockdown/i18n/sl.po index bf979f248..4b79909d4 100644 --- a/stock_inventory_lockdown/i18n/sl.po +++ b/stock_inventory_lockdown/i18n/sl.po @@ -3,15 +3,15 @@ # * stock_inventory_lockdown # # Translators: -# Matjaž Mozetič , 2016 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-15 02:42+0000\n" -"PO-Revision-Date: 2016-04-15 04:54+0000\n" -"Last-Translator: Matjaž Mozetič \n" -"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/sl/)\n" +"POT-Creation-Date: 2017-06-10 05:35+0000\n" +"PO-Revision-Date: 2017-06-10 05:35+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -19,16 +19,18 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 +#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" "%s" -msgstr "Na naslednji lokaciji (lokacijah) se vodi inventar:\n%s" +msgstr "" +"Na naslednji lokaciji (lokacijah) se vodi inventar:\n" +"%s" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 #, python-format msgid "An inventory is being conducted at this location" msgstr "Na tej lokaciji se vodi inventar" From b506999f27d87165fb8a5213cdad1f3ef013ab8f Mon Sep 17 00:00:00 2001 From: Jordi Ballester Date: Tue, 27 Jun 2017 12:24:38 +0200 Subject: [PATCH 05/23] refactor the module to perform lockdown validations using constraint in stock move instead of checks in quants. This will allow for a more robust lockdown, and still make it possible to perform inventory adjustments in the locked location. Also resolves an outstanding issue related to the previous design not allowing inventory adjustments where negative quants existed. --- stock_inventory_lockdown/README.rst | 4 ++ stock_inventory_lockdown/__openerp__.py | 2 +- stock_inventory_lockdown/models/__init__.py | 2 +- .../models/stock_inventory.py | 6 --- stock_inventory_lockdown/models/stock_move.py | 26 ++++++++++ .../models/stock_quant.py | 51 ------------------- 6 files changed, 32 insertions(+), 59 deletions(-) create mode 100644 stock_inventory_lockdown/models/stock_move.py delete mode 100644 stock_inventory_lockdown/models/stock_quant.py diff --git a/stock_inventory_lockdown/README.rst b/stock_inventory_lockdown/README.rst index eb9dc5bfe..4d61c6d69 100644 --- a/stock_inventory_lockdown/README.rst +++ b/stock_inventory_lockdown/README.rst @@ -39,6 +39,10 @@ Contributors * Loïc Bellier (Numérigraphe) * Lionel Sausin (Numérigraphe) * Laetitia Gangloff (Acsone) +* Laurent Mignon (Acsone) +* Lois Rilo (Eficent) +* Jordi Ballester (Eficent) + Maintainer ---------- diff --git a/stock_inventory_lockdown/__openerp__.py b/stock_inventory_lockdown/__openerp__.py index abccecde3..6e5205497 100644 --- a/stock_inventory_lockdown/__openerp__.py +++ b/stock_inventory_lockdown/__openerp__.py @@ -5,7 +5,7 @@ { "name": "Inventory Lock Down", "summary": "Lock down stock locations during inventories.", - "version": "9.0.1.0.0", + "version": "9.0.1.0.1", "depends": ["stock"], "author": "Numérigraphe,Odoo Community Association (OCA)", "category": "Warehouse Management", diff --git a/stock_inventory_lockdown/models/__init__.py b/stock_inventory_lockdown/models/__init__.py index 6062634c0..dfae546a6 100644 --- a/stock_inventory_lockdown/models/__init__.py +++ b/stock_inventory_lockdown/models/__init__.py @@ -2,6 +2,6 @@ # © 2013-2016 Numérigraphe SARL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import stock_quant +from . import stock_move from . import stock_inventory from . import stock_location diff --git a/stock_inventory_lockdown/models/stock_inventory.py b/stock_inventory_lockdown/models/stock_inventory.py index 71c001f6c..8839115be 100644 --- a/stock_inventory_lockdown/models/stock_inventory.py +++ b/stock_inventory_lockdown/models/stock_inventory.py @@ -27,9 +27,3 @@ class StockInventory(models.Model): if locations_ids: location_domain.append(('location_id', 'child_of', locations_ids)) return self.env['stock.location'].search(location_domain) - - @api.multi - def action_done(self): - """Add value in the context to ignore the lockdown""" - return super(StockInventory, - self.with_context(bypass_lockdown=True)).action_done() diff --git a/stock_inventory_lockdown/models/stock_move.py b/stock_inventory_lockdown/models/stock_move.py new file mode 100644 index 000000000..d5ffdfb7f --- /dev/null +++ b/stock_inventory_lockdown/models/stock_move.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# © 2016 Numérigraphe SARL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api, _ +from openerp.exceptions import ValidationError + + +class StockMove(models.Model): + _inherit = 'stock.move' + + @api.constrains('location_dest_id', 'location_id', 'state') + def _check_locked_location(self): + for move in self: + if move.state == 'draft': + continue + locked_location_ids = self.env[ + 'stock.inventory']._get_locations_open_inventories( + [move.location_dest_id.id, move.location_id.id]) + if (locked_location_ids and + move.product_id.property_stock_inventory not in [ + move.location_dest_id, move.location_id]): + location_names = locked_location_ids.mapped('complete_name') + raise ValidationError( + _('An inventory is being conducted at the following ' + 'location(s):\n%s') % "\n - ".join(location_names)) diff --git a/stock_inventory_lockdown/models/stock_quant.py b/stock_inventory_lockdown/models/stock_quant.py deleted file mode 100644 index 5cec98a4b..000000000 --- a/stock_inventory_lockdown/models/stock_quant.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -# © 2016 Numérigraphe SARL -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from openerp import models, api, _ -from openerp.exceptions import ValidationError - - -class StockQuant(models.Model): - _inherit = 'stock.quant' - - @api.multi - def write(self, vals): - """Check that the location is not locked by an open inventory. - Check both the location as it was (source) and the location as - it will be (destination). - We verify the locations even if they are unchanged, because changing - ie. the quantity is not acceptable either. - @raise ValidationError if they are. - """ - if not self.env.context.get('bypass_lockdown', False): - # Find the locked locations - locked_location_ids = [] - if 'location_id' in vals.keys(): - locked_location_ids = self.env[ - 'stock.inventory']._get_locations_open_inventories( - self.env['stock.location'].browse( - vals['location_id']).ids + self.mapped( - 'location_id').ids - ) - if locked_location_ids: - location_names = locked_location_ids.mapped('name') - raise ValidationError( - _('An inventory is being conducted at the following ' - 'location(s):\n%s') % "\n - ".join(location_names)) - return super(StockQuant, self).write(vals) - - @api.model - def create(self, vals): - """Check that the locations are not locked by an open inventory. - @raise ValidationError if they are. - """ - quant = super(StockQuant, self).create(vals) - if not self.env.context.get('bypass_lockdown', False): - locked_location_ids = self.env['stock.inventory'].\ - _get_locations_open_inventories(quant.location_id.ids) - if locked_location_ids: - raise ValidationError( - _('An inventory is being conducted at the following ' - 'location(s):\n%s') % " - " + quant.location_id.name) - return quant From 006db42afa7196fb53eb48dfee98a64441d9b250 Mon Sep 17 00:00:00 2001 From: mreficent Date: Thu, 27 Jul 2017 17:29:51 +0200 Subject: [PATCH 06/23] [MIG] stock_inventory_lockdown: Migration to 10.0 --- stock_inventory_lockdown/README.rst | 4 +- .../{__openerp__.py => __manifest__.py} | 4 +- .../models/stock_inventory.py | 4 +- .../models/stock_location.py | 36 ++++++------------ stock_inventory_lockdown/models/stock_move.py | 10 ++--- .../static/description/icon.png | Bin 0 -> 9455 bytes .../{ => static}/images/move_error.png | Bin .../tests/test_stock_inventory_lockdown.py | 6 +-- 8 files changed, 27 insertions(+), 37 deletions(-) rename stock_inventory_lockdown/{__openerp__.py => __manifest__.py} (81%) create mode 100644 stock_inventory_lockdown/static/description/icon.png rename stock_inventory_lockdown/{ => static}/images/move_error.png (100%) diff --git a/stock_inventory_lockdown/README.rst b/stock_inventory_lockdown/README.rst index 4d61c6d69..2acf8af38 100644 --- a/stock_inventory_lockdown/README.rst +++ b/stock_inventory_lockdown/README.rst @@ -10,7 +10,7 @@ This module lets you lock down the locations during an inventory. Usage ===== -.. image:: images/move_error.png +.. image:: stock_inventory_lockdown/static/images/move_error.png :alt: Error message While an inventory is in the state "In progress", no stock moves @@ -20,7 +20,7 @@ Creating or modifying locations is also forbidden. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/153/9.0 + :target: https://runbot.odoo-community.org/runbot/153/10.0 Bug Tracker =========== diff --git a/stock_inventory_lockdown/__openerp__.py b/stock_inventory_lockdown/__manifest__.py similarity index 81% rename from stock_inventory_lockdown/__openerp__.py rename to stock_inventory_lockdown/__manifest__.py index 6e5205497..3196028d1 100644 --- a/stock_inventory_lockdown/__openerp__.py +++ b/stock_inventory_lockdown/__manifest__.py @@ -5,9 +5,9 @@ { "name": "Inventory Lock Down", "summary": "Lock down stock locations during inventories.", - "version": "9.0.1.0.1", + "version": "10.0.1.0.0", "depends": ["stock"], - "author": "Numérigraphe,Odoo Community Association (OCA)", + "author": "Numérigraphe,Eficent,Odoo Community Association (OCA)", "category": "Warehouse Management", "images": [ "images/move_error.png", diff --git a/stock_inventory_lockdown/models/stock_inventory.py b/stock_inventory_lockdown/models/stock_inventory.py index 8839115be..aab5010fd 100644 --- a/stock_inventory_lockdown/models/stock_inventory.py +++ b/stock_inventory_lockdown/models/stock_inventory.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- # © 2013-2016 Numérigraphe SARL +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, api +from odoo import api, models class StockInventory(models.Model): diff --git a/stock_inventory_lockdown/models/stock_location.py b/stock_inventory_lockdown/models/stock_location.py index 574ac2866..62662d4d8 100644 --- a/stock_inventory_lockdown/models/stock_location.py +++ b/stock_inventory_lockdown/models/stock_location.py @@ -2,8 +2,8 @@ # © 2016 Numérigraphe SARL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, api, _ -from openerp.exceptions import ValidationError +from odoo import api, models, _ +from odoo.exceptions import ValidationError class StockLocation(models.Model): @@ -12,34 +12,22 @@ class StockLocation(models.Model): _order = 'name' @api.multi - def _check_inventory(self): + @api.constrains('location_id') + def _check_inventory_location_id(self): """Error if an inventory is being conducted here""" + vals = set(self.ids) | set(self.mapped('location_id').ids) location_inventory_open_ids = self.env['stock.inventory'].sudo().\ - _get_locations_open_inventories(self.ids) + _get_locations_open_inventories(vals) if location_inventory_open_ids: raise ValidationError( - _('An inventory is being conducted at this ' - 'location')) - - @api.multi - def write(self, vals): - """Refuse write if an inventory is being conducted""" - locations_to_check = self - # If changing the parent, no inventory must conducted there either - if vals.get('location_id'): - locations_to_check |= self.browse(vals['location_id']) - locations_to_check._check_inventory() - return super(StockLocation, self).write(vals) - - @api.model - def create(self, vals): - """Refuse create if an inventory is being conducted at the parent""" - if 'location_id' in vals: - self.browse(vals['location_id'])._check_inventory() - return super(StockLocation, self).create(vals) + _('An inventory is being conducted at this location')) @api.multi def unlink(self): """Refuse unlink if an inventory is being conducted""" - self._check_inventory() + location_inventory_open_ids = self.env['stock.inventory'].sudo().\ + _get_locations_open_inventories(self.ids) + if location_inventory_open_ids: + raise ValidationError( + _('An inventory is being conducted at this location')) return super(StockLocation, self).unlink() diff --git a/stock_inventory_lockdown/models/stock_move.py b/stock_inventory_lockdown/models/stock_move.py index d5ffdfb7f..fbc1f2161 100644 --- a/stock_inventory_lockdown/models/stock_move.py +++ b/stock_inventory_lockdown/models/stock_move.py @@ -1,9 +1,11 @@ # -*- coding: utf-8 -*- # © 2016 Numérigraphe SARL +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, api, _ -from openerp.exceptions import ValidationError +from odoo import api, models, _ +from odoo.exceptions import ValidationError class StockMove(models.Model): @@ -11,9 +13,7 @@ class StockMove(models.Model): @api.constrains('location_dest_id', 'location_id', 'state') def _check_locked_location(self): - for move in self: - if move.state == 'draft': - continue + for move in self.filtered(lambda m: m.state != 'draft'): locked_location_ids = self.env[ 'stock.inventory']._get_locations_open_inventories( [move.location_dest_id.id, move.location_id.id]) diff --git a/stock_inventory_lockdown/static/description/icon.png b/stock_inventory_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 diff --git a/stock_inventory_lockdown/images/move_error.png b/stock_inventory_lockdown/static/images/move_error.png similarity index 100% rename from stock_inventory_lockdown/images/move_error.png rename to stock_inventory_lockdown/static/images/move_error.png diff --git a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py index cfcb7dfeb..60e7c8785 100644 --- a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py +++ b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py @@ -3,8 +3,8 @@ # © 2016 Numérigraphe SARL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.exceptions import ValidationError -from openerp.addons.stock.tests.common import TestStockCommon +from odoo.exceptions import ValidationError +from odoo.addons.stock.tests.common import TestStockCommon class StockInventoryLocationTest(TestStockCommon): @@ -33,7 +33,7 @@ class StockInventoryLocationTest(TestStockCommon): def test_update_parent_location(self): """Updating the parent of a location is OK if no inv. in progress.""" - self.inventory.action_cancel_inventory() + self.inventory.action_cancel_draft() self.inventory.location_id.location_id = self.env.ref( 'stock.stock_location_4') From 7b465b9f1204f688a6e948d7d360b473ae86bdc5 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 2 Dec 2017 14:28:21 +0100 Subject: [PATCH 07/23] OCA Transbot updated translations from Transifex --- stock_inventory_lockdown/i18n/ca.po | 49 ++++++++++++++++++ stock_inventory_lockdown/i18n/cs_CZ.po | 50 +++++++++++++++++++ stock_inventory_lockdown/i18n/de.po | 28 +++++------ stock_inventory_lockdown/i18n/es.po | 29 +++++------ stock_inventory_lockdown/i18n/es_ES.po | 17 ++++--- stock_inventory_lockdown/i18n/es_MX.po | 50 +++++++++++++++++++ stock_inventory_lockdown/i18n/fi.po | 27 +++++----- stock_inventory_lockdown/i18n/fr.po | 28 +++++------ stock_inventory_lockdown/i18n/gl.po | 49 ++++++++++++++++++ stock_inventory_lockdown/i18n/hr.po | 50 +++++++++++++++++++ stock_inventory_lockdown/i18n/it.po | 27 +++++----- stock_inventory_lockdown/i18n/nl_NL.po | 50 +++++++++++++++++++ stock_inventory_lockdown/i18n/pt.po | 49 ++++++++++++++++++ stock_inventory_lockdown/i18n/pt_BR.po | 28 +++++------ stock_inventory_lockdown/i18n/ro.po | 29 +++++------ stock_inventory_lockdown/i18n/sl.po | 31 ++++++------ .../i18n/stock_inventory_lockdown.pot | 25 +++++++--- stock_inventory_lockdown/i18n/tr.po | 49 ++++++++++++++++++ stock_inventory_lockdown/i18n/tr_TR.po | 50 +++++++++++++++++++ stock_inventory_lockdown/i18n/vi_VN.po | 50 +++++++++++++++++++ stock_inventory_lockdown/i18n/zh_CN.po | 28 ++++++----- 21 files changed, 652 insertions(+), 141 deletions(-) create mode 100644 stock_inventory_lockdown/i18n/ca.po create mode 100644 stock_inventory_lockdown/i18n/cs_CZ.po create mode 100644 stock_inventory_lockdown/i18n/es_MX.po create mode 100644 stock_inventory_lockdown/i18n/gl.po create mode 100644 stock_inventory_lockdown/i18n/hr.po create mode 100644 stock_inventory_lockdown/i18n/nl_NL.po create mode 100644 stock_inventory_lockdown/i18n/pt.po create mode 100644 stock_inventory_lockdown/i18n/tr.po create mode 100644 stock_inventory_lockdown/i18n/tr_TR.po create mode 100644 stock_inventory_lockdown/i18n/vi_VN.po diff --git a/stock_inventory_lockdown/i18n/ca.po b/stock_inventory_lockdown/i18n/ca.po new file mode 100644 index 000000000..cd084e1fa --- /dev/null +++ b/stock_inventory_lockdown/i18n/ca.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n" +"Language: ca\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" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Moviments d'estoc" diff --git a/stock_inventory_lockdown/i18n/cs_CZ.po b/stock_inventory_lockdown/i18n/cs_CZ.po new file mode 100644 index 000000000..9f12b4434 --- /dev/null +++ b/stock_inventory_lockdown/i18n/cs_CZ.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# Lukáš Spurný , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-27 11:37+0000\n" +"PO-Revision-Date: 2018-02-27 11:37+0000\n" +"Last-Translator: Lukáš Spurný , 2018\n" +"Language-Team: Czech (Czech Republic) (https://www.transifex.com/oca/" +"teams/23907/cs_CZ/)\n" +"Language: cs_CZ\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "Inventář se provádí na následujících místech: %s" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "Na tomto místě se provádí inventář" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "Inventář" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "Umístění inventáře" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Přesunout zásoby" diff --git a/stock_inventory_lockdown/i18n/de.po b/stock_inventory_lockdown/i18n/de.po index e4581eeb0..729742510 100644 --- a/stock_inventory_lockdown/i18n/de.po +++ b/stock_inventory_lockdown/i18n/de.po @@ -1,39 +1,37 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: # OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-10 05:35+0000\n" -"PO-Revision-Date: 2017-06-10 05:35+0000\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" "%s" msgstr "" -"An folgenden Orten wird eine Inventur durchgeführt:\n" -"%s" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" -msgstr "In diesem Lager wird gerade eine Inventur durchgeführt" +msgstr "" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory @@ -43,9 +41,9 @@ msgstr "Bestand" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_location msgid "Inventory Locations" -msgstr "Bestandslagerorte" +msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "Quants" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Lagerbewegung" diff --git a/stock_inventory_lockdown/i18n/es.po b/stock_inventory_lockdown/i18n/es.po index fb289407f..631ea967c 100644 --- a/stock_inventory_lockdown/i18n/es.po +++ b/stock_inventory_lockdown/i18n/es.po @@ -1,25 +1,25 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-15 02:42+0000\n" -"PO-Revision-Date: 2016-04-14 14:47+0000\n" -"Last-Translator: <>\n" -"Language-Team: Spanish (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/es/)\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,7 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" msgstr "" @@ -40,9 +41,9 @@ msgstr "Inventario" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_location msgid "Inventory Locations" -msgstr "Ubicaciones de inventario" +msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "Quants" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" diff --git a/stock_inventory_lockdown/i18n/es_ES.po b/stock_inventory_lockdown/i18n/es_ES.po index 63ffa2f01..7cc90911e 100644 --- a/stock_inventory_lockdown/i18n/es_ES.po +++ b/stock_inventory_lockdown/i18n/es_ES.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: msgid "" msgstr "" @@ -10,16 +10,16 @@ msgstr "" "POT-Creation-Date: 2017-01-07 07:40+0000\n" "PO-Revision-Date: 2016-04-14 14:47+0000\n" "Last-Translator: <>\n" -"Language-Team: Spanish (Spain) (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/es_ES/)\n" +"Language-Team: Spanish (Spain) (http://www.transifex.com/oca/OCA-stock-" +"logistics-warehouse-8-0/language/es_ES/)\n" +"Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,7 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" msgstr "" @@ -43,6 +44,6 @@ msgid "Inventory Locations" msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" msgstr "" diff --git a/stock_inventory_lockdown/i18n/es_MX.po b/stock_inventory_lockdown/i18n/es_MX.po new file mode 100644 index 000000000..3570ba6d7 --- /dev/null +++ b/stock_inventory_lockdown/i18n/es_MX.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/" +"es_MX/)\n" +"Language: es_MX\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" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Movimiento bursátil" diff --git a/stock_inventory_lockdown/i18n/fi.po b/stock_inventory_lockdown/i18n/fi.po index a7ac4c6bb..f036f2663 100644 --- a/stock_inventory_lockdown/i18n/fi.po +++ b/stock_inventory_lockdown/i18n/fi.po @@ -1,25 +1,25 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-15 02:42+0000\n" -"PO-Revision-Date: 2016-04-14 14:47+0000\n" -"Last-Translator: <>\n" -"Language-Team: Finnish (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/fi/)\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" +"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,7 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" msgstr "" @@ -43,6 +44,6 @@ msgid "Inventory Locations" msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "Määrät" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Varastosiirto" diff --git a/stock_inventory_lockdown/i18n/fr.po b/stock_inventory_lockdown/i18n/fr.po index c8d9f4494..5670d6ab4 100644 --- a/stock_inventory_lockdown/i18n/fr.po +++ b/stock_inventory_lockdown/i18n/fr.po @@ -1,39 +1,37 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: # OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-10 05:35+0000\n" -"PO-Revision-Date: 2017-06-10 05:35+0000\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" "%s" msgstr "" -"Un inventaire est en cours aux emplacements suivants :\n" -"%s" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" -msgstr "Un inventaire est en cours à cet emplacement" +msgstr "" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory @@ -43,9 +41,9 @@ msgstr "Inventaire" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_location msgid "Inventory Locations" -msgstr "Emplacements d'inventaire" +msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "Quants" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Mouvement de stock" diff --git a/stock_inventory_lockdown/i18n/gl.po b/stock_inventory_lockdown/i18n/gl.po new file mode 100644 index 000000000..66042a718 --- /dev/null +++ b/stock_inventory_lockdown/i18n/gl.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Galician (https://www.transifex.com/oca/teams/23907/gl/)\n" +"Language: gl\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" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Movemento de existencias" diff --git a/stock_inventory_lockdown/i18n/hr.po b/stock_inventory_lockdown/i18n/hr.po new file mode 100644 index 000000000..fed8068b1 --- /dev/null +++ b/stock_inventory_lockdown/i18n/hr.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Skladišni prenos" diff --git a/stock_inventory_lockdown/i18n/it.po b/stock_inventory_lockdown/i18n/it.po index 70999a318..3d59da85f 100644 --- a/stock_inventory_lockdown/i18n/it.po +++ b/stock_inventory_lockdown/i18n/it.po @@ -1,25 +1,25 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-18 03:44+0000\n" -"PO-Revision-Date: 2016-04-14 14:47+0000\n" -"Last-Translator: <>\n" -"Language-Team: Italian (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/it/)\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,7 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" msgstr "" @@ -43,6 +44,6 @@ msgid "Inventory Locations" msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "Quantità" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Movimento di magazzino" diff --git a/stock_inventory_lockdown/i18n/nl_NL.po b/stock_inventory_lockdown/i18n/nl_NL.po new file mode 100644 index 000000000..beb0f780d --- /dev/null +++ b/stock_inventory_lockdown/i18n/nl_NL.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\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" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Voorraadmutatie" diff --git a/stock_inventory_lockdown/i18n/pt.po b/stock_inventory_lockdown/i18n/pt.po new file mode 100644 index 000000000..a3c12ae21 --- /dev/null +++ b/stock_inventory_lockdown/i18n/pt.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\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" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Movimento Stock" diff --git a/stock_inventory_lockdown/i18n/pt_BR.po b/stock_inventory_lockdown/i18n/pt_BR.po index 34c18e7b8..139eb8e76 100644 --- a/stock_inventory_lockdown/i18n/pt_BR.po +++ b/stock_inventory_lockdown/i18n/pt_BR.po @@ -1,27 +1,26 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: # OCA Transbot , 2017 -# Felipe Lopes , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-10 05:35+0000\n" -"PO-Revision-Date: 2017-06-10 05:35+0000\n" -"Last-Translator: Felipe Lopes , 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -29,7 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" msgstr "" @@ -45,6 +45,6 @@ msgid "Inventory Locations" msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "Quants" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Movimentação de estoque" diff --git a/stock_inventory_lockdown/i18n/ro.po b/stock_inventory_lockdown/i18n/ro.po index 45a90ad6b..40122234d 100644 --- a/stock_inventory_lockdown/i18n/ro.po +++ b/stock_inventory_lockdown/i18n/ro.po @@ -1,26 +1,26 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: -# Dorin Hongu , 2017 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-10 05:35+0000\n" -"PO-Revision-Date: 2017-06-10 05:35+0000\n" -"Last-Translator: Dorin Hongu , 2017\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" "Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,7 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" msgstr "" @@ -44,6 +45,6 @@ msgid "Inventory Locations" msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "Poziții de stoc" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Mișcare stoc" diff --git a/stock_inventory_lockdown/i18n/sl.po b/stock_inventory_lockdown/i18n/sl.po index 4b79909d4..4ddf1baaa 100644 --- a/stock_inventory_lockdown/i18n/sl.po +++ b/stock_inventory_lockdown/i18n/sl.po @@ -1,39 +1,38 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: # OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-10 05:35+0000\n" -"PO-Revision-Date: 2017-06-10 05:35+0000\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: sl\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:34 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:49 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" "%s" msgstr "" -"Na naslednji lokaciji (lokacijah) se vodi inventar:\n" -"%s" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:21 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" -msgstr "Na tej lokaciji se vodi inventar" +msgstr "" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory @@ -43,9 +42,9 @@ msgstr "Inventar" #. module: stock_inventory_lockdown #: model:ir.model,name:stock_inventory_lockdown.model_stock_location msgid "Inventory Locations" -msgstr "Lokacije inventarja" +msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "Kvant" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Premik zaloge" diff --git a/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot b/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot index 10e6d1ee2..419e9e9eb 100644 --- a/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot +++ b/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot @@ -4,10 +4,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-03-21 18:49+0000\n" -"PO-Revision-Date: 2016-03-21 18:49+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,16 +14,31 @@ msgstr "" "Plural-Forms: \n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:42 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "An inventory is being conducted at the following location(s):\n" "%s" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" msgstr "" +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "" + diff --git a/stock_inventory_lockdown/i18n/tr.po b/stock_inventory_lockdown/i18n/tr.po new file mode 100644 index 000000000..fbf500c54 --- /dev/null +++ b/stock_inventory_lockdown/i18n/tr.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\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" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Stok hareketi" diff --git a/stock_inventory_lockdown/i18n/tr_TR.po b/stock_inventory_lockdown/i18n/tr_TR.po new file mode 100644 index 000000000..fd4ca2472 --- /dev/null +++ b/stock_inventory_lockdown/i18n/tr_TR.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/" +"tr_TR/)\n" +"Language: tr_TR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Stok hareketi" diff --git a/stock_inventory_lockdown/i18n/vi_VN.po b/stock_inventory_lockdown/i18n/vi_VN.po new file mode 100644 index 000000000..61d1c09b6 --- /dev/null +++ b/stock_inventory_lockdown/i18n/vi_VN.po @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_lockdown +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/oca/" +"teams/23907/vi_VN/)\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#, python-format +msgid "" +"An inventory is being conducted at the following location(s):\n" +"%s" +msgstr "" + +#. module: stock_inventory_lockdown +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#, python-format +msgid "An inventory is being conducted at this location" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_inventory +msgid "Inventory" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_inventory_lockdown +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "Dịch chuyển kho" diff --git a/stock_inventory_lockdown/i18n/zh_CN.po b/stock_inventory_lockdown/i18n/zh_CN.po index ff8fdba19..ed1666173 100644 --- a/stock_inventory_lockdown/i18n/zh_CN.po +++ b/stock_inventory_lockdown/i18n/zh_CN.po @@ -1,25 +1,26 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * stock_inventory_lockdown -# +# # Translators: +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: stock-logistics-warehouse (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-03-29 09:22+0000\n" -"PO-Revision-Date: 2016-04-14 14:47+0000\n" -"Last-Translator: <>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/oca/OCA-stock-logistics-warehouse-8-0/language/zh_CN/)\n" +"POT-Creation-Date: 2017-11-30 03:53+0000\n" +"PO-Revision-Date: 2017-11-30 03:53+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/" +"zh_CN/)\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:41 -#: code:addons/stock_inventory_lockdown/models/stock_quant.py:56 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,7 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 #, python-format msgid "An inventory is being conducted at this location" msgstr "" @@ -43,6 +45,6 @@ msgid "Inventory Locations" msgstr "" #. module: stock_inventory_lockdown -#: model:ir.model,name:stock_inventory_lockdown.model_stock_quant -msgid "Quants" -msgstr "源" +#: model:ir.model,name:stock_inventory_lockdown.model_stock_move +msgid "Stock Move" +msgstr "库存移动" From dae14da820e34ad060326542f92cad46c69e42e6 Mon Sep 17 00:00:00 2001 From: lreficent Date: Thu, 16 Nov 2017 11:16:19 +0100 Subject: [PATCH 08/23] [10.0][FIX] stock_inventory_lockdown: locking unneded locations. --- stock_inventory_lockdown/__manifest__.py | 6 +- .../models/stock_inventory.py | 2 - stock_inventory_lockdown/models/stock_move.py | 19 +++++- .../tests/test_stock_inventory_lockdown.py | 65 +++++++++++++++---- 4 files changed, 74 insertions(+), 18 deletions(-) diff --git a/stock_inventory_lockdown/__manifest__.py b/stock_inventory_lockdown/__manifest__.py index 3196028d1..1d458eecd 100644 --- a/stock_inventory_lockdown/__manifest__.py +++ b/stock_inventory_lockdown/__manifest__.py @@ -5,13 +5,13 @@ { "name": "Inventory Lock Down", "summary": "Lock down stock locations during inventories.", - "version": "10.0.1.0.0", + "version": "10.0.1.0.1", "depends": ["stock"], - "author": "Numérigraphe,Eficent,Odoo Community Association (OCA)", + "author": "Numérigraphe, Eficent, Odoo Community Association (OCA)", "category": "Warehouse Management", "images": [ "images/move_error.png", "images/location_locked.png"], - 'license': 'AGPL-3', + "license": "AGPL-3", "installable": True, } diff --git a/stock_inventory_lockdown/models/stock_inventory.py b/stock_inventory_lockdown/models/stock_inventory.py index aab5010fd..b1302dfda 100644 --- a/stock_inventory_lockdown/models/stock_inventory.py +++ b/stock_inventory_lockdown/models/stock_inventory.py @@ -26,6 +26,4 @@ class StockInventory(models.Model): location_domain = [ ('location_id', 'child_of', location_ids.ids), ('usage', 'in', ['internal', 'transit'])] - if locations_ids: - location_domain.append(('location_id', 'child_of', locations_ids)) return self.env['stock.location'].search(location_domain) diff --git a/stock_inventory_lockdown/models/stock_move.py b/stock_inventory_lockdown/models/stock_move.py index fbc1f2161..5655ddd6a 100644 --- a/stock_inventory_lockdown/models/stock_move.py +++ b/stock_inventory_lockdown/models/stock_move.py @@ -11,15 +11,32 @@ from odoo.exceptions import ValidationError class StockMove(models.Model): _inherit = 'stock.move' + @api.multi + def _get_reserved_locations(self): + self.ensure_one() + return self.reserved_quant_ids.mapped('location_id') + \ + self.split_from.reserved_quant_ids.mapped('location_id') + + @api.multi + def _get_dest_locations(self): + self.ensure_one() + return self.linked_move_operation_ids.mapped( + 'operation_id.location_dest_id') + @api.constrains('location_dest_id', 'location_id', 'state') def _check_locked_location(self): for move in self.filtered(lambda m: m.state != 'draft'): locked_location_ids = self.env[ 'stock.inventory']._get_locations_open_inventories( [move.location_dest_id.id, move.location_id.id]) + reserved_locs = move._get_reserved_locations() + dest_locs = move._get_dest_locations() if (locked_location_ids and move.product_id.property_stock_inventory not in [ - move.location_dest_id, move.location_id]): + move.location_dest_id, move.location_id] and + (move.location_dest_id in locked_location_ids or + any([l in locked_location_ids for l in dest_locs]) or + any([l in locked_location_ids for l in reserved_locs]))): location_names = locked_location_ids.mapped('complete_name') raise ValidationError( _('An inventory is being conducted at the following ' diff --git a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py index 60e7c8785..f20b06340 100644 --- a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py +++ b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py @@ -10,10 +10,14 @@ from odoo.addons.stock.tests.common import TestStockCommon class StockInventoryLocationTest(TestStockCommon): def setUp(self): super(StockInventoryLocationTest, self).setUp() - # Make a new location + # Make a new location with a parent and a child. + self.new_parent_location = self.env['stock.location'].create( + {'name': 'Test parent location', + 'usage': 'internal'}) self.new_location = self.env['stock.location'].create( {'name': 'Test location', - 'usage': 'internal'}) + 'usage': 'internal', + 'location_id': self.new_parent_location.id}) self.new_sublocation = self.env['stock.location'].create( {'name': 'Test sublocation', 'usage': 'internal', @@ -23,6 +27,10 @@ class StockInventoryLocationTest(TestStockCommon): {'location_id': self.new_location.id, 'product_id': self.productA.id, 'qty': 10.0}) + self.env['stock.quant'].create( + {'location_id': self.new_parent_location.id, + 'product_id': self.productB.id, + 'qty': 5.0}) # Prepare an inventory self.inventory = self.env['stock.inventory'].create( {'name': 'Lock down location', @@ -31,6 +39,16 @@ class StockInventoryLocationTest(TestStockCommon): self.inventory.prepare_inventory() self.assertTrue(self.inventory.line_ids, 'The inventory is empty.') + def create_stock_move(self, product, origin_id=False, dest_id=False): + return self.env['stock.move'].create({ + 'name': 'Test move lock down', + 'product_id': product.id, + 'product_uom_qty': 10.0, + 'product_uom': product.uom_id.id, + 'location_id': origin_id or self.supplier_location, + 'location_dest_id': dest_id or self.customer_location, + }) + def test_update_parent_location(self): """Updating the parent of a location is OK if no inv. in progress.""" self.inventory.action_cancel_draft() @@ -73,14 +91,37 @@ class StockInventoryLocationTest(TestStockCommon): location=line.location_id.id).qty_available, 22.0) def test_move(self): - """Stock move must be forbidden during inventory""" - move = self.env['stock.move'].create({ - 'name': 'Test move lock down', - 'product_id': self.productA.id, - 'product_uom_qty': 10.0, - 'product_uom': self.productA.uom_id.id, - 'location_id': self.inventory.location_id.id, - 'location_dest_id': self.customer_location - }) + """Stock moves must be forbidden during inventory from/to inventoried + location.""" + move1 = self.create_stock_move( + self.productA, origin_id=self.inventory.location_id.id) + move1.action_confirm() with self.assertRaises(ValidationError): - move.action_done() + move1.action_assign() + move1.action_done() + move2 = self.create_stock_move( + self.productA, dest_id=self.inventory.location_id.id) + with self.assertRaises(ValidationError): + move2.action_confirm() + move2.action_assign() + move2.action_done() + + def test_move_reserved_quants(self): + """Shipping stock should be allowed or not depending on reserved + quants' locations. + * move1: quants are fetched from the parent location. + * move2: quants are fetched from 'new location' which is being + inventoried.""" + move1 = self.create_stock_move( + self.productB, self.new_parent_location.id) + move1.action_confirm() + move1.action_assign() + move1.action_done() + self.assertEqual( + move1.state, 'done', 'Move has not been completed') + move2 = self.create_stock_move( + self.productA, self.new_parent_location.id) + move2.action_confirm() + with self.assertRaises(ValidationError): + move2.action_assign() + move2.action_done() From 97a1e184c28da563034522ad9bf446b827a8817f Mon Sep 17 00:00:00 2001 From: Lois Rilo Date: Wed, 12 Sep 2018 16:52:42 +0200 Subject: [PATCH 09/23] [11.0][MIG] stock_inventory_lockdown --- stock_inventory_lockdown/README.rst | 70 +++++++++++++------ stock_inventory_lockdown/__init__.py | 4 -- stock_inventory_lockdown/__manifest__.py | 7 +- stock_inventory_lockdown/models/__init__.py | 4 -- .../models/stock_inventory.py | 1 - .../models/stock_location.py | 1 - stock_inventory_lockdown/models/stock_move.py | 7 +- .../readme/CONTRIBUTORS.rst | 6 ++ .../readme/DESCRIPTION.rst | 1 + stock_inventory_lockdown/readme/USAGE.rst | 7 ++ stock_inventory_lockdown/tests/__init__.py | 4 -- .../tests/test_stock_inventory_lockdown.py | 37 +++++----- 12 files changed, 88 insertions(+), 61 deletions(-) create mode 100644 stock_inventory_lockdown/readme/CONTRIBUTORS.rst create mode 100644 stock_inventory_lockdown/readme/DESCRIPTION.rst create mode 100644 stock_inventory_lockdown/readme/USAGE.rst diff --git a/stock_inventory_lockdown/README.rst b/stock_inventory_lockdown/README.rst index 2acf8af38..04f4f5490 100644 --- a/stock_inventory_lockdown/README.rst +++ b/stock_inventory_lockdown/README.rst @@ -1,40 +1,65 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 +=================== +Inventory Lock Down +=================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png + :target: https://odoo-community.org/page/development-status + :alt: Mature +.. |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/11.0/stock_inventory_lockdown + :alt: OCA/stock-logistics-warehouse +.. |badge4| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/153/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| -====================================== -Lock down locations during inventories -====================================== This module lets you lock down the locations during an inventory. +**Table of contents** + +.. contents:: + :local: + Usage ===== -.. image:: stock_inventory_lockdown/static/images/move_error.png - :alt: Error message - While an inventory is in the state "In progress", no stock moves can be recorded in/out of the inventory's location: users will get an error message. Creating or modifying locations is also forbidden. -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/153/10.0 +.. image:: stock_inventory_lockdown/static/images/move_error.png + :alt: Error message 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. +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 +~~~~~~~ + +* Numérigraphe +* Eficent + Contributors ------------- +~~~~~~~~~~~~ * Loïc Bellier (Numérigraphe) * Lionel Sausin (Numérigraphe) @@ -43,18 +68,19 @@ Contributors * Lois Rilo (Eficent) * Jordi Ballester (Eficent) +Maintainers +~~~~~~~~~~~ -Maintainer ----------- +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - 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. -To contribute to this module, please visit https://odoo-community.org. +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_inventory_lockdown/__init__.py b/stock_inventory_lockdown/__init__.py index ef0c464f0..0650744f6 100644 --- a/stock_inventory_lockdown/__init__.py +++ b/stock_inventory_lockdown/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- -# © 2013-2016 Numérigraphe SARL -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - from . import models diff --git a/stock_inventory_lockdown/__manifest__.py b/stock_inventory_lockdown/__manifest__.py index 1d458eecd..153fcf5a3 100644 --- a/stock_inventory_lockdown/__manifest__.py +++ b/stock_inventory_lockdown/__manifest__.py @@ -1,17 +1,18 @@ -# -*- coding: utf-8 -*- # © 2013-2016 Numérigraphe SARL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Inventory Lock Down", "summary": "Lock down stock locations during inventories.", - "version": "10.0.1.0.1", + "version": "11.0.1.0.0", + "development_status": "Mature", "depends": ["stock"], "author": "Numérigraphe, Eficent, Odoo Community Association (OCA)", "category": "Warehouse Management", "images": [ "images/move_error.png", - "images/location_locked.png"], + "images/location_locked.png", + ], "license": "AGPL-3", "installable": True, } diff --git a/stock_inventory_lockdown/models/__init__.py b/stock_inventory_lockdown/models/__init__.py index dfae546a6..644da5f35 100644 --- a/stock_inventory_lockdown/models/__init__.py +++ b/stock_inventory_lockdown/models/__init__.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- -# © 2013-2016 Numérigraphe SARL -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - from . import stock_move from . import stock_inventory from . import stock_location diff --git a/stock_inventory_lockdown/models/stock_inventory.py b/stock_inventory_lockdown/models/stock_inventory.py index b1302dfda..92315622b 100644 --- a/stock_inventory_lockdown/models/stock_inventory.py +++ b/stock_inventory_lockdown/models/stock_inventory.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2013-2016 Numérigraphe SARL # Copyright 2017 Eficent Business and IT Consulting Services S.L. # (http://www.eficent.com) diff --git a/stock_inventory_lockdown/models/stock_location.py b/stock_inventory_lockdown/models/stock_location.py index 62662d4d8..523d7c243 100644 --- a/stock_inventory_lockdown/models/stock_location.py +++ b/stock_inventory_lockdown/models/stock_location.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Numérigraphe SARL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/stock_inventory_lockdown/models/stock_move.py b/stock_inventory_lockdown/models/stock_move.py index 5655ddd6a..83f0ef713 100644 --- a/stock_inventory_lockdown/models/stock_move.py +++ b/stock_inventory_lockdown/models/stock_move.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Numérigraphe SARL # Copyright 2017 Eficent Business and IT Consulting Services S.L. # (http://www.eficent.com) @@ -14,14 +13,12 @@ class StockMove(models.Model): @api.multi def _get_reserved_locations(self): self.ensure_one() - return self.reserved_quant_ids.mapped('location_id') + \ - self.split_from.reserved_quant_ids.mapped('location_id') + return self.move_line_ids.mapped('location_id') @api.multi def _get_dest_locations(self): self.ensure_one() - return self.linked_move_operation_ids.mapped( - 'operation_id.location_dest_id') + return self.move_line_ids.mapped('location_dest_id') @api.constrains('location_dest_id', 'location_id', 'state') def _check_locked_location(self): diff --git a/stock_inventory_lockdown/readme/CONTRIBUTORS.rst b/stock_inventory_lockdown/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..17d831e18 --- /dev/null +++ b/stock_inventory_lockdown/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* Loïc Bellier (Numérigraphe) +* Lionel Sausin (Numérigraphe) +* Laetitia Gangloff (Acsone) +* Laurent Mignon (Acsone) +* Lois Rilo (Eficent) +* Jordi Ballester (Eficent) diff --git a/stock_inventory_lockdown/readme/DESCRIPTION.rst b/stock_inventory_lockdown/readme/DESCRIPTION.rst new file mode 100644 index 000000000..358e5a840 --- /dev/null +++ b/stock_inventory_lockdown/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module lets you lock down the locations during an inventory. diff --git a/stock_inventory_lockdown/readme/USAGE.rst b/stock_inventory_lockdown/readme/USAGE.rst new file mode 100644 index 000000000..81f302c86 --- /dev/null +++ b/stock_inventory_lockdown/readme/USAGE.rst @@ -0,0 +1,7 @@ +While an inventory is in the state "In progress", no stock moves +can be recorded in/out of the inventory's location: users will get an error +message. +Creating or modifying locations is also forbidden. + +.. image:: stock_inventory_lockdown/static/images/move_error.png + :alt: Error message diff --git a/stock_inventory_lockdown/tests/__init__.py b/stock_inventory_lockdown/tests/__init__.py index c1942bfd6..7cb44613b 100644 --- a/stock_inventory_lockdown/tests/__init__.py +++ b/stock_inventory_lockdown/tests/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- -# © 2013-2016 Numérigraphe SARL -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - from . import test_stock_inventory_lockdown diff --git a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py index f20b06340..2bcd5b682 100644 --- a/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py +++ b/stock_inventory_lockdown/tests/test_stock_inventory_lockdown.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2014 Acsone SA/NV (http://www.acsone.eu) # © 2016 Numérigraphe SARL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). @@ -26,17 +25,17 @@ class StockInventoryLocationTest(TestStockCommon): self.env['stock.quant'].create( {'location_id': self.new_location.id, 'product_id': self.productA.id, - 'qty': 10.0}) + 'quantity': 10.0}) self.env['stock.quant'].create( {'location_id': self.new_parent_location.id, 'product_id': self.productB.id, - 'qty': 5.0}) + 'quantity': 5.0}) # Prepare an inventory self.inventory = self.env['stock.inventory'].create( {'name': 'Lock down location', 'filter': 'none', 'location_id': self.new_location.id}) - self.inventory.prepare_inventory() + self.inventory.action_start() self.assertTrue(self.inventory.line_ids, 'The inventory is empty.') def create_stock_move(self, product, origin_id=False, dest_id=False): @@ -79,7 +78,7 @@ class StockInventoryLocationTest(TestStockCommon): {'name': 'Lock down location', 'filter': 'partial', 'location_id': self.new_sublocation.id}) - inventory_subloc.prepare_inventory() + inventory_subloc.action_start() line = self.env['stock.inventory.line'].create( {'product_id': self.productA.id, 'product_qty': 22.0, @@ -95,16 +94,18 @@ class StockInventoryLocationTest(TestStockCommon): location.""" move1 = self.create_stock_move( self.productA, origin_id=self.inventory.location_id.id) - move1.action_confirm() + move1._action_confirm() with self.assertRaises(ValidationError): - move1.action_assign() - move1.action_done() + move1._action_assign() + move1.move_line_ids[0].qty_done = 10.0 + move1._action_done() move2 = self.create_stock_move( self.productA, dest_id=self.inventory.location_id.id) with self.assertRaises(ValidationError): - move2.action_confirm() - move2.action_assign() - move2.action_done() + move2._action_confirm() + move2._action_assign() + move2.move_line_ids[0].qty_done = 10.0 + move2._action_done() def test_move_reserved_quants(self): """Shipping stock should be allowed or not depending on reserved @@ -114,14 +115,16 @@ class StockInventoryLocationTest(TestStockCommon): inventoried.""" move1 = self.create_stock_move( self.productB, self.new_parent_location.id) - move1.action_confirm() - move1.action_assign() - move1.action_done() + move1._action_confirm() + move1._action_assign() + move1.move_line_ids[0].qty_done = 10.0 + move1._action_done() self.assertEqual( move1.state, 'done', 'Move has not been completed') move2 = self.create_stock_move( self.productA, self.new_parent_location.id) - move2.action_confirm() + move2._action_confirm() with self.assertRaises(ValidationError): - move2.action_assign() - move2.action_done() + move2._action_assign() + move2.move_line_ids[0].qty_done = 10.0 + move2._action_done() From 78e36c6ac6542752e72444ce5f68f82d7aaf6b00 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 23 Oct 2018 15:39:40 +0000 Subject: [PATCH 10/23] [UPD] README.rst --- stock_inventory_lockdown/README.rst | 10 +- .../static/description/index.html | 434 ++++++++++++++++++ 2 files changed, 441 insertions(+), 3 deletions(-) create mode 100644 stock_inventory_lockdown/static/description/index.html diff --git a/stock_inventory_lockdown/README.rst b/stock_inventory_lockdown/README.rst index 04f4f5490..649f9081d 100644 --- a/stock_inventory_lockdown/README.rst +++ b/stock_inventory_lockdown/README.rst @@ -16,11 +16,14 @@ Inventory Lock Down .. |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/11.0/stock_inventory_lockdown :alt: OCA/stock-logistics-warehouse -.. |badge4| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-11-0/stock-logistics-warehouse-11-0-stock_inventory_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/11.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| +|badge1| |badge2| |badge3| |badge4| |badge5| This module lets you lock down the locations during an inventory. @@ -45,7 +48,8 @@ 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. +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. diff --git a/stock_inventory_lockdown/static/description/index.html b/stock_inventory_lockdown/static/description/index.html new file mode 100644 index 000000000..24385ae9e --- /dev/null +++ b/stock_inventory_lockdown/static/description/index.html @@ -0,0 +1,434 @@ + + + + + + +Inventory Lock Down + + + +
+

Inventory Lock Down

+ + +

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

+

This module lets you lock down the locations during an inventory.

+

Table of contents

+ +
+

Usage

+

While an inventory is in the state “In progress”, no stock moves +can be recorded in/out of the inventory’s location: users will get an error +message. +Creating or modifying locations is also forbidden.

+Error message +
+
+

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

+
    +
  • Numérigraphe
  • +
  • Eficent
  • +
+
+
+

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.

+
+
+
+ + From 3f108d8a7d0c900472b1149fca85613d85403377 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 23 Oct 2018 17:24:10 +0000 Subject: [PATCH 11/23] [UPD] Update stock_inventory_lockdown.pot --- .../i18n/stock_inventory_lockdown.pot | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot b/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot index 419e9e9eb..03972eba7 100644 --- a/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot +++ b/stock_inventory_lockdown/i18n/stock_inventory_lockdown.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,15 +14,15 @@ msgstr "" "Plural-Forms: \n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "An inventory is being conducted at the following location(s):\n" "%s" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" From 7c5dcbd3199d536c2f696238b98cee2a552665c3 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 2 Dec 2018 02:56:54 +0000 Subject: [PATCH 12/23] [UPD] README.rst --- stock_inventory_lockdown/README.rst | 2 +- stock_inventory_lockdown/static/description/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stock_inventory_lockdown/README.rst b/stock_inventory_lockdown/README.rst index 649f9081d..218786bf2 100644 --- a/stock_inventory_lockdown/README.rst +++ b/stock_inventory_lockdown/README.rst @@ -40,7 +40,7 @@ can be recorded in/out of the inventory's location: users will get an error message. Creating or modifying locations is also forbidden. -.. image:: stock_inventory_lockdown/static/images/move_error.png +.. image:: https://raw.githubusercontent.com/OCA/stock-logistics-warehouse/11.0/stock_inventory_lockdown/stock_inventory_lockdown/static/images/move_error.png :alt: Error message Bug Tracker diff --git a/stock_inventory_lockdown/static/description/index.html b/stock_inventory_lockdown/static/description/index.html index 24385ae9e..b3b4b9233 100644 --- a/stock_inventory_lockdown/static/description/index.html +++ b/stock_inventory_lockdown/static/description/index.html @@ -388,7 +388,7 @@ ul.auto-toc { can be recorded in/out of the inventory’s location: users will get an error message. Creating or modifying locations is also forbidden.

-Error message +Error message

Bug Tracker

From eda934d2c92dc61a7c7d233795a8949e1af4a6fa Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 9 Dec 2018 13:12:20 +0000 Subject: [PATCH 13/23] Update translation files Updated by Update PO files to match POT (msgmerge) hook in Weblate. --- stock_inventory_lockdown/i18n/ca.po | 6 +++--- stock_inventory_lockdown/i18n/cs_CZ.po | 6 +++--- stock_inventory_lockdown/i18n/de.po | 6 +++--- stock_inventory_lockdown/i18n/es.po | 6 +++--- stock_inventory_lockdown/i18n/es_ES.po | 6 +++--- stock_inventory_lockdown/i18n/es_MX.po | 6 +++--- stock_inventory_lockdown/i18n/fi.po | 6 +++--- stock_inventory_lockdown/i18n/fr.po | 6 +++--- stock_inventory_lockdown/i18n/gl.po | 6 +++--- stock_inventory_lockdown/i18n/hr.po | 6 +++--- stock_inventory_lockdown/i18n/it.po | 6 +++--- stock_inventory_lockdown/i18n/nl_NL.po | 6 +++--- stock_inventory_lockdown/i18n/pt.po | 6 +++--- stock_inventory_lockdown/i18n/pt_BR.po | 6 +++--- stock_inventory_lockdown/i18n/ro.po | 6 +++--- stock_inventory_lockdown/i18n/sl.po | 6 +++--- stock_inventory_lockdown/i18n/tr.po | 6 +++--- stock_inventory_lockdown/i18n/tr_TR.po | 6 +++--- stock_inventory_lockdown/i18n/vi_VN.po | 6 +++--- stock_inventory_lockdown/i18n/zh_CN.po | 6 +++--- 20 files changed, 60 insertions(+), 60 deletions(-) diff --git a/stock_inventory_lockdown/i18n/ca.po b/stock_inventory_lockdown/i18n/ca.po index cd084e1fa..8c4735aee 100644 --- a/stock_inventory_lockdown/i18n/ca.po +++ b/stock_inventory_lockdown/i18n/ca.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/cs_CZ.po b/stock_inventory_lockdown/i18n/cs_CZ.po index 9f12b4434..196a62157 100644 --- a/stock_inventory_lockdown/i18n/cs_CZ.po +++ b/stock_inventory_lockdown/i18n/cs_CZ.po @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "Inventář se provádí na následujících místech: %s" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "Na tomto místě se provádí inventář" diff --git a/stock_inventory_lockdown/i18n/de.po b/stock_inventory_lockdown/i18n/de.po index 729742510..2b656e891 100644 --- a/stock_inventory_lockdown/i18n/de.po +++ b/stock_inventory_lockdown/i18n/de.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/es.po b/stock_inventory_lockdown/i18n/es.po index 631ea967c..0a722fdc9 100644 --- a/stock_inventory_lockdown/i18n/es.po +++ b/stock_inventory_lockdown/i18n/es.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/es_ES.po b/stock_inventory_lockdown/i18n/es_ES.po index 7cc90911e..536d6cdae 100644 --- a/stock_inventory_lockdown/i18n/es_ES.po +++ b/stock_inventory_lockdown/i18n/es_ES.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/es_MX.po b/stock_inventory_lockdown/i18n/es_MX.po index 3570ba6d7..3cfd56d99 100644 --- a/stock_inventory_lockdown/i18n/es_MX.po +++ b/stock_inventory_lockdown/i18n/es_MX.po @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/fi.po b/stock_inventory_lockdown/i18n/fi.po index f036f2663..c569fbcf2 100644 --- a/stock_inventory_lockdown/i18n/fi.po +++ b/stock_inventory_lockdown/i18n/fi.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/fr.po b/stock_inventory_lockdown/i18n/fr.po index 5670d6ab4..d6e6d1056 100644 --- a/stock_inventory_lockdown/i18n/fr.po +++ b/stock_inventory_lockdown/i18n/fr.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/gl.po b/stock_inventory_lockdown/i18n/gl.po index 66042a718..957252a4d 100644 --- a/stock_inventory_lockdown/i18n/gl.po +++ b/stock_inventory_lockdown/i18n/gl.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/hr.po b/stock_inventory_lockdown/i18n/hr.po index fed8068b1..45e0db764 100644 --- a/stock_inventory_lockdown/i18n/hr.po +++ b/stock_inventory_lockdown/i18n/hr.po @@ -20,7 +20,7 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/it.po b/stock_inventory_lockdown/i18n/it.po index 3d59da85f..82f6e9280 100644 --- a/stock_inventory_lockdown/i18n/it.po +++ b/stock_inventory_lockdown/i18n/it.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/nl_NL.po b/stock_inventory_lockdown/i18n/nl_NL.po index beb0f780d..26d5fc7cf 100644 --- a/stock_inventory_lockdown/i18n/nl_NL.po +++ b/stock_inventory_lockdown/i18n/nl_NL.po @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/pt.po b/stock_inventory_lockdown/i18n/pt.po index a3c12ae21..dbf96a29a 100644 --- a/stock_inventory_lockdown/i18n/pt.po +++ b/stock_inventory_lockdown/i18n/pt.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/pt_BR.po b/stock_inventory_lockdown/i18n/pt_BR.po index 139eb8e76..b00561465 100644 --- a/stock_inventory_lockdown/i18n/pt_BR.po +++ b/stock_inventory_lockdown/i18n/pt_BR.po @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/ro.po b/stock_inventory_lockdown/i18n/ro.po index 40122234d..0e2e2b0fc 100644 --- a/stock_inventory_lockdown/i18n/ro.po +++ b/stock_inventory_lockdown/i18n/ro.po @@ -20,7 +20,7 @@ msgstr "" "2:1));\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/sl.po b/stock_inventory_lockdown/i18n/sl.po index 4ddf1baaa..9a3c52603 100644 --- a/stock_inventory_lockdown/i18n/sl.po +++ b/stock_inventory_lockdown/i18n/sl.po @@ -20,7 +20,7 @@ msgstr "" "%100==4 ? 2 : 3);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/tr.po b/stock_inventory_lockdown/i18n/tr.po index fbf500c54..603131f1f 100644 --- a/stock_inventory_lockdown/i18n/tr.po +++ b/stock_inventory_lockdown/i18n/tr.po @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -27,8 +27,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/tr_TR.po b/stock_inventory_lockdown/i18n/tr_TR.po index fd4ca2472..aa13430f2 100644 --- a/stock_inventory_lockdown/i18n/tr_TR.po +++ b/stock_inventory_lockdown/i18n/tr_TR.po @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/vi_VN.po b/stock_inventory_lockdown/i18n/vi_VN.po index 61d1c09b6..ef47d262e 100644 --- a/stock_inventory_lockdown/i18n/vi_VN.po +++ b/stock_inventory_lockdown/i18n/vi_VN.po @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" diff --git a/stock_inventory_lockdown/i18n/zh_CN.po b/stock_inventory_lockdown/i18n/zh_CN.po index ed1666173..c7977eda9 100644 --- a/stock_inventory_lockdown/i18n/zh_CN.po +++ b/stock_inventory_lockdown/i18n/zh_CN.po @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_move.py:42 +#: code:addons/stock_inventory_lockdown/models/stock_move.py:39 #, python-format msgid "" "An inventory is being conducted at the following location(s):\n" @@ -28,8 +28,8 @@ msgid "" msgstr "" #. module: stock_inventory_lockdown -#: code:addons/stock_inventory_lockdown/models/stock_location.py:23 -#: code:addons/stock_inventory_lockdown/models/stock_location.py:32 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:22 +#: code:addons/stock_inventory_lockdown/models/stock_location.py:31 #, python-format msgid "An inventory is being conducted at this location" msgstr "" From 944c974881ee0d3e87c927c03e087364f7a18c9a Mon Sep 17 00:00:00 2001 From: Michael Allen Date: Tue, 25 Jun 2019 10:24:13 -0700 Subject: [PATCH 14/23] [12.0][MIG]stock_inventory_lockdown --- stock_inventory_lockdown/README.rst | 14 ++++--- stock_inventory_lockdown/__manifest__.py | 3 +- .../readme/CONTRIBUTORS.rst | 2 + .../static/description/index.html | 40 +++++-------------- .../tests/test_stock_inventory_lockdown.py | 4 +- 5 files changed, 24 insertions(+), 39 deletions(-) diff --git a/stock_inventory_lockdown/README.rst b/stock_inventory_lockdown/README.rst index 218786bf2..cd4a593be 100644 --- a/stock_inventory_lockdown/README.rst +++ b/stock_inventory_lockdown/README.rst @@ -14,13 +14,13 @@ Inventory Lock Down :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/11.0/stock_inventory_lockdown + :target: https://github.com/OCA/stock-logistics-warehouse/tree/12.0/stock_inventory_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-11-0/stock-logistics-warehouse-11-0-stock_inventory_lockdown + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-12-0/stock-logistics-warehouse-12-0-stock_inventory_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/11.0 + :target: https://runbot.odoo-community.org/runbot/153/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -40,7 +40,7 @@ can be recorded in/out of the inventory's location: users will get an error message. Creating or modifying locations is also forbidden. -.. image:: https://raw.githubusercontent.com/OCA/stock-logistics-warehouse/11.0/stock_inventory_lockdown/stock_inventory_lockdown/static/images/move_error.png +.. image:: https://raw.githubusercontent.com/OCA/stock-logistics-warehouse/12.0/stock_inventory_lockdown/stock_inventory_lockdown/static/images/move_error.png :alt: Error message Bug Tracker @@ -49,7 +49,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. @@ -71,6 +71,8 @@ Contributors * Laurent Mignon (Acsone) * Lois Rilo (Eficent) * Jordi Ballester (Eficent) +* Michael Allen +* Bhavesh Odedra Maintainers ~~~~~~~~~~~ @@ -85,6 +87,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_inventory_lockdown/__manifest__.py b/stock_inventory_lockdown/__manifest__.py index 153fcf5a3..1b2b570a2 100644 --- a/stock_inventory_lockdown/__manifest__.py +++ b/stock_inventory_lockdown/__manifest__.py @@ -4,10 +4,11 @@ { "name": "Inventory Lock Down", "summary": "Lock down stock locations during inventories.", - "version": "11.0.1.0.0", + "version": "12.0.1.0.0", "development_status": "Mature", "depends": ["stock"], "author": "Numérigraphe, Eficent, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/stock-logistics-warehouse", "category": "Warehouse Management", "images": [ "images/move_error.png", diff --git a/stock_inventory_lockdown/readme/CONTRIBUTORS.rst b/stock_inventory_lockdown/readme/CONTRIBUTORS.rst index 17d831e18..f8d04adcf 100644 --- a/stock_inventory_lockdown/readme/CONTRIBUTORS.rst +++ b/stock_inventory_lockdown/readme/CONTRIBUTORS.rst @@ -4,3 +4,5 @@ * Laurent Mignon (Acsone) * Lois Rilo (Eficent) * Jordi Ballester (Eficent) +* Michael Allen +* Bhavesh Odedra diff --git a/stock_inventory_lockdown/static/description/index.html b/stock_inventory_lockdown/static/description/index.html index b3b4b9233..dc24a9aba 100644 --- a/stock_inventory_lockdown/static/description/index.html +++ b/stock_inventory_lockdown/static/description/index.html @@ -3,13 +3,13 @@ - + Inventory Lock Down