mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-19 23:12:03 +02:00
Initial commit: OCA Technical packages (595 packages)
This commit is contained in:
commit
2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions
|
|
@ -0,0 +1,2 @@
|
|||
from . import test_maintenance_plan
|
||||
from . import test_maintenance_plan_domain
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
# Copyright 2017 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from freezegun import freeze_time
|
||||
|
||||
import odoo.tests.common as test_common
|
||||
|
||||
|
||||
class TestMaintenancePlanBase(test_common.TransactionCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
# HACK https://github.com/spulec/freezegun/issues/485
|
||||
freezer = freeze_time("2023-01-25 15:30:00")
|
||||
freezer.__enter__()
|
||||
cls.addClassCleanup(freezer.__exit__)
|
||||
# Remove this variable in v16 and put instead:
|
||||
# from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
|
||||
DISABLED_MAIL_CONTEXT = {
|
||||
"tracking_disable": True,
|
||||
"mail_create_nolog": True,
|
||||
"mail_create_nosubscribe": True,
|
||||
"mail_notrack": True,
|
||||
"no_reset_password": True,
|
||||
}
|
||||
cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT))
|
||||
cls.maintenance_request_obj = cls.env["maintenance.request"]
|
||||
cls.maintenance_plan_obj = cls.env["maintenance.plan"]
|
||||
cls.maintenance_equipment_obj = cls.env["maintenance.equipment"]
|
||||
cls.cron = cls.env.ref("maintenance.maintenance_requests_cron")
|
||||
cls.weekly_kind = cls.env.ref("maintenance_plan.maintenance_kind_weekly")
|
||||
cls.done_stage = cls.env.ref("maintenance.stage_3")
|
||||
|
||||
cls.equipment_1 = cls.maintenance_equipment_obj.create({"name": "Laptop 1"})
|
||||
cls.maintenance_plan_1 = cls.maintenance_plan_obj.create(
|
||||
{
|
||||
"equipment_id": cls.equipment_1.id,
|
||||
"start_maintenance_date": "2023-01-25",
|
||||
"interval": 1,
|
||||
"interval_step": "month",
|
||||
"maintenance_plan_horizon": 2,
|
||||
"planning_step": "month",
|
||||
}
|
||||
)
|
||||
cls.maintenance_plan_2 = cls.maintenance_plan_obj.create(
|
||||
{
|
||||
"equipment_id": cls.equipment_1.id,
|
||||
"maintenance_kind_id": cls.weekly_kind.id,
|
||||
"interval": 1,
|
||||
"interval_step": "week",
|
||||
"maintenance_plan_horizon": 2,
|
||||
"planning_step": "month",
|
||||
}
|
||||
)
|
||||
cls.maintenance_plan_3 = cls.maintenance_plan_obj.create(
|
||||
{
|
||||
"name": "My custom plan",
|
||||
"equipment_id": cls.equipment_1.id,
|
||||
"interval": 2,
|
||||
"interval_step": "week",
|
||||
"maintenance_plan_horizon": 2,
|
||||
"planning_step": "month",
|
||||
}
|
||||
)
|
||||
cls.maintenance_plan_4 = cls.maintenance_plan_obj.create(
|
||||
{
|
||||
"name": "Plan without equipment",
|
||||
"maintenance_kind_id": cls.weekly_kind.id,
|
||||
"interval": 1,
|
||||
"interval_step": "week",
|
||||
"maintenance_plan_horizon": 2,
|
||||
"planning_step": "month",
|
||||
}
|
||||
)
|
||||
cls.maintenance_plan_5 = cls.maintenance_plan_obj.create(
|
||||
{
|
||||
"start_maintenance_date": "2023-01-25",
|
||||
"interval": 1,
|
||||
"interval_step": "month",
|
||||
"maintenance_plan_horizon": 2,
|
||||
"planning_step": "month",
|
||||
}
|
||||
)
|
||||
cls.report_obj = cls.env["ir.actions.report"]
|
||||
|
|
@ -0,0 +1,231 @@
|
|||
# Copyright 2017 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import _, fields
|
||||
|
||||
from .common import TestMaintenancePlanBase
|
||||
|
||||
|
||||
class TestMaintenancePlan(TestMaintenancePlanBase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.today_date = fields.Date.from_string("2023-01-25")
|
||||
|
||||
def test_name_get(self):
|
||||
self.assertEqual(
|
||||
self.maintenance_plan_1.name_get()[0][1],
|
||||
_(
|
||||
"Unnamed %(void)s plan (%(eqpmnt)s)",
|
||||
void="",
|
||||
eqpmnt=self.maintenance_plan_1.equipment_id.name,
|
||||
),
|
||||
)
|
||||
self.assertEqual(
|
||||
self.maintenance_plan_2.name_get()[0][1],
|
||||
_(
|
||||
"Unnamed %(kind)s plan (%(eqpmnt)s)",
|
||||
kind=self.maintenance_plan_2.maintenance_kind_id.name,
|
||||
eqpmnt=self.maintenance_plan_2.equipment_id.name,
|
||||
),
|
||||
)
|
||||
self.assertEqual(
|
||||
self.maintenance_plan_3.name_get()[0][1], self.maintenance_plan_3.name
|
||||
)
|
||||
|
||||
def test_next_maintenance_date_01(self):
|
||||
# We set start maintenance date tomorrow and check next maintenance
|
||||
# date has been correctly computed
|
||||
self.maintenance_plan_1.start_maintenance_date = "2023-01-24"
|
||||
# Check next maintenance date is 1 month from start date
|
||||
self.assertEqual(
|
||||
self.maintenance_plan_1.next_maintenance_date,
|
||||
fields.Date.from_string("2023-02-24"),
|
||||
)
|
||||
|
||||
def test_next_maintenance_date_02(self):
|
||||
self.cron.method_direct_trigger()
|
||||
# Check maintenance plan dates
|
||||
self.assertEqual(
|
||||
self.maintenance_plan_1.start_maintenance_date, self.today_date
|
||||
)
|
||||
self.assertEqual(self.maintenance_plan_1.next_maintenance_date, self.today_date)
|
||||
# Check information from generated_requests
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
self.assertEqual(len(generated_requests), 3)
|
||||
maintenance_1 = generated_requests[0]
|
||||
# First maintenance was planned 2023-01-25
|
||||
self.assertEqual(maintenance_1.request_date, self.today_date)
|
||||
# Complete request:
|
||||
maintenance_1.stage_id = self.done_stage
|
||||
# Check next one:
|
||||
maintenance_2 = generated_requests[1]
|
||||
# This should be expected 2023-02-25
|
||||
self.assertEqual(
|
||||
maintenance_2.request_date, fields.Date.from_string("2023-02-25")
|
||||
)
|
||||
# Complete request and Check next one:
|
||||
maintenance_2.stage_id = self.done_stage
|
||||
maintenance_3 = generated_requests[2]
|
||||
# This one should be expected 2023-03-25
|
||||
self.assertEqual(
|
||||
maintenance_3.request_date, fields.Date.from_string("2023-03-25")
|
||||
)
|
||||
# Move it to a date before `start_maintenance_date` (the request should
|
||||
# be ignored)
|
||||
past_date = fields.Date.from_string("2022-12-25")
|
||||
maintenance_3.request_date = past_date
|
||||
self.assertNotEqual(self.maintenance_plan_1.next_maintenance_date, past_date)
|
||||
self.assertEqual(
|
||||
self.maintenance_plan_1.next_maintenance_date,
|
||||
fields.Date.from_string("2023-03-25"),
|
||||
)
|
||||
# Move the request_date far into the future:
|
||||
future_date = fields.Date.from_string("2023-05-25")
|
||||
maintenance_3.request_date = future_date
|
||||
self.assertEqual(self.maintenance_plan_1.next_maintenance_date, future_date)
|
||||
# Complete request in that date, next expected date should be 1 month
|
||||
# after latest request done.:
|
||||
maintenance_3.stage_id = self.done_stage
|
||||
self.assertEqual(
|
||||
self.maintenance_plan_1.next_maintenance_date,
|
||||
fields.Date.from_string("2023-06-25"),
|
||||
)
|
||||
|
||||
def test_generate_requests(self):
|
||||
self.cron.method_direct_trigger()
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
self.assertEqual(len(generated_requests), 3)
|
||||
self.assertEqual(
|
||||
fields.Date.to_date(generated_requests[0].schedule_date), self.today_date
|
||||
)
|
||||
self.assertEqual(
|
||||
fields.Date.to_date(generated_requests[1].schedule_date),
|
||||
fields.Date.from_string("2023-02-25"),
|
||||
)
|
||||
self.assertEqual(
|
||||
fields.Date.to_date(generated_requests[2].schedule_date),
|
||||
fields.Date.from_string("2023-03-25"),
|
||||
)
|
||||
generated_request = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_4.id)], limit=1
|
||||
)
|
||||
self.assertEqual(
|
||||
generated_request.name,
|
||||
_(
|
||||
"Preventive Maintenance (%(kind)s) - %(plan)s",
|
||||
kind=self.weekly_kind.name,
|
||||
plan=self.maintenance_plan_4.name,
|
||||
),
|
||||
)
|
||||
|
||||
def test_generate_requests2(self):
|
||||
self.cron.method_direct_trigger()
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
|
||||
self.assertEqual(len(generated_requests), 3)
|
||||
# We set plan start_maintenanca_date to a future one. New requests should take
|
||||
# into account this new date.
|
||||
new_date = fields.Date.from_string("2023-04-25")
|
||||
self.maintenance_plan_1.next_maintenance_date = new_date
|
||||
self.maintenance_plan_1.maintenance_plan_horizon = 3
|
||||
self.cron.method_direct_trigger()
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
self.assertEqual(len(generated_requests), 4)
|
||||
self.assertEqual(generated_requests[-1].request_date, new_date)
|
||||
|
||||
def test_generate_requests_no_equipment(self):
|
||||
self.cron.method_direct_trigger()
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_5.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
|
||||
self.assertEqual(len(generated_requests), 3)
|
||||
|
||||
# We set plan start_maintenanca_date to a future one. New requests should take
|
||||
# into account this new date.
|
||||
|
||||
self.maintenance_plan_5.write(
|
||||
{
|
||||
"start_maintenance_date": fields.Date.to_string(
|
||||
self.today_date + relativedelta(weeks=9)
|
||||
),
|
||||
"maintenance_plan_horizon": 3,
|
||||
}
|
||||
)
|
||||
|
||||
self.cron.method_direct_trigger()
|
||||
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_5.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
|
||||
self.assertEqual(len(generated_requests), 4)
|
||||
self.assertEqual(
|
||||
generated_requests[-1].request_date,
|
||||
self.today_date + relativedelta(weeks=9),
|
||||
)
|
||||
self.assertFalse(generated_requests.mapped("equipment_id"))
|
||||
|
||||
def test_get_relativedelta(self):
|
||||
plan = self.maintenance_plan_1
|
||||
result = plan.get_relativedelta(1, "day")
|
||||
self.assertEqual(relativedelta(days=1), result)
|
||||
result = plan.get_relativedelta(1, "week")
|
||||
self.assertEqual(relativedelta(weeks=1), result)
|
||||
result = plan.get_relativedelta(1, "month")
|
||||
self.assertEqual(relativedelta(months=1), result)
|
||||
result = plan.get_relativedelta(1, "year")
|
||||
self.assertEqual(relativedelta(years=1), result)
|
||||
|
||||
def test_generate_requests_inactive_equipment(self):
|
||||
self.equipment_1.active = False
|
||||
self.cron.method_direct_trigger()
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
self.assertEqual(len(generated_requests), 0)
|
||||
self.equipment_1.active = True
|
||||
self.cron.method_direct_trigger()
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
self.assertEqual(len(generated_requests), 3)
|
||||
|
||||
def test_maintenance_request_report(self):
|
||||
self.cron.method_direct_trigger()
|
||||
generated_request = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
|
||||
order="schedule_date asc",
|
||||
limit=1,
|
||||
)
|
||||
generated_request.note = "TEST-INSTRUCTIONS"
|
||||
res = self.report_obj._render_qweb_text(
|
||||
"base_maintenance.report_maintenance_request",
|
||||
generated_request.ids,
|
||||
False,
|
||||
)
|
||||
self.assertRegex(str(res[0]), "TEST-INSTRUCTIONS")
|
||||
|
||||
def test_maintenance_plan_button_manual_request_generation(self):
|
||||
self.assertEqual(len(self.maintenance_plan_1.maintenance_ids), 0)
|
||||
self.maintenance_plan_1.button_manual_request_generation()
|
||||
self.assertEqual(len(self.maintenance_plan_1.maintenance_ids), 3)
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# Copyright 2023 Dixmit
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
import json
|
||||
|
||||
from odoo.addons.maintenance_plan.tests.common import TestMaintenancePlanBase
|
||||
|
||||
|
||||
class TestMaintenancePlanDomain(TestMaintenancePlanBase):
|
||||
def test_generate_requests_no_domain(self):
|
||||
self.cron.method_direct_trigger()
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_5.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
|
||||
self.assertEqual(len(generated_requests), 3)
|
||||
self.assertFalse(generated_requests.mapped("equipment_id"))
|
||||
|
||||
def test_generate_requests_domain(self):
|
||||
equipment_2 = self.maintenance_equipment_obj.create({"name": "Laptop 2"})
|
||||
self.maintenance_plan_5.write(
|
||||
{
|
||||
"generate_with_domain": True,
|
||||
"generate_domain": json.dumps(
|
||||
[("id", "in", [equipment_2.id, self.equipment_1.id])]
|
||||
),
|
||||
}
|
||||
)
|
||||
self.cron.method_direct_trigger()
|
||||
generated_requests = self.maintenance_request_obj.search(
|
||||
[("maintenance_plan_id", "=", self.maintenance_plan_5.id)],
|
||||
order="schedule_date asc",
|
||||
)
|
||||
|
||||
self.assertEqual(len(generated_requests), 6)
|
||||
self.assertIn(equipment_2, generated_requests.mapped("equipment_id"))
|
||||
self.assertIn(self.equipment_1, generated_requests.mapped("equipment_id"))
|
||||
Loading…
Add table
Add a link
Reference in a new issue