[IMP] maintenance: improve activity management on maintenance request model

This commit improves maintenance requests management through a better
integration of activities and addition of automated activities. Several
things are done in this commit :

 * automatic activities generation is added for maintenance requests.
   Activities are generated to remind assigned users about maintenance to
   perform. They are also automatically removed or updated if the scheduled
   date is changed or if the request is done to avoid bloating users with
   unnecessary activities;
 * a menu to configure activity types is added. Indeed equipment managers
   should be able to see and configure activity types related to their job;
This commit is contained in:
Thibault Delavallée
2018-03-27 16:31:05 +02:00
parent 77c7b68a9b
commit d0e2caee4e
5 changed files with 51 additions and 1 deletions
+1
View File
@@ -16,6 +16,7 @@
'data/mail_data.xml',
'views/maintenance_views.xml',
'views/maintenance_templates.xml',
'views/mail_activity_views.xml',
'data/maintenance_cron.xml',
],
'demo': ['data/maintenance_demo.xml'],
+7
View File
@@ -1,6 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Maintenance-specific activities, for automatic generation mainly -->
<record id="mail_act_maintenance_request" model="mail.activity.type">
<field name="name">Maintenance Request</field>
<field name="icon">fa-wrench</field>
<field name="res_model_id" ref="maintenance.model_maintenance_request"/>
</record>
<!-- email alias for maintenance requests -->
<record id="mail_alias_equipment" model="mail.alias">
<field name="alias_name">helpdesk</field>
+24
View File
@@ -336,6 +336,7 @@ class MaintenanceRequest(models.Model):
request._add_followers()
if request.equipment_id and not request.maintenance_team_id:
request.maintenance_team_id = request.equipment_id.maintenance_team_id
request.activity_update()
return request
@api.multi
@@ -349,8 +350,31 @@ class MaintenanceRequest(models.Model):
self._add_followers()
if self.stage_id.done and 'stage_id' in vals:
self.write({'close_date': fields.Date.today()})
self.activity_feedback(['maintenance.mail_act_maintenance_request'])
if 'schedule_date' in vals:
self.activity_update()
return res
def activity_update(self):
""" Update maintenance activities based on current record set state.
It reschedule, unlink or create maintenance request activities. """
self.filtered(lambda request: not request.schedule_date).activity_unlink(['maintenance.mail_act_maintenance_request'])
for request in self.filtered(lambda request: request.schedule_date):
date_dl = fields.Datetime.from_string(request.schedule_date).date()
updated = request.activity_reschedule(
['maintenance.mail_act_maintenance_request'],
date_deadline=date_dl)
if not updated:
if request.equipment_id:
note = _('Request planned for <a href="#" data-oe-model="%s" data-oe-id="%s">%s</a>') % (
request.equipment_id._name, request.equipment_id.id, request.equipment_id.display_name)
else:
note = False
request.activity_schedule(
'maintenance.mail_act_maintenance_request',
fields.Datetime.from_string(request.schedule_date).date(),
note=note, user_id=request.technician_user_id.id or request.owner_user_id.id or self.env.uid)
def _add_followers(self):
for request in self:
user_ids = (request.owner_user_id + request.technician_user_id).ids
@@ -7,4 +7,5 @@ access_equipment_category_admin_user,equipment.category system user,model_mainte
access_maintenance_stage_user,maintenance.stage.user,model_maintenance_stage,base.group_user,1,0,0,0
access_maintenance_stage_admin_user,equipment.request.stage system user,model_maintenance_stage,group_equipment_manager,1,1,1,1
access_maintenance_team_user,maintenance.team.user,model_maintenance_team,base.group_user,1,0,0,0
access_maintenance_team_admin_user,maintenance.team.admin.user,model_maintenance_team,group_equipment_manager,1,1,1,1
access_maintenance_team_admin_user,maintenance.team.admin.user,model_maintenance_team,group_equipment_manager,1,1,1,1
access_mail_activity_type_equipment_manager,mail.activity.type.equipment.manager,mail.model_mail_activity_type,maintenance.group_equipment_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
7 access_maintenance_stage_user maintenance.stage.user model_maintenance_stage base.group_user 1 0 0 0
8 access_maintenance_stage_admin_user equipment.request.stage system user model_maintenance_stage group_equipment_manager 1 1 1 1
9 access_maintenance_team_user maintenance.team.user model_maintenance_team base.group_user 1 0 0 0
10 access_maintenance_team_admin_user maintenance.team.admin.user model_maintenance_team group_equipment_manager 1 1 1 1
11 access_mail_activity_type_equipment_manager mail.activity.type.equipment.manager mail.model_mail_activity_type maintenance.group_equipment_manager 1 1 1 1
@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<odoo>
<!-- Activity types config -->
<record id="mail_activity_type_action_config_maintenance" model="ir.actions.act_window">
<field name="name">Activity Types</field>
<field name="res_model">mail.activity.type</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">['|', ('res_model_id', '=', False), ('res_model_id.model', '=', 'maintenance.request')]</field>
<field name="context">{'default_res_model': 'maintenance.request'}</field>
</record>
<menuitem id="maintenance_menu_config_activity_type"
action="mail_activity_type_action_config_maintenance"
parent="menu_maintenance_configuration"
sequence="20"
groups="base.group_no_one"/>
</odoo>