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 @@