[Erp5-report] r8238 - in /erp5/trunk/products/ERP5/bootstrap/erp5_core: SkinTemplateItem/po...

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Jun 30 11:24:02 CEST 2006


Author: thomas
Date: Fri Jun 30 11:24:01 2006
New Revision: 8238

URL: http://svn.erp5.org?rev=8238&view=rev
Log:
2006-06-30 Thomas
* Added PlanningBox 3rd part scripts, including stats and axis generation.

Added:
    erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_commonStats.xml
    erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateAxis.xml
    erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateCalendarAxis.xml
    erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToDay.xml
    erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToInt.xml
Modified:
    erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/change_log

Added: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_commonStats.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_commonStats.xml?rev=8238&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_commonStats.xml (added)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_commonStats.xml Fri Jun 30 11:24:01 2006
@@ -1,0 +1,295 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+"""\n
+XXX temporary function to recover statistics when needed\n
+=> will be put in an external script.\n
+recover a list with temporary objects we want to apply stats on.\n
+(can be object itself, list of direct sons, list of all sons using\n
+recursive method, etc.)\n
+Then take this special list of objects and return a list of special\n
+temp_objects to display as blocks \'as they are\'\n
+"""\n
+from Products.ERP5Type.Document import newTempBase\n
+\n
+\n
+# first recovering methods to apply on tasks\n
+start_property_id = field.get_value(\'x_start_bloc\')\n
+stop_property_id= field.get_value(\'x_stop_bloc\')\n
+size_property_id = field.get_value(\'y_size_block\')\n
+\n
+\n
+\n
+###########################################################\n
+########### CREATING LIST OF TEMP STAT OBJECTS ############\n
+###########################################################\n
+# find a way to get all related objects with their sub-objects\n
+# this list of objects must be stored in a list\n
+# for now considering applying statistics on object_list\n
+# XXX bug : can not apply getExceptionUidList() method on object_tree_line.\n
+# <<unauthorized access>>\n
+#selection.edit(exception_uid_list= object_tree_line.getExceptionUidList())\n
+input_object_list = selection(method = list_method,context= selection_context,\n
+                                  REQUEST=REQUEST)\n
+\n
+temp_object_list = []\n
+temp_object_id = 0\n
+# now applying statictic rule.\n
+# for now statistic rules are static\n
+\n
+\n
+for input_object in input_object_list:\n
+  # recovering input_object attributes\n
+  block_begin = input_object.getObject().getProperty(start_property_id,None)\n
+  block_end = input_object.getObject().getProperty(stop_property_id,None)\n
+  block_size = input_object.getObject().getProperty(size_property_id,None)\n
+  if block_begin != None and block_end != None:\n
+    # do not create stat on non completed objects.\n
+    # prevent bug while size property is not defined on the object\n
+    if block_size == None: block_size = block_end - block_begin\n
+    #updating block_size value\n
+    block_size = float(block_size) / (block_end - block_begin)\n
+    # creating new object\n
+    temp_object = newTempBase(context.getPortalObject(),temp_object_id)\n
+    # editing object with new values\n
+    temp_object.setProperty(start_property_id,block_begin)\n
+    temp_object.setProperty(stop_property_id, block_end)\n
+    temp_object.setProperty(size_property_id, block_size)\n
+    # adding new object to list\n
+    temp_object_list.append(temp_object)\n
+    temp_object_id += 1\n
+\n
+###########################################################\n
+################ BUILDING STATS ACTIVITES #################\n
+###########################################################\n
+\n
+# building a special list structure.\n
+prop_list = []\n
+for temp_stat in temp_object_list:\n
+  block_begin = temp_stat.getProperty(start_property_id)\n
+  block_end   = temp_stat.getProperty(stop_property_id)\n
+  block_size  = temp_stat.getProperty(size_property_id)\n
+\n
+  prop_list.append([block_begin, block_size])\n
+  prop_list.append([block_end  ,-block_size])\n
+\n
+\n
+# now sorting list to put start & stop in the right order\n
+prop_list.sort()\n
+\n
+# now building new list of temp object with updated properties\n
+size = 0\n
+temp_stat_object_list = []\n
+for index in range(len(prop_list) - 1):\n
+  # iterating all prop_list elements except the last one\n
+  current_prop = prop_list[index]\n
+  size += current_prop[1] # new size is relative to the previous size\n
+  start = current_prop[0] # current start\n
+  stop = prop_list[index+1][0] # current stop is the begining of the next block\n
+  temp_stat_object_id = 0\n
+\n
+  if size > 0:\n
+    # size is not null\n
+    # building new tempObject\n
+    temp_stat_object_id += 1\n
+    temp_stat_object = newTempBase(context.getPortalObject(),temp_object_id)\n
+    # editing object with new values\n
+    temp_stat_object.setProperty(start_property_id,start)\n
+    temp_stat_object.setProperty(stop_property_id, stop)\n
+    temp_stat_object.setProperty(size_property_id, size)\n
+    # adding new object to list\n
+    temp_stat_object_list.append(temp_stat_object)\n
+    temp_stat_object_id +=1\n
+\n
+return temp_stat_object_list\n
+
+
+]]></string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value> <string>Script (Python):/nexedi/portal_skins/erp5_core/Planning_commonStats</string> </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>selection=None,list_method=None, selection_context=None, report_tree_list = None, object_tree_line=None, REQUEST=None, field=None</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>7</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>selection</string>
+                            <string>list_method</string>
+                            <string>selection_context</string>
+                            <string>report_tree_list</string>
+                            <string>object_tree_line</string>
+                            <string>REQUEST</string>
+                            <string>field</string>
+                            <string>Products.ERP5Type.Document</string>
+                            <string>newTempBase</string>
+                            <string>_getattr_</string>
+                            <string>start_property_id</string>
+                            <string>stop_property_id</string>
+                            <string>size_property_id</string>
+                            <string>input_object_list</string>
+                            <string>temp_object_list</string>
+                            <string>temp_object_id</string>
+                            <string>_getiter_</string>
+                            <string>input_object</string>
+                            <string>None</string>
+                            <string>block_begin</string>
+                            <string>block_end</string>
+                            <string>block_size</string>
+                            <string>float</string>
+<string>context</string>
+                            <string>temp_object</string>
+                            <string>prop_list</string>
+                            <string>temp_stat</string>
+                            <string>size</string>
+                            <string>temp_stat_object_list</string>
+                            <string>range</string>
+                            <string>len</string>
+                            <string>index</string>
+                            <string>_getitem_</string>
+                            <string>current_prop</string>
+                            <string>start</string>
+                            <string>stop</string>
+                            <string>temp_stat_object_id</string>
+                            <string>temp_stat_object</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <tuple>
+                <none/>
+                <none/>
+                <none/>
+                <none/>
+                <none/>
+                <none/>
+                <none/>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Planning_commonStats</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>

Added: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateAxis.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateAxis.xml?rev=8238&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateAxis.xml (added)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateAxis.xml Fri Jun 30 11:24:01 2006
@@ -1,0 +1,492 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+# In all cases, return list structure containing tuple of information\n
+# 1 tuple == 1 group\n
+# tuple is of the form :\n
+# [ relative position, title, tooltip, delimiter_type]\n
+# with delimiter type in 0,1,2\n
+\n
+if isinstance(axis_start,DateTime):\n
+  # testing delimiter_type to apply (day, week, month, year)\n
+  # from smallest type to biggest\n
+  type_list = [ [\'year\',   365],\n
+                [\'6months\',182],\n
+                [\'3months\', 91],\n
+                [\'month\',   30],\n
+                [\'1/2month\',15],\n
+                [\'week\',     7],\n
+                [\'3days\',    3],\n
+                [\'day\',      1],\n
+                [\'6hours\',0.25]\n
+              ]\n
+  # default good_type is last one (if nothing else matches)\n
+  good_type = type_list[-1]\n
+  for date_type in type_list:\n
+    # iterating each delimiter_type and testing if it matches the delimitation\n
+    # number definition\n
+    if float(axis_stop - axis_start) / date_type[1] >= delimiter_min_number:\n
+      good_type = date_type\n
+      break\n
+\n
+\n
+  delimiter = 0\n
+  delimiter_list = []\n
+  delimiter_list.append([int(axis_start),\'\',axis_start.Day() + \' \' + str(DateTime(axis_start)), 0])\n
+\n
+\n
+  #### Hour ###\n
+  if good_type[0] == \'hour\':\n
+    pass\n
+\n
+\n
+  ## 6 Hours ##\n
+  if good_type[0] == \'6hours\':\n
+    # recovering first valid date\n
+    if axis_start.hour() > 18:\n
+      #need to use the next day\n
+      current_date = DateTime((axis_start + 1).Date())\n
+    elif axis_start.hour() == 0:\n
+      current_date = DateTime(axis_start.Date())\n
+    else:\n
+      if axis_start.hour() > 12:\n
+        hours = 18\n
+      elif axis_start.hour() > 6:\n
+        hours = 12\n
+      else:\n
+        hours = 6\n
+      current_date = DateTime(\'%s/%s/%s %s:0:0\' % (str(axis_start.year()),\n
+                                                  str(axis_start.month()),\n
+                                                  str(axis_start.day()),\n
+                                                  hours))\n
+    while current_date < axis_stop:\n
+      if current_date.hour() == 0 :\n
+        delimiter = 2\n
+      elif current_date.hour() == 12:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              \'%s. %s %s:00\' % (current_date.Day()[:1],\n
+                                                str(current_date.day()),\n
+                                                str(current_date.hour())),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter])\n
+      if current_date.hour() == 18:\n
+        #need to use the next day\n
+        current_date = DateTime((current_date + 1).Date())\n
+      else:\n
+        hours = current_date.hour() + 6\n
+        current_date = DateTime(\'%s/%s/%s %s:0:0\' % (str(current_date.year()),\n
+                                                    str(current_date.month()),\n
+                                                    str(current_date.day()),\n
+                                                    hours))\n
+\n
+\n
+  ##### DAY ####\n
+  if good_type[0] == \'day\':\n
+    # recovering first date displayed, without time:\n
+    current_date = DateTime(axis_start.Date()) + 1\n
+    # first date is used to get list of compliant dates\n
+    while current_date < axis_stop:\n
+      if current_date.day() == 1:\n
+        delimiter = 2\n
+      elif current_date.day() == 15:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              \'%s/%s\' % (str(current_date.month()),\n
+                                            str(current_date.day())),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+                            ])\n
+      # go to next date\n
+      current_date = current_date + 1\n
+\n
+\n
+\n
+\n
+  ##### 3 DAYs ####\n
+  if good_type[0] == \'3days\':\n
+    # recovering first date displayed, without time:\n
+    current_date = DateTime(axis_start.Date()) + 1\n
+    # first date is used to get list of compliant dates\n
+    while current_date < axis_stop:\n
+      if current_date.day() == 1:\n
+        delimiter = 2\n
+      elif current_date.day() == 15:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              \'%s/%s\' % (str(current_date.month()),\n
+                                            str(current_date.day())),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+                            ])\n
+      # go to next date\n
+      current_date = current_date + 3\n
+\n
+\n
+\n
+  #### WEEK ####\n
+  if good_type[0] == \'week\':\n
+    current_date = DateTime(axis_start.Date()) + 1\n
+    #DateTime(str(axis_start.year()) + \'/\' + str(axis_start.month()) + \'/\' + str(axis_start.day() + 1))\n
+    # current date is any day in the week, moving to the first next Monday\n
+    while current_date.Day() != \'Monday\':\n
+      current_date = current_date + 1\n
+    # getting list of weeks\n
+    while current_date < axis_stop:\n
+      delimiter_list.append([int(current_date),\n
+                              str(current_date.month()) + \'/\' + str(current_date.day()),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+                            ])\n
+      current_date = current_date + 7\n
+\n
+\n
+\n
+  #### 1/2MONTH ####\n
+  if good_type[0] == \'1/2month\':\n
+    # getting first valid date\n
+    if axis_start.month() == 12 and axis_start.day() > 15:\n
+      # need to go to the next year\n
+      current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\' )\n
+    elif axis_start.day() > 15:\n
+      # need to go to next month\n
+      current_date = DateTime(str(axis_start.year()) + \'/\' + str((axis_start.month() +1)) + \'/1\')\n
+    else:\n
+      # need to go to next part of current month\n
+      current_date = DateTime(str(axis_start.year()) + \'/\' + str(axis_start.month()) + \'/15\')\n
+    # getting list of months\n
+    while current_date < axis_stop:\n
+      if current_date.day() == 1:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                            str(current_date.month()) + \'/\' + str(current_date.day()),\n
+                            current_date.Day() + \' \' + str(current_date),\n
+                            delimiter\n
+                            ])\n
+      if current_date.month() == 12 and current_date.day() == 15:\n
+        # need to go to the next year\n
+        current_date = DateTime(str(current_date.year() + 1) + \'/1/1\' )\n
+      elif current_date.day() == 15:\n
+        # need to go to next month\n
+        current_date = DateTime(str(current_date.year()) + \'/\' + str((current_date.month() +1)) + \'/1\')\n
+      else:\n
+        # need to go to next year\n
+        current_date = DateTime(str(current_date.year()) + \'/\' + str((current_date.month())) + \'/15\')\n
+\n
+\n
+  #### MONTH ####\n
+  if good_type[0] == \'month\':\n
+    # getting first valid date\n
+    if axis_start.month() == 12:\n
+      # need to go to the next year\n
+      current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\' )\n
+    else:\n
+      current_date = DateTime(str(axis_start.year()) + \'/\' + str((axis_start.month() +1)) + \'/1\')\n
+    # getting list of months\n
+    while current_date < axis_stop:\n
+      if current_date.month() == 1:\n
+        delimiter = 2\n
+      elif current_date.month() == 7:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                            str(current_date.year()) + \'/\' + str(current_date.month()),\n
+                            current_date.Day() + \' \' + str(current_date),\n
+                            delimiter\n
+                            ])\n
+      if current_date.month() == 12:\n
+        # need to go to the next year\n
+        current_date = DateTime(str(current_date.year() + 1) + \'/1/1\' )\n
+      else:\n
+        current_date = DateTime(str(current_date.year()) + \'/\' + str((current_date.month() +1)) + \'/1\')\n
+\n
+\n
+\n
+  ## 3 MONTHS ##\n
+  if good_type[0] == \'3months\':\n
+    # getting first valid date\n
+    if axis_start.month() > 9:\n
+      # need to go to the next year\n
+      current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\' )\n
+    elif axis_start.month() > 6:\n
+      current_date = DateTime(str(axis_start.year()) + \'/10/1\')\n
+    elif axis_start.month() > 3:\n
+      current_date = DateTime(str(axis_start.year()) + \'/7/1\')\n
+    else:\n
+      current_date = DateTime(str(axis_start.year()) + \'/4/1\')\n
+    while current_date < axis_stop:\n
+      if current_date.month() == 1:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              str(current_date.year()) + \'/\' + str(current_date.month()),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+                            ])\n
+      if current_date.month() > 9:\n
+        # need to go to the next year\n
+        current_date = DateTime(str(current_date.year() + 1) + \'/1/1\' )\n
+      else:\n
+        current_date = DateTime(str(\'%s/%s/1\' % (str(current_date.year()),\n
+                                                 str(current_date.month() + 3))))\n
+\n
+\n
+  ## 6 MONTHS ##\n
+  if good_type[0] == \'6months\':\n
+    # getting first valid date\n
+    if axis_start.month() > 6:\n
+      # need to go to the next year\n
+      current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\' )\n
+    else:\n
+      current_date = DateTime(str(axis_start.year()) + \'/7/1\')\n
+    while current_date < axis_stop:\n
+      if current_date.month() == 1:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              str(current_date.year()) + \'/\' + str(current_date.month()),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+                            ])\n
+      if current_date.month() > 6:\n
+        # need to go to the next year\n
+        current_date = DateTime(str(current_date.year() + 1) + \'/1/1\' )\n
+      else:\n
+        current_date = DateTime(str(current_date.year()) + \'/7/1\')\n
+\n
+\n
+  #### YEAR ####\n
+  if good_type[0] == \'year\':\n
+    # getting first valid year\n
+    current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\')\n
+    while current_date < axis_stop:\n
+      if str(current_date.year())[3:] == 0:\n
+        delimiter = 2\n
+      elif str(current_date.year())[3:] == 5:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              str(current_date.year()),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+                            ])\n
+      current_date = DateTime(str(current_date.year() + 1) + \'/1/1\')\n
+\n
+  return delimiter_list\n
+\n
+\n
+else:\n
+\n
+  delimiter_list = []\n
+  # secondary axis type is integer / float.\n
+  # building corresponding axis.\n
+  axis_range = axis_stop - axis_start\n
+  step = 1.0 / 1000.0\n
+  good_step = step\n
+  while step * delimiter_min_number < axis_range:\n
+    good_step = step\n
+    step = step * 10\n
+\n
+\n
+  # now adding  first value\n
+  delimiter_list.append([axis_start,\'\',str(axis_start),0])\n
+\n
+  # now going to first good step\n
+  modul = axis_start % good_step\n
+  if modul == 0:\n
+    #axis_start is already well placed.\n
+    current_step = good_step + axis_start\n
+  else:\n
+    current_step = good_step + (axis_start - modul)\n
+\n
+  # good step is the last step under axis_range.\n
+  if good_step >= 1:\n
+    good_step = int(good_step)\n
+    current_step = int(current_step)\n
+\n
+  # iterating and adding each value\n
+  while current_step < axis_stop:\n
+    delimiter_list.append([current_step,str(current_step),str(current_step),0])\n
+    current_step += good_step\n
+\n
+  return delimiter_list\n
+
+
+]]></string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value> <string>Script (Python):/nexedi/portal_skins/erp5_core/Planning_generateAxis</string> </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>axis_start, axis_stop, delimiter_min_number</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>3</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>axis_start</string>
+                            <string>axis_stop</string>
+                            <string>delimiter_min_number</string>
+                            <string>isinstance</string>
+                            <string>DateTime</string>
+                            <string>type_list</string>
+                            <string>_getitem_</string>
+                            <string>good_type</string>
+                            <string>_getiter_</string>
+                            <string>date_type</string>
+                            <string>float</string>
+                            <string>delimiter</string>
+                            <string>delimiter_list</string>
+                            <string>_getattr_</string>
+                            <string>int</string>
+                            <string>str</string>
+                            <string>current_date</string>
+                            <string>hours</string>
+                            <string>axis_range</string>
+                            <string>step</string>
+                            <string>good_step</string>
+                            <string>modul</string>
+                            <string>current_step</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Planning_generateAxis</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>

Added: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateCalendarAxis.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateCalendarAxis.xml?rev=8238&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateCalendarAxis.xml (added)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_generateCalendarAxis.xml Fri Jun 30 11:24:01 2006
@@ -1,0 +1,560 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+# In all cases, return list structure containing tuple of information\n
+# 1 tuple == 1 group\n
+# tuple is of the form :\n
+# [ relative position, title, tooltip, delimiter_type]\n
+# with delimiter type in 0,1,2\n
+\n
+from Products.ERP5Type.Message import Message\n
+\n
+# ***********************************\n
+# specific method for calendar mode\n
+# ***********************************\n
+# use only with calendar\n
+\n
+delimiter_list = []\n
+if axis_stop:\n
+  axis_range = float(axis_stop - axis_start)\n
+\n
+  type_list = [ [\'year\',   364],\n
+                [\'month\',   28],\n
+                [\'week\',     7],\n
+                [\'day\',      1]]\n
+\n
+  # default good_type is last one (if nothing else matches)\n
+  good_type = type_list[-1]\n
+  for date_type in type_list:\n
+    # iterating each delimiter_type and testing if it matches the delimitation\n
+    # number definition\n
+    if axis_range >= date_type[1]:\n
+      good_type = date_type\n
+      break\n
+\n
+\n
+\n
+  if good_type[0] == \'year\':\n
+    step = 30.416\n
+    delimiter = 1\n
+    step_list = [[0, Message(mesage=\'Jan\')],\n
+               [1, Message(mesage=\'Feb\')],\n
+               [2, Message(mesage=\'Mar\')],\n
+               [3, Message(mesage=\'Apr\')],\n
+               [4, Message(mesage=\'May\')],\n
+               [5, Message(mesage=\'Jun\')],\n
+               [6, Message(mesage=\'Jul\')],\n
+               [7, Message(mesage=\'Aug\')],\n
+               [8, Message(mesage=\'Sep\')],\n
+               [9, Message(mesage=\'Oct\')],\n
+               [10, Message(mesage=\'Nov\')],\n
+               [11, Message(mesage=\'Dec\')]]\n
+    for step_id in step_list:\n
+      delimiter_list.append([\n
+                     step * step_id[0],\n
+                     step_id[1],\n
+                     step_id[1],\n
+                     delimiter])\n
+\n
+\n
+\n
+\n
+  if good_type[0] == \'month\':\n
+    step = 1\n
+    step_id = 0\n
+    step_list = []\n
+    delimiter = 1\n
+    while step_id < axis_range:\n
+      step_list.append([step_id, str(step_id +1)])\n
+      step_id += step\n
+    for step_id in step_list:\n
+      delimiter_list.append([\n
+                     step_id[0],\n
+                     step_id[1],\n
+                     step_id[1],\n
+                     delimiter])\n
+\n
+\n
+\n
+\n
+  if good_type[0] == \'week\':\n
+    step = 1\n
+    delimiter = 1\n
+    step_list = [[0, Message(mesage=\'Monday\')],\n
+                 [1, Message(mesage=\'Tuesday\')],\n
+                 [2, Message(mesage=\'Wednesday\')],\n
+                 [3, Message(mesage=\'Thursday\')],\n
+                 [4, Message(mesage=\'Friday\')],\n
+                 [5, Message(mesage=\'Saturday\')],\n
+                 [6, Message(mesage=\'Sunday\')]]\n
+    for step_id in step_list:\n
+      delimiter_list.append([\n
+                     step * step_id[0],\n
+                     step_id[1],\n
+                     step_id[1],\n
+                     delimiter])\n
+\n
+    \n
+\n
+  return delimiter_list\n
+\n
+\n
+\n
+"""\n
+  delimiter = 0\n
+  delimiter_list = []\n
+  delimiter_list.append([int(axis_start),\'\',axis_start.Day() + \' \' + str(DateTime(axis_start)), 0])\n
+\n
+\n
+  #### Hour ###\n
+  if good_type[0] == \'hour\':\n
+    pass\n
+\n
+\n
+  ## 6 Hours ##\n
+  if good_type[0] == \'6hours\':\n
+    # recovering first valid date\n
+    if axis_start.hour() > 18:\n
+      #need to use the next day\n
+      current_date = DateTime((axis_start + 1).Date())\n
+    elif axis_start.hour() == 0:\n
+      current_date = DateTime(axis_start.Date())\n
+    else:\n
+      if axis_start.hour() > 12:\n
+        hours = 18\n
+      elif axis_start.hour() > 6:\n
+        hours = 12\n
+      else:\n
+        hours = 6\n
+      current_date = DateTime(\'%s/%s/%s %s:0:0\' % (str(axis_start.year()),\n
+                                                  str(axis_start.month()),\n
+                                                  str(axis_start.day()),\n
+                                                  hours))\n
+    while current_date < axis_stop:\n
+      if current_date.hour() == 0 :\n
+        delimiter = 2\n
+      elif current_date.hour() == 12:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              \'%s. %s %s:00\' % (current_date.Day()[:1],\n
+                                                str(current_date.day()),\n
+                                                str(current_date.hour())),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter])\n
+      if current_date.hour() == 18:\n
+        #need to use the next day\n
+        current_date = DateTime((current_date + 1).Date())\n
+      else:\n
+        hours = current_date.hour() + 6\n
+        current_date = DateTime(\'%s/%s/%s %s:0:0\' % (str(current_date.year()),\n
+                                                    str(current_date.month()),\n
+                                                    str(current_date.day()),\n
+                                                    hours))\n
+\n
+\n
+  ##### DAY ####\n
+  if good_type[0] == \'day\':\n
+    # recovering first date displayed, without time:\n
+    current_date = DateTime(axis_start.Date()) + 1\n
+    # first date is used to get list of compliant dates\n
+    while current_date < axis_stop:\n
+      if current_date.day() == 1:\n
+        delimiter = 2\n
+      elif current_date.day() == 15:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              \'%s/%s\' % (str(current_date.month()),\n
+                                            str(current_date.day())),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+])\n
+      # go to next date\n
+      current_date = current_date + 1\n
+\n
+\n
+\n
+\n
+  ##### 3 DAYs ####\n
+  if good_type[0] == \'3days\':\n
+    # recovering first date displayed, without time:\n
+    current_date = DateTime(axis_start.Date()) + 1\n
+    # first date is used to get list of compliant dates\n
+    while current_date < axis_stop:\n
+      if current_date.day() == 1:\n
+        delimiter = 2\n
+      elif current_date.day() == 15:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              \'%s/%s\' % (str(current_date.month()),\n
+                                            str(current_date.day())),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+])\n
+      # go to next date\n
+      current_date = current_date + 3\n
+\n
+\n
+\n
+  #### WEEK ####\n
+  if good_type[0] == \'week\':\n
+    current_date = DateTime(axis_start.Date()) + 1\n
+    #DateTime(str(axis_start.year()) + \'/\' + str(axis_start.month()) + \'/\' + str(axis_start.day() + 1))\n
+    # current date is any day in the week, moving to the first next Monday\n
+    while current_date.Day() != \'Monday\':\n
+      current_date = current_date + 1\n
+    # getting list of weeks\n
+    while current_date < axis_stop:\n
+      delimiter_list.append([int(current_date),\n
+                              str(current_date.month()) + \'/\' + str(current_date.day()),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+])\n
+      current_date = current_date + 7\n
+\n
+\n
+\n
+  #### 1/2MONTH ####\n
+  if good_type[0] == \'1/2month\':\n
+    # getting first valid date\n
+    if axis_start.month() == 12 and axis_start.day() > 15:\n
+      # need to go to the next year\n
+      current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\' )\n
+    elif axis_start.day() > 15:\n
+      # need to go to next month\n
+      current_date = DateTime(str(axis_start.year()) + \'/\' + str((axis_start.month() +1)) + \'/1\')\n
+    else:\n
+      # need to go to next part of current month\n
+      current_date = DateTime(str(axis_start.year()) + \'/\' + str(axis_start.month()) + \'/15\')\n
+    # getting list of months\n
+    while current_date < axis_stop:\n
+      if current_date.day() == 1:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                            str(current_date.month()) + \'/\' + str(current_date.day()),\n
+                            current_date.Day() + \' \' + str(current_date),\n
+                            delimiter\n
+])\n
+      if current_date.month() == 12 and current_date.day() == 15:\n
+        # need to go to the next year\n
+        current_date = DateTime(str(current_date.year() + 1) + \'/1/1\' )\n
+      elif current_date.day() == 15:\n
+        # need to go to next month\n
+        current_date = DateTime(str(current_date.year()) + \'/\' + str((current_date.month() +1)) + \'/1\')\n
+      else:\n
+        # need to go to next year\n
+        current_date = DateTime(str(current_date.year()) + \'/\' + str((current_date.month())) + \'/15\')\n
+\n
+\n
+  #### MONTH ####\n
+  if good_type[0] == \'month\':\n
+    # getting first valid date\n
+    if axis_start.month() == 12:\n
+      # need to go to the next year\n
+      current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\' )\n
+    else:\n
+      current_date = DateTime(str(axis_start.year()) + \'/\' + str((axis_start.month() +1)) + \'/1\')\n
+    # getting list of months\n
+    while current_date < axis_stop:\n
+      if current_date.month() == 1:\n
+        delimiter = 2\n
+      elif current_date.month() == 7:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                            str(current_date.year()) + \'/\' + str(current_date.month()),\n
+                            current_date.Day() + \' \' + str(current_date),\n
+                            delimiter\n
+])\n
+      if current_date.month() == 12:\n
+        # need to go to the next year\n
+        current_date = DateTime(str(current_date.year() + 1) + \'/1/1\' )\n
+      else:\n
+        current_date = DateTime(str(current_date.year()) + \'/\' + str((current_date.month() +1)) + \'/1\')\n
+\n
+\n
+\n
+  ## 3 MONTHS ##\n
+  if good_type[0] == \'3months\':\n
+    # getting first valid date\n
+    if axis_start.month() > 9:\n
+      # need to go to the next year\n
+      current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\' )\n
+    elif axis_start.month() > 6:\n
+      current_date = DateTime(str(axis_start.year()) + \'/10/1\')\n
+    elif axis_start.month() > 3:\n
+      current_date = DateTime(str(axis_start.year()) + \'/7/1\')\n
+    else:\n
+      current_date = DateTime(str(axis_start.year()) + \'/4/1\')\n
+    while current_date < axis_stop:\n
+      if current_date.month() == 1:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              str(current_date.year()) + \'/\' + str(current_date.month()),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+])\n
+      if current_date.month() > 9:\n
+        # need to go to the next year\n
+        current_date = DateTime(str(current_date.year() + 1) + \'/1/1\' )\n
+      else:\n
+        current_date = DateTime(str(\'%s/%s/1\' % (str(current_date.year()),\n
+                                                 str(current_date.month() + 3))))\n
+\n
+\n
+  ## 6 MONTHS ##\n
+  if good_type[0] == \'6months\':\n
+    # getting first valid date\n
+    if axis_start.month() > 6:\n
+      # need to go to the next year\n
+      current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\' )\n
+    else:\n
+      current_date = DateTime(str(axis_start.year()) + \'/7/1\')\n
+    while current_date < axis_stop:\n
+      if current_date.month() == 1:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              str(current_date.year()) + \'/\' + str(current_date.month()),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+])\n
+      if current_date.month() > 6:\n
+        # need to go to the next year\n
+        current_date = DateTime(str(current_date.year() + 1) + \'/1/1\' )\n
+      else:\n
+        current_date = DateTime(str(current_date.year()) + \'/7/1\')\n
+\n
+\n
+  #### YEAR ####\n
+  if good_type[0] == \'year\':\n
+    # getting first valid year\n
+    current_date = DateTime(str(axis_start.year() + 1) + \'/1/1\')\n
+    while current_date < axis_stop:\n
+      if str(current_date.year())[3:] == 0:\n
+        delimiter = 2\n
+      elif str(current_date.year())[3:] == 5:\n
+        delimiter = 1\n
+      else:\n
+        delimiter = 0\n
+      delimiter_list.append([int(current_date),\n
+                              str(current_date.year()),\n
+                              current_date.Day() + \' \' + str(current_date),\n
+                              delimiter\n
+])\n
+      current_date = DateTime(str(current_date.year() + 1) + \'/1/1\')\n
+\n
+  return delimiter_list\n
+\n
+\n
+else:\n
+\n
+  delimiter_list = []\n
+  # secondary axis type is integer / float.\n
+  # building corresponding axis.\n
+  axis_range = axis_stop - axis_start\n
+  step = 1.0 / 1000.0\n
+  good_step = step\n
+  while step * delimiter_min_number < axis_range:\n
+    good_step = step\n
+    step = step * 10\n
+\n
+\n
+  # now adding  first value\n
+  delimiter_list.append([axis_start,\'\',str(axis_start),0])\n
+\n
+  # now going to first good step\n
+  modul = axis_start % good_step\n
+  if modul == 0:\n
+    #axis_start is already well placed.\n
+    current_step = good_step + axis_start\n
+  else:\n
+    current_step = good_step + (axis_start - modul)\n
+\n
+  # good step is the last step under axis_range.\n
+  if good_step >= 1:\n
+    good_step = int(good_step)\n
+    current_step = int(current_step)\n
+\n
+  # iterating and adding each value\n
+  while current_step < axis_stop:\n
+    delimiter_list.append([current_step,str(current_step),str(current_step),0])\n
+    current_step += good_step\n
+\n
+  return delimiter_list\n
+"""\n
+
+
+]]></string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value> <string>Script (Python):/nexedi/portal_skins/erp5_core/Planning_generateCalendarAxis</string> </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>axis_start, axis_stop, delimiter_min_number</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>3</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>axis_start</string>
+                            <string>axis_stop</string>
+                            <string>delimiter_min_number</string>
+                            <string>Products.ERP5Type.Message</string>
+                            <string>Message</string>
+                            <string>delimiter_list</string>
+                            <string>float</string>
+                            <string>axis_range</string>
+                            <string>type_list</string>
+                            <string>_getitem_</string>
+                            <string>good_type</string>
+                            <string>_getiter_</string>
+                            <string>date_type</string>
+                            <string>step</string>
+                            <string>delimiter</string>
+                            <string>step_list</string>
+                            <string>step_id</string>
+                            <string>_getattr_</string>
+                            <string>str</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Planning_generateCalendarAxis</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>

Added: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToDay.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToDay.xml?rev=8238&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToDay.xml (added)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToDay.xml Fri Jun 30 11:24:01 2006
@@ -1,0 +1,160 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+"""\n
+Script used by PlanningBox validator to round the bound dates to the\n
+closest full day.\n
+"""\n
+\n
+if full_date.hour() > 12:\n
+  return DateTime(full_date.Date()) + 1\n
+else:\n
+  return DateTime(full_date.Date())\n
+
+
+]]></string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value> <string>Script (Python):/nexedi/portal_skins/erp5_core/Planning_roundBoundToDay</string> </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>full_date</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>1</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>full_date</string>
+                            <string>_getattr_</string>
+                            <string>DateTime</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Planning_roundBoundToDay</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>

Added: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToInt.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToInt.xml?rev=8238&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToInt.xml (added)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Planning_roundBoundToInt.xml Fri Jun 30 11:24:01 2006
@@ -1,0 +1,151 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_body</string> </key>
+            <value> <string>"""\n
+Script used by PlanningBox to round block bounds to the\n
+closest integer value.\n
+"""\n
+return int(value + 0.5)\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value> <string>Script (Python):/nexedi/portal_skins/erp5_core/Planning_roundBoundToInt</string> </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>value</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>1</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>value</string>
+                            <string>int</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Planning_roundBoundToInt</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>

Modified: erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/change_log
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/change_log?rev=8238&r1=8237&r2=8238&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/change_log (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/change_log Fri Jun 30 11:24:01 2006
@@ -1,3 +1,6 @@
+2006-06-30 Thomas
+* Added PlanningBox 3rd part scripts, including stats and axis generation.
+
 2006-06-28 Kevin
 * Change Categories' int_index property label to 'Sort Index'.
 




More information about the Erp5-report mailing list