diff --git a/sf_maintenance/__init__.py b/sf_maintenance/__init__.py index dc5e6b69..2ae6446f 100644 --- a/sf_maintenance/__init__.py +++ b/sf_maintenance/__init__.py @@ -2,3 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import models +from . import wizard diff --git a/sf_maintenance/__manifest__.py b/sf_maintenance/__manifest__.py index 88c53ff8..63f4604a 100644 --- a/sf_maintenance/__manifest__.py +++ b/sf_maintenance/__manifest__.py @@ -18,6 +18,7 @@ 'views/equipment_maintenance_standards_views.xml', 'views/maintenance_request_views.xml', 'views/maintenance_equipment_category_views.xml', + 'wizard/maintenance_request_wizard.xml', ], 'installable': True, 'application': False, diff --git a/sf_maintenance/models/sf_maintenance.py b/sf_maintenance/models/sf_maintenance.py index 95e38d02..3d68bb9a 100644 --- a/sf_maintenance/models/sf_maintenance.py +++ b/sf_maintenance/models/sf_maintenance.py @@ -124,9 +124,12 @@ class SfMaintenanceEquipment(models.Model): eq_maintenance_id = fields.Many2one('equipment.maintenance.standards', string='设备保养标准', domain="[('maintenance_type','=','保养')]") - initial_action_date = fields.Date(string='初始保养日期') + initial_action_date = fields.Date(string='重置保养日期') + initial_action_date_old = fields.Date(string='重置保养日期(旧)') next_action_date = fields.Date(string='下次预防保养') - initial_overhaul_date = fields.Date(string='初始维修日期') + + initial_overhaul_date = fields.Date(string='重置维修日期') + initial_overhaul_date_old = fields.Date(string='重置维修日期(旧)') overhaul_date = fields.Date(string='下次预防检修') overhaul_period = fields.Integer(string='预防检修频次') overhaul_duration = fields.Float(string='检修时长') @@ -139,46 +142,55 @@ class SfMaintenanceEquipment(models.Model): 确认保养/检修 """ context = self.env.context - initial_date = None - next_date = None if context['type'] == '保养': if not self.initial_action_date: - raise ValidationError('初始保养日期不能为空!!') + raise ValidationError('重置保养日期不能为空!!') elif self.initial_action_date < fields.Date.today(): - raise ValidationError('初始保养日期不能小于当前日期!!') - else: - initial_date = self.initial_action_date - next_date = self.next_action_date + raise ValidationError('重置保养日期不能小于当前日期!!') elif context['type'] == '检修': if not self.initial_overhaul_date: - raise ValidationError('初始检修日期不能为空!!') + raise ValidationError('重置检修日期不能为空!!') elif self.initial_overhaul_date < fields.Date.today(): - raise ValidationError('初始检修日期不能小于当前日期!!') - else: - initial_date = self.initial_overhaul_date - next_date = self.overhaul_date + raise ValidationError('重置检修日期不能小于当前日期!!') - request_id = self.env['maintenance.request'].search([('stage_id.done', '=', False), - ('equipment_id', '=', self.id), - ('maintenance_type', '=', 'preventive'), - ('request_date', '=', next_date), - ('sf_maintenance_type', '=', context['type'])]) - if not request_id: - if context['type'] == '保养': - self._create_new_request(initial_date) - elif context['type'] == '检修': - self._create_new_request1(initial_date) + request_ids = self.env['maintenance.request'].search([('stage_id.done', '=', False), + ('equipment_id', '=', self.id), + ('maintenance_type', '=', 'preventive'), + ('sf_maintenance_type', '=', context['type'])]) + + if not request_ids: + return self.create_maintenance_request(context['type']) + else: return { - 'type': 'ir.actions.client', - 'tag': 'display_notification', - 'params': { - 'title': f'创建{context["type"]}计划', - 'message': f'{context["type"]}维保计划创建成功', - 'type': 'success' + "type": "ir.actions.act_window", + "res_model": "maintenance.request.wizard", + "views": [[False, "form"]], + "target": "new", + 'context': { + 'equipment_id': self.id } } - else: - pass + + def create_maintenance_request(self, maintenance_request_type): + """ + 根据条件创建维保计划 + """ + if maintenance_request_type == '保养': + self._create_new_request(self.initial_action_date + timedelta(days=self.period)) + self.initial_action_date_old = self.initial_action_date + elif maintenance_request_type == '检修': + self._create_new_request1(self.initial_overhaul_date + timedelta(days=self.overhaul_period)) + self.initial_overhaul_date_old = self.initial_overhaul_date + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': f'创建{maintenance_request_type}计划', + 'message': f'新{maintenance_request_type}维保计划创建成功', + 'type': 'success', + 'next': {'type': 'ir.actions.act_window_close'}, + } + } @api.onchange('eq_maintenance_id', 'overhaul_id') def _compute_equipment_maintenance_standards_ids(self): @@ -642,11 +654,13 @@ class SfMaintenanceEquipment(models.Model): ('equipment_id', '=', equipment.id), ('sf_maintenance_type', '=', '保养'), ('stage_id.done', '!=', True), + ('active', '!=', False), ('close_date', '=', False)], order="request_date asc", limit=1) last_maintenance_done = self.env['maintenance.request'].search([ ('equipment_id', '=', equipment.id), ('sf_maintenance_type', '=', '保养'), ('stage_id.done', '=', True), + ('active', '!=', False), ('close_date', '!=', False)], order="close_date desc", limit=1) if next_maintenance_todo and last_maintenance_done: next_date = next_maintenance_todo.request_date @@ -686,11 +700,13 @@ class SfMaintenanceEquipment(models.Model): ('equipment_id', '=', equipment.id), ('sf_maintenance_type', '=', '检修'), ('stage_id.done', '!=', True), + ('active', '!=', False), ('close_date', '=', False)], order="request_date asc", limit=1) last_maintenance_done = self.env['maintenance.request'].search([ ('equipment_id', '=', equipment.id), ('sf_maintenance_type', '=', '检修'), ('stage_id.done', '=', True), + ('active', '!=', False), ('close_date', '!=', False)], order="close_date desc", limit=1) if next_maintenance_todo and last_maintenance_done: next_date = next_maintenance_todo.request_date @@ -729,7 +745,7 @@ class SfMaintenanceEquipment(models.Model): self.ensure_one() return { 'name': _('Preventive Maintenance - %s', self.name), - 'request_date': fields.Date.today(), + 'request_date': date, 'schedule_date': date, 'category_id': self.category_id.id, 'equipment_id': self.id, @@ -749,7 +765,7 @@ class SfMaintenanceEquipment(models.Model): self.ensure_one() return { 'name': _('Preventive Maintenance - %s', self.name), - 'request_date': fields.Date.today(), + 'request_date': date, 'schedule_date': date, 'category_id': self.category_id.id, 'equipment_id': self.id, @@ -786,6 +802,7 @@ class SfMaintenanceEquipment(models.Model): next_requests = self.env['maintenance.request'].search([('stage_id.done', '=', False), ('equipment_id', '=', equipment.id), ('maintenance_type', '=', 'preventive'), + ('active', '=', True), ('request_date', '=', equipment.next_action_date), ('sf_maintenance_type', '=', '保养')]) if not next_requests: @@ -794,6 +811,7 @@ class SfMaintenanceEquipment(models.Model): next_requests = self.env['maintenance.request'].search([('stage_id.done', '=', False), ('equipment_id', '=', equipment.id), ('maintenance_type', '=', 'preventive'), + ('active', '=', True), ('request_date', '=', equipment.overhaul_date), ('sf_maintenance_type', '=', '检修')]) if not next_requests: diff --git a/sf_maintenance/security/ir.model.access.csv b/sf_maintenance/security/ir.model.access.csv index 0317cf7a..9a20f67f 100644 --- a/sf_maintenance/security/ir.model.access.csv +++ b/sf_maintenance/security/ir.model.access.csv @@ -21,6 +21,7 @@ access_maintenance_equipment_agv_log,maintenance_equipment_agv_log,model_mainten access_maintenance_system_user,equipment.request system user,maintenance.model_maintenance_request,base.group_user,1,1,1,0 +access_maintenance_wizard_system_user,maintenance.request.wizard system user,model_maintenance_request_wizard,base.group_user,1,1,1,0 access_maintenance_equipment_group_plan_dispatch,maintenance.equipment,maintenance.model_maintenance_equipment,sf_base.group_plan_dispatch,1,0,0,0 access_maintenance_equipment_oee_group_plan_dispatch,maintenance_equipment_oee,model_maintenance_equipment_oee,sf_base.group_plan_dispatch,1,0,0,0 diff --git a/sf_maintenance/wizard/__init__.py b/sf_maintenance/wizard/__init__.py new file mode 100644 index 00000000..d8d470dc --- /dev/null +++ b/sf_maintenance/wizard/__init__.py @@ -0,0 +1 @@ +from . import maintenance_request_wizard \ No newline at end of file diff --git a/sf_maintenance/wizard/maintenance_request_wizard.py b/sf_maintenance/wizard/maintenance_request_wizard.py new file mode 100644 index 00000000..e0f8d8fa --- /dev/null +++ b/sf_maintenance/wizard/maintenance_request_wizard.py @@ -0,0 +1,26 @@ +from odoo import fields, models + + +class MaintenanceRequestWizard(models.TransientModel): + _name = 'maintenance.request.wizard' + _description = '维保二次确认弹窗' + + name = fields.Char('') + + def submit(self): + context = self.env.context + equipment_id = self.env['maintenance.equipment'].sudo().search([('id', '=', context['equipment_id'])]) + request_ids = self.env['maintenance.request'].search([('stage_id.done', '=', False), + ('equipment_id', '=', equipment_id.id), + ('maintenance_type', '=', 'preventive'), + ('sf_maintenance_type', '=', context['type'])]) + request_ids.write({'active': False}) + return equipment_id.create_maintenance_request(context['type']) + + def cancel(self): + context = self.env.context + equipment_id = self.env['maintenance.equipment'].sudo().search([('id', '=', context['equipment_id'])]) + if context['type'] == '保养': + equipment_id.initial_action_date = equipment_id.initial_action_date_old + elif context['type'] == '检修': + equipment_id.initial_overhaul_date = equipment_id.initial_overhaul_date_old diff --git a/sf_maintenance/wizard/maintenance_request_wizard.xml b/sf_maintenance/wizard/maintenance_request_wizard.xml new file mode 100644 index 00000000..632c21d9 --- /dev/null +++ b/sf_maintenance/wizard/maintenance_request_wizard.xml @@ -0,0 +1,29 @@ + + + + 维保计划 + maintenance.request.wizard + form + new + + + + maintenance.request.wizard.form.view + maintenance.request.wizard + +
+
+ + 有未执行的历史维保计划,是否创建新维保计划!! +
+ +
+
+
+ + +
+
\ No newline at end of file