1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/stock_barcode_mrp/tests/test_barcode_mrp.py
2024-12-10 09:04:09 +07:00

145 lines
6.1 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests import tagged
from odoo.addons.stock_barcode.tests.test_barcode_client_action import TestBarcodeClientAction
@tagged('post_install', '-at_install')
class TestPickingBarcodeClientAction(TestBarcodeClientAction):
def setUp(self):
super().setUp()
self.component01 = self.env['product.product'].create({
'name': 'Compo 01',
'type': 'product',
'barcode': 'compo01',
})
self.component02 = self.env['product.product'].create({
'name': 'Compo 02',
'type': 'product',
'barcode': 'compo02',
})
self.component_lot = self.env['product.product'].create({
'name': 'Compo Lot',
'type': 'product',
'barcode': 'compo_lot',
'tracking': 'lot',
})
self.simple_kit = self.env['product.product'].create({
'name': 'Simple Kit',
'type': 'product',
'barcode': 'simple_kit',
})
self.kit_lot = self.env['product.product'].create({
'name': 'Kit Lot',
'type': 'product',
'barcode': 'kit_lot',
})
self.bom_kit_lot = self.env['mrp.bom'].create({
'product_tmpl_id': self.kit_lot.product_tmpl_id.id,
'product_qty': 1.0,
'type': 'phantom',
'bom_line_ids': [
(0, 0, {'product_id': self.component01.id, 'product_qty': 1.0}),
(0, 0, {'product_id': self.component_lot.id, 'product_qty': 1.0}),
],
})
self.bom_simple_kit = self.env['mrp.bom'].create({
'product_tmpl_id': self.simple_kit.product_tmpl_id.id,
'product_qty': 1.0,
'type': 'phantom',
'bom_line_ids': [
(0, 0, {'product_id': self.component01.id, 'product_qty': 1.0}),
(0, 0, {'product_id': self.component02.id, 'product_qty': 1.0}),
],
})
def test_immediate_receipt_kit_from_scratch_with_tracked_compo(self):
self.clean_access_rights()
grp_lot = self.env.ref('stock.group_production_lot')
self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]})
receipt_picking = self.env['stock.picking'].create({
'location_id': self.supplier_location.id,
'location_dest_id': self.stock_location.id,
'picking_type_id': self.picking_type_in.id,
})
url = self._get_client_action_url(receipt_picking.id)
self.start_tour(url, 'test_immediate_receipt_kit_from_scratch_with_tracked_compo', login='admin', timeout=180)
self.assertRecordValues(receipt_picking.move_ids.move_line_ids, [
{'product_id': self.component01.id, 'qty_done': 3.0, 'lot_name': False, 'state': 'done'},
{'product_id': self.component_lot.id, 'qty_done': 3.0, 'lot_name': 'super_lot', 'state': 'done'},
{'product_id': self.component01.id, 'qty_done': 1.0, 'lot_name': False, 'state': 'done'},
{'product_id': self.component02.id, 'qty_done': 1.0, 'lot_name': False, 'state': 'done'},
])
def test_planned_receipt_kit_from_scratch_with_tracked_compo(self):
self.clean_access_rights()
grp_lot = self.env.ref('stock.group_production_lot')
self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]})
receipt_picking = self.env['stock.picking'].create({
'location_id': self.supplier_location.id,
'location_dest_id': self.stock_location.id,
'picking_type_id': self.picking_type_in.id,
})
url = self._get_client_action_url(receipt_picking.id)
self.start_tour(url, 'test_planned_receipt_kit_from_scratch_with_tracked_compo', login='admin', timeout=180)
self.assertRecordValues(receipt_picking.move_ids.move_line_ids, [
{'product_id': self.component01.id, 'qty_done': 3.0, 'lot_name': False, 'state': 'done'},
{'product_id': self.component_lot.id, 'qty_done': 3.0, 'lot_name': 'super_lot', 'state': 'done'},
{'product_id': self.component01.id, 'qty_done': 1.0, 'lot_name': False, 'state': 'done'},
{'product_id': self.component02.id, 'qty_done': 1.0, 'lot_name': False, 'state': 'done'},
])
def test_picking_product_with_kit_and_packaging(self):
""" A picking with a move for a product with a kit BOM and packaging can be processed
in Barcode
"""
self.clean_access_rights()
packaging = self.env['product.packaging'].create({
'name': 'test packaging',
'qty': 1,
'product_id': self.simple_kit.id,
})
picking = self.env['stock.picking'].create({
'picking_type_id': self.picking_type_internal.id,
'location_id': self.stock_location.id,
'location_dest_id': self.stock_location.id,
'move_ids': [(0, 0, {
'name': 'test_picking_product_with_packaging stock move',
'product_id': self.simple_kit.id,
'product_uom_qty': 1.0,
'product_uom': self.simple_kit.uom_id.id,
'location_id': self.stock_location.id,
'location_dest_id': self.stock_location.id,
'product_packaging_id': packaging.id,
})],
})
picking.action_confirm()
create_vals = []
for stock_move, component in zip(picking.move_ids, picking.move_ids.mapped('product_id')):
create_vals.append({
'product_id': component.id,
'picking_id': picking.id,
'move_id': stock_move.id,
'location_id': self.stock_location.id,
'location_dest_id': self.stock_location.id,
'quantity': 1.0,
})
self.env['stock.move.line'].create(create_vals)
url = self._get_client_action_url(picking.id)
self.start_tour(url, 'test_picking_product_with_kit_and_packaging', login='admin', timeout=180)
self.assertEqual(picking.state, 'done')