From ff583b4fc75cf70f53b11655da94e33484771e2d Mon Sep 17 00:00:00 2001 From: Sebastien Robin <seb@nexedi.com> Date: Wed, 14 Apr 2004 16:07:35 +0000 Subject: [PATCH] allows to use properties on temp objects git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@672 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Form/ListBox.py | 62 ++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/product/ERP5Form/ListBox.py b/product/ERP5Form/ListBox.py index 2828a647b0..c9220bb07a 100755 --- a/product/ERP5Form/ListBox.py +++ b/product/ERP5Form/ListBox.py @@ -1178,19 +1178,71 @@ class ListBoxValidator(Validator.Validator): column_ids = map(lambda x: x[0], columns) editable_column_ids = map(lambda x: x[0], editable_columns) all_editable_column_ids = map(lambda x: x[0], all_editable_columns) - - #LOG('In Listbox Validator',0,'') + selection_name = field.get_value('selection_name') + selection = here.portal_selections.getSelectionFor(selection_name, REQUEST=REQUEST) result = {} error_result = {} listbox_uids = REQUEST.get('%s_uid' % field.id, []) + #LOG('ListBox.validate: REQUEST',0,REQUEST) errors = [] - LOG('ListBox.validate: listbox_uids',0,listbox_uids) + object_list = [] + # We have two things to do in the case of temp objects, + # the first thing is to create a list with new temp objects + # then try to validate some data, and then create again + # the list with a listbox as parameter. Like this we + # can use tales expression + for uid in listbox_uids: + if str(uid).find('new') == 0: + list_method = field.get_value('list_method') + list_method = getattr(here, list_method.method_name) + object_list = list_method(REQUEST=REQUEST) + break + listbox = {} + for uid in listbox_uids: + if str(uid).find('new') == 0: + o = None + for object in object_list: + if object.getUid()==uid: + o = object + listbox[uid[4:]] = {} + # We first try to set a listbox corresponding to all things + # we can validate, so that we can use the same list + # as the one used for displaying the listbox + for sql in editable_column_ids: + alias = '_'.join(sql.split('.')) + if '.' in sql: + property_id = '.'.join(sql.split('.')[1:]) # Only take trailing part + else: + property_id = alias + my_field_id = '%s_%s' % (field.id, alias) + if form.has_field( my_field_id ): + my_field = form.get_field(my_field_id) + key = 'field_' + my_field.id + '_%s' % o.uid + error_result_key = my_field.id + '_%s' % o.uid + REQUEST.cell = o + try: + value = my_field.validator.validate(my_field, key, REQUEST) # We need cell + # Here we set the property + listbox[uid[4:]][sql] = value + except ValidationError, err: # XXXX import missing + pass + # Here we generate again the object_list with listbox the listbox we + # have just created + if len(listbox)>0: + list_method = field.get_value('list_method') + list_method = getattr(here, list_method.method_name) + REQUEST.set('listbox',listbox) + object_list = list_method(REQUEST=REQUEST) for uid in listbox_uids: if str(uid).find('new') == 0: # First case: dialog input to create new objects - o = newTempBase(here, uid[4:]) - o.uid = uid + #o = newTempBase(here, uid[4:]) # Arghhh - XXX acquisition problem - use portal root + #o.uid = uid + o = None + for object in object_list: + if object.getUid()==uid: + o = object result[uid[4:]] = {} for sql in editable_column_ids: alias = '_'.join(sql.split('.')) -- 2.30.9