mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
188 lines
7.6 KiB
Python
188 lines
7.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2017 Eficent Business and IT Consulting Services S.L.
|
|
# (http://www.eficent.com)
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|
|
|
from openerp.tests.common import TransactionCase
|
|
|
|
|
|
class TestStockInventoryExcludeSublocation(TransactionCase):
|
|
|
|
def setUp(self):
|
|
super(TestStockInventoryExcludeSublocation, self).setUp()
|
|
self.inventory_model = self.env['stock.inventory']
|
|
self.location_model = self.env['stock.location']
|
|
self.lot_model = self.env['stock.production.lot']
|
|
self.quant_model = self.env['stock.quant']
|
|
self.package_model = self.env['stock.quant.package']
|
|
self.res_users_model = self.env['res.users']
|
|
|
|
self.company = self.env.ref('base.main_company')
|
|
self.partner = self.ref('base.res_partner_4')
|
|
self.grp_stock_manager = self.env.ref('stock.group_stock_manager')
|
|
self.grp_tracking_owner = self.env.ref('stock.group_tracking_owner')
|
|
self.grp_production_lot = self.env.ref('stock.group_production_lot')
|
|
self.grp_tracking_lot = self.env.ref('stock.group_tracking_lot')
|
|
|
|
self.user = self.res_users_model.create({
|
|
'name': 'Test Account User',
|
|
'login': 'user_1',
|
|
'password': 'demo',
|
|
'email': 'example@yourcompany.com',
|
|
'company_id': self.company.id,
|
|
'company_ids': [(4, self.company.id)],
|
|
'groups_id': [(6, 0, [
|
|
self.grp_stock_manager.id,
|
|
self.grp_tracking_owner.id,
|
|
self.grp_production_lot.id,
|
|
self.grp_tracking_lot.id
|
|
])]
|
|
})
|
|
|
|
self.product1 = self.env['product.product'].create({
|
|
'name': 'Product for parent location',
|
|
'type': 'product',
|
|
'default_code': 'PROD1',
|
|
})
|
|
self.product2 = self.env['product.product'].create({
|
|
'name': 'Product for child location',
|
|
'type': 'product',
|
|
'default_code': 'PROD2',
|
|
})
|
|
self.location = self.location_model.create({
|
|
'name': 'Inventory tests',
|
|
'usage': 'internal',
|
|
})
|
|
self.sublocation = self.location_model.create({
|
|
'name': 'Inventory sublocation test',
|
|
'usage': 'internal',
|
|
'location_id': self.location.id
|
|
})
|
|
self.lot_a = self.lot_model.create({
|
|
'name': 'Lot for product1',
|
|
'product_id': self.product1.id
|
|
})
|
|
self.package = self.package_model.create({'name': 'PACK00TEST1'})
|
|
|
|
# Add a product in each location
|
|
starting_inv = self.inventory_model.create({
|
|
'name': 'Starting inventory',
|
|
'filter': 'product',
|
|
'line_ids': [
|
|
(0, 0, {
|
|
'product_id': self.product1.id,
|
|
'product_uom_id': self.env.ref(
|
|
"product.product_uom_unit").id,
|
|
'product_qty': 2.0,
|
|
'location_id': self.location.id,
|
|
'prod_lot_id': self.lot_a.id
|
|
}),
|
|
(0, 0, {
|
|
'product_id': self.product2.id,
|
|
'product_uom_id': self.env.ref(
|
|
"product.product_uom_unit").id,
|
|
'product_qty': 4.0,
|
|
'location_id': self.sublocation.id,
|
|
'prod_lot_id': self.lot_a.id
|
|
}),
|
|
],
|
|
})
|
|
starting_inv.action_done()
|
|
|
|
def _create_inventory_all_products(self, name, location,
|
|
exclude_sublocation):
|
|
inventory = self.inventory_model.create({
|
|
'name': name,
|
|
'filter': 'none',
|
|
'location_id': location.id,
|
|
'exclude_sublocation': exclude_sublocation
|
|
})
|
|
return inventory
|
|
|
|
def test_not_excluding_sublocations(self):
|
|
"""Check if products in sublocations are included into the inventory
|
|
if the excluding sublocations option is disabled."""
|
|
inventory_location = self._create_inventory_all_products(
|
|
'location inventory', self.location, False)
|
|
inventory_location.prepare_inventory()
|
|
inventory_location.action_done()
|
|
lines = inventory_location.line_ids
|
|
self.assertEqual(len(lines), 2, 'Not all expected products are '
|
|
'included')
|
|
|
|
def test_excluding_sublocations(self):
|
|
"""Check if products in sublocations are not included if the exclude
|
|
sublocations is enabled."""
|
|
inventory_location = self._create_inventory_all_products(
|
|
'location inventory', self.location, True)
|
|
inventory_sublocation = self._create_inventory_all_products(
|
|
'sublocation inventory', self.sublocation, True)
|
|
inventory_location.prepare_inventory()
|
|
inventory_location.action_done()
|
|
inventory_sublocation.prepare_inventory()
|
|
inventory_sublocation.action_done()
|
|
lines_location = inventory_location.line_ids
|
|
lines_sublocation = inventory_sublocation.line_ids
|
|
self.assertEqual(len(lines_location), 1,
|
|
'The products in the sublocations are not excluded')
|
|
self.assertEqual(len(lines_sublocation), 1,
|
|
'The products in the sublocations are not excluded')
|
|
|
|
def test_lot_excluding_sublocation(self):
|
|
"""Check if the sublocations are excluded when using lots."""
|
|
inventory = self.inventory_model.sudo(self.user.id).create({
|
|
'name': 'Inventory lot',
|
|
'filter': 'lot',
|
|
'location_id': self.location.id,
|
|
'lot_id': self.lot_a.id,
|
|
'exclude_sublocation': True
|
|
})
|
|
inventory.prepare_inventory()
|
|
inventory.action_done()
|
|
lines = inventory.line_ids
|
|
self.assertEqual(len(lines), 1, 'The products in the sublocations are '
|
|
'not excluded with lots.')
|
|
|
|
def test_product_and_owner_excluding_sublocation(self):
|
|
"""Check if sublocations are excluded when filtering by owner and
|
|
product."""
|
|
self.quant_model.create({
|
|
'product_id': self.product1.id,
|
|
'location_id': self.location.id,
|
|
'qty': 1,
|
|
'owner_id': self.partner,
|
|
})
|
|
inventory = self.inventory_model.sudo(self.user.id).create({
|
|
'name': 'Inventory lot',
|
|
'filter': 'product_owner',
|
|
'location_id': self.location.id,
|
|
'product_id': self.product1.id,
|
|
'partner_id': self.partner,
|
|
'exclude_sublocation': True
|
|
})
|
|
inventory.prepare_inventory()
|
|
lines = inventory.line_ids
|
|
self.assertEqual(len(lines), 1,
|
|
'The products in the sublocations are '
|
|
'not excluded with product and owner filter.')
|
|
|
|
def test_pack_excluding_sublocation(self):
|
|
"""Check if sublocations are excluded when filtering by package."""
|
|
self.quant_model.create({
|
|
'product_id': self.product1.id,
|
|
'location_id': self.location.id,
|
|
'qty': 1,
|
|
'package_id': self.package.id
|
|
})
|
|
inventory = self.inventory_model.sudo(self.user.id).create({
|
|
'name': 'Inventory lot',
|
|
'filter': 'pack',
|
|
'location_id': self.location.id,
|
|
'package_id': self.package.id,
|
|
'exclude_sublocation': True
|
|
})
|
|
inventory.prepare_inventory()
|
|
lines = inventory.line_ids
|
|
self.assertEqual(len(lines), 1, 'The products in the sublocations are '
|
|
'not excluded with package filter.')
|