[Erp5-report] r14812 - /erp5/trunk/products/ERP5Form/PlanningBox.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Jun 13 18:14:56 CEST 2007


Author: romain
Date: Wed Jun 13 18:14:55 2007
New Revision: 14812

URL: http://svn.erp5.org?rev=14812&view=rev
Log:
Fix syntax.

In current implementation, PlanningBox will generate conflict errors, as data
are saved on Widget object each time a PlanningBox is rendered. It has to be
fixed.

Modified:
    erp5/trunk/products/ERP5Form/PlanningBox.py

Modified: erp5/trunk/products/ERP5Form/PlanningBox.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/PlanningBox.py?rev=14812&r1=14811&r2=14812&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/PlanningBox.py (original)
+++ erp5/trunk/products/ERP5Form/PlanningBox.py Wed Jun 13 18:14:55 2007
@@ -68,7 +68,7 @@
   Class holding all methods used to validate a modified PlanningBox
   can be called only from an HTML rendering using wz_dragdrop script
   """
-  def validate(self,field,key,REQUEST):
+  def validate(self, field, key, REQUEST):
     """
     main method to solve validation
     - rebuild the whole planning structure but do not display it.
@@ -202,20 +202,20 @@
 
       # abstracting axis representation (for generic processing)
       if structure.planning.calendar_view == 0:
-        block_moved['main_axis_position']      = block_moved['top']
-        block_moved['main_axis_length']        = block_moved['height']
+        block_moved['main_axis_position'] = block_moved['top']
+        block_moved['main_axis_length'] = block_moved['height']
         block_moved['secondary_axis_position'] = block_moved['left']
-        block_moved['secondary_axis_length']   = block_moved['width']
+        block_moved['secondary_axis_length'] = block_moved['width']
         # used afterwards to get destination group
         group_position = 'margin-top'
         group_length = 'height'
         # used afterwards to get secondary axis displacements and modifications
         axis_length = 'width'
       else:
-        block_moved['main_axis_position']      = block_moved['left']
-        block_moved['main_axis_length']        = block_moved['width']
+        block_moved['main_axis_position'] = block_moved['left']
+        block_moved['main_axis_length'] = block_moved['width']
         block_moved['secondary_axis_position'] = block_moved['top']
-        block_moved['secondary_axis_length']   = block_moved['height']
+        block_moved['secondary_axis_length'] = block_moved['height']
         group_position = 'margin-left'
         group_length = 'width'
         axis_length = 'height'
@@ -231,7 +231,7 @@
                block_moved,planning_coordinates['main_axis'],
                group_position, group_length)
 
-      if group_destination == None:
+      if group_destination is None:
         # !! Generate an Error !!
         # block has been moved outside the content area (not in line with any
         # group of the current area).
@@ -289,10 +289,11 @@
     update_list = []
     errors_list = []
     # getting start & stop property names
+    # XXX Isn't field enough ?
     start_property = structure.basic.field.get_value('x_start_bloc')
     stop_property = structure.basic.field.get_value('x_stop_bloc')
     # getting round_script if exists
-    round_script=getattr(here,field.get_value('round_script'),None)
+    round_script=getattr(here, field.get_value('round_script'), None)
     # now processing activity updates
     for activity_name in activity_dict.keys():
       # recovering list of moved blocks in the current activity
@@ -314,14 +315,14 @@
              self.getActivityBounds(activity_object, activity_block_moved_list,
                                     activity_block_list)
         # call specific external method to round value
-        if round_script != None:
+        if round_script is not None:
           start_value = round_script(start_value)
           stop_value = round_script(stop_value)
         # adding object name to list of objects to update
-        if activity_object.object.getUrl() not in update_list :
+        if activity_object.object.getUrl() not in update_list:
           update_list.append(activity_object.object.getUrl())
         # saving updated informations in the final dict
-        for activity_desc in object_dict[activity_object.object.getUrl()] :
+        for activity_desc in object_dict[activity_object.object.getUrl()]:
           if activity_desc['activity_name'] == activity_object.name:
             activity_desc['axis_start'] = start_value
             activity_desc['axis_stop'] = stop_value
@@ -338,21 +339,24 @@
       axis_start = None
       axis_stop  = None
       for activity in object_info:
+        activity_start_date = activity['axis_start']
+        activity_stop_date = activity['axis_stop']
         if activity['activity_name'] == 'update':
           # case current activity is in fact 'fake' activity, just data telling
           # if can update min & max bounds according to global decision toward
           # objects.
-          can_update_start = activity['axis_start']
-          can_update_stop  = activity['axis_stop']
+          can_update_start = activity_start_date
+          can_update_stop  = activity_stop_date
         else:
-          if axis_start > activity['axis_start'] or axis_start == None:
-            axis_start = activity['axis_start']
-          if axis_stop  < activity['axis_stop']  or axis_stop  == None:
-            axis_stop = activity['axis_stop']
+          if axis_start > activity_start_date or axis_start is None:
+            axis_start = activity_start_date
+          if axis_stop  < activity_stop_date  or axis_stop  is None:
+            axis_stop = activity_stop_date
+
       update_dict[object_name] = {}
-      if can_update_start and axis_start != None:
+      if can_update_start and axis_start is not None:
         update_dict[object_name][start_property] = axis_start
-      if can_update_stop  and axis_stop  != None:
+      if can_update_stop  and axis_stop  is not None:
         update_dict[object_name][stop_property]  = axis_stop
 
     # testing if need to raise errors
@@ -372,7 +376,7 @@
       # parameters are :
       # -list of errors
       # - dict with error results
-      raise FormValidationError(errors_list, {} )
+      raise FormValidationError(errors_list, {})
 
     # the whole process is now finished, just need to return final dict
     # for updating data
@@ -386,24 +390,22 @@
     if block_string != '':
       block_object_list = block_string.split('*')
       for block_object_string in block_object_list:
-        block_dict = None
-        block_dict = {}
         block_sub_list = block_object_string.split(',')
-        block_dict['name'] = block_sub_list[0]
-        block_dict['old_X'] = float(block_sub_list[1])
-        block_dict['old_Y'] = float(block_sub_list[2])
-        block_dict['new_X'] = float(block_sub_list[3])
-        block_dict['new_Y'] = float(block_sub_list[4])
-        block_dict['width'] = float(block_sub_list[5])
-        block_dict['height'] = float(block_sub_list[6])
+        block_dict = {
+          'name': block_sub_list[0],
+          'old_X': float(block_sub_list[1]),
+          'old_Y': float(block_sub_list[2]),
+          'new_X': float(block_sub_list[3]),
+          'new_Y': float(block_sub_list[4]),
+          'width': float(block_sub_list[5]),
+          'height': float(block_sub_list[6]),
+        }
         block_list.append(block_dict)
-      return block_list
-    else:
-      return block_list
-
-  def setBlockPositionToString(self,block_list):
-    """
-    takes a list of dicts updated and convert it to a string in order to save
+    return block_list
+
+  def setBlockPositionToString(self, block_list):
+    """
+    Takes a list of dicts updated and convert it to a string in order to save
     it in the request
     """
     block_string = ''
@@ -412,21 +414,11 @@
       for block_dict in block_list:
         # property position is important that's why ','.join() is not used in
         # this case
-        block_sub_string  = '%s,%s,%s,%s,%s,%s,%s' % (
-                         str(block_dict['name']),
-                         str(block_dict['old_X']),
-                         str(block_dict['old_Y']),
-                         str(block_dict['new_X']),
-                         str(block_dict['new_Y']),
-                         str(block_dict['width']),
-                         str(block_dict['height'])
-                         )
+        block_sub_string = '%(name)s,%(old_X)s,%(old_Y)s,%(new_X)s,' \
+                           '%(new_Y)s,%(width)s,%(height)s' % block_dict
         block_object_list.append(block_sub_string)
       block_string = '*'.join(block_object_list)
-      return block_string
-    else:
-      return block_string
-
+    return block_string
 
   def getBlockObject(self, block_name, content_list):
     """
