[Erp5-report] r41465 nicolas - in /erp5/trunk/products/ERP5OOo: ./ tests/ tests/test_document/
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Dec 15 16:51:03 CET 2010
Author: nicolas
Date: Wed Dec 15 16:51:03 2010
New Revision: 41465
URL: http://svn.erp5.org?rev=41465&view=rev
Log:
Implement text:variable-set replacement with FormPrintout
Added:
erp5/trunk/products/ERP5OOo/tests/test_document/Foo_001_with_variable.odt (with props)
Modified:
erp5/trunk/products/ERP5OOo/FormPrintout.py
erp5/trunk/products/ERP5OOo/tests/testFormPrintoutAsODT.py
Modified: erp5/trunk/products/ERP5OOo/FormPrintout.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/FormPrintout.py?rev=41465&r1=41464&r2=41465&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/FormPrintout.py [utf8] (original)
+++ erp5/trunk/products/ERP5OOo/FormPrintout.py [utf8] Wed Dec 15 16:51:03 2010
@@ -63,6 +63,8 @@ TEXT_URI = 'urn:oasis:names:tc:opendocum
XLINK_URI = 'http://www.w3.org/1999/xlink'
SVG_URI = 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0'
TABLE_URI = 'urn:oasis:names:tc:opendocument:xmlns:table:1.0'
+OFFICE_URI = 'urn:oasis:names:tc:opendocument:xmlns:office:1.0'
+STYLE_URI = 'urn:oasis:names:tc:opendocument:xmlns:style:1.0'
NSMAP = {
@@ -71,6 +73,8 @@ NSMAP = {
'xlink': XLINK_URI,
'svg': SVG_URI,
'table': TABLE_URI,
+ 'office': OFFICE_URI,
+ 'style': STYLE_URI,
}
@@ -916,6 +920,7 @@ class ODTStrategy(ODFStrategy):
self._replaceNodeViaRangeReference(element_tree, field)
self._replaceNodeViaPointReference(element_tree, field)
self._replaceNodeViaFormName(element_tree, field)
+ self._replaceNodeViaVariable(element_tree, field)
def _replaceNodeViaPointReference(self, element_tree, field, iteration_index=0):
"""Replace text node via an ODF point reference.
@@ -940,6 +945,39 @@ class ODTStrategy(ODFStrategy):
xpath=reference_xpath,
element_tree=element_tree)
+ def _replaceNodeViaVariable(self, element_tree, field, iteration_index=0):
+ """Replace text node via an ODF variable name.
+ <text:variable-set text:name="my_title"
+ office:value-type="string">Title</text:variable-set>
+ """
+ field_id = field.id
+ reference_xpath = '//text:variable-set[@text:name="%s"]' % field_id
+ node_list = element_tree.xpath(reference_xpath,
+ namespaces=element_tree.nsmap)
+ for target_node in node_list:
+ attr_dict = {}
+ style_attribute_id = '{%s}data-style-name' % STYLE_URI
+ style_value = target_node.attrib.get(style_attribute_id)
+ if style_value:
+ attr_dict.update({style_attribute_id: style_value})
+ formula_attribute_id = '{%s}formula' % TEXT_URI
+ formula_value = target_node.attrib.get(formula_attribute_id)
+ if formula_value:
+ attr_dict.update({formula_attribute_id: formula_value})
+ name_attribute_id = '{%s}name' % TEXT_URI
+ attr_dict[name_attribute_id] = target_node.get(name_attribute_id)
+ value_type_attribute_id = '{%s}value-type' % OFFICE_URI
+ attr_dict[value_type_attribute_id] = target_node.get(
+ value_type_attribute_id)
+ new_node = field.render_odt_variable(as_string=False,
+ attr_dict=attr_dict)
+ target_node.getparent().replace(target_node, new_node)
+ # set when using report section
+ self._setUniqueElementName(base_name=field_id,
+ iteration_index=iteration_index,
+ xpath=reference_xpath,
+ element_tree=element_tree)
+
def _replaceNodeViaRangeReference(self, element_tree, field, iteration_index=0):
"""Replace text node via an ODF ranged reference.
Modified: erp5/trunk/products/ERP5OOo/tests/testFormPrintoutAsODT.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/tests/testFormPrintoutAsODT.py?rev=41465&r1=41464&r2=41465&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/tests/testFormPrintoutAsODT.py [utf8] (original)
+++ erp5/trunk/products/ERP5OOo/tests/testFormPrintoutAsODT.py [utf8] Wed Dec 15 16:51:03 2010
@@ -39,6 +39,7 @@ from Products.MimetypesRegistry.mime_typ
from Products.ERP5OOo.OOoUtils import OOoBuilder
from Products.ERP5OOo.tests.utils import Validator
from Products.ERP5Type.tests.utils import FileUpload
+from DateTime import DateTime
from lxml import etree
import os
@@ -73,11 +74,15 @@ class TestFormPrintoutAsODT(TestFormPrin
foo5_file_path = os.path.join(os.path.dirname(__file__),
'test_document',
'Foo_005.odt')
+ variable_file_path = os.path.join(os.path.dirname(__file__),
+ 'test_document',
+ 'Foo_001_with_variable.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')
foo5_file = open(foo5_file_path, 'rb')
+ variable_file_object = open(variable_file_path, 'rb')
custom = self.portal.portal_skins.custom
addStyleSheet = custom.manage_addProduct['OFSP'].manage_addFile
if custom._getOb('Foo_getODTStyleSheet', None) is None:
@@ -95,6 +100,11 @@ class TestFormPrintoutAsODT(TestFormPrin
if custom._getOb('Foo5_getODTStyleSheet', None) is None:
addStyleSheet(id='Foo5_getODTStyleSheet', file=foo5_file, title='',
precondition='', content_type = 'application/vnd.oasis.opendocument.text')
+ if custom._getOb('Foo_getVariableODTStyleSheet', None) is None:
+ addStyleSheet(id='Foo_getVariableODTStyleSheet',
+ file=variable_file_object, 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:
@@ -597,7 +607,6 @@ class TestFormPrintoutAsODT(TestFormPrin
request = self.app.REQUEST
request['here'] = test1
- from DateTime import DateTime
test1.foo_1.setTitle('foo_title_7')
test1.foo_1.setStartDate(DateTime(2009,4,20))
message = listbox.ListBox_setPropertyList(
@@ -1199,6 +1208,54 @@ return []
"""
return self.test_09_FieldReplacement(validate=True)
+ def test_field_replacement_with_variable(self):
+ """test variables replacement in ODT documents.
+ """
+ document = self.portal.foo_module.test1
+ document.setTitle(None)
+ foo_form = document.Foo_view
+ field_configuration_list = (
+ ('my_string', 'StringField', 'ZZZ test here ZZZ'),
+ ('my_figure', 'IntegerField', 221),
+ ('my_float', 'FloatField', 23.43535),
+ ('my_date', 'DateTimeField', DateTime('2010-12-6 23:24:15.234 GMT+6')),
+ )
+ for field_configuration in field_configuration_list:
+ field_id, klass, value = field_configuration
+ if foo_form._getOb(field_id, None) is not None:
+ foo_form._delObject(field_id)
+ foo_form.manage_addField(field_id, field_id, klass)
+ field = foo_form[field_id]
+ field.values['default'] = value
+ foo_printout = self.portal.foo_module.test1.Foo_viewAsPrintout
+ # Use template with variable defines
+ foo_printout.template = 'Foo_getVariableODTStyleSheet'
+ odf_document = foo_printout(self.portal.REQUEST)
+ self.assertTrue(odf_document is not None)
+ builder = OOoBuilder(odf_document)
+ content_xml = builder.extract("content.xml")
+ content_tree = etree.fromstring(content_xml)
+ nsmap = content_tree.nsmap
+ for field_configuration in field_configuration_list:
+ field_id, klass, value = field_configuration
+ xpath = '//text:variable-set[@text:name = "%s"]' % field_id
+ node_list = content_tree.xpath(xpath, namespaces=nsmap)
+ self.assertEquals(1, len(node_list))
+ node = node_list[0]
+ if klass == 'StringField':
+ self.assertEquals(node.get('{%s}value-type' % nsmap['office']),
+ 'string')
+ self.assertEquals(node.text, value)
+ elif klass in ('IntegerField', 'FloatField'):
+ self.assertEquals(node.get('{%s}value-type' % nsmap['office']),
+ 'float')
+ self.assertEquals(node.get('{%s}value' % nsmap['office']), str(value))
+ elif klass == 'DateTimeField':
+ self.assertEquals(node.get('{%s}value-type' % nsmap['office']), 'date')
+ self.assertEquals(node.text, value.strftime('%d/%m/%Y %H:%M:%S'))
+ else:
+ raise NotImplementedError
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestFormPrintoutAsODT))
Added: erp5/trunk/products/ERP5OOo/tests/test_document/Foo_001_with_variable.odt
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/tests/test_document/Foo_001_with_variable.odt?rev=41465&view=auto
==============================================================================
Binary file - no diff available.
Propchange: erp5/trunk/products/ERP5OOo/tests/test_document/Foo_001_with_variable.odt
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
More information about the Erp5-report
mailing list