设备维保计划优化
This commit is contained in:
@@ -2,3 +2,4 @@
|
|||||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
|
from . import wizard
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
'views/equipment_maintenance_standards_views.xml',
|
'views/equipment_maintenance_standards_views.xml',
|
||||||
'views/maintenance_request_views.xml',
|
'views/maintenance_request_views.xml',
|
||||||
'views/maintenance_equipment_category_views.xml',
|
'views/maintenance_equipment_category_views.xml',
|
||||||
|
'wizard/maintenance_request_wizard.xml',
|
||||||
],
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'application': False,
|
'application': False,
|
||||||
|
|||||||
@@ -124,9 +124,12 @@ class SfMaintenanceEquipment(models.Model):
|
|||||||
eq_maintenance_id = fields.Many2one('equipment.maintenance.standards', string='设备保养标准',
|
eq_maintenance_id = fields.Many2one('equipment.maintenance.standards', string='设备保养标准',
|
||||||
domain="[('maintenance_type','=','保养')]")
|
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='下次预防保养')
|
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_date = fields.Date(string='下次预防检修')
|
||||||
overhaul_period = fields.Integer(string='预防检修频次')
|
overhaul_period = fields.Integer(string='预防检修频次')
|
||||||
overhaul_duration = fields.Float(string='检修时长')
|
overhaul_duration = fields.Float(string='检修时长')
|
||||||
@@ -139,46 +142,55 @@ class SfMaintenanceEquipment(models.Model):
|
|||||||
确认保养/检修
|
确认保养/检修
|
||||||
"""
|
"""
|
||||||
context = self.env.context
|
context = self.env.context
|
||||||
initial_date = None
|
|
||||||
next_date = None
|
|
||||||
if context['type'] == '保养':
|
if context['type'] == '保养':
|
||||||
if not self.initial_action_date:
|
if not self.initial_action_date:
|
||||||
raise ValidationError('初始保养日期不能为空!!')
|
raise ValidationError('重置保养日期不能为空!!')
|
||||||
elif self.initial_action_date < fields.Date.today():
|
elif self.initial_action_date < fields.Date.today():
|
||||||
raise ValidationError('初始保养日期不能小于当前日期!!')
|
raise ValidationError('重置保养日期不能小于当前日期!!')
|
||||||
else:
|
|
||||||
initial_date = self.initial_action_date
|
|
||||||
next_date = self.next_action_date
|
|
||||||
elif context['type'] == '检修':
|
elif context['type'] == '检修':
|
||||||
if not self.initial_overhaul_date:
|
if not self.initial_overhaul_date:
|
||||||
raise ValidationError('初始检修日期不能为空!!')
|
raise ValidationError('重置检修日期不能为空!!')
|
||||||
elif self.initial_overhaul_date < fields.Date.today():
|
elif self.initial_overhaul_date < fields.Date.today():
|
||||||
raise ValidationError('初始检修日期不能小于当前日期!!')
|
raise ValidationError('重置检修日期不能小于当前日期!!')
|
||||||
else:
|
|
||||||
initial_date = self.initial_overhaul_date
|
|
||||||
next_date = self.overhaul_date
|
|
||||||
|
|
||||||
request_id = self.env['maintenance.request'].search([('stage_id.done', '=', False),
|
request_ids = self.env['maintenance.request'].search([('stage_id.done', '=', False),
|
||||||
('equipment_id', '=', self.id),
|
('equipment_id', '=', self.id),
|
||||||
('maintenance_type', '=', 'preventive'),
|
('maintenance_type', '=', 'preventive'),
|
||||||
('request_date', '=', next_date),
|
('sf_maintenance_type', '=', context['type'])])
|
||||||
('sf_maintenance_type', '=', context['type'])])
|
|
||||||
if not request_id:
|
if not request_ids:
|
||||||
if context['type'] == '保养':
|
return self.create_maintenance_request(context['type'])
|
||||||
self._create_new_request(initial_date)
|
else:
|
||||||
elif context['type'] == '检修':
|
|
||||||
self._create_new_request1(initial_date)
|
|
||||||
return {
|
return {
|
||||||
'type': 'ir.actions.client',
|
"type": "ir.actions.act_window",
|
||||||
'tag': 'display_notification',
|
"res_model": "maintenance.request.wizard",
|
||||||
'params': {
|
"views": [[False, "form"]],
|
||||||
'title': f'创建{context["type"]}计划',
|
"target": "new",
|
||||||
'message': f'{context["type"]}维保计划创建成功',
|
'context': {
|
||||||
'type': 'success'
|
'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')
|
@api.onchange('eq_maintenance_id', 'overhaul_id')
|
||||||
def _compute_equipment_maintenance_standards_ids(self):
|
def _compute_equipment_maintenance_standards_ids(self):
|
||||||
@@ -642,11 +654,13 @@ class SfMaintenanceEquipment(models.Model):
|
|||||||
('equipment_id', '=', equipment.id),
|
('equipment_id', '=', equipment.id),
|
||||||
('sf_maintenance_type', '=', '保养'),
|
('sf_maintenance_type', '=', '保养'),
|
||||||
('stage_id.done', '!=', True),
|
('stage_id.done', '!=', True),
|
||||||
|
('active', '!=', False),
|
||||||
('close_date', '=', False)], order="request_date asc", limit=1)
|
('close_date', '=', False)], order="request_date asc", limit=1)
|
||||||
last_maintenance_done = self.env['maintenance.request'].search([
|
last_maintenance_done = self.env['maintenance.request'].search([
|
||||||
('equipment_id', '=', equipment.id),
|
('equipment_id', '=', equipment.id),
|
||||||
('sf_maintenance_type', '=', '保养'),
|
('sf_maintenance_type', '=', '保养'),
|
||||||
('stage_id.done', '=', True),
|
('stage_id.done', '=', True),
|
||||||
|
('active', '!=', False),
|
||||||
('close_date', '!=', False)], order="close_date desc", limit=1)
|
('close_date', '!=', False)], order="close_date desc", limit=1)
|
||||||
if next_maintenance_todo and last_maintenance_done:
|
if next_maintenance_todo and last_maintenance_done:
|
||||||
next_date = next_maintenance_todo.request_date
|
next_date = next_maintenance_todo.request_date
|
||||||
@@ -686,11 +700,13 @@ class SfMaintenanceEquipment(models.Model):
|
|||||||
('equipment_id', '=', equipment.id),
|
('equipment_id', '=', equipment.id),
|
||||||
('sf_maintenance_type', '=', '检修'),
|
('sf_maintenance_type', '=', '检修'),
|
||||||
('stage_id.done', '!=', True),
|
('stage_id.done', '!=', True),
|
||||||
|
('active', '!=', False),
|
||||||
('close_date', '=', False)], order="request_date asc", limit=1)
|
('close_date', '=', False)], order="request_date asc", limit=1)
|
||||||
last_maintenance_done = self.env['maintenance.request'].search([
|
last_maintenance_done = self.env['maintenance.request'].search([
|
||||||
('equipment_id', '=', equipment.id),
|
('equipment_id', '=', equipment.id),
|
||||||
('sf_maintenance_type', '=', '检修'),
|
('sf_maintenance_type', '=', '检修'),
|
||||||
('stage_id.done', '=', True),
|
('stage_id.done', '=', True),
|
||||||
|
('active', '!=', False),
|
||||||
('close_date', '!=', False)], order="close_date desc", limit=1)
|
('close_date', '!=', False)], order="close_date desc", limit=1)
|
||||||
if next_maintenance_todo and last_maintenance_done:
|
if next_maintenance_todo and last_maintenance_done:
|
||||||
next_date = next_maintenance_todo.request_date
|
next_date = next_maintenance_todo.request_date
|
||||||
@@ -729,7 +745,7 @@ class SfMaintenanceEquipment(models.Model):
|
|||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
'name': _('Preventive Maintenance - %s', self.name),
|
'name': _('Preventive Maintenance - %s', self.name),
|
||||||
'request_date': fields.Date.today(),
|
'request_date': date,
|
||||||
'schedule_date': date,
|
'schedule_date': date,
|
||||||
'category_id': self.category_id.id,
|
'category_id': self.category_id.id,
|
||||||
'equipment_id': self.id,
|
'equipment_id': self.id,
|
||||||
@@ -749,7 +765,7 @@ class SfMaintenanceEquipment(models.Model):
|
|||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
'name': _('Preventive Maintenance - %s', self.name),
|
'name': _('Preventive Maintenance - %s', self.name),
|
||||||
'request_date': fields.Date.today(),
|
'request_date': date,
|
||||||
'schedule_date': date,
|
'schedule_date': date,
|
||||||
'category_id': self.category_id.id,
|
'category_id': self.category_id.id,
|
||||||
'equipment_id': self.id,
|
'equipment_id': self.id,
|
||||||
@@ -786,6 +802,7 @@ class SfMaintenanceEquipment(models.Model):
|
|||||||
next_requests = self.env['maintenance.request'].search([('stage_id.done', '=', False),
|
next_requests = self.env['maintenance.request'].search([('stage_id.done', '=', False),
|
||||||
('equipment_id', '=', equipment.id),
|
('equipment_id', '=', equipment.id),
|
||||||
('maintenance_type', '=', 'preventive'),
|
('maintenance_type', '=', 'preventive'),
|
||||||
|
('active', '=', True),
|
||||||
('request_date', '=', equipment.next_action_date),
|
('request_date', '=', equipment.next_action_date),
|
||||||
('sf_maintenance_type', '=', '保养')])
|
('sf_maintenance_type', '=', '保养')])
|
||||||
if not next_requests:
|
if not next_requests:
|
||||||
@@ -794,6 +811,7 @@ class SfMaintenanceEquipment(models.Model):
|
|||||||
next_requests = self.env['maintenance.request'].search([('stage_id.done', '=', False),
|
next_requests = self.env['maintenance.request'].search([('stage_id.done', '=', False),
|
||||||
('equipment_id', '=', equipment.id),
|
('equipment_id', '=', equipment.id),
|
||||||
('maintenance_type', '=', 'preventive'),
|
('maintenance_type', '=', 'preventive'),
|
||||||
|
('active', '=', True),
|
||||||
('request_date', '=', equipment.overhaul_date),
|
('request_date', '=', equipment.overhaul_date),
|
||||||
('sf_maintenance_type', '=', '检修')])
|
('sf_maintenance_type', '=', '检修')])
|
||||||
if not next_requests:
|
if not next_requests:
|
||||||
|
|||||||
@@ -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_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_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
|
access_maintenance_equipment_oee_group_plan_dispatch,maintenance_equipment_oee,model_maintenance_equipment_oee,sf_base.group_plan_dispatch,1,0,0,0
|
||||||
|
|||||||
|
1
sf_maintenance/wizard/__init__.py
Normal file
1
sf_maintenance/wizard/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import maintenance_request_wizard
|
||||||
26
sf_maintenance/wizard/maintenance_request_wizard.py
Normal file
26
sf_maintenance/wizard/maintenance_request_wizard.py
Normal file
@@ -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
|
||||||
29
sf_maintenance/wizard/maintenance_request_wizard.xml
Normal file
29
sf_maintenance/wizard/maintenance_request_wizard.xml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<record id="action_maintenance_request_wizard" model="ir.actions.act_window">
|
||||||
|
<field name="name">维保计划</field>
|
||||||
|
<field name="res_model">maintenance.request.wizard</field>
|
||||||
|
<field name="view_mode">form</field>
|
||||||
|
<field name="target">new</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="maintenance_request_wizard_form_view">
|
||||||
|
<field name="name">maintenance.request.wizard.form.view</field>
|
||||||
|
<field name="model">maintenance.request.wizard</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
<div>
|
||||||
|
<field name="name" invisible="1"/>
|
||||||
|
有未执行的历史维保计划,是否创建新维保计划!!
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
<button string="确认" name="submit" type="object" class="oe_highlight"/>
|
||||||
|
<button string="取消" name="cancel" type="object" class="oe_highlight"/>
|
||||||
|
</footer>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</openerp>
|
||||||
Reference in New Issue
Block a user