forked from Mapan/odoo17e
66 lines
2.9 KiB
Python
66 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import Command, fields, models, _
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
ticket_count = fields.Integer(string='Ticket Count', compute='_compute_ticket_count')
|
|
|
|
def _compute_ticket_count(self):
|
|
if not self.env.user.has_group('helpdesk.group_helpdesk_user'):
|
|
self.ticket_count = 0
|
|
return
|
|
|
|
ticket_data = self.env['helpdesk.ticket']._read_group([
|
|
'|', ('sale_order_id', 'in', self.ids),
|
|
('sale_line_id', 'in', self.order_line.ids),
|
|
('use_helpdesk_sale_timesheet', '=', True)
|
|
], ['sale_order_id'], ['__count'])
|
|
mapped_data = {sale_order.id: count for sale_order, count in ticket_data}
|
|
for so in self:
|
|
so.ticket_count = mapped_data.get(so.id, 0)
|
|
|
|
def _action_confirm(self):
|
|
res = super()._action_confirm()
|
|
for sla in self.order_line.product_template_id.sla_id:
|
|
order_lines = self.order_line.filtered(lambda x: x.product_template_id.sla_id == sla)
|
|
sla.write({
|
|
'sale_line_ids': [Command.link(l.id) for l in order_lines],
|
|
})
|
|
return res
|
|
|
|
def action_view_tickets(self):
|
|
self.ensure_one()
|
|
sorted_line = self.order_line.sorted('sequence')
|
|
default_sale_line = next((sol for sol in sorted_line if sol.product_id.detailed_type == 'service'), self.env['sale.order.line'])
|
|
if self.ticket_count > 1:
|
|
action = self.env["ir.actions.actions"]._for_xml_id('helpdesk.helpdesk_ticket_action_main_tree')
|
|
action.update({
|
|
'domain': ['|', ('sale_order_id', '=', self.id), ('sale_line_id', 'in', self.order_line.ids)],
|
|
'context': self._get_ticket_action_context(default_sale_line),
|
|
})
|
|
return action
|
|
else:
|
|
ticket = self.env['helpdesk.ticket']._search(['|', ('sale_order_id', '=', self.id), ('sale_line_id', 'in', self.order_line.ids)], limit=1)
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': _('Ticket'),
|
|
'res_model': 'helpdesk.ticket',
|
|
'views': [(self.env.ref('helpdesk_sale_timesheet.helpdesk_ticket_view_form_inherit_helpdesk_sale_timesheet').id, 'form')],
|
|
'res_id': list(ticket)[0],
|
|
'context': self._get_ticket_action_context(default_sale_line),
|
|
}
|
|
|
|
def _get_ticket_action_context(self, default_line):
|
|
helpdesk_team = self.env['helpdesk.team'].search([('use_helpdesk_sale_timesheet', '=', True)], order='sequence', limit=1)
|
|
return {
|
|
**self.env.context,
|
|
'default_sale_line_id': default_line.id,
|
|
'default_partner_id': self.partner_id.id,
|
|
'default_sale_order_id': self.id,
|
|
'default_team_id': helpdesk_team.id,
|
|
'default_company_id': self.company_id.id,
|
|
}
|