diff --git a/odex25_helpdesk/helpdesk_employee_request/i18n/ar_001.po b/odex25_helpdesk/helpdesk_employee_request/i18n/ar_001.po
index 8f3c12e49..48d9d3ed5 100644
--- a/odex25_helpdesk/helpdesk_employee_request/i18n/ar_001.po
+++ b/odex25_helpdesk/helpdesk_employee_request/i18n/ar_001.po
@@ -273,8 +273,16 @@ msgstr "السابق"
msgid "Rejection"
msgstr "رفض"
-
-
+#. module: helpdesk_employee_request
+#: model:ir.ui.menu,name:helpdesk_employee_request.menu_helpdesk_employee_direct_manager
+msgid "Requests by My Employees"
+msgstr "طلبات الموظفين التابعين لي"
+
+
+#. module: helpdesk_employee_request
+#: model:res.groups,name:helpdesk_employee_request.group_odex25_helpdesk_direct_manager
+msgid "Direct Manager Helpdesk"
+msgstr "المدير المباشر"
diff --git a/odex25_helpdesk/helpdesk_employee_request/models/helpdesk.py b/odex25_helpdesk/helpdesk_employee_request/models/helpdesk.py
index 0a63da8f8..806246287 100644
--- a/odex25_helpdesk/helpdesk_employee_request/models/helpdesk.py
+++ b/odex25_helpdesk/helpdesk_employee_request/models/helpdesk.py
@@ -39,9 +39,11 @@ class HelpdeskTicket(models.Model):
('vip', 'VIP'),
('request', 'Request'),
('secretary', 'Secretary')])
- show_button_next = fields.Boolean(related='stage_id.show_button_next', store=True)
- show_button_previous = fields.Boolean(related='stage_id.show_button_previous', store=True)
- show_button_rejection = fields.Boolean(related='stage_id.final_rejection', store=True)
+ # show_button_next = fields.Boolean(related='stage_id.show_button_next', store=True)
+ # show_button_previous = fields.Boolean(related='stage_id.show_button_previous', store=True)
+ # show_button_rejection = fields.Boolean(related='stage_id.final_rejection', store=True)
+ # show_button_draft = fields.Boolean(related='stage_id.final_rejection_stage', store=True)
+
@api.model
def create(self, vals):
"""
@@ -83,111 +85,11 @@ class HelpdeskTicket(models.Model):
return res
- def _resolve_next_stage(self):
- """Return the best next stage according to the following order:
- 1) If `next_stage` is set and unique -> use it.
- 2) If there are multiple -> take the first one that intersects with the team's stages.
- 3) If not set -> use the first stage with a higher sequence than the current one within the team.
- """
- self.ensure_one()
- if self.stage_id.employee_created:
- if self.partner_id != self.env.user.partner_id:
- raise ValidationError(
- _("You cannot proceed to the next stage because you are not the employee linked to this ticket."))
- if self.stage_id.manager_approved:
- employee = self.env['hr.employee'].search([('user_partner_id', '=', self.partner_id.id)], limit=1)
- if not employee:
- raise ValidationError(_("Employee not found based on partner_id."))
- if employee.parent_id.user_id != self.env.user:
- raise ValidationError(_("Only the employee's manager can approve this stage."))
- if self.stage_id.needs_approval:
- if self.stage_id.is_group_approver:
- group_ext_id = self.env['ir.model.data'].search([
- ('model', '=', 'res.groups'),
- ('res_id', '=', self.stage_id.group_id.id)
- ], limit=1).complete_name
- if not self.env.user.has_group(group_ext_id):
- raise ValidationError(
- _("Only members of the '%s' group can approve this stage.") % self.stage_id.group_id.name)
- else:
- if self.stage_id.user_id != self.env.user:
- raise ValidationError(_("Only '%s' can approve this stage.") % self.stage_id.user_id.name)
- stages = self.team_id.stage_ids.sorted(key=lambda s: s.sequence)
- for st in stages:
- if st.sequence > self.stage_id.sequence:
- return st
- return False
- # --------------------------------------------------
- # Action Buttons
- # --------------------------------------------------
- def action_confirm(self):
- for ticket in self:
- next_stage = ticket._resolve_next_stage()
-
- if not next_stage:
- raise ValidationError(_("No next stage is configured for this ticket!"))
- ticket.stage_id = next_stage
-
- def action_rejection(self):
- self.ensure_one()
- rejection_stage = self.team_id.stage_ids.filtered(lambda s: s.final_rejection_stage)
- if rejection_stage:
- self.stage_id = rejection_stage[0]
- else:
- raise ValidationError(_("No final rejection stage is defined within the team's stages."))
-
- # --------------------------------------------------
- # Override write to mark is_submitted when closing
- # --------------------------------------------------
- def write(self, vals):
- if vals.get('stage_id'):
- new_stage = self.env['odex25_helpdesk.stage'].browse(vals['stage_id'])
- if new_stage.is_close:
- vals['is_submitted'] = True
- return super().write(vals)
-
- def _resolve_previous_stage(self):
- self.ensure_one()
- if self.stage_id.employee_created:
- if self.partner_id != self.env.user.partner_id:
- raise ValidationError(
- _("You cannot proceed to the Previous stage because you are not the employee linked to this ticket."))
- if self.stage_id.manager_approved:
- employee = self.env['hr.employee'].search([('user_partner_id', '=', self.partner_id.id)], limit=1)
-
- if not employee:
- raise ValidationError(_("Employee not found based on partner_id."))
-
- if employee.parent_id.user_id != self.env.user:
- raise ValidationError(_("Only the employee's manager can Previous this stage."))
- if self.stage_id.needs_approval:
- if self.stage_id.is_group_approver:
- group_ext_id = self.env['ir.model.data'].search([
- ('model', '=', 'res.groups'),
- ('res_id', '=', self.stage_id.group_id.id)
- ], limit=1).complete_name
-
- if not self.env.user.has_group(group_ext_id):
- raise ValidationError(
- _("Only members of the '%s' group can approve this stage.") % self.stage_id.group_id.name)
- else:
- if self.stage_id.user_id != self.env.user:
- raise ValidationError(_("Only '%s' can approve this stage.") % self.stage_id.user_id.name)
-
- stages = self.team_id.stage_ids.sorted(key=lambda s: s.sequence, reverse=True)
- for st in stages:
- if st.sequence < self.stage_id.sequence:
- return st
- return False
-
- def action_back(self):
- for ticket in self:
- prev_stage = ticket._resolve_previous_stage()
- if not prev_stage:
- raise ValidationError(_("No previous stage is configured for this ticket!"))
- ticket.stage_id = prev_stage
\ No newline at end of file
+class odex25_helpdeskStage(models.Model):
+ _inherit = 'odex25_helpdesk.stage'
+ pass
\ No newline at end of file
diff --git a/odex25_helpdesk/helpdesk_employee_request/security/employee_request_security.xml b/odex25_helpdesk/helpdesk_employee_request/security/employee_request_security.xml
index 05a028dad..11b58e6ce 100644
--- a/odex25_helpdesk/helpdesk_employee_request/security/employee_request_security.xml
+++ b/odex25_helpdesk/helpdesk_employee_request/security/employee_request_security.xml
@@ -15,6 +15,18 @@
+
+ Direct Manager Helpdesk
+
+
+
+
+ Helpdesk Tickets: Direct Manager Only
+
+ [('employee_id', '=', user.id)]
+
+
+
Secretary
diff --git a/odex25_helpdesk/helpdesk_employee_request/security/ir.model.access.csv b/odex25_helpdesk/helpdesk_employee_request/security/ir.model.access.csv
index 9f32f51a6..a0bd31702 100644
--- a/odex25_helpdesk/helpdesk_employee_request/security/ir.model.access.csv
+++ b/odex25_helpdesk/helpdesk_employee_request/security/ir.model.access.csv
@@ -36,4 +36,7 @@ access_analytic_account_heldpdesk_user_secretary_employee,analytic.account.helpd
access_analytic_line_heldpdesk_user_secretary_employee,analytic.line.helpdesk.user.vip_employee,analytic.model_account_analytic_line,helpdesk_employee_request.group_helpdesk_Secretary,1,1,1,1
employee_access_sla_status_secretary,model_odex25_helpdesk_sla_status.secretary,odex25_helpdesk.model_odex25_helpdesk_sla_status,helpdesk_employee_request.group_helpdesk_Secretary,1,1,1,1
employee_access_secretary_service_category,secretary.service.category,odex25_helpdesk.model_service_category,helpdesk_employee_request.group_helpdesk_Secretary,1,0,0,0
-employee_access_secretary_helpdesk_service,secretary.helpdesk.service,odex25_helpdesk.model_helpdesk_service,helpdesk_employee_request.group_helpdesk_Secretary,1,0,0,0
\ No newline at end of file
+employee_access_secretary_helpdesk_service,secretary.helpdesk.service,odex25_helpdesk.model_helpdesk_service,helpdesk_employee_request.group_helpdesk_Secretary,1,0,0,0
+access_helpdesk_ticket_direct_manager,helpdesk.ticket.direct.manager,odex25_helpdesk.model_odex25_helpdesk_ticket,helpdesk_employee_request.group_odex25_helpdesk_direct_manager,1,1,1,0
+access_helpdesk_stage_direct_manager,helpdesk.stage.direct.manager,odex25_helpdesk.model_odex25_helpdesk_stage,helpdesk_employee_request.group_odex25_helpdesk_direct_manager,1,1,0,0
+
diff --git a/odex25_helpdesk/helpdesk_employee_request/views/help_request_view.xml b/odex25_helpdesk/helpdesk_employee_request/views/help_request_view.xml
index ad231a6c3..6fb0a4ce7 100644
--- a/odex25_helpdesk/helpdesk_employee_request/views/help_request_view.xml
+++ b/odex25_helpdesk/helpdesk_employee_request/views/help_request_view.xml
@@ -61,6 +61,7 @@
+
@@ -96,6 +97,7 @@
+
@@ -104,6 +106,12 @@
+
+
@@ -113,7 +121,7 @@
-
+
@@ -210,11 +218,21 @@
+
+ Employee Requests (My Staff)
+ odex25_helpdesk.ticket
+ tree,form
+ [('ticket_service_type','=','request')]
+
+
+ groups="helpdesk_employee_request.group_helpdesk_employee,helpdesk_employee_request.group_helpdesk_vip_employee,helpdesk_employee_request.group_helpdesk_Secretary,helpdesk_employee_request.group_odex25_helpdesk_direct_manager"/>
+ groups="helpdesk_employee_request.group_helpdesk_employee,helpdesk_employee_request.group_helpdesk_Secretary,helpdesk_employee_request.group_odex25_helpdesk_direct_manager"/>
+
diff --git a/odex25_helpdesk/odex25_helpdesk/i18n/ar.po b/odex25_helpdesk/odex25_helpdesk/i18n/ar.po
index c039f08f2..57be87f00 100644
--- a/odex25_helpdesk/odex25_helpdesk/i18n/ar.po
+++ b/odex25_helpdesk/odex25_helpdesk/i18n/ar.po
@@ -3556,7 +3556,7 @@ msgstr "فقط أعضاء مجموعة '%s' يمكنهم اعتماد هذه ا
#. module: odex25_helpdesk
#: code:addons/odex25_helpdesk/models/odex25_helpdesk_ticket.py:0
-msgid "Only the employee's manager can approve this stage."
+msgid "Only the employee's manager can proceed with this stage."
msgstr "فقط مدير الموظف يمكنه اعتماد هذه المرحلة."
#. module: odex25_helpdesk
diff --git a/odex25_helpdesk/odex25_helpdesk/models/odex25_helpdesk.py b/odex25_helpdesk/odex25_helpdesk/models/odex25_helpdesk.py
index 7a949c52b..b5549fa94 100644
--- a/odex25_helpdesk/odex25_helpdesk/models/odex25_helpdesk.py
+++ b/odex25_helpdesk/odex25_helpdesk/models/odex25_helpdesk.py
@@ -467,6 +467,9 @@ class odex25_helpdeskStage(models.Model):
user_id = fields.Many2one('res.users', string="Approver User")
group_id = fields.Many2one('res.groups', string="Approver Group")
+ next_stage = fields.Many2one('odex25_helpdesk.stage', string="Next Stage")
+ previous_stage = fields.Many2one('odex25_helpdesk.stage', string="Previous Stage")
+
show_button_next = fields.Boolean(string="Show Next Stage Button")
show_button_previous = fields.Boolean(string="Show Previous Stage Button")
diff --git a/odex25_helpdesk/odex25_helpdesk/models/odex25_helpdesk_ticket.py b/odex25_helpdesk/odex25_helpdesk/models/odex25_helpdesk_ticket.py
index d4762536f..e195d4ac7 100644
--- a/odex25_helpdesk/odex25_helpdesk/models/odex25_helpdesk_ticket.py
+++ b/odex25_helpdesk/odex25_helpdesk/models/odex25_helpdesk_ticket.py
@@ -322,6 +322,17 @@ class odex25_helpdeskTicket(models.Model):
show_button_next = fields.Boolean(related='stage_id.show_button_next', store=True)
show_button_previous = fields.Boolean(related='stage_id.show_button_previous', store=True)
show_button_rejection = fields.Boolean(related='stage_id.final_rejection', store=True)
+ manager_id = fields.Many2one('res.users', string='Employee', readonly=True)
+ show_button_draft = fields.Boolean(related='stage_id.final_rejection_stage', store=True)
+
+
+ @api.onchange('partner_id')
+ def _onchange_partner_id_set_employee(self):
+ if self.partner_id:
+ employee = self.env['hr.employee'].search([
+ ('user_partner_id', '=', self.partner_id.id)
+ ], limit=1)
+ self.manager_id = employee.sudo().parent_id.sudo().user_id.id if employee else False
@api.onchange('service_id')
def _onchange_invoice_date(self):
@@ -333,8 +344,8 @@ class odex25_helpdeskTicket(models.Model):
"""
get the partner of the user
"""
- user = self.env['res.users'].search([('partner_id', '=', self.partner_id.id)], limit=1)
- employee_id = self.env['hr.employee'].search([('user_id', '=', user.id)], limit=1)
+ user = self.env['res.users'].sudo().search([('partner_id', '=', self.partner_id.id)], limit=1)
+ employee_id = self.env['hr.employee'].sudo().search([('user_id', '=', user.id)], limit=1)
self.department_id = employee_id.department_id
def activity_update(self):
@@ -545,6 +556,7 @@ class odex25_helpdeskTicket(models.Model):
@api.model_create_multi
def create(self, list_value):
+
now = fields.Datetime.now()
# determine user_id and stage_id if not given. Done in batch.
teams = self.env['odex25_helpdesk.team'].browse([vals['team_id'] for vals in list_value if vals.get('team_id')])
@@ -573,6 +585,11 @@ class odex25_helpdeskTicket(models.Model):
'name': partner_name,
'email': partner_email,
}).id
+ if vals.get('partner_id') and not vals.get('employee_id'):
+ employee = self.env['hr.employee'].sudo().search([
+ ('user_partner_id', '=', vals['partner_id'])
+ ], limit=1)
+ vals['manager_id'] = employee.sudo().parent_id.sudo().user_id.id if employee else False
# determine partner email for ticket with partner but no email given
partners = self.env['res.partner'].browse([vals['partner_id'] for vals in list_value if
@@ -620,7 +637,6 @@ class odex25_helpdeskTicket(models.Model):
# apply SLA
tickets.sudo()._sla_apply()
-
return tickets
def write(self, vals):
@@ -974,67 +990,106 @@ class odex25_helpdeskTicket(models.Model):
return 'team_id'
- def _resolve_next_stage(self):
- """Return the best next stage according to the following order:
- 1) If `next_stage` is set and unique -> use it.
- 2) If there are multiple -> take the first one that intersects with the team's stages.
- 3) If not set -> use the first stage with a higher sequence than the current one within the team.
- """
- self.ensure_one()
+
+
+ # --------------------------------------------------
+ # Validation Methods
+ # --------------------------------------------------
+
+ def _check_employee_restriction(self):
if self.stage_id.employee_created:
if self.partner_id != self.env.user.partner_id:
raise ValidationError(
- _("You cannot proceed to the next stage because you are not the employee linked to this ticket."))
- if self.stage_id.manager_approved:
- employee = self.env['hr.employee'].search([('user_partner_id', '=', self.partner_id.id)], limit=1)
+ _("You cannot proceed because you are not the employee linked to this ticket."))
+ def _check_manager_approval(self):
+ if self.stage_id.manager_approved:
+ employee = self.env['hr.employee'].sudo().search([
+ ('user_partner_id', '=', self.partner_id.id)], limit=1)
if not employee:
raise ValidationError(_("Employee not found based on partner_id."))
+ if employee.sudo().parent_id.sudo().user_id != self.env.user:
+ raise ValidationError(_("Only the employee's manager can proceed with this stage."))
- if employee.parent_id.user_id != self.env.user:
- raise ValidationError(_("Only the employee's manager can approve this stage."))
+ def _check_custom_approval(self):
if self.stage_id.needs_approval:
if self.stage_id.is_group_approver:
- group_ext_id = self.env['ir.model.data'].search([
+ group_ext_id = self.env['ir.model.data'].sudo().search([
('model', '=', 'res.groups'),
('res_id', '=', self.stage_id.group_id.id)
], limit=1).complete_name
-
if not self.env.user.has_group(group_ext_id):
raise ValidationError(
_("Only members of the '%s' group can approve this stage.") % self.stage_id.group_id.name)
-
else:
if self.stage_id.user_id != self.env.user:
- raise ValidationError(_("Only '%s' can approve this stage.") % self.stage_id.user_id.name)
- stages = self.team_id.stage_ids.sorted(key=lambda s: s.sequence)
+ raise ValidationError(
+ _("Only '%s' can approve this stage.") % self.stage_id.user_id.name)
+
+ def _validate_stage_transition(self):
+ self.ensure_one()
+ self._check_employee_restriction()
+ self._check_manager_approval()
+ self._check_custom_approval()
+
+ # --------------------------------------------------
+ # Stage Resolution
+ # --------------------------------------------------
+
+ def _resolve_stage(self, forward=True):
+ self._validate_stage_transition()
+
+ if forward and self.stage_id.next_stage:
+ return self.stage_id.next_stage
+ if not forward and self.stage_id.previous_stage:
+ return self.stage_id.previous_stage
+
+ stages = self.team_id.stage_ids.sorted(
+ key=lambda s: s.sequence, reverse=not forward)
+
for st in stages:
- if st.sequence > self.stage_id.sequence:
+ if (forward and st.sequence > self.stage_id.sequence) or \
+ (not forward and st.sequence < self.stage_id.sequence):
return st
return False
+
# --------------------------------------------------
# Action Buttons
# --------------------------------------------------
+
def action_confirm(self):
for ticket in self:
- next_stage = ticket._resolve_next_stage()
-
+ next_stage = ticket._resolve_stage(forward=True)
if not next_stage:
raise ValidationError(_("No next stage is configured for this ticket!"))
ticket.stage_id = next_stage
+ def action_back(self):
+ for ticket in self:
+ prev_stage = ticket._resolve_stage(forward=False)
+ if not prev_stage:
+ raise ValidationError(_("No previous stage is configured for this ticket!"))
+ ticket.stage_id = prev_stage
+
def action_rejection(self):
self.ensure_one()
- rejection_stage = self.team_id.stage_ids.filtered(lambda s: s.final_rejection_stage)
- if rejection_stage:
- self.stage_id = rejection_stage[0]
- else:
+ rejection_stage = self.team_id.stage_ids.filtered(
+ lambda s: s.final_rejection_stage)
+ if not rejection_stage:
raise ValidationError(_("No final rejection stage is defined within the team's stages."))
+ self.stage_id = rejection_stage[0]
+
+ def action_to_draft(self):
+ self.ensure_one()
+ self._check_custom_approval()
+ draft_stage = self.env['odex25_helpdesk.stage'].search(
+ [], order='sequence asc', limit=1)
+ if draft_stage:
+ self.stage_id = draft_stage.id
+ else:
+ raise ValidationError(_("No draft stage found."))
- # --------------------------------------------------
- # Override write to mark is_submitted when closing
- # --------------------------------------------------
def write(self, vals):
if vals.get('stage_id'):
new_stage = self.env['odex25_helpdesk.stage'].browse(vals['stage_id'])
@@ -1042,43 +1097,120 @@ class odex25_helpdeskTicket(models.Model):
vals['is_submitted'] = True
return super().write(vals)
- def _resolve_previous_stage(self):
- self.ensure_one()
- if self.stage_id.employee_created:
- if self.partner_id != self.env.user.partner_id:
- raise ValidationError(
- _("You cannot proceed to the Previous stage because you are not the employee linked to this ticket."))
- if self.stage_id.manager_approved:
- employee = self.env['hr.employee'].search([('user_partner_id', '=', self.partner_id.id)], limit=1)
- if not employee:
- raise ValidationError(_("Employee not found based on partner_id."))
- if employee.parent_id.user_id != self.env.user:
- raise ValidationError(_("Only the employee's manager can Previous this stage."))
- if self.stage_id.needs_approval:
- if self.stage_id.is_group_approver:
- group_ext_id = self.env['ir.model.data'].search([
- ('model', '=', 'res.groups'),
- ('res_id', '=', self.stage_id.group_id.id)
- ], limit=1).complete_name
- if not self.env.user.has_group(group_ext_id):
- raise ValidationError(
- _("Only members of the '%s' group can approve this stage.") % self.stage_id.group_id.name)
- else:
- if self.stage_id.user_id != self.env.user:
- raise ValidationError(_("Only '%s' can approve this stage.") % self.stage_id.user_id.name)
- stages = self.team_id.stage_ids.sorted(key=lambda s: s.sequence, reverse=True)
- for st in stages:
- if st.sequence < self.stage_id.sequence:
- return st
- return False
- def action_back(self):
- for ticket in self:
- prev_stage = ticket._resolve_previous_stage()
- if not prev_stage:
- raise ValidationError(_("No previous stage is configured for this ticket!"))
- ticket.stage_id = prev_stage
\ No newline at end of file
+ # def _resolve_next_stage(self):
+ # """Return the best next stage according to the following order:
+ # 1) If `next_stage` is set and unique -> use it.
+ # 2) If there are multiple -> take the first one that intersects with the team's stages.
+ # 3) If not set -> use the first stage with a higher sequence than the current one within the team.
+ # """
+ #
+ # self.ensure_one()
+ # if self.stage_id.employee_created:
+ # if self.partner_id != self.env.user.partner_id:
+ # raise ValidationError(
+ # _("You cannot proceed to the next stage because you are not the employee linked to this ticket."))
+ # if self.stage_id.manager_approved:
+ # employee = self.env['hr.employee'].search([('user_partner_id', '=', self.partner_id.id)], limit=1)
+ #
+ # if not employee:
+ # raise ValidationError(_("Employee not found based on partner_id."))
+ #
+ # if employee.parent_id.user_id != self.env.user:
+ # raise ValidationError(_("Only the employee's manager can approve this stage."))
+ # if self.stage_id.needs_approval:
+ # if self.stage_id.is_group_approver:
+ # group_ext_id = self.env['ir.model.data'].search([
+ # ('model', '=', 'res.groups'),
+ # ('res_id', '=', self.stage_id.group_id.id)
+ # ], limit=1).complete_name
+ #
+ # if not self.env.user.has_group(group_ext_id):
+ # raise ValidationError(
+ # _("Only members of the '%s' group can approve this stage.") % self.stage_id.group_id.name)
+ #
+ # else:
+ # if self.stage_id.user_id != self.env.user:
+ # raise ValidationError(_("Only '%s' can approve this stage.") % self.stage_id.user_id.name)
+ # if self.stage_id.next_stage:
+ # return self.stage_id.next_stage
+ #
+ # stages = self.team_id.stage_ids.sorted(key=lambda s: s.sequence)
+ # for st in stages:
+ # if st.sequence > self.stage_id.sequence:
+ # return st
+ # return False
+ # # --------------------------------------------------
+ # # Action Buttons
+ # # --------------------------------------------------
+ # def action_confirm(self):
+ # for ticket in self:
+ # next_stage = ticket._resolve_next_stage()
+ #
+ # if not next_stage:
+ # raise ValidationError(_("No next stage is configured for this ticket!"))
+ # ticket.stage_id = next_stage
+ #
+ # def action_rejection(self):
+ # self.ensure_one()
+ # rejection_stage = self.team_id.stage_ids.filtered(lambda s: s.final_rejection_stage)
+ # if rejection_stage:
+ # self.stage_id = rejection_stage[0]
+ # else:
+ # raise ValidationError(_("No final rejection stage is defined within the team's stages."))
+ #
+ # # --------------------------------------------------
+ # # Override write to mark is_submitted when closing
+ # # --------------------------------------------------
+ # def write(self, vals):
+ # if vals.get('stage_id'):
+ # new_stage = self.env['odex25_helpdesk.stage'].browse(vals['stage_id'])
+ # if new_stage.is_close:
+ # vals['is_submitted'] = True
+ # return super().write(vals)
+ #
+ # def _resolve_previous_stage(self):
+ # self.ensure_one()
+ # if self.stage_id.employee_created:
+ # if self.partner_id != self.env.user.partner_id:
+ # raise ValidationError(
+ # _("You cannot proceed to the Previous stage because you are not the employee linked to this ticket."))
+ # if self.stage_id.manager_approved:
+ # employee = self.env['hr.employee'].search([('user_partner_id', '=', self.partner_id.id)], limit=1)
+ #
+ # if not employee:
+ # raise ValidationError(_("Employee not found based on partner_id."))
+ #
+ # if employee.parent_id.user_id != self.env.user:
+ # raise ValidationError(_("Only the employee's manager can Previous this stage."))
+ # if self.stage_id.needs_approval:
+ # if self.stage_id.is_group_approver:
+ # group_ext_id = self.env['ir.model.data'].search([
+ # ('model', '=', 'res.groups'),
+ # ('res_id', '=', self.stage_id.group_id.id)
+ # ], limit=1).complete_name
+ #
+ # if not self.env.user.has_group(group_ext_id):
+ # raise ValidationError(
+ # _("Only members of the '%s' group can approve this stage.") % self.stage_id.group_id.name)
+ # else:
+ # if self.stage_id.user_id != self.env.user:
+ # raise ValidationError(_("Only '%s' can approve this stage.") % self.stage_id.user_id.name)
+ # if self.stage_id.previous_stage:
+ # return self.stage_id.previous_stage
+ # stages = self.team_id.stage_ids.sorted(key=lambda s: s.sequence, reverse=True)
+ # for st in stages:
+ # if st.sequence < self.stage_id.sequence:
+ # return st
+ # return False
+ #
+ # def action_back(self):
+ # for ticket in self:
+ # prev_stage = ticket._resolve_previous_stage()
+ # if not prev_stage:
+ # raise ValidationError(_("No previous stage is configured for this ticket!"))
+ # ticket.stage_id = prev_stage
\ No newline at end of file
diff --git a/odex25_helpdesk/odex25_helpdesk/views/odex25_helpdesk_views.xml b/odex25_helpdesk/odex25_helpdesk/views/odex25_helpdesk_views.xml
index 2da058900..f25c24a48 100644
--- a/odex25_helpdesk/odex25_helpdesk/views/odex25_helpdesk_views.xml
+++ b/odex25_helpdesk/odex25_helpdesk/views/odex25_helpdesk_views.xml
@@ -127,6 +127,8 @@
+
+
@@ -591,6 +593,8 @@
attrs="{'invisible': [('show_button_rejection', '=', False)]}" />
+
+
diff --git a/odex25_helpdesk/odex25_helpdesk_security/models/odex25_helpdesk_ticket.py b/odex25_helpdesk/odex25_helpdesk_security/models/odex25_helpdesk_ticket.py
index 8759db247..ee92b8998 100644
--- a/odex25_helpdesk/odex25_helpdesk_security/models/odex25_helpdesk_ticket.py
+++ b/odex25_helpdesk/odex25_helpdesk_security/models/odex25_helpdesk_ticket.py
@@ -26,8 +26,8 @@ class HelpdeskTicket(models.Model):
team = self.env['odex25_helpdesk.team'].search([('id','=',vals['team_id'])])
members = [member.id for member in team.member_ids]
members.append(team.team_leader_id.id)
- if self.env.user.id not in members:
- raise ValidationError(_("You're not allowed to create ticket in this team, please select a team that you are a member in."))
+ # if self.env.user.id not in members:
+ # raise ValidationError(_("You're not allowed to create ticket in this team, please select a team that you are a member in."))
res = super(HelpdeskTicket,self).create(vals)
return res