19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:56 +01:00
parent a2f74aefd8
commit 4a4d12c333
844 changed files with 212348 additions and 270090 deletions

View file

@ -0,0 +1,75 @@
from odoo import Command, api, fields, models
class ProjectTemplateCreateWizard(models.TransientModel):
_name = 'project.template.create.wizard'
_description = 'Project Template create Wizard'
def _default_role_to_users_ids(self):
res = []
template = self.env['project.project'].browse(self.env.context.get('template_id'))
if template:
res = [Command.create({'role_id': role.id}) for role in template.task_ids.role_ids]
return res
name = fields.Char(string="Name", required=True)
date_start = fields.Date(string="Start Date")
date = fields.Date(string='Expiration Date')
alias_name = fields.Char(string="Alias Name")
alias_domain_id = fields.Many2one("mail.alias.domain", string="Alias Domain")
template_id = fields.Many2one("project.project", default=lambda self: self.env.context.get('template_id'))
template_has_dates = fields.Boolean(compute="_compute_template_has_dates")
role_to_users_ids = fields.One2many('project.template.role.to.users.map', 'wizard_id', default=_default_role_to_users_ids)
@api.depends("template_id")
def _compute_template_has_dates(self):
for wizard in self:
wizard.template_has_dates = wizard.template_id.date_start and wizard.template_id.date
def _get_template_whitelist_fields(self):
"""
Whitelist of fields of this wizard that will be used when creating a project from a template.
"""
return ["name", "date_start", "date", "alias_name", "alias_domain_id"]
def _create_project_from_template(self):
# Dictionary with all whitelist fields and their values
field_values = self._convert_to_write(
{
fname: self[fname]
for fname in self._fields.keys() & self._get_template_whitelist_fields()
}
)
return self.template_id.action_create_from_template(values=field_values, role_to_users_mapping=self.role_to_users_ids)
def create_project_from_template(self):
# Opening project task views after creation of project from template
return self._create_project_from_template().action_view_tasks()
@api.model
def action_open_template_view(self):
view = self.env.ref('project.project_project_view_form_simplified_template', raise_if_not_found=False)
if not view:
return {}
return {
'name': self.env._('Create a Project from Template %s', self.env.context.get('template_name')),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'views': [(view.id, 'form')],
'res_model': 'project.template.create.wizard',
'target': 'new',
'context': {
key: value
for key, value in self.env.context.items()
if not key.startswith('default_')
},
}
class ProjectTemplateRoleToUsersMap(models.TransientModel):
_name = 'project.template.role.to.users.map'
_description = 'Project role to users mapping'
wizard_id = fields.Many2one('project.template.create.wizard', export_string_translation=False)
role_id = fields.Many2one('project.role', string='Project Role', required=True)
user_ids = fields.Many2many('res.users', string='Assignees', domain=[('share', '=', False), ('active', '=', True)])