helpdesk_workflow_template.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. # -*- coding: utf-8 -*-
  2. from odoo import api, fields, models, Command
  3. class HelpdeskWorkflowTemplate(models.Model):
  4. _name = 'helpdesk.workflow.template'
  5. _description = 'Helpdesk Workflow Template'
  6. _order = 'sequence, name'
  7. name = fields.Char(
  8. string='Template Name',
  9. required=True,
  10. translate=True,
  11. help='Name of the workflow template'
  12. )
  13. sequence = fields.Integer(
  14. string='Sequence',
  15. default=10,
  16. help='Order of templates'
  17. )
  18. description = fields.Text(
  19. string='Description',
  20. translate=True,
  21. help='Description of the workflow template'
  22. )
  23. active = fields.Boolean(
  24. string='Active',
  25. default=True,
  26. help='If unchecked, this template will be hidden'
  27. )
  28. stage_template_ids = fields.One2many(
  29. 'helpdesk.workflow.template.stage',
  30. 'template_id',
  31. string='Stages',
  32. help='Stages included in this workflow template'
  33. )
  34. sla_template_ids = fields.One2many(
  35. 'helpdesk.workflow.template.sla',
  36. 'template_id',
  37. string='SLA Policies',
  38. help='SLA policies included in this workflow template'
  39. )
  40. stage_count = fields.Integer(
  41. string='Stages Count',
  42. compute='_compute_counts',
  43. store=False
  44. )
  45. sla_count = fields.Integer(
  46. string='SLA Policies Count',
  47. compute='_compute_counts',
  48. store=False
  49. )
  50. team_ids = fields.One2many(
  51. 'helpdesk.team',
  52. 'workflow_template_id',
  53. string='Teams Using This Template',
  54. readonly=True
  55. )
  56. team_count = fields.Integer(
  57. string='Teams Count',
  58. compute='_compute_counts',
  59. store=False
  60. )
  61. @api.depends('stage_template_ids', 'sla_template_ids', 'team_ids')
  62. def _compute_counts(self):
  63. for template in self:
  64. template.stage_count = len(template.stage_template_ids)
  65. template.sla_count = len(template.sla_template_ids)
  66. template.team_count = len(template.team_ids)
  67. def action_view_teams(self):
  68. """Open teams using this template"""
  69. self.ensure_one()
  70. action = self.env['ir.actions.actions']._for_xml_id('helpdesk.helpdesk_team_action')
  71. action.update({
  72. 'domain': [('workflow_template_id', '=', self.id)],
  73. 'context': {
  74. 'default_workflow_template_id': self.id,
  75. 'search_default_workflow_template_id': self.id,
  76. },
  77. })
  78. return action
  79. def copy_data(self, default=None):
  80. """Override copy to duplicate stages and SLAs"""
  81. defaults = super().copy_data(default=default)
  82. # Note: Stages and SLAs will be copied automatically via ondelete='cascade'
  83. # We just need to update the name
  84. for template, vals in zip(self, defaults):
  85. vals['name'] = self.env._("%s (copy)", template.name)
  86. return defaults