helpdesk_workflow_template.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. field_ids = fields.One2many(
  41. 'helpdesk.template.field',
  42. 'workflow_template_id',
  43. string='Fields',
  44. copy=True,
  45. help='Fields included in this workflow template for ticket forms'
  46. )
  47. stage_count = fields.Integer(
  48. string='Stages Count',
  49. compute='_compute_counts',
  50. store=False
  51. )
  52. sla_count = fields.Integer(
  53. string='SLA Policies Count',
  54. compute='_compute_counts',
  55. store=False
  56. )
  57. field_count = fields.Integer(
  58. string='Fields Count',
  59. compute='_compute_counts',
  60. store=False
  61. )
  62. team_ids = fields.One2many(
  63. 'helpdesk.team',
  64. 'workflow_template_id',
  65. string='Teams Using This Template',
  66. readonly=True
  67. )
  68. team_count = fields.Integer(
  69. string='Teams Count',
  70. compute='_compute_counts',
  71. store=False
  72. )
  73. @api.depends('stage_template_ids', 'sla_template_ids', 'team_ids', 'field_ids')
  74. def _compute_counts(self):
  75. for template in self:
  76. template.stage_count = len(template.stage_template_ids)
  77. template.sla_count = len(template.sla_template_ids)
  78. template.team_count = len(template.team_ids)
  79. template.field_count = len(template.field_ids)
  80. def action_view_teams(self):
  81. """Open teams using this template"""
  82. self.ensure_one()
  83. action = self.env['ir.actions.actions']._for_xml_id('helpdesk.helpdesk_team_action')
  84. action.update({
  85. 'domain': [('workflow_template_id', '=', self.id)],
  86. 'context': {
  87. 'default_workflow_template_id': self.id,
  88. 'search_default_workflow_template_id': self.id,
  89. },
  90. })
  91. return action
  92. def copy_data(self, default=None):
  93. """Override copy to duplicate stages and SLAs"""
  94. defaults = super().copy_data(default=default)
  95. # Note: Stages and SLAs will be copied automatically via ondelete='cascade'
  96. # We just need to update the name
  97. for template, vals in zip(self, defaults):
  98. vals['name'] = self.env._("%s (copy)", template.name)
  99. return defaults