diff --git a/sf_maintenance/__manifest__.py b/sf_maintenance/__manifest__.py index e6c7acc8..eca38b9c 100644 --- a/sf_maintenance/__manifest__.py +++ b/sf_maintenance/__manifest__.py @@ -13,6 +13,7 @@ 'security/group_security.xml', 'security/ir.model.access.csv', 'views/maintenance_views.xml', + 'views/maintenance_logs_views.xml', 'views/equipment_maintenance_standards_views.xml', 'views/maintenance_request_views.xml', ], diff --git a/sf_maintenance/models/__init__.py b/sf_maintenance/models/__init__.py index 130f2688..1e93b68d 100644 --- a/sf_maintenance/models/__init__.py +++ b/sf_maintenance/models/__init__.py @@ -1,4 +1,5 @@ # -*-coding:utf-8-*- from . import sf_maintenance +from . import sf_maintenance_logs from . import sf_equipment_maintenance_standards from . import sf_maintenance_requests \ No newline at end of file diff --git a/sf_maintenance/models/sf_equipment_maintenance_standards.py b/sf_maintenance/models/sf_equipment_maintenance_standards.py index 0d290e49..35f25911 100644 --- a/sf_maintenance/models/sf_equipment_maintenance_standards.py +++ b/sf_maintenance/models/sf_equipment_maintenance_standards.py @@ -26,3 +26,19 @@ class SfEquipmentSaintenanceStandards(models.Model): maintenance_equipment_ids = fields.Many2many('maintenance.equipment', 'sf_maintenance_equipment_ids', string='设备') maintenance_projects = fields.Char('维保项目') maintenance_standards = fields.Char('维保标准') + eq_maintenance_ids = fields.One2many('maintenance.equipment', 'eq_maintenance_id', string='保养设备') + overhaul_ids = fields.One2many('maintenance.equipment', 'overhaul_id', string='检修设备') + + @api.onchange('maintenance_equipment_ids') + def onchange_maintenance_equipment_ids(self): + for record in self: + if record.maintenance_type == '保养': + record.write({'eq_maintenance_ids': [(6, 0, record.maintenance_equipment_ids.ids)]}) + if record.maintenance_type == '检修': + record.write({'overhaul_ids': [(6, 0, record.maintenance_equipment_ids.ids)]}) + + + + + + diff --git a/sf_maintenance/models/sf_maintenance_logs.py b/sf_maintenance/models/sf_maintenance_logs.py new file mode 100644 index 00000000..f9a514f5 --- /dev/null +++ b/sf_maintenance/models/sf_maintenance_logs.py @@ -0,0 +1,24 @@ +# -*-coding:utf-8-*- +from odoo import fields, models + +class SfMaintenanceLogs(models.Model): + _name = 'sf.maintenance.logs' + _description = '设备故障日志' + + code = fields.Char(string='编码') + name = fields.Char(string='名称') + type = fields.Selection([('type1', '类型1'), ('type2', '类型2')], string='类型') + brand = fields.Char(string='品牌') + model = fields.Char(string='型号') + code_location = fields.Char(string='编码位置') + fault_type = fields.Selection([('电气类', '电气类'), ('机械类', '机械类'), ('程序类', '程序类'), ('系统类', '系统类')], string='故障类型') + fault_code = fields.Char(string='故障代码') + fault_alarm_info = fields.Char(string='故障报警信息') + alarm_level = fields.Selection([('一级', '一级(严重)'), ('二级', '二级(中等)'), ('三级', '三级(轻微)')], string='报警级别') + alarm_time = fields.Datetime(string='报警时间') + alarm_way = fields.Selection([('文本提示报警', '文本提示报警'), ('声光报警', '声光报警'), ('图文报警', '图文报警')], string='报警方式') + fault_process = fields.Text(string='故障处理方法') + operator = fields.Many2one('res.users', string='处理人') + recovery_time = fields.Datetime(string='复原时间') + fault_duration = fields.Float(string='故障时长') + note = fields.Text(string='备注') diff --git a/sf_maintenance/models/sf_maintenance_requests.py b/sf_maintenance/models/sf_maintenance_requests.py index 1d623892..3508abcc 100644 --- a/sf_maintenance/models/sf_maintenance_requests.py +++ b/sf_maintenance/models/sf_maintenance_requests.py @@ -19,10 +19,23 @@ class SfMaintenanceEquipmentCategory(models.Model): for record in self: if record.sf_maintenance_type == '保养': record.equipment_maintenance_id = record.equipment_id.eq_maintenance_id + if record.sf_maintenance_type == '检修': record.equipment_maintenance_id = record.equipment_id.overhaul_id if not record.equipment_maintenance_id: - raise UserError(_("设备没有配置维保标准,请配置后再保存")) + record.equipment_maintenance_id = False + + + maintenance_projects = fields.Char(string='维保项目', related='equipment_maintenance_id.maintenance_projects') + maintenance_standards = fields.Char(string='维保标准', related='equipment_maintenance_id.maintenance_standards') + + @api.constrains('equipment_maintenance_id') + def _check_equipment_maintenance_id(self): + for record in self: + if not record.equipment_maintenance_id: + raise UserError(_("设备维保标准不能为空,请选择后再保存")) + + diff --git a/sf_maintenance/security/ir.model.access.csv b/sf_maintenance/security/ir.model.access.csv index a1a8526b..06e231b9 100644 --- a/sf_maintenance/security/ir.model.access.csv +++ b/sf_maintenance/security/ir.model.access.csv @@ -1,4 +1,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_equipment_maintenance_standards,equipment_maintenance_standards,model_equipment_maintenance_standards,base.group_user,1,1,1,1 +access_sf_maintenance_logs,sf_maintenance_logs,model_sf_maintenance_logs,base.group_user,1,1,1,1 +access_maintenance_equipment,maintenance_equipment,model_maintenance_equipment,base.group_user,1,1,1,1 diff --git a/sf_maintenance/tests/__init__.py b/sf_maintenance/tests/__init__.py new file mode 100644 index 00000000..50ed18aa --- /dev/null +++ b/sf_maintenance/tests/__init__.py @@ -0,0 +1 @@ +# -*-coding:utf-8-*- diff --git a/sf_maintenance/tests/test_sf_equipment_maintenance_standards.py b/sf_maintenance/tests/test_sf_equipment_maintenance_standards.py new file mode 100644 index 00000000..82793d32 --- /dev/null +++ b/sf_maintenance/tests/test_sf_equipment_maintenance_standards.py @@ -0,0 +1,68 @@ +# -*-coding:utf-8-*- +from odoo.tests.common import TransactionCase + +class TestEquipmentMaintenanceStandards(TransactionCase): + def setUp(self, *args, **kwargs): + result = super().setUp(*args, **kwargs) + + # Define global variables to be used in the test cases + self.user = self.env.ref('base.user_admin') + self.equipment_category = self.env['maintenance.equipment.category'].create({ + 'name': 'Test Equipment Category' + }) + self.equipment = self.env['maintenance.equipment'].create({ + 'name': 'Test Equipment', + 'category_id': self.equipment_category.id, + }) + + return result + + def test_create_equipment_maintenance_standard(self): + """Test creating a new equipment maintenance standard""" + maintenance_standard = self.env['equipment.maintenance.standards'].create({ + 'name': 'Test Maintenance Standard', + 'maintenance_type': '保养', + 'maintenance_equipment_category_id': self.equipment_category.id, + 'maintenance_equipment_ids': [(6, 0, [self.equipment.id])], + 'maintenance_projects': 'Test Maintenance Project', + 'maintenance_standards': 'Test Maintenance Standard', + }) + self.assertTrue(maintenance_standard) + + def test_maintenance_standard_code(self): + """Test that the maintenance standard code is generated correctly""" + maintenance_standard_1 = self.env['equipment.maintenance.standards'].create({ + 'name': 'Test Maintenance Standard 1', + 'maintenance_type': '保养', + 'maintenance_equipment_category_id': self.equipment_category.id, + 'maintenance_equipment_ids': [(6, 0, [self.equipment.id])], + 'maintenance_projects': 'Test Maintenance Project', + 'maintenance_standards': 'Test Maintenance Standard', + }) + maintenance_standard_2 = self.env['equipment.maintenance.standards'].create({ + 'name': 'Test Maintenance Standard 2', + 'maintenance_type': '保养', + 'maintenance_equipment_category_id': self.equipment_category.id, + 'maintenance_equipment_ids': [(6, 0, [self.equipment.id])], + 'maintenance_projects': 'Test Maintenance Project', + 'maintenance_standards': 'Test Maintenance Standard', + }) + self.assertEqual(maintenance_standard_1.code, '0001') + self.assertEqual(maintenance_standard_2.code, '0002') + + def test_maintenance_standard_fields(self): + """Test that the maintenance standard fields are correctly set""" + maintenance_standard = self.env['equipment.maintenance.standards'].create({ + 'name': 'Test Maintenance Standard', + 'maintenance_type': '保养', + 'maintenance_equipment_category_id': self.equipment_category.id, + 'maintenance_equipment_ids': [(6, 0, [self.equipment.id])], + 'maintenance_projects': 'Test Maintenance Project', + 'maintenance_standards': 'Test Maintenance Standard', + }) + self.assertEqual(maintenance_standard.name, 'Test Maintenance Standard') + self.assertEqual(maintenance_standard.maintenance_type, '保养') + self.assertEqual(maintenance_standard.maintenance_equipment_category_id.id, self.equipment_category.id) + self.assertIn(self.equipment, maintenance_standard.maintenance_equipment_ids) + self.assertEqual(maintenance_standard.maintenance_projects, 'Test Maintenance Project') + self.assertEqual(maintenance_standard.maintenance_standards, 'Test Maintenance Standard') diff --git a/sf_maintenance/views/equipment_maintenance_standards_views.xml b/sf_maintenance/views/equipment_maintenance_standards_views.xml index 0b3b1e78..f4b90fa6 100644 --- a/sf_maintenance/views/equipment_maintenance_standards_views.xml +++ b/sf_maintenance/views/equipment_maintenance_standards_views.xml @@ -17,6 +17,8 @@ + + diff --git a/sf_maintenance/views/maintenance_logs_views.xml b/sf_maintenance/views/maintenance_logs_views.xml new file mode 100644 index 00000000..f185b1b9 --- /dev/null +++ b/sf_maintenance/views/maintenance_logs_views.xml @@ -0,0 +1,117 @@ + + + + + + maintenance.logs.tree + sf.maintenance.logs + + + + + + + + + + + + + + + + + + + + + + + + + + maintenance.logs.form + sf.maintenance.logs + +
+ + + + + + + + + + + + + + + + + + + +
+
+
+ + + + maintenance.logs.search + sf.maintenance.logs + + + + + + + + + + + + + + + + + + + + + + + + + + + + 设备维保标准 + ir.actions.act_window + sf.maintenance.logs + tree,form + + +

+ 设备故障日志 +

+
+
+ + + + + + + + + + + +
+
+ + diff --git a/sf_maintenance/views/maintenance_request_views.xml b/sf_maintenance/views/maintenance_request_views.xml index b3f257b1..d711702d 100644 --- a/sf_maintenance/views/maintenance_request_views.xml +++ b/sf_maintenance/views/maintenance_request_views.xml @@ -1,37 +1,34 @@ - + - - sf.equipment.request.form - maintenance.request - - - - - + + sf.equipment.request.form + maintenance.request + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -43,21 +40,21 @@

Add a new maintenance request -

+

+

Follow the process of the request and communicate with the collaborator.

- + id="menu_m_request_form" + name="维保计划" + parent="maintenance.menu_m_request" + action="hr_equipment_request_action" + groups="maintenance.group_equipment_manager,base.group_user" + sequence="1"/>
\ No newline at end of file diff --git a/sf_maintenance/views/maintenance_views.xml b/sf_maintenance/views/maintenance_views.xml index 6b4ee016..ec287dc7 100644 --- a/sf_maintenance/views/maintenance_views.xml +++ b/sf_maintenance/views/maintenance_views.xml @@ -98,7 +98,7 @@ - +