Commit ec0d621d authored by Jérome Perrin's avatar Jérome Perrin

Accounting Report for French law: Fichier des écritures comptables, article A. 47 A-1 du LPF

parent c80c1af9
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>permission_list</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>lines</string> </value>
</item>
</dictionary>
</tuple>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_exchange</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_exchange</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>fec_export</string> </value>
</item>
<item>
<key> <string>permission_list</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>50.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>French Accounting Transaction File</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/AccountingTransactionModule_viewFrenchAccountingTransactionFileDialog</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </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>from cStringIO import StringIO\n
import zipfile\n
from Products.ERP5Type.Message import translateString\n
\n
portal = context.getPortalObject()\n
active_process = portal.restrictedTraverse(active_process)\n
\n
# XXX we need proxy role for this\n
result_list = active_process.getResultList()\n
\n
fec_file = context.AccountingTransactionModule_viewComptabiliteAsFECXML(\n
at_date=at_date,\n
result_list=result_list)\n
\n
zipbuffer = StringIO()\n
zipfilename = at_date.strftime(\'FEC-%Y.zip\')\n
zipfileobj = zipfile.ZipFile(zipbuffer, \'w\', compression=zipfile.ZIP_DEFLATED)\n
zipfileobj.writestr(\'FEC.xml\', fec_file.encode(\'utf8\'))\n
zipfileobj.close()\n
\n
attachment_list = (\n
{\'mime_type\': \'application/zip\',\n
\'content\': zipbuffer.getvalue(),\n
\'name\': zipfilename, }, )\n
\n
portal.ERP5Site_notifyReportComplete(\n
user_name=user_name,\n
subject=unicode(translateString(\'French Accounting Transaction File\')),\n
message=\'\',\n
attachment_list=attachment_list)\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>at_date, active_process, user_name</string> </value>
</item>
<item>
<key> <string>_proxy_roles</string> </key>
<value>
<tuple>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_aggregateFrenchAccountingTransactionFile</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </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>from Products.CMFActivity.ActiveResult import ActiveResult\n
portal = context.getPortalObject()\n
portal_type = portal.portal_types[portal_type]\n
active_process = portal.restrictedTraverse(active_process)\n
this_portal_type_active_process = portal.restrictedTraverse(this_portal_type_active_process)\n
\n
# XXX we need proxy role for this\n
result_list = this_portal_type_active_process.getResultList()\n
\n
if result_list:\n
journal_fragment = context.AccountingTransactionModule_viewJournalAsFECXML(\n
portal_type=portal_type,\n
result_list=result_list)\n
\n
active_process.postResult(ActiveResult(detail=journal_fragment.encode(\'utf8\').encode(\'zlib\')))\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>portal_type, active_process, this_portal_type_active_process</string> </value>
</item>
<item>
<key> <string>_proxy_roles</string> </key>
<value>
<tuple>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_aggregateFrenchAccountingTransactionFileForPortalType</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<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_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>\n
<comptabilite xmlns:tal="http://xml.zope.org/namespaces/tal">\n
<exercice>\n
<DateCloture tal:content="python: options[\'at_date\'].strftime(\'%Y-%m-%d\')">20141231</DateCloture>\n
<tal:block tal:repeat="result options/result_list"><tal:block tal:replace="structure python: result.detail.decode(\'zlib\')"/></tal:block>\n
</exercice>\n
</comptabilite>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/xml</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_viewComptabiliteAsFECXML</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </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>from Products.ERP5Type.Message import translateString\n
import random\n
portal = context.getPortalObject()\n
at_date = at_date.latestTime()\n
\n
person_value = portal.ERP5Site_getAuthenticatedMemberPersonValue()\n
if person_value is None:\n
portal.changeSkin(None)\n
return context.Base_redirect(\'view\', keep_items=dict(\n
portal_status_message=translateString("No person found for your user")))\n
\n
section_uid_list = portal.Base_getSectionUidListForSectionCategory(\n
section_category, section_category_strict)\n
\n
from_date = portal.Base_getAccountingPeriodStartDateForSectionCategory(\n
section_category, at_date)\n
\n
# XXX we need proxy role for that\n
active_process = portal.portal_activities.newActiveProcess()\n
\n
tag = "%s-%s" % (script.getId(), random.randint(0, 1000))\n
aggregate_tag = "%s:aggregate" % tag\n
priority = 4\n
\n
for portal_type in portal.getPortalAccountingTransactionTypeList():\n
# XXX we need proxy role for that\n
this_portal_type_active_process = portal.portal_activities.newActiveProcess()\n
context.AccountingTransactionModule_viewFrenchAccountingTransactionFileForPortalType(\n
portal_type,\n
section_uid_list,\n
from_date,\n
at_date,\n
simulation_state,\n
active_process.getRelativeUrl(),\n
this_portal_type_active_process.getRelativeUrl(),\n
tag,\n
aggregate_tag,\n
priority)\n
\n
context.activate(after_tag=(tag, aggregate_tag)).AccountingTransactionModule_aggregateFrenchAccountingTransactionFile(\n
at_date,\n
active_process.getRelativeUrl(),\n
user_name=person_value.getReference())\n
\n
return context.Base_redirect(form_id, keep_items=dict(\n
portal_status_message=translateString("Report Started")))\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>section_category, section_category_strict, at_date, simulation_state, form_id=None, **kw</string> </value>
</item>
<item>
<key> <string>_proxy_roles</string> </key>
<value>
<tuple>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_viewFrenchAccountingTransactionFile</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5Form" module="Products.ERP5Form.Form"/>
</pickle>
<pickle>
<dictionary>
<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/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>AccountingTransactionModule_viewFrenchAccountingTransactionFile</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list>
<string>your_section_category</string>
<string>your_section_category_strict</string>
<string>your_at_date</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list>
<string>your_simulation_state</string>
</list>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_viewFrenchAccountingTransactionFileDialog</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_dialog</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>French Accounting Transaction File</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>your_at_date</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>your_at_date</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewDialogFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>your_section_category</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>your_section_category</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewDialogFieldLibrary</string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Section</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>your_section_category_strict</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>your_section_category_strict</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>AccountModule_viewDialogFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>your_simulation_state</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>your_simulation_state</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>AccountModule_viewDialogFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:here.Base_getTranslatedWorkflowStateItemList(wf_id = \'accounting_workflow\')</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </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>portal = context.getPortalObject()\n
\n
search_kw = {\n
\'simulation_state\': simulation_state,\n
\'accounting_transaction.section_uid\': section_uid_list,\n
\'operation_date\': {\'query\': (from_date, at_date), \'range\': \'minngt\' },\n
\'portal_type\': portal_type,\n
}\n
\n
method_kw = {\n
\'active_process\': this_portal_type_active_process,\n
\'section_uid_list\': section_uid_list,\n
}\n
\n
activate_kw = {\n
\'tag\': tag,\n
\'priority\': priority,\n
}\n
\n
portal.portal_catalog.searchAndActivate(\n
method_id=\'AccountingTransaction_postFECResult\', \n
method_kw=method_kw,\n
activate_kw=activate_kw,\n
**search_kw)\n
\n
context.activate(tag=aggregate_tag, after_tag=tag, activity=\'SQLQueue\').AccountingTransactionModule_aggregateFrenchAccountingTransactionFileForPortalType(\n
portal_type=portal_type,\n
active_process=active_process,\n
this_portal_type_active_process=this_portal_type_active_process)\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>portal_type, section_uid_list, from_date, at_date, simulation_state, active_process, this_portal_type_active_process, tag, aggregate_tag, priority</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_viewFrenchAccountingTransactionFileForPortalType</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<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_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<journal xmlns:tal="http://xml.zope.org/namespaces/tal">\n
<JournalCode tal:content="options/portal_type/getCompactTranslatedTitle"></JournalCode>\n
<JournalLib tal:content="options/portal_type/getTranslatedTitle"></JournalLib>\n
<tal:block tal:repeat="result options/result_list"><tal:block tal:replace="structure python: result.detail.decode(\'zlib\')"/></tal:block>\n
</journal>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/xml</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_viewJournalAsFECXML</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </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>"""Produce an xml fragment for this accounting transaction and post it to the\n
active result.\n
We need a proxy role to post the result.\n
"""\n
from Products.CMFActivity.ActiveResult import ActiveResult\n
\n
portal = context.getPortalObject()\n
active_process = portal.restrictedTraverse(active_process)\n
accounting_line_list = context.contentValues(portal_type=portal.getPortalAccountingMovementTypeList())\n
\n
if context.getSourceSectionUid() in section_uid_list:\n
if any([line.getSource(portal_type=\'Account\') for line in accounting_line_list]):\n
source_xml = context.AccountingTransaction_viewAsSourceFECXML()\n
active_process.postResult(ActiveResult(detail=source_xml.encode(\'utf8\').encode(\'zlib\')))\n
\n
if context.getDestinationSectionUid() in section_uid_list:\n
if any([line.getDestination(portal_type=\'Account\') for line in accounting_line_list]):\n
destination_xml = context.AccountingTransaction_viewAsDestinationFECXML()\n
active_process.postResult(ActiveResult(detail=destination_xml.encode(\'utf8\').encode(\'zlib\')))\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>active_process, section_uid_list</string> </value>
</item>
<item>
<key> <string>_proxy_roles</string> </key>
<value>
<tuple>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransaction_postFECResult</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<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_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<ecriture xmlns:tal="http://xml.zope.org/namespaces/tal">\n
<EcritureNum tal:content="context/getDestinationReference">Specific Reference</EcritureNum>\n
<EcritureDate tal:content="python: context.getStopDate().strftime(\'%Y-%m-%d\')">Specific Date</EcritureDate>\n
<EcritureLib tal:content="context/getTitle">Title</EcritureLib>\n
<PieceRef tal:content="context/getReference">Reference</PieceRef>\n
<PieceDate tal:content="python: context.getStopDate().strftime(\'%Y-%m-%d\')"></PieceDate>\n
<tal:block tal:replace="nothing"><EcritureLet></EcritureLet>\n
<DateLet></DateLet></tal:block>\n
<ValidDate tal:content="python: context.getModificationDate().strftime(\'%Y-%m-%d\')">Modification Date</ValidDate>\n
<tal:block tal:repeat="line python:context.contentValues(portal_type=context.getPortalAccountingMovementTypeList())"><ligne\n
tal:define="account python:line.getDestinationValue(portal_type=\'Account\')" tal:condition="python: account is not None">\n
<CompteNum tal:content="account/Account_getGapId">Reference Compte (Account_getGapId)</CompteNum>\n
<CompteLib tal:content="account/getTranslatedTitle">Translated Title Compte</CompteLib>\n
<tal:block tal:replace="nothing"><CompteAuxNum></CompteAuxNum>\n
<CompteAuxLib></CompteAuxLib>\n
<Montantdevise></Montantdevise>\n
<Idevise></Idevise></tal:block>\n
<Debit tal:content="python: \'%0.2f\' % (line.getDestinationAssetDebit() or line.getDestinationDebit())"></Debit>\n
<Credit tal:content="python: \'%0.2f\' % (line.getDestinationAssetCredit() or line.getDestinationCredit())"></Credit>\n
</ligne></tal:block>\n
</ecriture>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/xml</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransaction_viewAsDestinationFECXML</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<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_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<ecriture xmlns:tal="http://xml.zope.org/namespaces/tal">\n
<EcritureNum tal:content="context/getSourceReference">Specific Reference</EcritureNum>\n
<EcritureDate tal:content="python: context.getStartDate().strftime(\'%Y-%m-%d\')">Specific Date</EcritureDate>\n
<EcritureLib tal:content="context/getTitle">Title</EcritureLib>\n
<PieceRef tal:content="context/getReference">Reference</PieceRef>\n
<PieceDate tal:content="python: context.getStartDate().strftime(\'%Y-%m-%d\')"></PieceDate>\n
<tal:block tal:replace="nothing"><EcritureLet></EcritureLet>\n
<DateLet></DateLet></tal:block>\n
<ValidDate tal:content="python: context.getModificationDate().strftime(\'%Y-%m-%d\')">Modification Date</ValidDate>\n
<tal:block tal:repeat="line python:context.contentValues(portal_type=context.getPortalAccountingMovementTypeList())"><ligne\n
tal:define="account python:line.getSourceValue(portal_type=\'Account\')" tal:condition="python: account is not None">\n
<CompteNum tal:content="account/Account_getGapId">Reference Compte (Account_getGapId)</CompteNum>\n
<CompteLib tal:content="account/getTranslatedTitle">Translated Title Compte</CompteLib>\n
<tal:block tal:replace="nothing"><CompteAuxNum></CompteAuxNum>\n
<CompteAuxLib></CompteAuxLib>\n
<Montantdevise></Montantdevise>\n
<Idevise></Idevise></tal:block>\n
<Debit tal:content="python: \'%0.2f\' % (line.getSourceAssetDebit() or line.getSourceDebit())"></Debit>\n
<Credit tal:content="python: \'%0.2f\' % (line.getSourceAssetCredit() or line.getSourceCredit())"></Credit>\n
</ligne></tal:block>\n
</ecriture>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/xml</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransaction_viewAsSourceFECXML</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
2014-05-16 Jérome
* Fichier des écritures comptables, article A. 47 A-1 du LPF
2006-10-30 Kevin
* Add full 2006 PCG classification.
......
27
\ No newline at end of file
28
\ No newline at end of file
Accounting Transaction Module | fec_export
Accounting Transaction Module | fr_fiscal_report
\ No newline at end of file
# -*- coding: utf8 -*-
##############################################################################
#
# Copyright (c) 2014 Nexedi SA and Contributors. All Rights Reserved.
# Jerome Perrin <jerome@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
"""Test suite for erp5_accounting_l10n_fr
"""
import unittest
import zipfile
import email
import os.path
from cStringIO import StringIO
from DateTime import DateTime
from lxml import etree
from AccessControl.SecurityManagement import newSecurityManager
from Products.ERP5.tests.testAccounting import AccountingTestCase
class TestAccounting_l10n_fr(AccountingTestCase):
"""Test Accounting L10N FR
"""
username = 'bob'
first_name = 'Bob <'
recipient_email_address = 'invalid@example.com'
def getBusinessTemplateList(self):
return AccountingTestCase.getBusinessTemplateList(self) + (
'erp5_deferred_style',
'erp5_accounting_l10n_fr', )
def afterSetUp(self):
AccountingTestCase.afterSetUp(self)
# set a french gap on test accounts
account_module = self.portal.account_module
account_module.payable.setGap('fr/pcg/4/40/401')
account_module.refundable_vat.setGap('fr/pcg/4/44/445/4456')
account_module.goods_purchase.setGap('fr/pcg/6/60/606/6063')
account_module.receivable.setGap('fr/pcg/4/41/411')
account_module.goods_sales.setGap('fr/pcg/7/70/706')
account_module.collected_vat.setGap('fr/pcg/4/44/445/4457/44571')
account_module.bank.setGap('fr/pcg/5/51/512')
# and set french gap as preferred
preference = self.portal.portal_preferences.getActivePreference()
preference.edit(
preferred_accounting_transaction_gap='gap/fr/pcg')
def createUserAndlogin(self, name=username):
# create a user with an email address
person_module = self.portal.person_module
if person_module._getOb('pers', None) is None:
person = person_module.newContent(id='pers', portal_type='Person',
reference=self.username,
first_name=self.first_name,
default_email_text=self.recipient_email_address)
assignment = person.newContent(portal_type='Assignment')
assignment.open()
self.tic()
uf = self.portal.acl_users
uf.zodb_roles.assignRoleToPrincipal('Assignor', self.username)
user = uf.getUserById(self.username).__of__(uf)
newSecurityManager(None, user)
def test_FEC(self):
account_module = self.portal.account_module
first = self._makeOne(
portal_type='Purchase Invoice Transaction',
title='Première Écriture',
simulation_state='delivered',
reference='1',
source_section_value=self.organisation_module.supplier,
stop_date=DateTime(2014, 2, 2),
lines=(dict(destination_value=account_module.payable,
destination_debit=132.00),
dict(destination_value=account_module.refundable_vat,
destination_credit=22.00),
dict(destination_value=account_module.goods_purchase,
destination_credit=110.00)))
second = self._makeOne(
portal_type='Sale Invoice Transaction',
title='Seconde Écriture',
simulation_state='delivered',
reference='2',
destination_section_value=self.organisation_module.client_2,
start_date=DateTime(2014, 3, 1),
lines=(dict(source_value=account_module.receivable,
source_debit=240.00),
dict(source_value=account_module.collected_vat,
source_credit=40.00),
dict(source_value=account_module.goods_sales,
source_credit=200.00)))
self.portal.accounting_module.AccountingTransactionModule_viewFrenchAccountingTransactionFile(
section_category='group/demo_group',
section_category_strict=False,
at_date=DateTime(2014, 12, 31),
simulation_state=['delivered'])
self.tic()
fec_xml = ''
last_message = self.portal.MailHost._last_message
self.assertNotEquals((), last_message)
mfrom, mto, message_text = last_message
self.assertEqual('"%s" <%s>' % (self.first_name, self.recipient_email_address), mto[0])
mail_message = email.message_from_string(message_text)
for part in mail_message.walk():
content_type = part.get_content_type()
file_name = part.get_filename()
if file_name == 'FEC-2014.zip':
self.assertEqual('application/zip', content_type)
data = part.get_payload(decode=True)
zf = zipfile.ZipFile(StringIO(data))
fec_xml = zf.open("FEC.xml").read()
break
else:
self.fail("Attachment not found")
# validate against official schema
schema = etree.XMLSchema(etree.XML(open(os.path.join(
os.path.dirname(__file__), 'test_data',
'formatA47A-I-VII-1.xsd')).read()))
# this raise if invalid
tree = etree.fromstring(fec_xml, etree.XMLParser(schema=schema))
debit_list = tree.xpath("//Debit")
self.assertEqual(6, len(debit_list))
self.assertEqual(372, sum([float(x.text) for x in debit_list]))
credit_list = tree.xpath("//Credit")
self.assertEqual(6, len(credit_list))
self.assertEqual(372, sum([float(x.text) for x in credit_list]))
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestAccounting_l10n_fr))
return suite
<?xml version="1.0" encoding="ISO-8859-15"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="comptabilite">
<xs:complexType><xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" ref="exercice" />
</xs:sequence></xs:complexType>
</xs:element>
<xs:element name="exercice">
<xs:complexType><xs:sequence>
<xs:element name="DateCloture" minOccurs="1" maxOccurs="1" type="UnionDate" />
<xs:element minOccurs="1" maxOccurs="unbounded" ref="journal" />
</xs:sequence></xs:complexType>
</xs:element>
<xs:element name="journal">
<xs:complexType><xs:sequence>
<xs:element name="JournalCode" minOccurs="1" maxOccurs="1" type="xs:string"/>
<xs:element name="JournalLib" minOccurs="1" maxOccurs="1" type="xs:string"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="ecriture" />
</xs:sequence></xs:complexType>
</xs:element>
<xs:element name="ecriture">
<xs:complexType><xs:sequence>
<xs:element name="EcritureNum" minOccurs="1" maxOccurs="1" type="xs:string"/>
<xs:element name="EcritureDate" minOccurs="1" maxOccurs="1" type="UnionDate" />
<xs:element name="EcritureLib" minOccurs="1" maxOccurs="1" type="xs:string"/>
<xs:element name="PieceRef" minOccurs="1" maxOccurs="1" type="xs:string"/>
<xs:element name="PieceDate" minOccurs="1" maxOccurs="1" type="UnionDate" />
<xs:element name="EcritureLet" minOccurs="0" maxOccurs="1" type="xs:string"/>
<xs:element name="DateLet" minOccurs="0" maxOccurs="1" type="UnionDate" />
<xs:element name="ValidDate" minOccurs="1" maxOccurs="1" type="UnionDate" />
<xs:element minOccurs="2" maxOccurs="unbounded" ref="ligne" />
</xs:sequence></xs:complexType>
</xs:element>
<xs:element name="ligne">
<xs:complexType><xs:sequence>
<xs:element name="CompteNum" minOccurs="1" maxOccurs="1" type="NumCompteFormat" />
<xs:element name="CompteLib" minOccurs="1" maxOccurs="1" type="xs:string" />
<xs:element name="CompteAuxNum" minOccurs="0" maxOccurs="1" type="xs:string" />
<xs:element name="CompteAuxLib" minOccurs="0" maxOccurs="1" type="xs:string" />
<xs:element name="Montantdevise" minOccurs="0" maxOccurs="1" type="xs:string" />
<xs:element name="Idevise" minOccurs="0" maxOccurs="1" type="xs:string" />
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element name="Debit" minOccurs="1" maxOccurs="1" type="xs:float"/>
<xs:element name="Credit" minOccurs="1" maxOccurs="1" type="xs:float"/>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="Montant" minOccurs="1" maxOccurs="1" type="xs:float"/>
<xs:element name="Sens" minOccurs="1" maxOccurs="1" type="SensFormat" />
</xs:sequence>
</xs:choice>
<!-- On peut ajouter n'importe quel lement la suite -->
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence></xs:complexType>
</xs:element>
<!-- Une date doit tre de type aaaa-mm-jj ou aaaa-mm-jjThh:mm:ss -->
<xs:simpleType name="UnionDate">
<xs:union>
<xs:simpleType><xs:restriction base="xs:date"/></xs:simpleType>
<xs:simpleType><xs:restriction base="xs:dateTime"/></xs:simpleType>
</xs:union>
</xs:simpleType>
<!-- Un numro de compte doit commencer par 3 chiffres -->
<xs:simpleType name="NumCompteFormat">
<xs:restriction base="xs:string">
<xs:minLength value="3" />
<xs:pattern value="([0-9]{3}([0-9a-zA-Z]*))" />
</xs:restriction>
</xs:simpleType>
<!-- Le sens doit tre du type d, D, c, C, +1 ou -1 -->
<xs:simpleType name="SensFormat">
<xs:restriction base="xs:string">
<xs:enumeration value="d"/>
<xs:enumeration value="D"/>
<xs:enumeration value="c"/>
<xs:enumeration value="C"/>
<xs:enumeration value="-1"/>
<xs:enumeration value="+1"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment