bemade-addons/helpdesk_sale_order/models/helpdesk_ticket.py

94 lines
3 KiB
Python

# -*- coding: utf-8 -*-
from odoo import models, fields, api, _, Command
from odoo.exceptions import UserError
class HelpdeskTicket(models.Model):
_inherit = "helpdesk.ticket"
sale_order_ids = fields.One2many(
"sale.order",
"helpdesk_ticket_id",
string="Sale Orders",
help="Sale orders associated to this ticket.",
copy=False,
)
sale_order_count = fields.Integer(compute="_compute_sale_order_count")
team_use_sale_orders = fields.Boolean(related="team_id.use_sale_orders", string="Team Uses Sales Orders", readonly=True)
@api.depends("sale_order_ids")
def _compute_sale_order_count(self):
self.sale_order_count = len(self.sale_order_ids)
def action_view_sale_order(self):
self.ensure_one()
action = {
"type": "ir.actions.act_window",
"res_model": "sale.order",
"context": {"create": False},
"name": _("Sale Orders"),
"view_mode": "list,form",
}
if self.sale_order_count == 1:
action.update({
"res_id": self.sale_order_ids[0].id,
"view_mode": "form",
})
else:
action.update({
"domain": [("id", "in", self.sale_order_ids.ids)],
})
return action
def action_convert_to_sale_order(self):
self.ensure_one()
if not self.team_use_sale_orders:
raise UserError(_("Creating quotes from tickets is not enabled for this helpdesk team."))
so_values = self._generate_so_values()
so = self.env["sale.order"].create([so_values])
self.message_change_thread(so)
attachments = self.env["ir.attachment"].search(
[("res_model", "=", "helpdesk.ticket"), ("res_id", "=", self.id)]
)
attachments.sudo().write({"res_model": "sale.order", "res_id": so.id})
activities = self.activity_ids
activities.sudo().write(
{
"res_model_id": self.env.ref("sale.model_sale_order").id,
"res_id": so.id,
"res_model": "sale.order",
}
)
# Archive the ticket
self.action_archive()
# Retourner une action directe vers le devis créé
return {
"type": "ir.actions.act_window",
"res_model": "sale.order",
"res_id": so.id,
"view_mode": "form",
"context": {"create": False},
}
def _generate_so_values(self):
team = self.user_id.sale_team_id if self.user_id else self.env.user.sale_team_id
if not team:
raise UserError(
_(
"Creating sale orders is reserved to sales users. Assign the user to sale team first."
)
)
team_id = team.id
return {
"partner_id": self.partner_id.id,
"helpdesk_ticket_id": self.id,
"company_id": self.company_id.id,
"team_id": team_id,
}