Commit cf57eb76 authored by Jean-Paul Smets's avatar Jean-Paul Smets

New Report feature. New API for ListBox Line (Stat and not State)


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@2619 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent e764b435
...@@ -44,7 +44,7 @@ from copy import copy ...@@ -44,7 +44,7 @@ from copy import copy
from Acquisition import aq_base, aq_inner, aq_parent, aq_self from Acquisition import aq_base, aq_inner, aq_parent, aq_self
from zLOG import LOG 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 from Products.PythonScripts.Utility import allow_class
import random import random
...@@ -434,6 +434,13 @@ class ListBoxWidget(Widget.Widget): ...@@ -434,6 +434,13 @@ class ListBoxWidget(Widget.Widget):
default='', default='',
required=1) 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'): def render(self, field, key, value, REQUEST, render_format='html'):
""" """
This is where most things happen. This method renders a list This is where most things happen. This method renders a list
...@@ -909,7 +916,10 @@ class ListBoxWidget(Widget.Widget): ...@@ -909,7 +916,10 @@ class ListBoxWidget(Widget.Widget):
stat_context = s[0].asContext(**stat_result) stat_context = s[0].asContext(**stat_result)
stat_context.absolute_url = lambda x: s[0].absolute_url() stat_context.absolute_url = lambda x: s[0].absolute_url()
stat_context.domain_url = s[0].getRelativeUrl() 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 # report id, is_summary, depth, object_list, object_list_len, XX, XX, report_object, start, stop
else: else:
# Prepare query # Prepare query
...@@ -947,15 +957,15 @@ class ListBoxWidget(Widget.Widget): ...@@ -947,15 +957,15 @@ class ListBoxWidget(Widget.Widget):
if object_list_len and s[3]: if object_list_len and s[3]:
# Display object data at same level as category selector # Display object data at same level as category selector
# If this domain is open # 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) ] report_sections += [ (None, 0, s[2], object_list, object_list_len - 1, s[3], s[4], None, 1) ]
else: else:
if exception_uid_list is not None: if exception_uid_list is not None:
# Display current parent domain # 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: else:
# No data to display # 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 # Reset original value
selection.edit(report = None) selection.edit(report = None)
...@@ -1353,7 +1363,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> ...@@ -1353,7 +1363,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
title_listboxline = ListBoxLine() title_listboxline = ListBoxLine()
title_listboxline.markTitleLine() title_listboxline.markTitleLine()
for cname in columns: 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) listboxline_list.append(title_listboxline)
section_index = 0 section_index = 0
...@@ -1421,7 +1431,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> ...@@ -1421,7 +1431,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
section_char = '-' section_char = '-'
list_body = list_body + \ 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 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, '&nbsp;&nbsp;' * current_section[2], section_char, section_name) """ % (td_css, getattr(stat_context,'domain_url',''), form.id, selection_name, '&nbsp;&nbsp;' * current_section[2], section_char, translate('content', section_name, default=section_name.decode('utf-8')))
if render_format == 'list': if render_format == 'list':
...@@ -1440,7 +1450,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> ...@@ -1440,7 +1450,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
section_char = '+' section_char = '+'
list_body = list_body + \ 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 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, '&nbsp;&nbsp;' * current_section[2], section_char, section_name) """ % (td_css, getattr(stat_context,'domain_url',''), form.id, selection_name, '&nbsp;&nbsp;' * current_section[2], section_char, translate('content', section_name, default=section_name.decode('utf-8')))
if render_format == 'list': if render_format == 'list':
...@@ -1664,7 +1674,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> ...@@ -1664,7 +1674,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
if 'nbsp' in attribute_value_tmp: if 'nbsp' in attribute_value_tmp:
attribute_value_tmp = None attribute_value_tmp = None
current_listboxline.addColumn( property_id , attribute_value_tmp) current_listboxline.addColumn( cname[0] , attribute_value_tmp)
else: else:
# Check if url_columns defines a method to retrieve the URL. # Check if url_columns defines a method to retrieve the URL.
...@@ -1718,7 +1728,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> ...@@ -1718,7 +1728,7 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
if 'nbsp' in attribute_value_tmp: if 'nbsp' in attribute_value_tmp:
attribute_value_tmp = None 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>' list_body = list_body + '</tr>'
...@@ -1794,16 +1804,17 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')"> ...@@ -1794,16 +1804,17 @@ onChange="submitAction(this.form,'%s/portal_selections/setReportRoot')">
if 'nbsp' in value_tmp: if 'nbsp' in value_tmp:
value_tmp = None value_tmp = None
current_listboxline.addColumn( column[1] , value_tmp ) current_listboxline.addColumn( column[0] , value_tmp )
else: else:
list_body += '<td class="Data">&nbsp;</td>' list_body += '<td class="Data">&nbsp;</td>'
#if render_format == 'list': current_listboxline.addColumn( column[1] , None) #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: except:
list_body += '<td class="Data">&nbsp;</td>' list_body += '<td class="Data">&nbsp;</td>'
#if render_format == 'list': current_listboxline.addColumn( column[1] , None) #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>' list_body += '</tr>'
if render_format == 'list': if render_format == 'list':
...@@ -2152,8 +2163,8 @@ class ListBoxLine: ...@@ -2152,8 +2163,8 @@ class ListBoxLine:
""" """
self.setListboxLineContentMode('StatLine') self.setListboxLineContentMode('StatLine')
security.declarePublic('isStateLine') security.declarePublic('isStatLine')
def isStateLine(self): def isStatLine(self):
""" """
Returns 1 is this line contains no data but only stats Returns 1 is this line contains no data but only stats
""" """
......
...@@ -26,7 +26,9 @@ ...@@ -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 AccessControl import Unauthorized, getSecurityManager, ClassSecurityInfo
from Products.PythonScripts.Utility import allow_class from Products.PythonScripts.Utility import allow_class
from Products.Formulator.DummyField import fields from Products.Formulator.DummyField import fields
...@@ -180,7 +182,10 @@ class ReportSection: ...@@ -180,7 +182,10 @@ class ReportSection:
param_dict = {} 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 Initialize the line and set the default values
Selected columns must be defined in parameter of listbox.render... Selected columns must be defined in parameter of listbox.render...
...@@ -188,7 +193,15 @@ class ReportSection: ...@@ -188,7 +193,15 @@ class ReportSection:
self.path = path self.path = path
self.form_id = form_id 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__') #security.declarePublic('__getitem__')
#def __getitem__(self, column_id): #def __getitem__(self, column_id):
...@@ -198,6 +211,14 @@ class ReportSection: ...@@ -198,6 +211,14 @@ class ReportSection:
def getTitle(self): def getTitle(self):
return self.title 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') security.declarePublic('getPath')
def getPath(self): def getPath(self):
return self.path return self.path
...@@ -210,9 +231,56 @@ class ReportSection: ...@@ -210,9 +231,56 @@ class ReportSection:
def getFormId(self): def getFormId(self):
return self.form_id return self.form_id
security.declarePublic('getParamDict') _no_parameter_ = []
def getParamDict(self):
return self.param_dict 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) InitializeClass(ReportSection)
allow_class(ReportSection) allow_class(ReportSection)
...@@ -620,15 +620,26 @@ class SelectionTool( UniqueObject, SimpleItem ): ...@@ -620,15 +620,26 @@ class SelectionTool( UniqueObject, SimpleItem ):
referer = referer.replace('report_depth:int=', 'noreport_depth:int=') referer = referer.replace('report_depth:int=', 'noreport_depth:int=')
return request.RESPONSE.redirect(referer) 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') 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 Toogle display of the listbox
""" """
request = REQUEST 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) selection = self.getSelectionFor(selection_name, REQUEST)
if listbox_display_mode == 'FlatListMode': if listbox_display_mode == 'FlatListMode':
...@@ -643,6 +654,10 @@ class SelectionTool( UniqueObject, SimpleItem ): ...@@ -643,6 +654,10 @@ class SelectionTool( UniqueObject, SimpleItem ):
flat_list_mode = 0 flat_list_mode = 0
domain_tree_mode = 0 domain_tree_mode = 0
report_tree_mode = 1 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, selection.edit(flat_list_mode=flat_list_mode,domain_tree_mode=domain_tree_mode,
report_tree_mode=report_tree_mode) report_tree_mode=report_tree_mode)
...@@ -653,36 +668,38 @@ class SelectionTool( UniqueObject, SimpleItem ): ...@@ -653,36 +668,38 @@ class SelectionTool( UniqueObject, SimpleItem ):
selection.edit(params = params) selection.edit(params = params)
referer = request['HTTP_REFERER'] 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=', 'noreset=')
referer = referer.replace('reset:int=', 'noreset:int=') referer = referer.replace('reset:int=', 'noreset:int=')
return request.RESPONSE.redirect(referer) return request.RESPONSE.redirect(referer)
security.declareProtected(ERP5Permissions.View, 'setFlatListMode') security.declareProtected(ERP5Permissions.View, 'setFlatListMode')
def setFlatListMode(self, REQUEST): def setFlatListMode(self, REQUEST, selection_name=None):
""" """
Set display of the listbox to FlatList mode 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') security.declareProtected(ERP5Permissions.View, 'setDomainTreeMode')
def setDomainTreeMode(self, REQUEST): def setDomainTreeMode(self, REQUEST, selection_name=None):
""" """
Set display of the listbox to DomainTree mode 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') security.declareProtected(ERP5Permissions.View, 'setReportTreeMode')
def setReportTreeMode(self, REQUEST): def setReportTreeMode(self, REQUEST, selection_name=None):
""" """
Set display of the listbox to ReportTree mode 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') security.declareProtected(ERP5Permissions.View, 'getSelectionSelectedValueList')
def getSelectionSelectedValueList(self, selection_name, REQUEST=None, selection_method=None, context=None): def getSelectionSelectedValueList(self, selection_name, REQUEST=None, selection_method=None, context=None):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment