In my model i've a compute field that give the ID of the active contract of this user :
id_ultimo_contratto = fields.Integer(compute="_compute_last_contratto", store=True)
this is the function that i use to calculate the id (and it's correct i've the right value) :
@api.multi
@api.depends()
def _compute_last_contratto(self):
id_utenza=self.id
contratto_attivo = ''
for AttivitaSvoltaEE in self.env['utilitypower.attivitasvolta_ee'].search([('id_utenza_ee','=',id_utenza)]):
id_attivita = AttivitaSvoltaEE.id
for Contratto in self.env['utilitypower.contratti_ee'].search([('attivitasvolte_ids','=',id_attivita)]):
if Contratto.stato==1:
#find it :
id_contratto_attivo = Contratto.id
id_ultima_attivita = id_attivita
contratto_attivo=Contratto.nome_contratto
for UtenzeEE in self:
UtenzeEE.last_contratto = contratto_attivo
UtenzeEE.id_ultimo_contratto = id_contratto_attivo
UtenzeEE.id_ultima_attivita = id_ultima_attivita
I use this id in a smart-button and i want to open the view of the contract with an action linked at the smart-button :
<button class="oe_stat_button"
icon = "fa-file-text-o"
type = "action"
name="action_view_contrattoattivo_ee"
options="{}">
<span><field name="id_ultimo_contratto"/></span>
</button>
The problem is that i can't understand how to pass the id_ultimocontratto field_value in the domain/context of the action:
<act_window id="action_view_contrattoattivo_ee"
name="Contratto Attivo"
res_model="utilitypower.contratti_ee"
view_type="tree,form"
view_mode="tree"
domain="[]"
/>
How do I pass the calculated field into the domain? and how i can refer to the id (odoo) of the final model?
You can use the below button code
<button class="oe_stat_button"
icon = "fa-file-text-o"
type = "object"
name="action_view_contrattoattivo_ee"
options="{}">
<span><field name="id_ultimo_contratto"/></span>
in the py file write below code
@api.multi
def action_view_contrattoattivo_ee(self):
action = self.env.ref('module_name.action_view_contrattoattivo_ee')
result = action.read()[0]
result['domain'] = domain
return result
module_name: It should be the module in which you have written the action. domain: domain you want to specify.
You can give the integer field non store as below:
id_ultimo_contratto = fields.Integer(compute="_compute_last_contratto")
@api.multi
def _compute_last_contratto(self):
id_utenza=self.id
contratto_attivo = ''
for AttivitaSvoltaEE in self.env['utilitypower.attivitasvolta_ee'].search([('id_utenza_ee','=',id_utenza)]):
id_attivita = AttivitaSvoltaEE.id
for Contratto in self.env['utilitypower.contratti_ee'].search([('attivitasvolte_ids','=',id_attivita)]):
if Contratto.stato==1:
#find it :
id_contratto_attivo = Contratto.id
id_ultima_attivita = id_attivita
contratto_attivo=Contratto.nome_contratto
for UtenzeEE in self:
UtenzeEE.last_contratto = contratto_attivo
UtenzeEE.id_ultimo_contratto = id_contratto_attivo
UtenzeEE.id_ultima_attivita = id_ultima_attivita
Please be informed that, if you are calling any action through button, you have to write the code as below
<button class="oe_stat_button"
icon = "fa-file-text-o"
type = "action"
name="%(action_view_contrattoattivo_ee)d"
options="{}">
<span><field name="id_ultimo_contratto"/></span>