65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.fields import Command
|
|
from odoo.tests import tagged
|
|
from odoo.addons.stock.tests.common import TestStockCommon
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestRepairPurchaseFlow(TestStockCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
def test_repair_with_purchase_mto_link(self):
|
|
"""
|
|
Test the integration between a repair order and a purchase order (MTO)
|
|
for a product with 'Make to Order' (MTO) and 'Buy' routes.
|
|
|
|
Validates that a repair order triggers a purchase order with correct product
|
|
and quantity, and ensures proper linking via the procurement group.
|
|
"""
|
|
self.env.ref('stock.route_warehouse0_mto').active = True
|
|
mto_route = self.env['stock.route'].search([('name', '=', 'Replenish on Order (MTO)')])
|
|
buy_route = self.env['stock.route'].search([('name', '=', 'Buy')])
|
|
rule = mto_route.rule_ids.filtered(lambda r: r.picking_type_id.code == 'repair_operation')
|
|
rule.update({'procure_method': 'make_to_order'})
|
|
|
|
seller = self.env['res.partner'].create({
|
|
'name': 'Vendor',
|
|
})
|
|
|
|
product = self.productA
|
|
product.write({
|
|
'route_ids': [(4, mto_route.id), (4, buy_route.id)],
|
|
'seller_ids': [
|
|
Command.create({
|
|
'partner_id': seller.id,
|
|
'min_qty': 1,
|
|
'price': 150,
|
|
}),
|
|
],
|
|
})
|
|
|
|
repair = self.env['repair.order'].create([
|
|
{
|
|
'move_ids': [
|
|
Command.create({
|
|
'repair_line_type': 'add',
|
|
'product_id': product.id,
|
|
'product_uom_qty': 1.0,
|
|
})
|
|
]
|
|
}
|
|
])
|
|
|
|
repair.action_validate()
|
|
|
|
purchase = repair.move_ids.created_purchase_line_ids.order_id
|
|
self.assertEqual(purchase.order_line.product_id, product)
|
|
self.assertEqual(purchase.order_line.product_qty, 1.0)
|
|
self.assertEqual(purchase.order_line.move_dest_ids.repair_id, repair)
|
|
self.assertEqual(repair.purchase_count, 1)
|
|
self.assertEqual(purchase.repair_count, 1)
|