General

¡Bienvenido a los foros Aeodoo!

Somos la comunidad de Odoo internacional hispanohablante.
Estos foros son para compartir y debatir dudas técnicas, funcionales y mejores prácticas para Odoo. Recuerda que no están permitidos los insultos, descalificaciones o spam, cualquier conducta reprobable supondrá el baneo del usuario.

0

Onchange en un Campo Related

Avatar
Inma Sánchez

Buenas!!

Estoy intentando que cuando un campo related, con otro modelo, cambie se desencadene un onchange. Es decir, tengo un campo boolean en un modelo y en otro modelo un campo related con ese. Necesito que cuando cambie el campo del primer modelo (y por lo tanto el del segundo) se desencadene un onchange.

Os paso código:

Primer modelo:

class HelpdeskTicketTeam(models.Model):
_inherit = 'helpdesk.ticket.team'

allow_timesheet = fields.Boolean(
string="Allow Timesheet",
)
allow_default_project = fields.Boolean(
string="Allow Default Project",
)

set_default_project = fields.Many2one(
comodel_name='project.project',
string='Default Project',
)

@api.constrains('allow_default_project')
def _constrains_allow_default_project(self):
if self.allow_default_project == False:
self.set_default_project = False

Segundo Modelo:

class TicketTimesheet(models.Model):
_inherit = 'helpdesk.ticket'

partner_phone = fields.Char(
string='Contact Phone',
related='partner_id.mobile',
store=True,
readonly=False,
)

project_id = fields.Many2one(
comodel_name='project.project',
string='Project',
)
task_id = fields.Many2one(
comodel_name='project.task',
string='Task',
)

timesheet_ids = fields.One2many(
comodel_name='account.analytic.line',
inverse_name='ticket_id',
string='Timesheet',
)

total_hours = fields.Float(
compute='impute_hours',
)

##### Helpdesk Ticket Team #####
allow_timesheet = fields.Boolean(
string="Allow Timesheet",
related='team_id.allow_timesheet',
)
allow_default_project = fields.Boolean(
string="Allow Default Project",
related='team_id.allow_default_project',
)
default_project_id = fields.Many2one(
comodel_name='project.project',
string='Default Project',
related='team_id.set_default_project'
)

@api.depends('timesheet_ids.unit_amount')
def impute_hours(self):
for record in self:
record.total_hours = sum(record.timesheet_ids.mapped('unit_amount'))

@api.constrains('project_id')
def _constrains_project(self):
self.task_id = False
for record in self:
record.timesheet_ids.update({'project_id': record.project_id.id})
record.timesheet_ids.update({'task_id': False})

@api.constrains('task_id')
def _constrains_project(self):
for record in self:
record.timesheet_ids.update({'task_id': record.task_id.id})

@api.onchange('allow_default_project')
def _onchange_default_project(self):
if allow_default_project == True:
for record in self:
record.update =({'project_id': record.default_project_id.id})
Nota: En el segundo modelo es donde he estado haciendo prruebas, así que supongo que la parte
del default_project_id no es necesaria

Avatar
Discard
1 Answer
2
Avatar
Cramosh
Best Answer

Los campos related, no lanzan los onchange en el modelo al que está relacionado. 

Para lo que tu quieres lo mejor sería que en el ticket hagas un onchange para cargar el proyecto del equipo si lo tuviera en la ficha de equipo.

Avatar
Discard

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!