diff --git a/stock_inventory_preparation_filter/README.rst b/stock_inventory_preparation_filter/README.rst index 02d4c20cb..5c824d859 100644 --- a/stock_inventory_preparation_filter/README.rst +++ b/stock_inventory_preparation_filter/README.rst @@ -28,6 +28,7 @@ Extended Inventory Preparation Filters Includes more options for making an inventory out of: * Multiple products. +* Products filtered by a domain. * Products of a category. * Multiple lots diff --git a/stock_inventory_preparation_filter/models/stock_inventory.py b/stock_inventory_preparation_filter/models/stock_inventory.py index cd736122c..17a42d1fb 100644 --- a/stock_inventory_preparation_filter/models/stock_inventory.py +++ b/stock_inventory_preparation_filter/models/stock_inventory.py @@ -4,6 +4,7 @@ from odoo import _, api, fields, models from odoo.addons import decimal_precision as dp +from odoo.tools.safe_eval import safe_eval class StockInventoryEmptyLines(models.Model): @@ -41,6 +42,7 @@ class StockInventory(models.Model): res_filters = super(StockInventory, self)._selection_filter() res_filters.append(('categories', _('Selected Categories'))) res_filters.append(('products', _('Selected Products'))) + res_filters.append(('domain', _('Filtered Products'))) for res_filter in res_filters: if res_filter[0] == 'lot': res_filters.append(('lots', _('Selected Lots'))) @@ -60,6 +62,7 @@ class StockInventory(models.Model): empty_line_ids = fields.One2many( comodel_name='stock.inventory.line.empty', inverse_name='inventory_id', string='Capture Lines') + product_domain = fields.Char('Domain', default=[('name', 'ilike', '')]) @api.model def _get_inventory_lines_values(self): @@ -85,6 +88,14 @@ class StockInventory(models.Model): inventory.lot_id = lot vals += super(StockInventory, inventory)._get_inventory_lines_values() + elif self.filter == 'domain': + domain = safe_eval(self.product_domain) + products = self.env['product.product'].search(domain) + inventory.filter = 'product' + for product in products: + inventory.product_id = product + vals += super( + StockInventory, inventory)._get_inventory_lines_values() elif self.filter == 'empty': tmp_lines = {} for line in self.empty_line_ids: diff --git a/stock_inventory_preparation_filter/readme/DESCRIPTION.rst b/stock_inventory_preparation_filter/readme/DESCRIPTION.rst index 7eb4d0bf4..33779664f 100644 --- a/stock_inventory_preparation_filter/readme/DESCRIPTION.rst +++ b/stock_inventory_preparation_filter/readme/DESCRIPTION.rst @@ -1,6 +1,7 @@ Includes more options for making an inventory out of: * Multiple products. +* Products filtered by a domain. * Products of a category. * Multiple lots diff --git a/stock_inventory_preparation_filter/static/description/index.html b/stock_inventory_preparation_filter/static/description/index.html index 82c5fb771..039f44545 100644 --- a/stock_inventory_preparation_filter/static/description/index.html +++ b/stock_inventory_preparation_filter/static/description/index.html @@ -371,6 +371,7 @@ ul.auto-toc {

Includes more options for making an inventory out of:

diff --git a/stock_inventory_preparation_filter/tests/test_stock_inventory_preparation_filter.py b/stock_inventory_preparation_filter/tests/test_stock_inventory_preparation_filter.py index 0081fcd10..cbdf51c1c 100644 --- a/stock_inventory_preparation_filter/tests/test_stock_inventory_preparation_filter.py +++ b/stock_inventory_preparation_filter/tests/test_stock_inventory_preparation_filter.py @@ -121,6 +121,20 @@ class TestStockInventoryPreparationFilterCategories(common.TransactionCase): self.assertEqual(line2.theoretical_qty, 4.0) self.assertEqual(line2.location_id, self.location) + def test_inventory_domain_filter(self): + inventory = self.inventory_model.create({ + 'name': 'Domain inventory', + 'filter': 'domain', + 'location_id': self.location.id, + 'product_domain': [('id', '=', self.product1.id)], + }) + inventory.action_start() + self.assertEqual(len(inventory.line_ids), 1) + line1 = inventory.line_ids[0] + self.assertEqual(line1.product_id, self.product1) + self.assertEqual(line1.theoretical_qty, 2.0) + self.assertEqual(line1.location_id, self.location) + def test_inventory_lots_filter(self): inventory = self.inventory_model.create( { diff --git a/stock_inventory_preparation_filter/views/stock_inventory_view.xml b/stock_inventory_preparation_filter/views/stock_inventory_view.xml index 40468dc80..4077f15d5 100644 --- a/stock_inventory_preparation_filter/views/stock_inventory_view.xml +++ b/stock_inventory_preparation_filter/views/stock_inventory_view.xml @@ -27,6 +27,9 @@ + + +