@@ -624,36 +616,36 @@
   the structure of the Planning including all internal properties.
   Contains BasicStructure and PlanningStructure instances
   """
-  property_names = Widget.Widget.property_names +\
-  ['js_enabled',
-   # kind of display : horizontal or vertical
-   'calendar_view',
-   # number of groups over the main axis
-   'main_axis_groups',
-   # width properties
-   'size_border_width_left','size_planning_width','size_y_axis_space',
-   'size_y_axis_width',
-   # height properties
-   'size_header_height','size_planning_height','size_x_axis_space',
-   'size_x_axis_height',
-   # axis position
-   'y_axis_position', 'x_axis_position',
-   'report_root_list','selection_name',
-   'portal_types','sort',
-   'list_method',
-   # method used to get title of each line
-   'title_line',
-   # specific block properties
-   'x_start_bloc','x_stop_bloc', 'y_size_block',
-   # name of scripts
-   'stat_method','split_method','color_script',
-   'round_script','sec_axis_script',
-   # number of delimitations over the secondary axis
-   'delimiter',
-   # specific methods for inserting info block
-   'info_center','info_topleft','info_topright',
-   'info_backleft','info_backright'
-   ]
+  property_names = Widget.Widget.property_names + \
+    ['js_enabled',
+     # kind of display : horizontal or vertical
+     'calendar_view',
+     # number of groups over the main axis
+     'main_axis_groups',
+     # width properties
+     'size_border_width_left', 'size_planning_width', 'size_y_axis_space',
+     'size_y_axis_width',
+     # height properties
+     'size_header_height', 'size_planning_height', 'size_x_axis_space',
+     'size_x_axis_height',
+     # axis position
+     'y_axis_position', 'x_axis_position',
+     'report_root_list', 'selection_name',
+     'portal_types', 'sort',
+     'list_method',
+     # method used to get title of each line
+     'title_line',
+     # specific block properties
+     'x_start_bloc', 'x_stop_bloc', 'y_size_block',
+     # name of scripts
+     'stat_method', 'split_method', 'color_script',
+     'round_script', 'sec_axis_script',
+     # number of delimitations over the secondary axis
+     'delimiter',
+     # specific methods for inserting info block
+     'info_center', 'info_topleft', 'info_topright',
+     'info_backleft', 'info_backright'
+     ]
 
   # Planning properties (accessed through Zope Management Interface)
 
@@ -670,7 +662,7 @@
   calendar_view = fields.CheckBoxField('calendar_view',
       title='calendar view (vertical view)',
       description='define if need to changes axis order. By default Y axis is'
-                  'main axis, but to displa calendar main axis must be X one.',
+                  'main axis, but to display calendar main axis must be X one.',
       default=0,
       required=1)
 
@@ -679,95 +671,86 @@
   # (delimitation over the main axis)
   main_axis_groups = fields.IntegerField('main_axis_groups',
       title='groups per page on main axis',
-      description=('number of groups displayed per page on main axis'),
+      description='number of groups displayed per page on main axis',
       default=10,
       required=1)
 
   # setting header height
   size_header_height = fields.IntegerField('size_header_height',
       title='header height',
-      desciption=(
-      'height of the planning header'),
+      desciption='height of the planning header',
       default=100,
       required=1)
 
   # setting left border size
   size_border_width_left = fields.IntegerField('size_border_width_left',
       title='Size border width left',
-      desciption=(
-      'setting left border size'),
+      desciption='setting left border size',
       default=10,
       required=1)
 
   # setting the width of the Planning (excl. Y axis : only the block area)
   size_planning_width = fields.IntegerField('size_planning_width',
       title='Planning width',
-      desciption=(
-      'size of the planning area, excluding axis size'),
+      desciption='size of the planning area, excluding axis size',
       default=1000,
       required=1)
 
   # setting the with of the Y axis
   size_y_axis_width = fields.IntegerField('size_y_axis_width',
       title='Y axis width',
-      description=(
-      'width of the Y axis'),
+      description='width of the Y axis',
       default=200,
       required=1)
 
   # setting the with of the space (between Planning and Y axis)
   size_y_axis_space = fields.IntegerField('size_y_axis_space',
       title='Y axis space',
-      description=(
-      'space between Y axis and PLanning content'),
+      description='space between Y axis and PLanning content',
       default=10,
       required=1)
 
   # setting the height of the Planning (excl. X axis)
   size_planning_height = fields.IntegerField('size_planning_height',
       title='Planning height',
-      description=(
-      'size of the planning area, excluding axis_size'),
+      description='size of the planning area, excluding axis_size',
       default=800,
       required=1)
 
   # setting the height of the X axis
   size_x_axis_height = fields.IntegerField('size_x_axis_height',
       title='X axis height',
-      description=(
-      'height of the X axis'),
+      description='height of the X axis',
       default=200,
       required=1)
 
   # setting the height of the space (between Planning and X axis)
   size_x_axis_space = fields.IntegerField('size_x_axis_space',
       title='X axis space',
-      description=(
-      'space between X axis and Planning content '),
+      description='space between X axis and Planning content',
       default=10,
       required=1)
 
 
   y_axis_position = fields.CheckBoxField('y_axis_position',
       title='Force Y axis to the right intead of left',
-      description=('position of Y axis over the planning content.'
-                   'If checked, the Y axis will match the right border'
-                   'of the planning, otherwise default is applied : left'),
-      default = 0,
-      required = 1)
+      description='position of Y axis over the planning content.' \
+                  'If checked, the Y axis will match the right border' \
+                  'of the planning, otherwise default is applied : left',
+      default=0,
+      required=1)
 
   x_axis_position = fields.CheckBoxField('x_axis_position',
       title='Force X axis to the bottom instead of top',
-      description=('position of X axis over the planning content.'
-                   'default is top, if checked then right apply'),
-      default = 0,
-      required = 1)
+      description='position of X axis over the planning content.' \
+                  'default is top, if checked then right apply',
+      default=0,
+      required=1)
 
 
   default = fields.TextAreaField('default',
       title='Default',
-      description=(
-      "Default value of the text in the widget."),
+      description="Default value of the text in the widget.",
       default="",
       width=20, height=3,
       required=0)
@@ -775,13 +758,13 @@
 
   delimiter = fields.IntegerField('delimiter',
       title='min number of delimiters over the secondary axis',
-      description=("min number of delimitations over the sec axis, required"),
-      default = 5,
+      description="min number of delimitations over the sec axis, required",
+      default=5,
       required=1)
 
   report_root_list = fields.ListTextAreaField('report_root_list',
       title="Report Root",
-      description=("A list of domains which define the possible root."),
+      description="A list of domains which define the possible root.",
       default=[],
       required=0)
 
@@ -793,135 +776,135 @@
 
   portal_types = fields.ListTextAreaField('portal_types',
       title="Portal Types",
-      description=("Portal Types of objects to list. Required."),
+      description="Portal Types of objects to list. Required.",
       default=[],
       required=0)
 
   sort = fields.ListTextAreaField('sort',
       title='Default Sort',
-      description=("The default sort keys and order"),
+      description="The default sort keys and order",
       default=[],
       required=0)
 
   list_method = fields.MethodField('list_method',
       title='List Method',
-      description=("Method to use to list objects"),
+      description="Method to use to list objects",
       default='',
       required=0)
 
   title_line = fields.StringField('title_line',
       title="Specific method which fetches the title of each line",
-      description=("Method for inserting title in line"),
+      description="Method for inserting title in line",
       default='',
       required=0)
 
   x_start_bloc = fields.StringField('x_start_bloc',
       title='Specific property to get start of blocks (ex. start_date)',
-      description=('Property for building X-Axis such as start_date\
-      objects'),
+      description='Property for building X-Axis such as start_date ' \
+                  'objects',
       default='start_date',
       required=0)
 
   x_stop_bloc = fields.StringField('x_stop_bloc',
       title='Specific property to get stop of blocks (ex. stop_date)',
-      description=('Property for building X-Axis such as stop_date\
-      objects'),
+      description='Property for building X-Axis such as stop_date ' \
+                  'objects',
       default='stop_date',
       required=0)
 
   y_size_block = fields.StringField('y_size_block',
       title='Specific property to get height of blocks (ex.quantity)',
-      description=('Method for building height of blocks objects'),
+      description='Method for building height of blocks objects',
       default='quantity',
       required=0)
 
   constraint_method = fields.StringField('constraint_method',
       title='name of constraint method between blocks',
-      description=('Constraint method between blocks objects'),
+      description='Constraint method between blocks objects',
       default='SET_DHTML',
       required=1)
 
   stat_method = fields.StringField('stat_method',
       title="Name of script generating statistics",
-      description=("script for statistics"),
+      description="script for statistics",
       default='',
       required=0)
 
   split_method = fields.StringField('split_method',
       title='Name of script splitting activities into blocks',
-      description=("script for splitting activities into multiple blocks"),
+      description="script for splitting activities into multiple blocks",
       default='',
       required=0)
 
   color_script = fields.StringField('color_script',
       title='Name of script colorizing blocks',
-      description=('script for block colors object'),
+      description='script for block colors object',
       default='',
       required=0)
 
   round_script = fields.StringField('round_script',
-      title='Name of script rounding blocks during validation (ex.\
-            Planning_roundBoundToDay)',
-      description=('script for block bounds rounding when validating'),
+      title='Name of script rounding blocks during validation (ex. ' \
+            'Planning_roundBoundToDay)',
+      description='script for block bounds rounding when validating',
       default='',
       required=0)
 
 
   sec_axis_script = fields.StringField('sec_axis_script',
-      title='Name of script building secondary axis (ex.\
-            Planning_generateAxis)',
-      description=('Script for building secondary axis'),
+      title='Name of script building secondary axis (ex. ' \
+            'Planning_generateAxis)',
+      description='Script for building secondary axis',
       default='Planning_generateAxis',
       required=1)
 
   info_center = fields.StringField('info_center',
-      title='Specific method of data called for inserting info in\
-      block center',
-      description=('Method for displaying info in the center of a\
-      block object'),
+      title='Specific method of data called for inserting info in ' \
+            'block center',
+      description='Method for displaying info in the center of a ' \
+                  'block object',
       default='',
       required=0)
 
   info_topright = fields.StringField('info_topright',
-      title='Specific method of data called for inserting info in\
-      block topright',
-      description=('Method for displaying info in the topright of a block\
-      object'),
+      title='Specific method of data called for inserting info in '\
+            'block topright',
+      description='Method for displaying info in the topright of a block ' \
+                  'object',
       default='',
       required=0)
 
   info_topleft = fields.StringField('info_topleft',
-      title='Specific method of data called for inserting info in\
-      block topleft',
-      description=('Method for displaying info in the topleft corner\
-      of a block object'),
+      title='Specific method of data called for inserting info in ' \
+            'block topleft',
+      description='Method for displaying info in the topleft corner ' \
+                  'of a block object',
       default='',
       required=0)
 
   info_backleft = fields.StringField('info_backleft',
-      title='Specific method of data called for inserting info in\
-      block backleft',
-      description=('Method for displaying info in the backleft of a\
-      block object'),
+      title='Specific method of data called for inserting info in '\
+            'block backleft',
+      description='Method for displaying info in the backleft of a ' \
+                  'block object',
       default='',
       required=0)
 
   info_backright = fields.StringField('info_backright',
-      title='Specific method of data called for inserting info in\
-      block backright',
-      description=('Method for displaying info in the backright of a\
-      block object'),
+      title='Specific method of data called for inserting info in '
+            'block backright',
+      description='Method for displaying info in the backright of a ' \
+                  'block object',
       default='',
       required=0)
 
   security_index = fields.IntegerField('security_index',
       title='Variable depending on the type of web browser :',
-      description=("This variable is used because the rounds of each\
-      web browser seem to work differently"),
+      description='This variable is used because the rounds of each ' \
+                  'web browser seem to work differently',
       default=2,
       required=0)
 
-  def render_css(self,field, key, value, REQUEST):
+  def render_css(self, field, key, value, REQUEST):
     """
     first method called for rendering by PageTemplate form_view
     create the whole object based structure, and then call a special
