mirror of
https://github.com/bringout/oca-ocb-project.git
synced 2026-04-20 03:41:59 +02:00
75 lines
3.3 KiB
Python
75 lines
3.3 KiB
Python
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)])
|