63 lines
2.7 KiB
Python
63 lines
2.7 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from odoo.addons.stock_account.tests.test_anglo_saxon_valuation_reconciliation_common import ValuationReconciliationTestCommon
|
|
from odoo.addons.sale_stock.tests.common import TestSaleStockCommon
|
|
from odoo.tests import tagged
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestSaleStockMultiWarehouse(TestSaleStockCommon, ValuationReconciliationTestCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.product_a.is_storable = True
|
|
|
|
cls.warehouse_A = cls.company_data['default_warehouse']
|
|
cls.env['stock.quant']._update_available_quantity(cls.product_a, cls.warehouse_A.lot_stock_id, 10)
|
|
|
|
cls.warehouse_B = cls.env['stock.warehouse'].create({
|
|
'name': 'WH B',
|
|
'code': 'WHB',
|
|
'company_id': cls.env.company.id,
|
|
'partner_id': cls.env.company.partner_id.id,
|
|
})
|
|
cls.env['stock.quant']._update_available_quantity(cls.product_a, cls.warehouse_B.lot_stock_id, 10)
|
|
|
|
cls.env.user.groups_id |= cls.env.ref('stock.group_stock_user')
|
|
cls.env.user.groups_id |= cls.env.ref('stock.group_stock_multi_locations')
|
|
cls.env.user.groups_id |= cls.env.ref('sales_team.group_sale_salesman')
|
|
|
|
def test_multiple_warehouses_generate_multiple_pickings(self):
|
|
so = self.env['sale.order'].create({
|
|
'partner_id': self.partner_a.id,
|
|
'warehouse_id': self.warehouse_A.id,
|
|
'order_line': [
|
|
(0, 0, {
|
|
'name': self.product_a.name,
|
|
'product_id': self.product_a.id,
|
|
'product_uom_qty': 9,
|
|
'product_uom': self.product_a.uom_id.id,
|
|
'price_unit': 1,
|
|
'route_id': self.warehouse_A.delivery_route_id.id,
|
|
}),
|
|
(0, 0, {
|
|
'name': self.product_a.name,
|
|
'product_id': self.product_a.id,
|
|
'product_uom_qty': 10,
|
|
'product_uom': self.product_a.uom_id.id,
|
|
'price_unit': 1,
|
|
'route_id': self.warehouse_B.delivery_route_id.id,
|
|
}),
|
|
],
|
|
})
|
|
so.action_confirm()
|
|
|
|
# 2 pickings: 1 per warehouse
|
|
self.assertEqual(len(so.picking_ids), 2)
|
|
# single move per picking
|
|
self.assertEqual(len(so.picking_ids[0].move_ids), 1)
|
|
self.assertEqual(len(so.picking_ids[1].move_ids), 1)
|
|
# pickings comes from the right warehouse
|
|
self.assertEqual(so.picking_ids[0].move_ids[0].location_id.warehouse_id, self.warehouse_A)
|
|
self.assertEqual(so.picking_ids[1].move_ids[0].location_id.warehouse_id, self.warehouse_B)
|