From c843c5a2d90408f357c5873e911897eb95de0a2c Mon Sep 17 00:00:00 2001
From: Tatuya Kamada <tatuya@nexedi.com>
Date: Tue, 6 Oct 2009 10:58:34 +0000
Subject: [PATCH] Support ReportBox to display repeating pages.

TODO: write more tests for ReportBox


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@29421 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5OOo/FormPrintout.py               |  36 +++---
 product/ERP5OOo/tests/testFormPrintout.py     | 118 ++++++++++++++++++
 .../ERP5OOo/tests/test_document/Foo_003.odt   | Bin 10408 -> 10880 bytes
 .../ERP5OOo/tests/test_document/Foo_004.odt   | Bin 0 -> 11241 bytes
 4 files changed, 140 insertions(+), 14 deletions(-)
 create mode 100644 product/ERP5OOo/tests/test_document/Foo_004.odt

diff --git a/product/ERP5OOo/FormPrintout.py b/product/ERP5OOo/FormPrintout.py
index 9c03d74ed8..eb6e562bad 100644
--- a/product/ERP5OOo/FormPrintout.py
+++ b/product/ERP5OOo/FormPrintout.py
@@ -30,6 +30,7 @@ from Products.CMFCore.utils import _checkPermission
 from Products.ERP5Type import PropertySheet, Permissions
 from Products.ERP5Form.ListBox import ListBox
 from Products.ERP5Form.FormBox import FormBox
+from Products.ERP5Form.ReportBox import ReportBox
 from Products.ERP5Form.ImageField import ImageField
 from Products.ERP5OOo.OOoUtils import OOoBuilder
 from Products.CMFCore.exceptions import AccessControl_Unauthorized
@@ -277,8 +278,12 @@ class ODFStrategy(Implicit):
                                                   extra_context=extra_context,
                                                   ooo_builder=ooo_builder)
     # mapping ERP5Report report method to ODF
+    report_method=extra_context.get('report_method')
+    base_name = (report_method is not None) and report_method.__name__ or None 
     content_element_tree = self._replaceXmlByReportSection(element_tree=content_element_tree,
                                                            extra_context=extra_context,
+                                                           report_method=report_method,
+                                                           base_name=base_name,
                                                            ooo_builder=ooo_builder)
     content_xml = etree.tostring(content_element_tree, encoding='utf-8')
  
@@ -332,6 +337,13 @@ class ODFStrategy(Implicit):
                                             extra_context=extra_context,
                                             ooo_builder=ooo_builder,
                                             iteration_index=iteration_index)