@@ -934,17 +917,17 @@
     # structure relative to the planning
     # creates and fill up self.basic, self.planning and self.build_error_list
     self.render_structure(field=field, key=key, value=value,
-                                    REQUEST=REQUEST, here=here)
+                          REQUEST=REQUEST, here=here)
     # getting CSS script generator
-    planning_css_method = getattr(REQUEST['here'],'planning_css')
+    planning_css_method = getattr(REQUEST['here'], 'planning_css')
     # recover CSS data buy calling DTML document
     CSS_data = planning_css_method(structure=self)
     # saving structure inside the request for HTML render
-    REQUEST.set('structure',self)
+    REQUEST.set('structure', self)
 
     return CSS_data
 
-  def render(self,field,key,value,REQUEST):
+  def render(self, field, key, value, REQUEST):
     """
     Method called to render the HTML code relative to the planning.
     for that recover the structure previouly saved in the REQUEST, and then
@@ -964,16 +947,18 @@
     return HTML_data
 
   def render_structure(self, field, key, value, REQUEST, here):
-    """ this method is the begining of the rendering procedure. it calls all
-        methods needed to generate BasicStructure with ERP5 objects, and then
-        creates the PlanningStructure before applying zoom.
-        No code is generated (for example HTML code) contrary to the previous
-        implementation of PlanningBox. The final rendering must be done through
-        a PageTemplate parsing the PlanningStructure object.
-        """
+    """
+    This method is the begining of the rendering procedure. it calls all
+    methods needed to generate BasicStructure with ERP5 objects, and then
+    creates the PlanningStructure before applying zoom.
+    No code is generated (for example HTML code) contrary to the previous
+    implementation of PlanningBox. The final rendering must be done through
+    a PageTemplate parsing the PlanningStructure object.
+    """
     # XXX testing : uncoment to put selection to null => used for debugging
     #here.portal_selections.setSelectionFor(selection_name, None)
     ####### DATA DEFINITION #######
+    # XXX Conflict error
     self.build_error_list = None
     # recovering usefull planning properties
     # getting form
@@ -989,40 +974,48 @@
     sort = field.get_value('sort')
     # contains the list of blocks that are not validated
     # for them a special rendering is done (special colors for example)
-    list_error=REQUEST.get('list_block_error')
-    if list_error==None : list_error = []
+    list_error = REQUEST.get('list_block_error')
+    if list_error is None:
+      list_error = []
     selection = here.portal_selections.getSelectionFor(
                       selection_name, REQUEST)
     # params contained in the selection object is a dictionnary.
     # must exist as an empty dictionnary if selection is empty.
     try:
       params = selection.getParams()
-    except (AttributeError,KeyError):
+    except (AttributeError, KeyError):
       params = {}
+
     ###### CALL CLASS METHODS TO BUILD BASIC STRUCTURE ######
     # creating BasicStructure instance (and initializing its internal values)
-    self.basic = BasicStructure(here=here,form=form, field=field,
+    # XXX Conflict error
+    self.basic = BasicStructure(here=here,
+                                form=form, field=field,
                                 REQUEST=REQUEST, list_method=list_method,
-                                selection=selection, params = params,
+                                selection=selection, params=params,
                                 selection_name=selection_name,
                                 title_line=title_line,
                                 report_root_list=report_root_list,
-                                portal_types=portal_types, sort=sort,
+                                portal_types=portal_types,
+                                sort=sort,
                                 list_error=list_error)
     # call build method to generate BasicStructure
     status = self.basic.build()
     if status != 1:
+      # XXX Conflict error
       self.build_error_list = status
       return self
 
     ###### CALL CLASS METHODS TO BUILD PLANNING STRUCTURE ######
     # creating PlanningStructure instance and initializing its internal values
+    # XXX Conflict error
     self.planning = PlanningStructure()
     # call build method to generate final Planning Structure
     status = self.planning.build(basic_structure = self.basic,field=field,
                                  REQUEST=REQUEST)
     if status != 1:
       # in case error during planning structure generation
+      # XXX Conflict error
       self.build_error_list = status
       return self
 
@@ -1041,8 +1034,9 @@
   """
 
   def __init__ (self, here='', form='', field='', REQUEST='', list_method='',
-              selection=None, params = '', selection_name='', report_root_list='',
-              title_line='', portal_types='', sort=None, list_error=None):
+                selection=None, params = '', selection_name='',
+                report_root_list='', title_line='', portal_types='',
+                sort=None, list_error=None):
     """
     Init main internal parameters
     """
