oca-ocb-sale/odoo-bringout-oca-ocb-sale_project/sale_project/wizard/project_template_create_wizard.py
Ernad Husremovic 73afc09215 19.0 vanilla
2026-03-09 09:32:12 +01:00

67 lines
2.7 KiB
Python

from odoo import api, Command, fields, models
class ProjectTemplateCreateWizard(models.TransientModel):
_inherit = 'project.template.create.wizard'
partner_id = fields.Many2one("res.partner")
allow_billable = fields.Boolean(related="template_id.allow_billable")
role_to_users_ids = fields.One2many(compute="_compute_role_to_users_ids", readonly=False, store=True)
@api.depends("template_id")
def _compute_role_to_users_ids(self):
for wizard in self:
wizard.role_to_users_ids = (
[Command.clear()] +
[
Command.create({
'role_id': role.id,
'user_ids': [Command.clear()],
})
for role in wizard.template_id.task_ids.role_ids
]
if wizard.template_id else [Command.clear()]
)
def _get_template_whitelist_fields(self):
res = super()._get_template_whitelist_fields()
if self.allow_billable:
res.append("partner_id")
return res
@api.model
def action_open_template_view(self):
action = super().action_open_template_view()
if self.env.context.get("from_sale_order_action"):
context = dict(action.get("context", {}))
context.update({
"default_partner_id": self.env.context.get("default_partner_id"),
"default_reinvoiced_sale_order_id": self.env.context.get("default_reinvoiced_sale_order_id"),
"default_sale_line_id": self.env.context.get("default_sale_line_id"),
})
action["context"] = context
return action
def action_create_project_from_so(self):
"""Create a project either from template or directly if no template is set."""
self.ensure_one()
if self.template_id:
project = self._create_project_from_template()
else:
sale_order = self.env['sale.order'].browse(self.env.context.get("default_sale_order_id"))
so_line = sale_order.order_line[:1]
product = so_line.product_id
values = {
'partner_id': sale_order.partner_id.id,
'company_id': sale_order.company_id.id,
}
if len(sale_order.order_line) == 1:
values['name'] = (
f"{sale_order.name} - [{product.default_code}] {product.name}"
if product.default_code
else f"{sale_order.name} - {product.name}"
)
else:
values['name'] = sale_order.name
project = self.env['project.project'].create(values)
return project.action_view_tasks()