2012-08-30 1 views
1

J'ai un assistant avec peu de champs. Au départ, il ne montre qu'un champs de sélection et en fonction de ce qui est sélectionné (j'ai utilisé on_change), il montrerait d'autres champs.comment supprimer des valeurs de champs invisibles dans l'assistant openerp

Maintenant, j'ai un problème dans ce scénario. L'utilisateur sélectionne initialement 'select 1' et montre (disons) le nom, l'adresse, l'âge et donne de la valeur à ce champ, mais l'utilisateur décide de changer le champ initial en 'select 2' qui cachera les autres champs et affichera le sujet temps, instructeur. mais lorsque j'essaie de sélectionner à nouveau 'select 1', les valeurs ne sont pas supprimées.

Je souhaite supprimer les valeurs existantes des champs masqués.

Avez-vous une idée comment faire?

Merci,

+0

pouvez-vous ajouter sur la fonction de changement ici? – OmaL

+0

@AnomA J'ai mis le on_change à répondre car il ne rentre pas dans le commentaire –

Répondre

1

Vous créez ca on_change méthode pour le champ de type de sélection.

Dans cette méthode, vous pouvez retourner les valeurs des champs en fonction de la valeur du champ de sélection.

i.e if select=1 then return {'value':{'subject':'', 'time':'' , 'instructure': False}} 
& if select=2 then return {'value':{'name':'', address:'' , 'age': 0}} 

Espérons que cela vous aidera.

+0

ouais, mais le problème est que les champs de l'assistant sont dynamiques où les champs de l'assistant sont définis comme un enregistrement, ce qui signifie que l'enregistrement est défini (o2m) dans le formulaire principal où les assistants sont appelés. Depuis cette dynamique, je ne peux pas simplement déclarer les noms de champs dans le dictionnaire. Mais, merci. Je vais regarder dans cela. –

+0

Oui avadhesh kip il en haut :) – Nilesh

+0

@Lafada: Ahi à picho chod, navo thai gayo che k su?;) – Avadhesh

1
def get_status_reason(self, cr, uid, field_val, question_id, status_reason_id=False): 
    pool = self.pool.get 
    question_obj = pool('jfs.question.template.answer').read(cr, uid, question_id, ['name', 'status_reason_id','question_template_ids']) 
    if str(question_obj['name']) != field_val: 
     for child_question in question_obj['question_template_ids']: 
      status_reason_id = self.get_status_reason(cr, uid, field_val, child_question, status_reason_id) 
    else: 
     if question_obj['status_reason_id']: 
      status_reason_id = question_obj['status_reason_id'][0] 
     else: 
      status_reason_id = False 
    return status_reason_id 

def onchange_field_val(self, cr, uid, ids, field_val, task_id, status_reason_id): 
    pool = self.pool.get 
    task_obj = pool('aybabtu.task').read(cr, uid, task_id, ['question_set_id']) 
    status_reason_id = self.get_status_reason(cr, uid, field_val, task_obj['question_set_id'][0], status_reason_id) 
    res = {'status_reason_id':status_reason_id} 
    #self.get_child_questions(cr, uid, field_val, task_id) 
    return {'value':res} 

def generate_xml(self, cr, uid, view_type, data, sorted_field_list, result, context): 
    xml = '''<?xml version="1.0"?> 
     <%s>''' % (view_type) 
    context_val = {} 
    context_val['task_id'] = context['active_id'] 

    task_obj = self.pool.get('aybabtu.task').read(cr, uid, context_val['task_id'], ['state']) 
    for field_name in sorted_field_list: 
     attribute = {} 
     context_val[field_name] = str(field_name) 
     #print "result['fields'][field_name]", result['fields'][field_name] 
     if result['fields'][field_name]['context'] != 'none' and result['fields'][field_name]['context'] != 'task' and eval(result['fields'][field_name]['context'])[4] == 'required': 
      require = 'required="1"' 

     else: 
      require = '' 

     if result['fields'][field_name]['context'] != 'none' and result['fields'][field_name]['context'] != 'task' and eval(result['fields'][field_name]['context'])[7] and task_obj['state'] in ['done']: 
      readonly = 'readonly="1"' 
     else: readonly = '' 

     if result['fields'][field_name]['context'] != 'none' and result['fields'][field_name]['context'] != 'task' and eval(result['fields'][field_name]['context'])[5] == 'widget': 
      widget = 'widget="selection"' 
      filter = "context=\"{'custom_domain_timeslot':[ticket_id,type_id,state]}\"" 

     else: 
      widget = '' 
      filter = '' 

     if field_name == str(data['name']): 
      xml += '''<field name="%s" select="1" required="1" nolabel="1" on_change="onchange_field_val(%s,task_id, status_reason_id)" colspan="4" sequence="1" %s/>''' % (field_name, field_name, readonly) 

     elif result['fields'][field_name]['context'] == 'none': 
      xml += '''<field name="%s"/>''' % (field_name) 

     elif result['fields'][field_name]['context'] == 'task': 
      xml += '''<field name="%s" invisible="1"/>''' % (field_name) 

     else: 
      attribute['invisible'] = [(eval(result['fields'][field_name]['context'])[2],'!=',eval(result['fields'][field_name]['context'])[1])] 
      if require == 'required="1"': 

       attribute['required'] = [(eval(result['fields'][field_name]['context'])[2],'=',eval(result['fields'][field_name]['context'])[1])] 

      if result['fields'][field_name]['context'] != 'none' and result['fields'][field_name]['context'] != 'task' and eval(result['fields'][field_name]['context'])[5] == 'widget': 
       filter_option = self.get_domain(cr, uid, context_val['task_id'], result['fields'][field_name]['context']) 

      xml += '''<field name="%s" attrs="%s" colspan="4" on_change="onchange_field_val(%s,task_id, status_reason_id)" %s %s %s/>''' % (field_name, attribute, field_name, widget, filter, readonly) 

    xml += '''<button name="question_save_task" string="Save and Close Task" colspan="4" type="object" icon="gtk-convert" context="%s"/>''' % (context_val) 
    xml += '''</%s>''' % (view_type,) 
    return xml 

@anoma Je surchargez aussi field_view_get() qui appelle la generate_xml() où l'attribut de champ pour invisible est dynamique trop

Questions connexes