@@ -1059,11 +1053,13 @@
     self.report_root_list = report_root_list
     self.portal_types = portal_types
     self.basic_group_list = None
-    self.report_groups= '' # needed to generate groups
+    # needed to generate groups
+    self.report_groups= ''
     self.list_error = list_error
     self.secondary_axis_occurence = []
-    self.render_format = '' # 'list' in case output is a list containing the
-                            # full planning structure without any selection
+    # 'list' in case output is a list containing the
+    # full planning structure without any selection
+    self.render_format = ''
     self.main_axis_info = {}
     self.secondary_axis_info = {}
 
@@ -1079,11 +1075,10 @@
     """
     default_params ={}
     current_section = None
-    LOG('PlanningBox, build', 0, 'ici')
     #params = self.selection.getParams()
 
-
     #recovering selection if necessary
+    # XXX Use seclection tool API
     if self.selection is None:
       self.selection = Selection(params=default_params,
                                  default_sort_on=self.sort)
@@ -1092,11 +1087,13 @@
       self.selection.edit(default_sort_on=self.sort)
       self.selection.edit(sort_on=self.sort)
 
-    self.here.portal_selections.setSelectionFor(self.selection_name,
-                                        self.selection,REQUEST=self.REQUEST)
+    self.here.portal_selections.setSelectionFor(
+                                        self.selection_name,
+                                        self.selection,
+                                        REQUEST=self.REQUEST)
 
     # building list of portal_types
-    self.filtered_portal_types = map(lambda x: x[0], self.portal_types)
+    self.filtered_portal_types = [x[0] for x in self.portal_types]
     if len(self.filtered_portal_types) == 0:
       self.filtered_portal_types = None
 
@@ -1139,7 +1136,7 @@
             del kw['portal_type']
         # remove useless matter
         for cname in self.params.keys():
-          if self.params[cname] != '' and self.params[cname] != None:
+          if self.params[cname] != '' and self.params[cname] is not None:
             kw[cname] = self.params[cname]
         # try to get the method through acquisition
         try:
@@ -1155,7 +1152,7 @@
     ##################################################
     stat_method = self.field.get_value('stat_method')
     stat_method = getattr(self.here,stat_method, None)
-    if stat_method == None:
+    if stat_method is None:
       show_stat = 0
     else:
       show_stat = 1
@@ -1231,9 +1228,9 @@
     select_expression = ''
 
     # now iterating through report_tree_list
-    LOG('PlanningBox, build', 0, 'report_tree_list %s' % len(report_tree_list))
+#     LOG('PlanningBox, build', 0, 'report_tree_list %s' % len(report_tree_list))
     for object_tree_line in report_tree_list:
-      LOG('PlanningBox, build', 0, 'object_tree_line %s' % str(object_tree_line))
+#       LOG('PlanningBox, build', 0, 'object_tree_line %s' % str(object_tree_line))
       # prepare query by defining selection report object
       # defining info_dict, holding all information about the current object.
       info_dict = None
@@ -1468,7 +1465,7 @@
       item_list = []
 
       # recovering group_properties
-      if start_property_id != None:
+      if start_property_id is not None:
         group_start = \
         object_tree_group.object.getObject().getProperty(start_property_id,
                                                          None)
@@ -1477,7 +1474,7 @@
           object_tree_group.object.getObject().start_date
       else:
         group_start= None
-      if stop_property_id != None:
+      if stop_property_id is not None:
         group_stop = \
         object_tree_group.object.getObject().getProperty(stop_property_id,None)
         if object_tree_group.object.getObject().hasProperty('stop_date'):
@@ -1501,12 +1498,12 @@
       # recovering item properties
       if object_list not in (None, [], {}) :
         for object_request in object_list:
-          if start_property_id != None:
+          if start_property_id is not None:
             block_begin = \
             object_request.getObject().getProperty(start_property_id,None)
           else:
             block_begin = None
-          if stop_property_id != None:
+          if stop_property_id is not None:
             block_stop = \
             object_request.getObject().getProperty(stop_property_id,None)
           else:
@@ -1547,13 +1544,13 @@
     axis_dict['bound_end'] = axis_dict['bound_begin']
     for occurence in self.secondary_axis_occurence:
       if (occurence[0] < axis_dict['bound_begin'] or \
-          axis_dict['bound_begin'] == None) and occurence[0] != None:
+          axis_dict['bound_begin'] is None) and occurence[0] is not None:
         axis_dict['bound_begin'] = occurence[0]
       if (occurence[1] > axis_dict['bound_end'] or  \
-          axis_dict['bound_end'] == None) and occurence[1] != None:
+          axis_dict['bound_end'] is None) and occurence[1] is not None:
         axis_dict['bound_end'] = occurence[1]
 
-    if axis_dict['bound_end']== None or axis_dict['bound_begin'] == None:
+    if axis_dict['bound_end']is None or axis_dict['bound_begin'] is None:
       # ERROR
       # no bounds over the secondary axis have been defined
       # can append if bad property has been selected
@@ -1571,7 +1568,7 @@
     # can now get selection informations ( float range 0..1)
     axis_dict['bound_start'] = 0
     axis_dict['bound_stop'] = 1
-    if self.selection != None:
+    if self.selection is not None:
       # selection is not None, trying to recover previously saved values about
       # secondary axis (axis start and stop bounds)
       try:
@@ -1607,7 +1604,7 @@
     example).
     """
     axis_dict['bound_axis_groups'] = self.field.get_value('main_axis_groups')
-    if axis_dict['bound_axis_groups'] == None:
+    if axis_dict['bound_axis_groups'] is None:
       #XXX raise exception : no group nb/page defined
       pass
 
@@ -1816,16 +1813,16 @@
         else:
           block_begin = None
 
-        if object_property_end != None:
+        if object_property_end is not None:
           block_end = getattr(activity_content.getObject(),object_property_end)
         else:
           block_end = None
 
         # handling case where activity bound is not defined
-        if block_begin == None:
+        if block_begin is None:
           block_begin = secondary_axis_info['bound_start']
           current_color='#E4CCE1'
-        if block_end == None:
+        if block_end is None:
           block_end = secondary_axis_info['bound_stop']
           current_color='#E4CCE1'
         # testing if activity is visible according to the current zoom
@@ -1953,7 +1950,7 @@
       else:
         block_begin = None
 
-      if object_property_end != None:
+      if object_property_end is not None:
         block_end = self.object.getObject().getProperty(object_property_end)
       else:
         block_end = None
@@ -1962,10 +1959,10 @@
                secondary_axis_info.has_key('bound_stop'):
         # testing if activity is visible according to the current zoom selection
         # over the secondary_axis
-        if (block_begin == None):
+        if (block_begin is None):
           block_begin = secondary_axis_info['bound_start']
           current_color='#E4CCE1'
-        if block_end == None:
+        if block_end is None:
           block_end = secondary_axis_info['bound_stop']
           current_color='#E4CCE1'
 
@@ -2049,11 +2046,12 @@
 
 
 class PlanningStructure:
-  """ class aimed to generate the Planning final structure, including :
-      - activities with their blocs (so contains Activity structure)
-      - Axis informations (contains Axis Structure).
-      The zoom properties on secondary axis are applied to this structure.
-      """
+  """
+  class aimed to generate the Planning final structure, including :
+  - activities with their blocs (so contains Activity structure)
+  - Axis informations (contains Axis Structure).
+  The zoom properties on secondary axis are applied to this structure.
+  """
 
   def __init__ (self):
     self.main_axis = ''
@@ -2062,7 +2060,7 @@
     self.content_delimiters = None
 
 
