@@ -85,7 +85,7 @@
-
+
-->
+ options="{'horizontal': true}"/>
-
-
+
+
@@ -237,7 +237,7 @@
-
+
@@ -252,21 +252,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -979,31 +979,58 @@
-
-
+
+
+
+
+
+
+
+
+
+
+ days
+
+
+
+
+ hours
+
+
+
+
+
+
+
+
+
+
+
+
+ days
+
+
+
+
+ hours
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
- days
-
-
-
-
-
- hours
-
-
-
-
1
@@ -1189,7 +1216,7 @@
-
+
From bb6c208d374a94b58373e91572e1ec4c807e4840 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Wed, 23 Oct 2024 15:48:33 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=BB=B4=E4=BF=9D?=
=?UTF-8?q?=E8=AE=A1=E5=88=92=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_maintenance/__init__.py | 1 +
sf_maintenance/__manifest__.py | 1 +
sf_maintenance/models/sf_maintenance.py | 86 +++++++++++--------
sf_maintenance/security/ir.model.access.csv | 1 +
sf_maintenance/wizard/__init__.py | 1 +
.../wizard/maintenance_request_wizard.py | 26 ++++++
.../wizard/maintenance_request_wizard.xml | 29 +++++++
7 files changed, 111 insertions(+), 34 deletions(-)
create mode 100644 sf_maintenance/wizard/__init__.py
create mode 100644 sf_maintenance/wizard/maintenance_request_wizard.py
create mode 100644 sf_maintenance/wizard/maintenance_request_wizard.xml
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