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
pouvez-vous ajouter sur la fonction de changement ici? – OmaL
@AnomA J'ai mis le on_change à répondre car il ne rentre pas dans le commentaire –