-  def build(self,basic_structure=None, field=None, REQUEST=None):
+  def build(self, basic_structure=None, field=None, REQUEST=None):
     """
     main procedure for building Planning Structure
     do all the necessary process to construct a full Structure compliant with
@@ -2076,11 +2074,11 @@
 
     # declaring main axis
     self.main_axis = Axis(title='main axis', name='axis',
-                     unit='', axis_order=1,axis_group=[])
+                          unit='', axis_order=1, axis_group=[])
 
     # declaring secondary axis
     self.secondary_axis = Axis(title='sec axis', name='axis',
-                     unit='', axis_order=2, axis_group=[])
+                               unit='', axis_order=2, axis_group=[])
 
     # linking axis objects to their corresponding accessor, i.e X or Y
     # this allows the planning to be generic.
@@ -2106,8 +2104,9 @@
     # call method to build secondary axis structure
     # need start_bound, stop_bound and number of groups to build
     # used in non calendar mode
-    status = self.buildSecondaryAxis(basic_structure,field)
+    status = self.buildSecondaryAxis(basic_structure, field)
     if status != 1:
+      # XXX Hidding error is not a good solution generally
       # ERROR while building secondary axis
       return status
     # completing axisgroup informations according to their bounds
@@ -2119,30 +2118,33 @@
     # axis_elements with their activities. Just need to create blocks related
     # to the activities (special process only for Calendar mode) with their
     # BlockPosition
-    status = self.buildBlocs(basic_structure=basic_structure, REQUEST = REQUEST)
+    status = self.buildBlocs(basic_structure=basic_structure, REQUEST=REQUEST)
     if status != 1:
       # ERROR while building blocks
       return status
     # everything is fine, returning 'true' flag.
     return 1
 
-  def buildSecondaryAxis(self,basic_structure, field):
+  def buildSecondaryAxis(self, basic_structure, field):
     """
     build secondary axis structure
     """
     # defining min and max delimiter number
+    # XXX Isn't field enough ?
     delimiter_min_number = basic_structure.field.get_value('delimiter')
     if basic_structure.calendar_mode:
       axis_start = 1
       axis_stop = basic_structure.calendar_range + 1
     else:
-      axis_stop = (self.secondary_axis.stop)
-      axis_start = (self.secondary_axis.start)
-
+      axis_stop = self.secondary_axis.stop
+      axis_start = self.secondary_axis.start
+
+    # XXX Isn't field enough ?
     axis_script=getattr(basic_structure.here,
-                       basic_structure.field.get_value('sec_axis_script'),None)
-    if axis_script == None:
+                        basic_structure.field.get_value('sec_axis_script'),None)
+    if axis_script is None:
       # ERROR
+      # XXX Shouldn't planning box failed in this case, because of bad config ?
       message = 'unable to find secondary axis generation script : "%s" does \
              not exist' % basic_structure.field.get_value('sec_axis_script')
       return [(Message(domain='erp5_ui', message=message, mapping=None))]
@@ -2152,8 +2154,10 @@
     # wanted. a structure is returned : list of delimiters, each delimiter
     # defined by a list [ relative position, title, tooltip , delimiter_type]
     try:
-      delimiter_list = axis_script(axis_start,axis_stop,delimiter_min_number)
+      delimiter_list = axis_script(axis_start, axis_stop, delimiter_min_number)
     except (ArithmeticError, LookupError, AttributeError, TypeError):
+      # XXX Seems that too many error are catched
+      # XXX Shouldn't planning box failed in this case, because of bad config ?
       message =  'error raised in secondary axis generation script : please \
              check "%s"'% basic_structure.field.get_value('sec_axis_script')
       return [(Message(domain='erp5_ui', message=message,mapping=None))]
@@ -2170,6 +2174,7 @@
     # group position and size informations are saved in position_secondary
     # using relative coordinates
     for delimiter in delimiter_list:
+      # XXX What is delimiter ? API needed
       axis_group = AxisGroup(name='Group_sec_' + str(axis_group_number),
                              title=delimiter[1], delimiter_type=delimiter[3])
       axis_group.tooltip = delimiter[2]
@@ -2179,11 +2184,9 @@
       axis_group.position_secondary.relative_end  = int(axis_stop)
       axis_group.position_secondary.relative_range = \
                              int(axis_stop) - int(delimiter[0])
-      if delimiter == delimiter_list[0]:
-        # actual delimiter is the first delimiter entered
-        # do not need to update previous delimiter informations
-        pass
-      else:
+      # do not need to update previous delimiter informations for first
+      # delimiter
+      if delimiter != delimiter_list[0]:
         # actual delimiter info has a previous delimiter
         # update its informations
         self.secondary_axis.axis_group[-1].position_secondary.relative_end = \
@@ -2199,40 +2202,43 @@
 
   def completeAxis(self):
     """
