diff --git a/product/ERP5Form/ListBox.py b/product/ERP5Form/ListBox.py index 742e999f1b45e83760d8b1d84b55c6523fba24a3..78cc48a2b60963d73cadf7d25bd5ce97b1c7935d 100755 --- a/product/ERP5Form/ListBox.py +++ b/product/ERP5Form/ListBox.py @@ -82,7 +82,7 @@ def makeTreeBody(root, depth, total_depth, unfolded_list, form_id, selection_nam def makeTreeList(root, depth, total_depth, unfolded_list, form_id, selection_name): """ - (object, is pure summary, depth, is open) + (object, is_pure_summary, depth, is_open) """ tree_list = [] @@ -608,6 +608,35 @@ class ListBoxWidget(Widget.Widget): #LOG('ListBox', 0, 'list_method = %s, list_method.__dict__ = %s' % (repr(list_method), repr((list_method.__dict__)))) + ############################################################### + # + # Prepare the stat select_expression + # + ############################################################### + if show_stat: + stats = here.portal_selections.getSelectionStats(selection_name, REQUEST=REQUEST) + select_expression = '' + index = 0 + + for (sql,title,alias) in extended_columns: + # XXX This might be slow. + for column in stat_columns: + if column[0] == sql: + break + else: + column = None + if column is not None and column[0] == column[1]: + try: + if stats[index] != ' ': + select_expression += stats[index] + '(' + sql + ') AS ' + alias + ',' + else: + select_expression += '\' \' AS ' + alias + ',' + except: + select_expression += '\' \' AS ' + alias + ',' + index = index + 1 + + select_expression = select_expression[:len(select_expression) - 1] + ############################################################### # # Build the report tree @@ -615,8 +644,9 @@ class ListBoxWidget(Widget.Widget): # When we build the body, we have to go through all report lines # # Each report line is a tuple of the form: - # (section_id, object_list, object_list_size, is_summary) - # + # + # (section_id, is_summary, depth, object_list, object_list_size, is_open) + # ############################################################### report_query = '' if report_tree: @@ -638,10 +668,19 @@ class ListBoxWidget(Widget.Widget): s[0].asSqlExpression(strict_membership=0)) else: kw['query'] = s[0].asSqlExpression(strict_membership=0) + + # Push new select_expression + original_select_expression = kw.get('select_expression') + kw['select_expression'] = select_expression selection.edit( params = kw ) #LOG('ListBox 569', 0, str((selection_name, selection.__dict__))) stat_temp = selection(selection_method = stat_method, context=here, REQUEST=REQUEST) + # Pop new select_expression + if original_select_expression is None: + del kw['select_expression'] + else: + kw['select_expression'] = original_select_expression @@ -1034,6 +1073,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> """ % ( getattr(o, 'uid', '') , field.id ) # What happens if we list instances which are not instances of Base XXX section_char = '' + if render_format == 'list': list_result_item = [] # Start a new item for list render format if report_tree: if current_section[1]: section_name = current_section[0] @@ -1045,12 +1085,14 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> list_body = list_body + \ """<td class="%s" align="left" valign="middle"><a href="portal_selections/foldReport?report_url=%s&form_id=%s&list_selection_name=%s">%s%s%s</a></td> """ % (td_css, getattr(current_section[3][0],'domain_url',''), form.id, selection_name, ' ' * current_section[2], section_char, section_name) + if render_format == 'list': list_result_item.append(section_name) else: if section_name != '': section_char = '+' list_body = list_body + \ """<td class="%s" align="left" valign="middle"><a href="portal_selections/unfoldReport?report_url=%s&form_id=%s&list_selection_name=%s">%s%s%s</a></td> """ % (td_css, getattr(current_section[3][0],'domain_url',''), form.id, selection_name, ' ' * current_section[2], section_char, section_name) + if render_format == 'list': list_result_item.append(section_name) if select: if o.uid in checked_uids: @@ -1066,8 +1108,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> """<td class="%s" width="50" align="center" valign="middle"> <input type="checkbox" %s value="%s" id="cb_%s" name="uids:list"/></td> """ % (td_css, selected, o.uid , o.uid) - error_list = [] - if render_format == 'list': list_result_item = [] # Start a new item for list render format + error_list = [] for cname in extended_columns: sql = cname[0] # (sql, title, alias) alias = cname[2] # (sql, title, alias) @@ -1196,28 +1237,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> # Call the stat method if show_stat: - stats = here.portal_selections.getSelectionStats(selection_name, REQUEST=REQUEST) - select_expression = '' - index = 0 - - for (sql,title,alias) in extended_columns: - # XXX This might be slow. - for column in stat_columns: - if column[0] == sql: - break - else: - column = None - if column is not None and column[0] == column[1]: - try: - if stats[index] != ' ': - select_expression += stats[index] + '(' + sql + ') AS ' + alias + ',' - else: - select_expression += '\' \' AS ' + alias + ',' - except: - select_expression += '\' \' AS ' + alias + ',' - index = index + 1 - - select_expression = select_expression[:len(select_expression) - 1] + kw['select_expression'] = select_expression selection.edit( params = kw )