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
Descartar
1 Respuesta
2
Avatar
Cramosh
Mejor respuesta

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
Descartar

Su respuesta

Intente dar una respuesta sustancial. Si desea hacer un comentario sobre la pregunta o la respuesta, utilice la herramienta de comentarios. Recuerde que siempre puede revisar sus respuestas , no es necesario responder dos veces a la misma pregunta. No olvide votar , ayuda a seleccionar las mejores preguntas y respuestas