-    complete axis infomations (and more precisely axis position objects) thanks
+    complete axis informations (and more precisely axis position objects) thanks
     to the actual planning structure
     """
 
     # processing main axis
     for axis_group_element in self.main_axis.axis_group:
-      axis_group_element.position_main.absolute_begin = (
+      position_main = axis_group_element.position_main
+      position_main.absolute_begin = (
               float(axis_group_element.axis_element_start - 1) /
               float(self.main_axis.size))
-      axis_group_element.position_main.absolute_end = (
+      position_main.absolute_end = (
               float(axis_group_element.axis_element_stop) /
               float(self.main_axis.size))
-      axis_group_element.position_main.absolute_range = (
+      position_main.absolute_range = (
               float(axis_group_element.axis_element_number) /
               float(self.main_axis.size))
-      axis_group_element.position_secondary.absolute_begin = 0
-      axis_group_element.position_secondary.absolute_end = 1
-      axis_group_element.position_secondary.absolute_range= 1
+      position_secondary = axis_group_element.position_secondary
+      position_secondary.absolute_begin = 0
+      position_secondary.absolute_end = 1
+      position_secondary.absolute_range= 1
 
 
     for axis_group_element in self.secondary_axis.axis_group:
-      position = axis_group_element.position_secondary
-      axis_group_element.position_secondary.absolute_begin = (
-           float(axis_group_element.position_secondary.relative_begin) /
+      position_secondary = axis_group_element.position_secondary
+      position_secondary.absolute_begin = (
+           float(position_secondary.relative_begin) /
            self.secondary_axis.axis_size)
-      axis_group_element.position_secondary.absolute_end = (
-           float(axis_group_element.position_secondary.relative_end) /
+      position_secondary.absolute_end = (
+           float(position_secondary.relative_end) /
            self.secondary_axis.axis_size)
-      axis_group_element.position_secondary.absolute_range = (
-           float(axis_group_element.position_secondary.relative_range) /
+      position_secondary.absolute_range = (
+           float(position_secondary.relative_range) /
            self.secondary_axis.axis_size)
-      axis_group_element.position_main.absolute_begin = 0
-      axis_group_element.position_main.absolute_end   = 1
-      axis_group_element.position_main.absolute_range = 1
+      position_main = axis_group_element.position_main
+      position_main.absolute_begin = 0
+      position_main.absolute_end = 1
+      position_main.absolute_range = 1
 
     # returning 'true' flag at the end of the process
     return 1
@@ -2249,18 +2255,19 @@
       else:
         secondary_axis_range = None
       axis_group_number += 1
-      axis_group= AxisGroup(name='Group_' + str(axis_group_number),
-                            title=basic_group_object.title,
-                            object=basic_group_object.object,
-                            axis_group_number = axis_group_number,
-                            is_open=basic_group_object.is_open,
-                            is_pure_summary=basic_group_object.is_pure_summary,
-                            url = basic_group_object.url,
-                            depth=basic_group_object.depth,
-                            secondary_axis_start = basic_group_object.secondary_axis_start,
-                            secondary_axis_stop  = basic_group_object.secondary_axis_stop,
-                            secondary_axis_range = secondary_axis_range,
-                            property_dict = basic_group_object.property_dict)
+      axis_group = AxisGroup(
+                name='Group_%s' % axis_group_number,
+                title=basic_group_object.title,
+                object=basic_group_object.object,
+                axis_group_number=axis_group_number,
+                is_open=basic_group_object.is_open,
+                is_pure_summary=basic_group_object.is_pure_summary,
+                url = basic_group_object.url,
+                depth=basic_group_object.depth,
+                secondary_axis_start=basic_group_object.secondary_axis_start,
+                secondary_axis_stop=basic_group_object.secondary_axis_stop,
+                secondary_axis_range=secondary_axis_range,
+                property_dict=basic_group_object.property_dict)
 
       if self.calendar_view == 0:
         axis_group.position_y = axis_group.position_main
@@ -2278,7 +2285,7 @@
       # updating start value
       activity_number = 0
       axis_group.axis_element_start = axis_element_already_present + 1
-      if basic_group_object.basic_activity_list != None:
+      if basic_group_object.basic_activity_list is not None:
         # need to check if activity list is not empty : possible in case zoom
         # selection is used over the secondary axis
         if axis_group.property_dict['stat'] == 0:
@@ -2288,8 +2295,8 @@
             activity_number += 1
             # create new activity in the PlanningStructure
             activity=Activity(name='Group_%s_Activity_%s' % (
-                              str(axis_group_number),
-                              str(activity_number)),
+                                   axis_group_number,
+                                   activity_number),
                               title=basic_activity_object.title,
                               object=basic_activity_object.object,
                               color=basic_activity_object.color,
@@ -2323,8 +2330,8 @@
         # prevent bug or crash
         axis_group.axis_element_number = 1
         new_axis_element=AxisElement(name='Group_%s_AxisElement_1' %
-                                           str(axis_group_number),
-                                 relative_number= 1,
+                                           axis_group_number,
+                                 relative_number=1,
                                  absolute_number=axis_group.axis_element_start,
                                  parent_axis_group=axis_group)
         # add new activity to this brand new axis_element
@@ -2332,8 +2339,8 @@
         axis_group.axis_element_list = []
         axis_group.axis_element_list.append(new_axis_element)
 
-      axis_group.axis_element_stop = (axis_element_already_present +
-                                     axis_group.axis_element_number)
+      axis_group.axis_element_stop = \
+          axis_element_already_present + axis_group.axis_element_number
       axis_element_already_present = axis_group.axis_element_stop
       try:
         self.main_axis.axis_group.append(axis_group)
@@ -2343,15 +2350,15 @@
     return axis_element_already_present
 
 
-  def buildBlocs(self,basic_structure=None, REQUEST=None):
+  def buildBlocs(self, basic_structure=None, REQUEST=None):
     """
     iterate the whole planning structure to get various activities and build
     their related blocs.
     """
     # recover activity and block error lists
-    warning_activity_list = REQUEST.get('warning_activity_list',[])
-    error_block_list = REQUEST.get('error_block_list',[])
-    error_info_dict = REQUEST.get('error_info_dict',{})
+    warning_activity_list = REQUEST.get('warning_activity_list', [])
+    error_block_list = REQUEST.get('error_block_list', [])
+    error_info_dict = REQUEST.get('error_info_dict', {})
     for axis_group_object in self.main_axis.axis_group:
       for axis_element_object in axis_group_object.axis_element_list:
         for activity in axis_element_object.activity_list:
@@ -2376,12 +2383,14 @@
                                 planning=self, warning=warning,
                                 error_block_list=error_block_list,
                                 error_info_dict=error_info_dict)
-          if status !=1: return status
+          if status != 1: 
+            return status
         if axis_group_object.property_dict['stat'] == 1:
           # case stat group_object, need to update block size to display
           # stats informations
           status = axis_group_object.updateStatBlocks()
-          if status !=1: return status
+          if status != 1: 
+            return status
     # no problem during process, returning 'true' flag
     return 1
 
@@ -2399,30 +2408,37 @@
                 color=None, link=None, height=None, secondary_axis_begin=None,
                 secondary_axis_end=None, secondary_axis_start=None,
                 secondary_axis_stop=None, primary_axis_block=None, info=None,
-                calendar_view=0, property_dict={} ):
-    self.name = name # internal activity_name
+                calendar_view=0, property_dict={}):
+    # internal activity_name
+    self.name = name
     self.id = self.name
-    self.title = title # displayed activity_name
+    # displayed activity_name
+    self.title = title
     self.object = object
-    self.types = types # activity, activity_error, info
-    self.color = color # color used to render all Blocs
-    self.link = link # link to the ERP5 object
+    # activity, activity_error, info
+    self.types = types
+    # color used to render all Blocs
+    self.color = color
+    # link to the ERP5 object
+    self.link = link
     self.height = height
     # self.constraints = constraints
-    self.block_list = None # contains all the blocs used to render the activity
-    self.secondary_axis_begin =secondary_axis_begin
-    self.secondary_axis_end=secondary_axis_end
-    self.secondary_axis_start=secondary_axis_start
-    self.secondary_axis_stop=secondary_axis_stop
+    # contains all the blocs used to render the activity
+    self.block_list = None
+    self.secondary_axis_begin = secondary_axis_begin
+    self.secondary_axis_end = secondary_axis_end
+    self.secondary_axis_start = secondary_axis_start
+    self.secondary_axis_stop = secondary_axis_stop
     self.primary_axis_block = primary_axis_block
     self.block_bounds = None
     self.info = info
     self.parent_axis_element = None
-    self.calendar_view= calendar_view
+    self.calendar_view = calendar_view
     self.property_dict = property_dict
 
 
-  def get_error_message (self, Error):
+  # XXX Still used ?
+  def get_error_message(self, Error):
     # need to update the error message
     return 'task %s (%s)not validated' % (self.name, self.title)
 
@@ -2452,22 +2468,17 @@
     activity (can have several blocs if necessary).
     """
     # recover list of bounds
-    if self.secondary_axis_start != None or self.secondary_axis_stop != None:
-      #split_method_name = field.get_value('split_method',None)
-      #split_method = getattr(self.object,split_method_name, None)
-      #if split_method != None:
-
+    if self.secondary_axis_start is not None or \
+        self.secondary_axis_stop is not None:
       secondary_block_bounds = self.splitActivity()
-      #secondary_block_bounds = split_method(self.secondary_axis_start,
-                                           # self.secondary_axis_stop)
 
     else:
        secondary_block_bounds = \
-          [[secondary_axis_start, secondary_axis_stop,1]]
+          [[secondary_axis_start, secondary_axis_stop, 1]]
 
     block_number = 0
     # iterating resulting list
-    for (start,stop,zone) in secondary_block_bounds:
+    for (start, stop, zone) in secondary_block_bounds:
 
       block_number += 1
 
@@ -2476,10 +2487,10 @@
 
       if block_name in error_block_list:
         error = 1
-        error_text= error_info_dict[block_name]
+        error_text = error_info_dict[block_name]
       else:
         error = 0
-        error_text=''
+        error_text = ''
 
       # zone property is used to check if block is an active (main activity
       # block) block or a passive one (just a display block)
@@ -2501,47 +2512,50 @@
       new_block.buildInfoDict(info_dict = self.info)
 
       # updating secondary_axis block position
-      if self.secondary_axis_start != None:
-        new_block.position_secondary.absolute_begin = start
+      position_secondary = new_block.position_secondary
+      if self.secondary_axis_start is not None:
+        position_secondary.absolute_begin = start
       else:
-        new_block.position_secondary.absolute_begin = secondary_axis_start
-      if self.secondary_axis_stop != None:
-        new_block.position_secondary.absolute_end = stop
+        position_secondary.absolute_begin = secondary_axis_start
+      if self.secondary_axis_stop is not None:
+        position_secondary.absolute_end = stop
       else:
-        new_block.position_secondary.absolute_end = secondary_axis_stop
-      new_block.position_secondary.absolute_range = stop - start
+        position_secondary.absolute_end = secondary_axis_stop
+      position_secondary.absolute_range = stop - start
+
       # updating main_axis block position
-      new_block.position_main.absolute_begin = \
+      position_main = new_block.position_main
+      position_main.absolute_begin = \
                       self.parent_axis_element.absolute_number - 1
-      new_block.position_main.absolute_end = \
+      position_main.absolute_end = \
                       self.parent_axis_element.absolute_number
