How to Change selection field automatically in odoo

房东的猫 提交于 2019-12-13 06:09:46

问题


I'm working on Odoo 8. I have a view that contains a set of combo-box type fields and a selection field. I want to make a test on the combo-box fields and if there are all checked then the selection field value should change. Here is what i have so far:

def get_etat_dossier(self,cr,uid,ids,args,fields,context=None):
    res = {}
    for rec in self.browse(cr,uid,ids):

        if rec.casier_judiciare==True: # test field if = true 
            res[rec.id]= 02 # field etat_dos type selection = Dossier Complet
        else:
            res[rec.id] = 01

    return res


_columns= {

   'casier_judiciare' : fields.boolean('Casier Judiciaire'), #  field to test 

   'reference_pro' : fields.boolean('Réferences Professionnelles'),
   'certificat_qual' : fields.boolean('Certificat de qualification'),
   'extrait_role' : fields.boolean('Extrait de Role'),
   'statut_entre' : fields.selection([('eurl','EURL'),('sarl','SARL')],'Statut Entreprise'),
   'etat_dos': fields.selection([('complet','Dossier Complet'),('manquant','Dossier Manquant')],'Etat De Dossier'), # field ho change after test 
}

Here is the code for my view

<group col='4' name="doss_grp" string="Dossier de Soumission" colspan="4" >       <field name="casier_judiciare"/> 
    <field name="certificat_qual"/> 
    <field name="extrait_role"/> 
    <field name="reference_pro"/> 
    <field name="statut_entre" style="width:20%%"/> 
    <field name="etat_dos"/> 
</group>

回答1:


Add an onchange attribute to the casier_judiciare field and then pass all the other fields you want to check as arguments to the method like this

<group col='4' name="doss_grp" string="Dossier de Soumission" colspan="4" >
    <field name="casier_judiciare" on_change="onchange_casier_judiciare(casier_judiciare, certificat_qual, extrait_role, reference_pro)"/> 
    <field name="certificat_qual"/> 
    <field name="extrait_role"/> 
    <field name="reference_pro"/> 
    <field name="statut_entre" style="width:20%%"/> 
    <field name="etat_dos"/> 
</group>

In your model file define the method like this and use an if statement to check if they're all True (That means they have all been checked), if so then you can return a dictionary with any value you want for the selection field, in this case etat_dos will change to Dossier Complet

def onchange_casier_judiciare(self, cr, uid, ids, casier_judiciare, certificat_qual, extrait_role, reference_pro, context=None):
    if casier_judiciare and certificat_qual and extrait_role and reference_pro: # if they're all True (that means they're all checked):
        values = {'value': {'etat_dos': 'complet'}} #set the value of etat_dos field

        return values

Note that the onchange is only triggered on the casier_judiciare field but you can also set onchange on other fields and it should work just fine



来源:https://stackoverflow.com/questions/37083117/how-to-change-selection-field-automatically-in-odoo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!