oca-technical/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/test_purchase_order.py
2025-08-29 15:43:03 +02:00

206 lines
8.6 KiB
Python

# Copyright 2024 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import Command
from odoo.tests.common import TransactionCase
class TestMaintenanceProject(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.Equipment = cls.env["maintenance.equipment"]
cls.EquipmentCategory = cls.env["maintenance.equipment.category"]
cls.MaintenanceEquipmentCategory = cls.env["maintenance.equipment.category"]
cls.PurchaseOrder = cls.env["purchase.order"]
cls.PurchaseOrderLine = cls.env["purchase.order.line"]
cls.ProductCategory = cls.env["product.category"]
cls.ProductProduct = cls.env["product.product"]
cls.ProductTemplate = cls.env["product.template"]
cls.ResPartner = cls.env["res.partner"]
cls.partner = cls.ResPartner.create(
{
"name": "partner",
}
)
uom_unit = cls.env.ref("uom.product_uom_unit")
cls.maintenance_equipment_category1 = cls.MaintenanceEquipmentCategory.create(
{"name": "My Maintenance Equipment Category 1"}
)
cls.maintenance_equipment_category2 = cls.MaintenanceEquipmentCategory.create(
{"name": "My Maintenance Equipment Category 2"}
)
cls.product_category01 = cls.ProductCategory.create(
{
"name": "My Product Category 1",
"equipment_category_ids": [
Command.set(
[
cls.maintenance_equipment_category1.id,
cls.maintenance_equipment_category2.id,
]
)
],
}
)
cls.product_category02 = cls.ProductCategory.create(
{
"name": "My Product Category 2",
"equipment_category_ids": [
Command.set([cls.maintenance_equipment_category2.id])
],
}
)
cls.product_order_maintenance = cls.ProductProduct.create(
{
"name": "My Product",
"standard_price": 235.0,
"list_price": 280.0,
"type": "consu",
"uom_id": uom_unit.id,
"uom_po_id": uom_unit.id,
"purchase_method": "purchase",
"default_code": "PROD_ORDER",
"taxes_id": False,
"maintenance_ok": True,
"categ_id": cls.product_category01.id,
}
)
cls.product_order_no_maintenance = cls.ProductProduct.create(
{
"name": "My Product",
"standard_price": 235.0,
"list_price": 280.0,
"type": "consu",
"uom_id": uom_unit.id,
"uom_po_id": uom_unit.id,
"purchase_method": "purchase",
"default_code": "PROD_ORDER",
"taxes_id": False,
"categ_id": cls.product_category02.id,
}
)
cls.purchase_order = cls.PurchaseOrder.with_context(
tracking_disable=True
).create(
{
"partner_id": cls.partner.id,
}
)
PurchaseOrderLine = cls.PurchaseOrderLine.with_context(tracking_disable=True)
cls.purchase_line_order01 = PurchaseOrderLine.create(
{
"name": cls.product_order_maintenance.name,
"product_id": cls.product_order_maintenance.id,
"product_qty": 10.0,
"product_uom": cls.product_order_maintenance.uom_id.id,
"price_unit": cls.product_order_maintenance.list_price,
"order_id": cls.purchase_order.id,
"taxes_id": False,
}
)
cls.purchase_line_order02 = PurchaseOrderLine.create(
{
"name": cls.product_order_no_maintenance.name,
"product_id": cls.product_order_no_maintenance.id,
"product_qty": 10.0,
"product_uom": cls.product_order_no_maintenance.uom_id.id,
"price_unit": cls.product_order_no_maintenance.list_price,
"order_id": cls.purchase_order.id,
"taxes_id": False,
}
)
def test_equipment_count(self):
self.purchase_order.button_approve()
self.assertEqual(self.purchase_order.equipment_count, 10)
self.assertEqual(self.purchase_line_order01.equipment_count, 10)
self.assertEqual(self.purchase_line_order02.equipment_count, 0)
self.purchase_order.button_draft()
self.purchase_line_order01.product_qty = 1
self.purchase_order.button_approve()
self.assertEqual(self.purchase_order.equipment_count, 10)
self.purchase_order.button_draft()
self.purchase_line_order01.equipment_ids.unlink()
self.purchase_order.button_approve()
self.assertEqual(self.purchase_order.equipment_count, 1)
def test_unlink_purchase_oder(self):
self.purchase_order.button_approve()
equipments = self.purchase_order.order_line.equipment_ids
self.assertEqual(equipments.purchase_id, self.purchase_order)
self.assertEqual(equipments.purchase_line_id, self.purchase_line_order01)
self.purchase_order.button_cancel()
self.assertEqual(equipments.purchase_id, self.purchase_order)
self.assertEqual(equipments.purchase_line_id, self.purchase_line_order01)
self.purchase_order.unlink()
self.assertFalse(equipments.purchase_id)
self.assertFalse(equipments.purchase_line_id)
def test_equipment_category_id(self):
self.assertEqual(
self.purchase_line_order01.equipment_category_id,
self.maintenance_equipment_category1,
)
self.assertFalse(self.purchase_line_order02.equipment_category_id)
self.product_order_no_maintenance.product_tmpl_id.maintenance_ok = True
self.assertFalse(self.purchase_line_order02.equipment_category_id)
self.purchase_line_order02.product_id = self.product_order_maintenance
self.purchase_line_order02.product_id = self.product_order_no_maintenance
self.assertEqual(
self.purchase_line_order02.equipment_category_id,
self.maintenance_equipment_category2,
)
self.purchase_line_order01.equipment_ids.unlink()
self.purchase_line_order01.equipment_category_id = False
self.purchase_order.button_approve()
self.assertEqual(
self.purchase_line_order01.equipment_category_id,
self.maintenance_equipment_category1,
)
self.purchase_line_order01.equipment_ids.unlink()
self.purchase_line_order01.equipment_category_id = False
product_category_withouth_equipement_category = self.ProductCategory.create(
{
"name": "My Product Category 2",
}
)
self.purchase_line_order01.product_id.product_tmpl_id.categ_id = (
product_category_withouth_equipement_category.id
)
self.purchase_order.button_approve()
self.assertTrue(self.purchase_line_order01.equipment_category_id)
self.assertNotEqual(
self.purchase_line_order01.equipment_category_id,
self.maintenance_equipment_category1,
)
def test_account_move_line(self):
self.purchase_order.button_approve()
self.purchase_order.action_create_invoice()
self.assertEqual(
self.purchase_order.order_line.equipment_ids,
self.purchase_order.invoice_ids.line_ids.equipment_ids,
)
def test_action_view_equipments(self):
action = self.purchase_order.action_view_equipments()
self.assertEqual(action, {"type": "ir.actions.act_window_close"})
self.purchase_line_order01.product_qty = 1
self.purchase_order.button_approve()
view = self.env.ref("maintenance.hr_equipment_view_form", False)
action = self.purchase_order.action_view_equipments()
self.assertEqual(action["views"], [(view and view.id or False, "form")])
self.assertEqual(
action["res_id"], self.purchase_line_order01.equipment_ids[0:].id
)
self.purchase_order.button_draft()
self.purchase_line_order01.equipment_ids.unlink()
self.purchase_line_order01.product_qty = 2
self.purchase_order.button_approve()
action = self.purchase_order.action_view_equipments()
self.assertEqual(
action["domain"], [("purchase_id", "=", self.purchase_order.id)]
)