-      new_block.position_main.absolute_range = (
+      position_main.absolute_range = (
                       new_block.position_main.absolute_end -
                       new_block.position_main.absolute_begin)
 
       # now absolute positions are updated, and the axis values are known
       # (as parameters), processing relative values
       # => but before updating secondary_axis bounds
-      new_block.position_secondary.relative_begin = (
-          float(new_block.position_secondary.absolute_begin -
+      position_secondary.relative_begin = (
+          float(position_secondary.absolute_begin -
           secondary_axis_start) / float(secondary_axis_range))
-      new_block.position_secondary.relative_end = (
-          float(new_block.position_secondary.absolute_end -
+      position_secondary.relative_end = (
+          float(position_secondary.absolute_end -
           secondary_axis_start) / float(secondary_axis_range))
-      new_block.position_secondary.relative_range = (
-          new_block.position_secondary.relative_end -
-          new_block.position_secondary.relative_begin)
+      position_secondary.relative_range = (
+          position_secondary.relative_end -
+          position_secondary.relative_begin)
 
       # new coordinates are processed from the axis properties instead of the
-      new_block.position_main.relative_begin = (
-          float(new_block.position_main.absolute_begin - main_axis_start) /
+      position_main.relative_begin = (
+          float(position_main.absolute_begin - main_axis_start) /
           float(main_axis_stop - main_axis_start))
-      new_block.position_main.relative_end = (
-          float(new_block.position_main.absolute_end - main_axis_start) /
+      position_main.relative_end = (
+          float(position_main.absolute_end - main_axis_start) /
           float(main_axis_stop - main_axis_start))
-      new_block.position_main.relative_range = (
-          new_block.position_main.relative_end -
-          new_block.position_main.relative_begin)
+      position_main.relative_range = (
+          position_main.relative_end -
+          position_main.relative_begin)
 
       try:
         self.block_list.append(new_block)
@@ -2569,59 +2583,59 @@
            work from 18P.M to 9A.M).
            will use an external script to do so.
     """
-    # XXX not implemented yet
-    return [(self.secondary_axis_start,self.secondary_axis_stop,1)]
-
-    returned_list = []
-
-
-    start_date = self.secondary_axis_start
-    stop_date = self.secondary_axis_stop
-
-    temp_start = start_date
-    temp_stop  = temp_start
-
-    # defining usefull list of data
-    break_list = ['Saturday','Sunday']
-    worked_list = ['Monday','Tuesday','Wednesday','Thursday','Friday']
-
-    if temp_start.Day() in break_list:
-      # temp_start is in weekend,
-      # getting first worked day
-      while temp_start.Day() in break_list and temp_start < stop_date:
-        temp_start += 1
-      returned_list.append([temp_stop,temp_start,0])
-    else:
-      # temp_stop is in week, getting first weekend
-      while temp_stop.Day() in worked_list and temp_stop < stop_date:
-        temp_stop += 1
-      if temp_stop > stop_date:
-        temp_stop = stop_date
-
-    # testing if current activity is not too small to create blocks
-    while temp_start < stop_date:
-      returned_list.append([temp_start,temp_stop,1])
-
-      temp_start = temp_stop
-      # going to next start_date
-      while temp_start.Day() in break_list and temp_start < stop_date:
-        temp_start += 1
-
-      # adding new start date to list
-      if temp_start >= stop_date:
-        returned_list.append([temp_stop,stop_date,0])
-      elif temp_start != temp_stop:
-        returned_list.append([temp_stop,temp_start,0])
-      # next temp_start has been found
-      # now processing new temp_stop
-      temp_stop = temp_start
-      while temp_stop.Day() in worked_list and temp_stop < stop_date:
-        temp_stop += 1
-      if temp_stop > stop_date:
-        temp_stop = stop_date
-
-    # return new list
-    return returned_list
+    # XXX Not implemented yet
+    return [(self.secondary_axis_start, self.secondary_axis_stop,1)]
+
+    # Draft implementation
+#     returned_list = []
+#
+#     start_date = self.secondary_axis_start
+#     stop_date = self.secondary_axis_stop
+#
+#     temp_start = start_date
+#     temp_stop  = temp_start
+#
+#     # defining usefull list of data
+#     break_list = ['Saturday','Sunday']
+#     worked_list = ['Monday','Tuesday','Wednesday','Thursday','Friday']
+#
+#     if temp_start.Day() in break_list:
+#       # temp_start is in weekend,
+#       # getting first worked day
+#       while temp_start.Day() in break_list and temp_start < stop_date:
+#         temp_start += 1
+#       returned_list.append([temp_stop,temp_start,0])
+#     else:
+#       # temp_stop is in week, getting first weekend
+#       while temp_stop.Day() in worked_list and temp_stop < stop_date:
+#         temp_stop += 1
+#       if temp_stop > stop_date:
+#         temp_stop = stop_date
+#
+#     # testing if current activity is not too small to create blocks
+#     while temp_start < stop_date:
+#       returned_list.append([temp_start,temp_stop,1])
+#
+#       temp_start = temp_stop
+#       # going to next start_date
+#       while temp_start.Day() in break_list and temp_start < stop_date:
+#         temp_start += 1
+#
+#       # adding new start date to list
+#       if temp_start >= stop_date:
+#         returned_list.append([temp_stop,stop_date,0])
+#       elif temp_start != temp_stop:
+#         returned_list.append([temp_stop,temp_start,0])
+#       # next temp_start has been found
+#       # now processing new temp_stop
+#       temp_stop = temp_start
+#       while temp_stop.Day() in worked_list and temp_stop < stop_date:
+#         temp_stop += 1
+#       if temp_stop > stop_date:
+#         temp_stop = stop_date
+#
+#     # return new list
+#     return returned_list
 
 
 
@@ -2643,14 +2657,20 @@
     """
     creates a Bloc object
     """
-    self.name = name # internal name
-    self.types = types # activity, activity_error, info
+    # internal name
+    self.name = name
+    # activity, activity_error, info
+    self.types = types
     self.color = color
-    self.info = info # dict containing text with their position
-    self.link = link # on clic link
+    # dict containing text with their position
+    self.info = info
+    # on clic link
+    self.link = link
     self.number = number
     self.title=''
-    self.zone = zone # 1 = usefull area : 0 = useless one
+    # 1 = usefull area : 0 = useless one
+    # XXX Bad naming, as it's not easy to understand
+    self.zone = zone
     self.parent_activity = parent_activity
     self.constraints = constraints
     # setting warning and error flags in case parent_activity or block itself
@@ -2674,31 +2694,25 @@
     self.render_dict = None
     self.property_dict = property_dict # dict containing internal properties
 
-  def buildInfoDict (self, info_dict=[]):
+  def buildInfoDict(self, info_dict=[]):
     """
     create Info objects to display text & images, then link them to the
     current object
     """
-
     # updating title
     if self.property_dict['stat'] == 1:
       self.title = str(self.parent_activity.height)
       self.info = None
     else:
       self.info = {}
-      title_list = []
-      title_list.append(
-                 self.buildInfo(info_dict=info_dict, area='info_topleft'))
-      title_list.append(
-                 self.buildInfo(info_dict=info_dict, area='info_topright'))
-      title_list.append(
-                 self.buildInfo(info_dict=info_dict, area='info_center'))
-      title_list.append(
-                 self.buildInfo(info_dict=info_dict, area='info_botleft'))
-      title_list.append(
-                 self.buildInfo(info_dict=info_dict, area='info_botright'))
+      title_list = [
+        self.buildInfo(info_dict=info_dict, area='info_topleft'),
+        self.buildInfo(info_dict=info_dict, area='info_topright'),
+        self.buildInfo(info_dict=info_dict, area='info_center'),
+        self.buildInfo(info_dict=info_dict, area='info_botleft'),
+        self.buildInfo(info_dict=info_dict, area='info_botright'),
+      ]
       self.title = " | ".join(title_list)
-
 
     if self.error != 0:
       # field has error
@@ -2785,13 +2799,19 @@
                 property_dict={}):
     self.name = name
     self.title = title
-    self.link = None # link to fold or unfold report in report-tree mode
+    # link to fold or unfold report in report-tree mode
+    self.link = None
     self.info_title = Info(info=self.title, link=self.link, title=self.title)
-    self.tooltip = '' # tooltip used when cursor pass over the group
-    self.object = object # ZODB object used to validate modifications
-    self.axis_group_list = axis_group_list # ReportTree
+    # tooltip used when cursor pass over the group
+    self.tooltip = ''
+    # ZODB object used to validate modifications
+    # XXX May generate conflict if an old version of object is saved
+    self.object = object
+    # ReportTree
+    self.axis_group_list = axis_group_list
     self.axis_group_number = axis_group_number
-    self.axis_element_list = axis_element_list # Multitasking
+    # Multitasking
+    self.axis_element_list = axis_element_list
     self.axis_element_number = axis_element_number
     self.axis_element_start = None
     self.axis_element_stop = None
@@ -2803,7 +2823,8 @@
     self.is_open = is_open
     self.is_pure_summary = is_pure_summary
     self.depth = depth
-    self.url = url # url to the object
+    # url to the object
+    self.url = url
 
     self.position_main = Position()
     self.position_secondary = Position()
@@ -2822,8 +2843,9 @@
 
 
   security = ClassSecurityInfo()
+
   security.declarePublic('setTitle')
-  def setTitle(self,new_title = None):
+  def setTitle(self, new_title=None):
     self.title = new_title
 
   def fixProperties(self, form_id=None, selection_name=None):
@@ -2831,24 +2853,25 @@
     using actual AxisGroup properties to define some special comportement that
     the axisGroup should have, especially in case of report-tree
     """
+    info_title = self.info_title
     if self.is_open:
       # current report is unfold, action 'fold'
-      self.info_title.link = 'foldReport?report_url=' + \
+      info_title.link = 'foldReport?report_url=' + \
                               '%s&form_id=%s&list_selection_name=%s' %(
                               self.url, form_id, selection_name)
-      self.info_title.info = '[-] ' + str(self.info_title.info)
+      info_title.info = '[-] ' + str(info_title.info)
     else:
       # current report is fold, action 'unfold'
-      self.info_title.link = 'unfoldReport?report_url=' + \
+      info_title.link = 'unfoldReport?report_url=' + \
                              '%s&form_id=%s&list_selection_name=%s' %(
                               self.url, form_id, selection_name)
-      self.info_title.info = '[+] ' + str(self.info_title.info)
+      info_title.info = '[+] ' + str(info_title.info)
 
     #for i in range(self.depth):
     #  self.title = '| ' + self.title
-    self.info_title.title = self.info_title.info
-
-    self.tooltip = self.info_title.info
+    info_title.title = info_title.info
+
+    self.tooltip = info_title.info
 
 
   def addActivity(self, activity=None, axis_element_already_insered= 0):
@@ -2860,6 +2883,8 @@
 
     # declaring variable used to check if activity has already been added
     added = 0
+    # XXX To much code inside the try: it's not possible to see
+    # which part must not fails...
     try:
       # iterating each axis_element of the axis_group
       for axis_element in self.axis_element_list:
@@ -2896,7 +2921,7 @@
         # can contain the new activity.
         self.axis_element_number += 1
         # Need to create a new axis_element to hold the new activity
-        new_axis_element=AxisElement(name='Group_%s_AxisElement_%s'%
+        new_axis_element=AxisElement(name='Group_%s_AxisElement_%s' % \
                                           (str(self.axis_group_number),
                                            str(self.axis_element_number)),
                                      relative_number=self.axis_element_number,
@@ -3000,30 +3025,30 @@
     """
     # usually should get only 1 axis_element : all stats are displayed on the
     # same line.
-    max_activity_height = 0
-    for activity in self.axis_element_list[0].activity_list:
-      if activity.height > max_activity_height:
-        max_activity_height = activity.height
+    activity_list = self.axis_element_list[0].activity_list
+    max_activity_height = max([0]+[x.height for x in activity_list])
 
     # now max height is known, just need to adapt size of all the blocks
     # composing the activities
-    for activity in self.axis_element_list[0].activity_list:
-      if activity.height in (0,None):
+    for activity in activity_list:
+      height = activity.height
+      if height in (0, None):
         relative_size = 1
       else:
-        relative_size = float(activity.height) / max_activity_height
+        relative_size = float(height) / max_activity_height
       for block in activity.block_list:
         # recovering original values
-        block_range = block.position_main.relative_range
-        block_begin = block.position_main.relative_begin
-        block_end   = block.position_main.relative_end
+        position_main = block.position_main
+        block_range = position_main.relative_range
+        block_begin = position_main.relative_begin
+        block_end   = position_main.relative_end
         # calculating values
         final_range = relative_size * block_range
         final_loss = block_range - final_range
         final_begin = block_begin + final_loss
         # saving new values
-        block.position_main.relative_begin = final_begin
-        block.position_main.relative_range = final_range
+        position_main.relative_begin = final_begin
+        position_main.relative_range = final_range
     return 1
 
 class AxisElement:
@@ -3036,11 +3061,13 @@
   existing AxisElement or if it is needed to create a new AxisElement in
   the AxisGroup to hold it.
   """
-  def __init__ (self,name='', relative_number=0, absolute_number=0,
-                activity_list=None, parent_axis_group = None):
+  def __init__ (self, name='', relative_number=0, absolute_number=0,
+                activity_list=None, parent_axis_group=None):
     self.name = name
-    self.relative_number = relative_number # relative number / AxisGroup
-    self.absolute_number = absolute_number # id in the current rendering
+    # relative number / AxisGroup
+    self.relative_number = relative_number
+    # id in the current rendering
+    self.absolute_number = absolute_number
     self.activity_list = activity_list
     # dict containing all class properties with their values
     self.render_dict=None
@@ -3060,53 +3087,41 @@
 
   security.declarePublic('edit')
   def edit(self, info=None):
-     """
-     Special method allowing to update Info content from an external script
-     """
-     self.info = info
+    """
+    Special method allowing to update Info content from an external script
+    """
+    self.info = info
 
 # declaring validator instance
 PlanningBoxValidatorInstance = PlanningBoxValidator()
 
+
 class PlanningBox(ZMIField):
-    meta_type = "PlanningBox"
-    widget = PlanningBoxWidgetInstance
-    validator = PlanningBoxValidatorInstance
-    security = ClassSecurityInfo()
-    security.declareProtected('Access contents information', 'get_value')
-    def get_value(self, id, **kw):
-      if id == 'default' and kw.get('render_format') in ('list', ):
-        return self.widget.render(self, self.generate_field_key() , None ,
-                                  kw.get('REQUEST'),
-                                  render_format=kw.get('render_format'))
-      else:
-        return ZMIField.get_value(self, id, **kw)
-
-    def render_css(self, value=None, REQUEST=None):
-      return self.widget.render_css(self,'',value,REQUEST)
-
-
-InitializeClass(PlanningBoxWidget)
-allow_class(PlanningBoxWidget)
-InitializeClass(BasicStructure)
-allow_class(BasicStructure)
-InitializeClass(BasicGroup)
-allow_class(BasicGroup)
-InitializeClass(BasicActivity)
-allow_class(BasicActivity)
-InitializeClass(PlanningStructure)
-allow_class(PlanningStructure)
-InitializeClass(Activity)
-allow_class(Activity)
-InitializeClass(Bloc)
-allow_class(Bloc)
-InitializeClass(Position)
-allow_class(Position)
-InitializeClass(Axis)
-allow_class(Axis)
-InitializeClass(AxisGroup)
-allow_class(AxisGroup)
-InitializeClass(AxisElement)
-allow_class(AxisElement)
-InitializeClass(Info)
-allow_class(Info)
+  meta_type = "PlanningBox"
+  widget = PlanningBoxWidgetInstance
+  validator = PlanningBoxValidatorInstance
+  security = ClassSecurityInfo()
+
+  security.declareProtected('Access contents information', 'get_value')
+  def get_value(self, id, render_format='html', **kw):
+    """
+    Surcharge get_value.
+    XXX What is the purpose ?
+    """
+    if id == 'default' and render_format == 'list':
+      return self.widget.render(self, self.generate_field_key(), None,
+                                kw.get('REQUEST'),
+                                render_format=render_format)
+    else:
+      return ZMIField.get_value(self, id, **kw)
+
+  def render_css(self, value=None, REQUEST=None):
+    return self.widget.render_css(self, '', value, REQUEST)
+
+# Allow classes in ZMI
+for klass in (PlanningBoxWidget, BasicStructure, BasicGroup,
+              BasicActivity, PlanningStructure, Activity,
+              Bloc, Position, Axis, AxisGroup, AxisElement,
+              Info):
+  InitializeClass(klass)
+  allow_class(klass)




More information about the Erp5-report mailing list