diff --git a/product/ERP5Form/ListBox.py b/product/ERP5Form/ListBox.py index 05cbed9c676fbd3acd812dbbecc5e65b06cf4842..f48f5566e403c8ac216b18a3d445df944999ed7b 100755 --- a/product/ERP5Form/ListBox.py +++ b/product/ERP5Form/ListBox.py @@ -44,7 +44,7 @@ from copy import copy from Acquisition import aq_base, aq_inner, aq_parent, aq_self from zLOG import LOG -from Globals import InitializeClass, Persistent, Acquisition +from Globals import InitializeClass, Persistent, Acquisition, get_request from Products.PythonScripts.Utility import allow_class import random @@ -434,6 +434,13 @@ class ListBoxWidget(Widget.Widget): default='', required=1) + def render_view(self, field, value, REQUEST=None, render_format='html', key='listbox'): + """ + Returns + """ + if REQUEST is None: REQUEST=get_request() + return self.render(field, key, value, REQUEST, render_format=render_format) + def render(self, field, key, value, REQUEST, render_format='html'): """ This is where most things happen. This method renders a list @@ -909,7 +916,10 @@ class ListBoxWidget(Widget.Widget): stat_context = s[0].asContext(**stat_result) stat_context.absolute_url = lambda x: s[0].absolute_url() stat_context.domain_url = s[0].getRelativeUrl() - report_sections += [(s[0].id, 1, s[2], [stat_context], 1, s[3], s[4], stat_context, 0)] + section_title = s[0].getTitle() + section_title = translate('content', section_title, default=section_title.decode('utf-8')) + section_title = section_title.encode('utf-8') + report_sections += [(s[0].getTitle(), 1, s[2], [stat_context], 1, s[3], s[4], stat_context, 0)] # report id, is_summary, depth, object_list, object_list_len, XX, XX, report_object, start, stop else: # Prepare query @@ -947,15 +957,15 @@ class ListBoxWidget(Widget.Widget): if object_list_len and s[3]: # Display object data at same level as category selector # If this domain is open - report_sections += [ (s[0].id, 0, s[2], [object_list[0]], 1, s[3], s[4], stat_context, 0) ] + report_sections += [ (s[0].getTitle(), 0, s[2], [object_list[0]], 1, s[3], s[4], stat_context, 0) ] report_sections += [ (None, 0, s[2], object_list, object_list_len - 1, s[3], s[4], None, 1) ] else: if exception_uid_list is not None: # Display current parent domain - report_sections += [ (s[0].id, 0, s[2], [s[0]], 1, s[3], s[4], stat_context, 0) ] + report_sections += [ (s[0].getTitle(), 0, s[2], [s[0]], 1, s[3], s[4], stat_context, 0) ] else: # No data to display - report_sections += [ (s[0].id, 0, s[2], [None], 1, s[3], s[4], stat_context, 0) ] + report_sections += [ (s[0].getTitle(), 0, s[2], [None], 1, s[3], s[4], stat_context, 0) ] # Reset original value selection.edit(report = None) @@ -1353,7 +1363,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> title_listboxline = ListBoxLine() title_listboxline.markTitleLine() for cname in columns: - title_listboxline.addColumn( cname[0].encode('utf-8'), cname[1].encode('utf-8')) + title_listboxline.addColumn( cname[0], cname[1].encode('utf-8')) listboxline_list.append(title_listboxline) section_index = 0 @@ -1421,7 +1431,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> section_char = '-' 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(stat_context,'domain_url',''), form.id, selection_name, ' ' * current_section[2], section_char, section_name) + """ % (td_css, getattr(stat_context,'domain_url',''), form.id, selection_name, ' ' * current_section[2], section_char, translate('content', section_name, default=section_name.decode('utf-8'))) if render_format == 'list': @@ -1440,7 +1450,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> 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(stat_context,'domain_url',''), form.id, selection_name, ' ' * current_section[2], section_char, section_name) + """ % (td_css, getattr(stat_context,'domain_url',''), form.id, selection_name, ' ' * current_section[2], section_char, translate('content', section_name, default=section_name.decode('utf-8'))) if render_format == 'list': @@ -1664,7 +1674,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> if 'nbsp' in attribute_value_tmp: attribute_value_tmp = None - current_listboxline.addColumn( property_id , attribute_value_tmp) + current_listboxline.addColumn( cname[0] , attribute_value_tmp) else: # Check if url_columns defines a method to retrieve the URL. @@ -1718,7 +1728,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> if 'nbsp' in attribute_value_tmp: attribute_value_tmp = None - current_listboxline.addColumn( property_id , attribute_value_tmp) + current_listboxline.addColumn( cname[0] , attribute_value_tmp) list_body = list_body + '</tr>' @@ -1794,16 +1804,17 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> if 'nbsp' in value_tmp: value_tmp = None - current_listboxline.addColumn( column[1] , value_tmp ) + current_listboxline.addColumn( column[0] , value_tmp ) else: list_body += '<td class="Data"> </td>' #if render_format == 'list': current_listboxline.addColumn( column[1] , None) - if render_format == 'list': current_listboxline.addColumn( None , None) + if render_format == 'list': + current_listboxline.addColumn( column[0] , None) except: list_body += '<td class="Data"> </td>' #if render_format == 'list': current_listboxline.addColumn( column[1] , None) - if render_format == 'list': current_listboxline.addColumn( None , None) + if render_format == 'list': current_listboxline.addColumn( extended_columns[n][0] , None) list_body += '</tr>' if render_format == 'list': @@ -2152,8 +2163,8 @@ class ListBoxLine: """ self.setListboxLineContentMode('StatLine') - security.declarePublic('isStateLine') - def isStateLine(self): + security.declarePublic('isStatLine') + def isStatLine(self): """ Returns 1 is this line contains no data but only stats """ diff --git a/product/ERP5Form/Report.py b/product/ERP5Form/Report.py index 3ab3952150cca1312af317f297ec7f7e39cc7a99..18803c0ac6d2df5d85942f705c9d412346077b47 100755 --- a/product/ERP5Form/Report.py +++ b/product/ERP5Form/Report.py @@ -26,7 +26,9 @@ # ############################################################################## -from Globals import InitializeClass, PersistentMapping, DTMLFile +from copy import copy + +from Globals import InitializeClass, PersistentMapping, DTMLFile, get_request from AccessControl import Unauthorized, getSecurityManager, ClassSecurityInfo from Products.PythonScripts.Utility import allow_class from Products.Formulator.DummyField import fields @@ -180,7 +182,10 @@ class ReportSection: param_dict = {} - def __init__(self, path='', form_id='view', param_dict=None ): + def __init__(self, path='', form_id='view', + title=None, translated_title=None, level=1, + selection_name=None, selection_params=None, listbox_display_mode=None, + selection_columns=None, selection_sort_order=None ): """ Initialize the line and set the default values Selected columns must be defined in parameter of listbox.render... @@ -188,8 +193,16 @@ class ReportSection: self.path = path self.form_id = form_id - if param_dict is not None: self.param_dict = param_dict - + self.title = title + self.translated_title = translated_title + self.level = level + self.saved_request = {} + self.selection_name = selection_name + self.selection_params = selection_params + self.listbox_display_mode = listbox_display_mode + self.selection_columns = selection_columns + self.selection_sort_order = selection_sort_order + #security.declarePublic('__getitem__') #def __getitem__(self, column_id): # return self.__dict__[column_id] @@ -198,6 +211,14 @@ class ReportSection: def getTitle(self): return self.title + security.declarePublic('getTranslatedTitle') + def getTranslatedTitle(self): + return self.translated_title + + security.declarePublic('getLevel') + def getLevel(self): + return self.level + security.declarePublic('getPath') def getPath(self): return self.path @@ -210,9 +231,56 @@ class ReportSection: def getFormId(self): return self.form_id - security.declarePublic('getParamDict') - def getParamDict(self): - return self.param_dict - + _no_parameter_ = [] + + security.declarePublic('pushRequest') + def pushReport(self, context): + REQUEST = get_request() + for k,v in self.param_dict.items(): + self.saved_request[k] = REQUEST.form.get(k, self._no_parameter_) + REQUEST.form[k] = v + if self.selection_name is not None: + portal_selections = context.portal_selections + if self.listbox_display_mode is not None: + self.saved_display_mode = portal_selections.getListboxDisplayMode(self.selection_name, REQUEST=REQUEST) + portal_selections.setListboxDisplayMode(REQUEST, self.listbox_display_mode, + selection_name=self.selection_name) + if self.selection_params is not None: + self.saved_params = portal_selections.getSelectionParams(self.selection_name, REQUEST=REQUEST) + portal_selections.setSelectionParamsFor(self.selection_name, + self.selection_params, REQUEST=REQUEST) + if self.selection_columns is not None: + self.saved_columns = portal_selections.getSelectionColumns(self.selection_name, REQUEST=REQUEST) + portal_selections.setSelectionColumns(self.selection_name, self.selection_columns, + REQUEST=REQUEST) + if self.selection_sort_order is not None: + self.saved_sort_order = portal_selections.getSelectionSortOrder(self.selection_name, REQUEST=REQUEST) + portal_selections.setSelectionSortOrder(self.selection_name, self.selection_sort_order, + REQUEST=REQUEST) + + + security.declarePublic('popRequest') + def popReport(self, context): + REQUEST = get_request() + for k,v in self.param_dict.items(): + if self.saved_request[k] is self._no_parameter_: + del REQUEST.form[k] + else: + REQUEST.form[k] = self.saved_request[k] + if self.selection_name is not None: + portal_selections = context.portal_selections + if self.listbox_display_mode is not None: + portal_selections.setListboxDisplayMode(REQUEST, self.saved_display_mode, + selection_name=self.selection_name) + if self.param_dict is not None: + portal_selections.setSelectionParamsFor(self.selection_name, + self.saved_params, REQUEST=REQUEST) + if self.selection_columns is not None: + portal_selections.setSelectionColumns(self.selection_name, self.saved_columns, + REQUEST=REQUEST) + if self.selection_sort_order is not None: + portal_selections.setSelectionSortOrder(self.selection_name, self.saved_sort_order, + REQUEST=REQUEST) + InitializeClass(ReportSection) allow_class(ReportSection) diff --git a/product/ERP5Form/SelectionTool.py b/product/ERP5Form/SelectionTool.py index 2a3310bf5d1829eaa8fc4437deeb4cdbd3a0bae4..34ed5f756b0ecc837a8579b3601d8ee3def7942a 100755 --- a/product/ERP5Form/SelectionTool.py +++ b/product/ERP5Form/SelectionTool.py @@ -620,15 +620,26 @@ class SelectionTool( UniqueObject, SimpleItem ): referer = referer.replace('report_depth:int=', 'noreport_depth:int=') return request.RESPONSE.redirect(referer) - + security.declareProtected(ERP5Permissions.View, 'getListboxDisplayMode') + def getListboxDisplayMode(self, selection_name, REQUEST=None): + if REQUEST is None: + REQUEST = get_request() + selection = self.getSelectionFor(selection_name, REQUEST) + + if getattr(selection, 'report_tree_mode', 0): + return 'ReportTreeMode' + elif getattr(selection, 'domain_tree_mode', 0): + return 'DomainTreeMode' + return 'FlatListMode' + security.declareProtected(ERP5Permissions.View, 'setListboxDisplayMode') - def setListboxDisplayMode(self, REQUEST,listbox_display_mode): + def setListboxDisplayMode(self, REQUEST,listbox_display_mode, selection_name=None): """ Toogle display of the listbox """ request = REQUEST - selection_name = request.list_selection_name + if selection_name is None: selection_name = request.list_selection_name selection = self.getSelectionFor(selection_name, REQUEST) if listbox_display_mode == 'FlatListMode': @@ -643,7 +654,11 @@ class SelectionTool( UniqueObject, SimpleItem ): flat_list_mode = 0 domain_tree_mode = 0 report_tree_mode = 1 - + else: + flat_list_mode = 0 + domain_tree_mode = 0 + report_tree_mode = 0 + selection.edit(flat_list_mode=flat_list_mode,domain_tree_mode=domain_tree_mode, report_tree_mode=report_tree_mode) @@ -653,36 +668,38 @@ class SelectionTool( UniqueObject, SimpleItem ): selection.edit(params = params) referer = request['HTTP_REFERER'] + referer = referer.replace('noreset=', 'reset=') + referer = referer.replace('noreset:int=', 'reset:int=') referer = referer.replace('reset=', 'noreset=') referer = referer.replace('reset:int=', 'noreset:int=') return request.RESPONSE.redirect(referer) security.declareProtected(ERP5Permissions.View, 'setFlatListMode') - def setFlatListMode(self, REQUEST): + def setFlatListMode(self, REQUEST, selection_name=None): """ Set display of the listbox to FlatList mode """ - return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='FlatListMode') + return self.setListboxDisplayMode(REQUEST=REQUEST, listbox_display_mode='FlatListMode', selection_name=selection_name) security.declareProtected(ERP5Permissions.View, 'setDomainTreeMode') - def setDomainTreeMode(self, REQUEST): + def setDomainTreeMode(self, REQUEST, selection_name=None): """ Set display of the listbox to DomainTree mode """ - return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='DomainTreeMode') + return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='DomainTreeMode', selection_name=selection_name) security.declareProtected(ERP5Permissions.View, 'setReportTreeMode') - def setReportTreeMode(self, REQUEST): + def setReportTreeMode(self, REQUEST, selection_name=None): """ Set display of the listbox to ReportTree mode """ - return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='ReportTreeMode') + return self.setListboxDisplayMode(REQUEST=REQUEST,listbox_display_mode='ReportTreeMode',selection_name=selection_name) security.declareProtected(ERP5Permissions.View, 'getSelectionSelectedValueList') def getSelectionSelectedValueList(self, selection_name, REQUEST=None, selection_method=None, context=None):