+      elif isinstance(field, ReportBox):
+         report_method = getattr(field, field.report_method, None)
+         element_tree = self._replaceXmlByReportSection(element_tree=element_tree,
+                                                        extra_context=extra_context,
+                                                        report_method=report_method,
+                                                        base_name=field.id,
+                                                        ooo_builder=ooo_builder)
       elif isinstance(field, ImageField):
         element_tree = self._replaceXmlByImageField(element_tree=element_tree,
                                                     image_field=field,
@@ -446,16 +458,15 @@ class ODFStrategy(Implicit):
       parent_node.insert(paragraph_node_index, paragraph)
       paragraph_node_index = paragraph_node_index + 1
       
-  def _replaceXmlByReportSection(self, element_tree=None, extra_context=None, ooo_builder=None):
-    if not extra_context.has_key('report_method') or extra_context['report_method'] is None:
+  def _replaceXmlByReportSection(self, element_tree=None, extra_context=None, 
+                                 report_method=None, base_name=None, 
+                                 ooo_builder=None):
+    if report_method is None:
       return element_tree
-    report_method = extra_context['report_method']
     report_section_list = report_method()
     portal_object = self.getPortalObject()
-    REQUEST = get_request()
-    request = extra_context.get('REQUEST', REQUEST)
 
-    target_tuple = self._pickUpTargetSection(report_method_name=report_method.__name__,
+    target_tuple = self._pickUpTargetSection(base_name=base_name,
                                              report_section_list=report_section_list,
                                              element_tree=element_tree)
     if target_tuple is None:
@@ -475,7 +486,7 @@ class ODFStrategy(Implicit):
       if index is 0:
         office_body.remove(original_target)
       else:
-        self._setUniqueElementName(base_name=report_method.__name__,
+        self._setUniqueElementName(base_name=base_name,
                                    iteration_index=index,
                                    xpath=target_xpath,
                                    element_tree=target_element_tree)
@@ -491,19 +502,17 @@ class ODFStrategy(Implicit):
       report_item.popReport(portal_object, render_prefix=None)
     return element_tree
 
-  def _pickUpTargetSection(self, report_method_name='', report_section_list=[], element_tree=None):
+  def _pickUpTargetSection(self, base_name='', report_section_list=[], element_tree=None):
     """pick up a ODF target object to iterate ReportSection
-
-    report_method_name -- report method name
+    base_name -- the target name to replace in an ODF document
     report_section_list -- ERP5Form ReportSection List which was created by a report method
     element_tree -- XML ElementTree object
     """
-    frame_xpath = '//draw:frame[@draw:name="%s"]' % report_method_name
+    frame_xpath = '//draw:frame[@draw:name="%s"]' % base_name
     frame_list = element_tree.xpath(frame_xpath, namespaces=element_tree.nsmap)
     # <text:section text:style-name="Sect2" text:name="Section2">
-    section_xpath = '//text:section[@text:name="%s"]' % report_method_name
+    section_xpath = '//text:section[@text:name="%s"]' % base_name
     section_list = element_tree.xpath(section_xpath, namespaces=element_tree.nsmap)
-    
     if len(frame_list) is 0 and len(section_list) is 0:
       return None
 
@@ -705,7 +714,6 @@ class ODFStrategy(Implicit):
                                          render_format='list',
                                          REQUEST=REQUEST, 
                                          render_prefix=None)
-    
     # 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
diff --git a/product/ERP5OOo/tests/testFormPrintout.py b/product/ERP5OOo/tests/testFormPrintout.py
index 025fe699fe..bbac7f28f0 100644
--- a/product/ERP5OOo/tests/testFormPrintout.py
+++ b/product/ERP5OOo/tests/testFormPrintout.py
@@ -62,9 +62,13 @@ class TestFormPrintout(ERP5TypeTestCase):
     foo3_file_path = os.path.join(os.path.dirname(__file__),
                                   'test_document',
                                   'Foo_003.odt') 
+    foo4_file_path = os.path.join(os.path.dirname(__file__),
+                                  'test_document',
+                                  'Foo_004.odt') 
     foo_file = open(foo_file_path, 'rb')
     foo2_file = open(foo2_file_path, 'rb')
     foo3_file = open(foo3_file_path, 'rb')
+    foo4_file = open(foo4_file_path, 'rb')
     custom = self.portal.portal_skins.custom
     addStyleSheet = custom.manage_addProduct['OFSP'].manage_addFile
     if custom._getOb('Foo_getODTStyleSheet', None) is None:
@@ -76,6 +80,9 @@ class TestFormPrintout(ERP5TypeTestCase):
     if custom._getOb('Foo3_getODTStyleSheet', None) is None:
       addStyleSheet(id='Foo3_getODTStyleSheet', file=foo3_file, title='',
                     precondition='', content_type = 'application/vnd.oasis.opendocument.text')
+    if custom._getOb('Foo4_getODTStyleSheet', None) is None:
+      addStyleSheet(id='Foo4_getODTStyleSheet', file=foo4_file, title='',
+                    precondition='', content_type = 'application/vnd.oasis.opendocument.text')
     erp5OOo = custom.manage_addProduct['ERP5OOo']
     addOOoTemplate = erp5OOo.addOOoTemplate
     if custom._getOb('Foo_viewAsOdt', None) is None:
@@ -955,6 +962,117 @@ return []
     self._validate(odf_document)
 
     
+  def test_04_Iteration_03_ReportBox_and_Section(self, run=run_all_test):
+    """
+    Iteration using ReportBox and ODF Section test
+    """
+    if not run: return
+    # create test target
+    custom = self.portal.portal_skins.custom
+    erp5form = custom.manage_addProduct['ERP5Form']
+  
+    erp5form.addERP5Form(id='Foo_Box_view', title='Foo Box')
+    foo_box_view = custom.Foo_Box_view
+    foo_box_view.manage_addField('listbox_report', 'listbox report', 'ListBox')
+    listbox = foo_box_view.listbox_report
+
+    createZODBPythonScript(
+      self.portal.portal_skins.custom,
+      'FooReport_getFooList',
+      'title,**kw',
+r"""
+foo_list = context.objectValues(portal_type='Foo Line')
+for foo in foo_list:
+  foo.setTitle(title)
+return foo_list
+"""
+      )
+
+    message = listbox.ListBox_setPropertyList(
+      field_list_method = 'FooReport_getFooList',
+      field_selection_name = 'listbox_report_selection',
+      field_portal_types = 'Foo Line | Foo Line',
+      field_columns = 'id|ID\ntitle|Title\nquantity|Quantity\nstart_date|Date',)
+    self.failUnless('Set Successfully' in message)
+
+    # report box
+    foo2_view = erp5form.addERP5Form(id='Foo2_view', title='Foo2 View')
+    foo2_view = custom.Foo2_view
+    foo2_view.manage_addField('your_report_box1', 'Your Report Box', 'ReportBox')
+    your_report_box1 = foo2_view.your_report_box1
+    your_report_box1.report_method = 'FooReport_getReportSectionList'
+
+    createZODBPythonScript(
+      self.portal.portal_skins.custom,
+      'FooReport_getReportSectionList',
+      '',
+r"""
+from Products.ERP5Form.Report import ReportSection
+
+r1 = ReportSection(path=context.getPhysicalPath(),
+                   form_id='Foo_Box_view',
+                   selection_name='listbox_report_selection',
+                   selection_params={'title':'foo_04_Iteration_1'})
+r2 = ReportSection(path=context.getPhysicalPath(),
+                   form_id='Foo_Box_view',
+                   selection_name='listbox_report_selection',
+                   selection_params={'title':'foo_04_Iteration_2'})
+report_section_list = [r1, r2]
+return report_section_list
+"""
+       )
+
+    # 01. normal case using ODF Section
+    test1 = self.portal.foo_module.test1
+    request = self.app.REQUEST 
+    request['here'] = test1
+    foo_report_printout = test1.FooReport_viewAsPrintout
+    foo_report_printout.doSettings(REQUEST=request,
+                                   title='',
+                                   form_name='Foo2_view',
+                                   template='Foo4_getODTStyleSheet')
+    odf_document = foo_report_printout()
+
+    # test_output = open("/tmp/test_04_Iteratoin_03_Section_01.odf", "w")
+    # test_output.write(odf_document)
+    self.assertTrue(odf_document is not None)
+    builder = OOoBuilder(odf_document)
+    content_xml = builder.extract("content.xml")
+    self.assertTrue(content_xml.find("foo_04_Iteration_1") > 0)
+    content = etree.XML(content_xml)
+    section_xpath = '//text:section[@text:name="your_report_box1"]'
+    section_list = content.xpath(section_xpath, namespaces=content.nsmap)
+    self.assertEqual(len(section_list), 1)
+    section1_xpath = '//text:section[@text:name="your_report_box1_1"]'
+    section1_list = content.xpath(section1_xpath, namespaces=content.nsmap)
+    self.assertEqual(len(section1_list), 1)
+
+    self._validate(odf_document)
+ 
+    # 02. no report section and using ODF Section
+    custom.manage_delObjects(['FooReport_getReportSectionList'])
+    createZODBPythonScript(
+      self.portal.portal_skins.custom,
+      'FooReport_getReportSectionList',
+      '',
+r"""
+return []
+"""
+      )
+    odf_document = foo_report_printout()
+    #test_output = open("/tmp/test_04_Iteratoin_02_Section_02.odf", "w")
+    #test_output.write(odf_document)
+    self.assertTrue(odf_document is not None)
+    builder = OOoBuilder(odf_document)
+    content_xml = builder.extract("content.xml")
+    self.assertFalse(content_xml.find("foo_04_Iteration") > 0)
+    content = etree.XML(content_xml)
+    section_xpath = '//text:section[@text:name="your_report_box1"]'
+    section_list = content.xpath(section_xpath, namespaces=content.nsmap)
+    # the section was removed
+    self.assertEqual(len(section_list), 0)
+    self._validate(odf_document)
+
   def _test_05_Styles(self, run=run_all_test):
     """
     styles.xml not tested yet
diff --git a/product/ERP5OOo/tests/test_document/Foo_003.odt b/product/ERP5OOo/tests/test_document/Foo_003.odt
index f799151942d8c7db2a80deb6f0345bca672753a5..e42c497594a72863fb996096726684025d76ebe2 100644
GIT binary patch
delta 8902
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

delta 8462
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
XKW@J@067Sq5*K7mhYnjv@jCNAxa4}!

diff --git a/product/ERP5OOo/tests/test_document/Foo_004.odt b/product/ERP5OOo/tests/test_document/Foo_004.odt
new file mode 100644
index 0000000000000000000000000000000000000000..6c9b420cd90956e70cb38a2d0ff019721fe8ef60
GIT binary patch
literal 11241
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
Zg(}O#-yLLvg2KG}?7~7pt$ZK9{|A6GE!F@4

literal 0
HcmV?d00001

-- 
2.30.9