[Erp5-report] r26314 - in /erp5/trunk/products/ERP5OOo: FormPrintout.py __init__.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Apr 7 09:42:00 CEST 2009


Author: tatuya
Date: Tue Apr  7 09:42:00 2009
New Revision: 26314

URL: http://svn.erp5.org?rev=26314&view=rev
Log:
* Fix
  - copy last-table-row-style when stat method or stat columns does not set
  - clean table-columns-value before listbox values setting
* Append
  the DefaultValue is the marker class indicate to use a ODF Template value


Modified:
    erp5/trunk/products/ERP5OOo/FormPrintout.py
    erp5/trunk/products/ERP5OOo/__init__.py

Modified: erp5/trunk/products/ERP5OOo/FormPrintout.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/FormPrintout.py?rev=26314&r1=26313&r2=26314&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/FormPrintout.py [utf8] (original)
+++ erp5/trunk/products/ERP5OOo/FormPrintout.py [utf8] Tue Apr  7 09:42:00 2009
@@ -27,7 +27,8 @@
 ##############################################################################
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-from Products.CMFCore.utils import _checkPermission, getToolByName    
+from Products.CMFCore.utils import _checkPermission, getToolByName
+from Products.PythonScripts.Utility import allow_class
 from Products.ERP5Type import PropertySheet, Permissions
 from Products.ERP5Form.ListBox import ListBox
 from Products.ERP5Form.FormBox import FormBox
@@ -102,9 +103,9 @@
   Fields <-> Paragraphs:      supported
   ListBox <-> Table:          supported
   Report Section <-> Tables:  experimentally supported
-  FormBox <-> Frame:          not supported yet
+  FormBox <-> Frame:          experimentally supported
   Photo <-> Image:            not supported yet
-  Style group <-> styles.xml: not supported yet
+  Style group <-> styles.xml: supported
   Meta group <-> meta.xml:    not supported yet
   """
   
@@ -397,6 +398,7 @@
     image_list = element_tree.xpath(image_xpath, namespaces=NAME_SPACE_DICT)
     if len(image_list) > 0:
       image_list[0].set("{%s}href" % NAME_SPACE_DICT['xlink'], image_field.absolute_url())
+    
     return element_tree
 
   def _append_table_by_listbox(self,
@@ -442,6 +444,7 @@
     # if ODF table has header rows, does not update the header rows
     # if does not have header rows, insert the listbox title line
     is_top = True
+    last_index = len(listboxline_list) - 1
     for (index, listboxline) in enumerate(listboxline_list):
       listbox_column_list = listboxline.getColumnItemList()
       if listboxline.isTitleLine() and not has_header_rows:
@@ -454,13 +457,13 @@
         row = self._update_column_value(row, listbox_column_list)
         newtable.append(row)
         is_top = False
+      elif listboxline.isStatLine() or index is last_index:
+        row = deepcopy(row_bottom)
+        row = self._update_column_stat_value(row, listbox_column_list, row_middle)
+        newtable.append(row)
       elif index > 0 and listboxline.isDataLine():
         row = deepcopy(row_middle)
         row = self._update_column_value(row, listbox_column_list)
-        newtable.append(row)
-      elif listboxline.isStatLine():
-        row = deepcopy(row_bottom)
-        row = self._update_column_stat_value(row, listbox_column_list, row_middle)
         newtable.append(row)
 
     # direct listbox mapping
@@ -507,6 +510,7 @@
     return row
 
   def _update_column_stat_value(self, row=None, listbox_column_list=[], row_middle=None):
+    """stat line is capable of column span setting"""
     if row_middle is None:
       return row
     odf_cell_list = row.findall("{%s}table-cell" % NAME_SPACE_DICT['table'])
@@ -525,15 +529,13 @@
     return row
 
   def _set_column_value(self, column, value):
+    # if the value is a DefaultValue, uses the ODF template value
+    if isinstance(value, DefaultValue) or value == DefaultValue:
+      return
+    self._clear_column_value(column)
     if value is None:
-      # to eliminate a default value, remove "office:*" attributes.
-      # if remaining these attribetes, the column shows its default value,
-      # such as '0.0', '$0'
-      attrib = column.attrib
-      for key in attrib.keys():
-        if key.startswith("{%s}" % NAME_SPACE_DICT['office']):
-          del attrib[key]
-        value = ''
+      value = ''
+      self._remove_column_value(column)
     column_value = unicode(str(value),'utf-8')
     column.text = column_value
     column_children = column.getchildren()
@@ -543,11 +545,34 @@
       first_child.text = column_value
     for child in column_children:
       column.remove(child)
-    column.append(first_child)
+    if first_child is not None:
+      column.append(first_child)
     if column_value != '':
       value_attribute = self._get_column_value_attribute(column)
       if value_attribute is not None:
         column.set(value_attribute, column_value)
+
+  def _remove_column_value(self, column):
+    # to eliminate a default value, remove "office:*" attributes.
+    # if remaining these attribetes, the column shows its default value,
+    # such as '0.0', '$0'
+    attrib = column.attrib
+    for key in attrib.keys():
+      if key.startswith("{%s}" % NAME_SPACE_DICT['office']):
+        del attrib[key]
+    column_children = column.getchildren()
+    for child in column_children:
+      column.remove(child)
+
+  def _clear_column_value(self, column):
+    attrib = column.attrib
+    for key in attrib.keys():
+      value_attribute = self._get_column_value_attribute(column)
+      if value_attribute is not None:
+        column.set(value_attribute, '')
+    column_children = column.getchildren()
+    for child in column_children:
+      child.text = ''
 
   def _get_column_value_attribute(self, column):
     attrib = column.attrib
@@ -555,7 +580,7 @@
       if key.endswith("value"):
         return key
     return None
-  
+           
   def _get_column_span_size(self, column=None):
     span_attribute = "{%s}number-columns-spanned" % NAME_SPACE_DICT['table']
     column_span = 1
@@ -585,3 +610,19 @@
 class ODTStrategy(ODFStrategy):
   """ODTStrategy create a ODT Document from a form and a ODT template"""
   pass
+
+class DefaultValue:
+  """The DefaultValue is the marker object which indicate that using template value
+
+  Python Script Example: 'number' column uses ODF table cell value
+
+  from Products.PythonScripts.standard import Object
+  from Products.ERP5OOo.FormPrintout import DefaultValue
+
+  return [ Object(number=DefaultValue(),
+                  total_price=context.getTotalPrice())]
+  """
+  pass
+
+InitializeClass(DefaultValue)
+allow_class(DefaultValue)

Modified: erp5/trunk/products/ERP5OOo/__init__.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/__init__.py?rev=26314&r1=26313&r2=26314&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/__init__.py [utf8] (original)
+++ erp5/trunk/products/ERP5OOo/__init__.py [utf8] Tue Apr  7 09:42:00 2009
@@ -42,6 +42,8 @@
 from AccessControl import ModuleSecurityInfo
 ModuleSecurityInfo('Products.ERP5OOo.OOoUtils').declarePublic('OOoParser',)
 ModuleSecurityInfo('Products.ERP5OOo.OOoUtils').declarePublic('newOOoParser',)
+# Allow access to DefaultValue from scripts
+ModuleSecurityInfo('Products.ERP5OOo.FormPrintout').declarePublic('DefalutValue',)
 
 # Define object classes and tools
 from OOoTemplate import OOoTemplate




More information about the Erp5-report mailing list