Commit a454122e authored by Jean-Paul Smets's avatar Jean-Paul Smets

initial check in


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@1166 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent c2f00125
def _checkPermission(folder):
msg=''
if hasattr(folder, 'objectValues'):
for child in folder.objectValues():
msg += _checkPermission(child)
if hasattr(folder, 'valid_roles'):
valid_role_list = folder.valid_roles()
manager_index = list(valid_role_list).index('Manager')
permission_list = folder.permission_settings()
for permission in permission_list:
if permission['acquire'] == '':
for role in permission['roles']:
name = role['name']
pos = name.find('r')
index = int(name[pos+1:])
if manager_index == index:
if role['checked'] == '':
msg += '%s: %s does not contain Manager\n' % (folder.getUrl(), permission['name'])
break
return msg
def ERP5Site_checkAllPermissions(self):
portal = self.portal_url.getPortalObject()
return _checkPermission(portal)
## Script (Python) "Account_countAccountingTransactions"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=self
##title=
##
currency = None
if currency in (None, 'None'):
currency = context.currency.EUR
#inventory = context.Resource_zGetInventory(node_uid=context.getUid(), omit_simulation=1,
# resource_uid=(currency.getUid(),),
# simulation_state=('draft', 'planned', 'confirmed', 'stopped', 'delivered'))
inventory = context.Resource_zGetInventory(node_uid=self.uid, omit_simulation=1,
resource_uid=(currency.getUid(),),
simulation_state=('draft', 'planned', 'confirmed', 'stopped', 'delivered'))
inventory = inventory[0]
return str(inventory.stock_uid)
## Script (Python) "Account_getTotalSourceCredit"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=self
##title=
##
currency = None
if currency in (None, 'None'):
currency = context.currency.EUR
total = 0.0
try:
inventory = context.Resource_zGetInventory(node_uid=context.getUid(), omit_output=1, omit_simulation=1,
resource_uid=(currency.getUid(),),
simulation_state=('draft', 'planned', 'confirmed', 'stopped', 'delivered'))
total = inventory[0].inventory or 0.0
except:
pass
return '%.02f' % total
## Script (Python) "Account_getTotalSourceDebit"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=self
##title=
##
currency = None
if currency in (None, 'None'):
currency = context.currency.EUR
total = 0.0
try:
inventory = context.Resource_zGetInventory(node_uid=context.getUid(), omit_input=1, omit_simulation=1,
resource_uid=(currency.getUid(),),
simulation_state=('draft', 'planned', 'confirmed', 'stopped', 'delivered'))
total = - inventory[0].inventory or 0.0
except:
pass
return '%.02f' % total
<?xml version="1.0"?>
<form>
<title>Set List Settting</title>
<row_length>4</row_length>
<name>Account_list_ui</name>
<pt>form_list_ui</pt>
<action>base_list_ui</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "Account_search"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=**kwd
##title=
##
for cname in kwd.keys():
if kwd[cname] == '' or kwd[cname] is None:
del kwd[cname]
kwd['select_expression'] = "'EUR' AS accounting_transaction_line_currency"
return context.portal_catalog(**kwd)
## Script (Python) "Account_stat"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=**kwd
##title=
##
return 'toto'
return repr(kwd)
<?xml version="1.0"?>
<form>
<title>Account</title>
<row_length>4</row_length>
<name>Account_viewTransactionList</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('date', 'Date'), ('type', 'Type'), ('getReference', 'Reference'), ('quantity', 'Quantity')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[('portal_categories/group', 'Group'), ('portal_categories/region', 'Region')]</domain_root_list>
<domain_tree type="int">1</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">25</lines>
<list_action>list</list_action>
<list_method type="method">sql_stock_account_parent</list_method>
<meta_types type="list">[]</meta_types>
<not_viewable type="int">0</not_viewable>
<portal_types type="list">[('Accounting Transaction', 'Accounting Transaction'), ('Purchase Invoice Transaction', 'Purchase Invoice Transaction'), ('Sale Invoice Transaction', 'Sale Invoice Transaction')]</portal_types>
<read_only type="int">0</read_only>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">1</search>
<search_columns type="list">[]</search_columns>
<select type="int">1</select>
<selection_name>account_history_selection</selection_name>
<sort type="list">[]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Transactions concerned by this account</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Balance Transaction Line</title>
<row_length>4</row_length>
<name>BalanceTransactionLine_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Account</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:here.getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_payment</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Bank Account</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: here.getBalanceTransactionLineSourcePaymentItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Person', 'Person'), ('Organisation', 'Organisation')]</portal_type>
<relation_setter_id></relation_setter_id>
<required type="int">0</required>
<title>Third Party</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_resource</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:map(lambda x: (x.id,'currency/%s' % x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Credit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Balance Transaction</title>
<row_length>4</row_length>
<name>BalanceTransaction_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_source_section</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">1</required>
<size type="int">1</size>
<title>Section</title>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: [['Nexedi', 'organisation/nexedi'], ]</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Operation Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>simulation_state</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>State</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python: here.portal_workflow.getInfoFor(here, 'simulation_state')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('source', 'Account'), ('source_payment', 'Bank Account'), ('destination_section_title', 'Third Party'), ('resource', 'Currency'), ('source_debit', 'Debit'), ('source_credit', 'Credit')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('source', 'Account'), ('source_payment', 'Bank Account'), ('resource', 'Currency'), ('source_debit', 'Debit'), ('source_credit', 'Credit')]</editable_columns>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[('source_section', 'source_section')]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_method type="method">searchInvoiceTransaction</list_method>
<meta_types type="list">[]</meta_types>
<not_viewable type="int">0</not_viewable>
<portal_types type="list">[]</portal_types>
<read_only type="int">0</read_only>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>balance_transaction_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Balance Transaction Lines</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_source_payment</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source_payment</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: cell.getObject().getBalanceTransactionLineSourcePaymentItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_resource</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_resource</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:[('','')]+map(lambda x:(x.id,'currency/%s' %x.id),cell.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_credit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_destination_section_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>listbox_destination_section_title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title></title>
<row_length>4</row_length>
<name>pay_sheet_line_quantity_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">1</required>
<title>ID</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>matrixbox</id> <type>MatrixBox</type>
<values>
<all_editable_attributes type="list">[('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes>
<alternate_name></alternate_name>
<cell_base_id>cell</cell_base_id>
<columns type="list">[('None', 'None')]</columns>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_attributes type="list">[('quantity', 'quantity'), ('predicate_value', 'predicate_value'), ('price', 'price'), ('variation_category_list', 'variation_category_list')]</editable_attributes>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<getter_method></getter_method>
<global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes>
<hidden type="int">0</hidden>
<lines type="list">[('None', 'None')]</lines>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<tabs type="list">[]</tabs>
<title>matrixbox</title>
<update_cell_range type="int">1</update_cell_range>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
<columns>python:here.order_line_matrix_item_list(base_category_list = ('salary_range', 'taille',), base=1)</columns>
<lines>python:here.order_line_matrix_item_list(base_category_list = ('tax_category', 'coloris','variante'), base=1)</lines>
<tabs>python:here.order_line_matrix_item_list(base_category_list = ('salary_range','tax_category', 'taille','coloris','variante'), base=1, include=0)</tabs>
<update_cell_range>here/DeliveryLine_asCellRange</update_cell_range>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
<field><id>domain_base_category_list</id> <type>LinesField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="list">[]</default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">1</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Valid Domain</title>
<unicode type="int">0</unicode>
<view_separator>&lt;br /&gt;</view_separator>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
<default>here/getVariationBaseCategoryList</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>predicate_operator</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default>SUPERSET_OF</default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">1</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Operator</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>mapped_value_property_list</id> <type>LinesField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="list">["['target_quantity', 'quantity', 'price']"]</default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">1</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Modified categories</title>
<unicode type="int">0</unicode>
<view_separator>&lt;br /&gt;</view_separator>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>matrixbox_predicate_value</id> <type>LinesField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="list">[]</default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">1</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>matrixbox_predicate_value</title>
<unicode type="int">0</unicode>
<view_separator>&lt;br /&gt;</view_separator>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
<default>python:cell_index</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>matrixbox_variation_category_list</id> <type>LinesField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="list">[]</default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">1</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>matrixbox_predicate_value</title>
<unicode type="int">0</unicode>
<view_separator>&lt;br /&gt;</view_separator>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
<default>python:cell_index</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>matrixbox_price</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">1</hidden>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>matrixbox_price</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:cell.getProperty('price')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>matrixbox_quantity</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission></editable_permission>
<editable_role></editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>matrixbox_quantity</title>
<viewable_expression></viewable_expression>
<viewable_permission></viewable_permission>
<viewable_role></viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:cell.getProperty('quantity')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title></title>
<row_length>4</row_length>
<name>pay_sheet_line_edit</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">1</required>
<title>ID</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">2</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>my_resource_relative_url</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>resource</base_category>
<catalog_index>relative_url</catalog_index>
<css_class></css_class>
<default></default>
<default_module>product</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<portal_type type="list">[('Service', 'Service'), ('Product', 'Product')]</portal_type>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Produit</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_variation_base_category_list</id> <type>MultiListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="list">[]</default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<size type="int">3</size>
<title>Axes variation</title>
<unicode type="int">0</unicode>
<view_separator>&lt;br /&gt;</view_separator>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
<items>here/getVariationRangeBaseCategoryList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_variation_category_list</id> <type>MultiListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="list">[]</default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<size type="int">8</size>
<title>Variantes</title>
<unicode type="int">0</unicode>
<view_separator>&lt;br /&gt;</view_separator>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
<items>here/getVariationRangeCategoryItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
<field><id>my_quantity</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Default quantity</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_quantity_unit</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<size type="int">1</size>
<title>Quantity unit</title>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/quantity_unit/getCategoryChildTitleItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_price</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Default price</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_total_quantity</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">1</hidden>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Quantité facturée</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<title>python:'Quantité facturée : %.2f' % here.getTotalQuantity()</title>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "PaySheetLinesPrintFormat"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
True = 1
False = 0
pay_sheet = context.getObject()
all = pay_sheet.objectValues()
# this dictionnary contain all pay sheet details extracted from Pay Sheet Lines.
# these details are sorted and tidy for a clean print of the Pay Sheet
formated_lines = [] # id, title, pp, cs, ps
# todo: add: description assiette, montant assiette, pourcentage de la part salariale et patronale
# get all PaySheetLines
for pay_sheet_line in all:
ID = pay_sheet_line.getId()
if ID[-3:] == '_pp' or ID[-3:] == '_cs':
# search an existing id without the suffix in the final table
i = 0
id_exist = False
for line in formated_lines:
if line['id'] == ID[:-3]:
id_exist = True
break
i += 1
# add a new line of contribution in pay sheet details
if id_exist == False:
new_formated_line = { 'id' : ID[:-3],
'title' : None,
'pp' : None,
'cs' : None,
'ps' : None,
'ps_desc' : None,
'pp_desc' : None}
formated_lines.append(new_formated_line)
# get the employer share ('pp' is the french acronym of 'part patronale')
if ID[-3:] == '_pp':
formated_lines[i]['pp'] = pay_sheet_line.getDestinationCredit()
formated_lines[i]['pp_desc'] = pay_sheet_line.getDescription()
# get the social contribution (= employer + salary share) ('cs' is a french acronym of 'cotisation sociale')
elif ID[-3:] == '_cs':
formated_lines[i]['cs'] = pay_sheet_line.getDestinationCredit()
formated_lines[i]['title'] = pay_sheet_line.getTitle()
formated_lines[i]['ps_desc'] = pay_sheet_line.getDescription()
# calculation of the salary share ('ps' is a french acronym of 'part salariale')
for line in formated_lines:
if line['cs']!=None and line['pp']!=None and line['cs']!=line['pp']:
line['ps'] = float(line['cs']) - float(line['pp'])
if line['cs']!=None and line['pp']==None:
line['ps'] = float(line['cs'])
return formated_lines
## Script (Python) "PaySheetTransactionLine_generate"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
paysheet = context.getObject()
paysheet_type = paysheet.getPortalType()
paysheet_line_type = 'Pay Sheet Line'
paysheet_transactionline_type = 'Pay Sheet Transaction Line'
paysheet_cell_type = 'Pay Sheet Cell'
employee = paysheet.getDestinationSection()
employer = paysheet.getSourceSection()
employer_object = paysheet.getSourceSectionValue()
# gross salary source and destination
charge_salariale = 'account/charges_salariales'
produit_salarial = 'account/produits_salariaux'
# final salary source and destination
dette_salarie = 'account/dettes_salaries'
creance_salarie = 'account/creances_salaries'
# employer share source and destination
charge_sociale = 'account/charges_sociales'
produit_social = 'account/produits_sociaux'
# employer + employee share source and destination
dette_sociale = 'account/dettes_sociales'
creance_sociale = 'account/creances_sociales'
# the currency related to this french rules set is euros
paysheet_resource = 'currency/EUR'
# Create a new pay sheet line
def createPaySheetTransactionLine(new_title='', share='',
src_sec='', src='', src_deb=None,
dest_sec='', dest='', new_desc=''):
suffix = { 'social' : ' (cotisations sociales)'
, 'employer': ' (part patronale)'
}
if share == 'social' or share == 'employer':
new_title += suffix[share]
if share == 'social':
src_sec = employer
src = dette_sociale
dest = creance_sociale
elif share == 'employer':
src_sec = employer
src = charge_sociale
dest = produit_social
new_id = str(paysheet.generateNewId())
context.portal_types.constructContent ( type_name = paysheet_transactionline_type
, container = paysheet
, id = new_id
)
# alternate method but doesn't work
#new_line = paysheet.getObject(new_id)
paysheet[new_id].setTitle(new_title)
paysheet[new_id].setResource(paysheet_resource)
paysheet[new_id].setSourceSection(src_sec)
paysheet[new_id].setSource(src)
paysheet[new_id].setDestinationSection(dest_sec)
paysheet[new_id].setDestination(dest)
paysheet[new_id].setSourceDebit(src_deb)
paysheet[new_id].setDescription(new_desc)
def addAccountingItem(title='', mplyee_share=None, mplyer_share=None, dest_org=''):
if mplyer_share == 0 and mplyee_share == 0:
return
if mplyer_share == 0:
createPaySheetTransactionLine ( new_title = title
, share = 'social'
, src_deb = mplyee_share
, dest_sec = dest_org
)
return
if mplyee_share == 0:
createPaySheetTransactionLine ( new_title = title
, share = 'social'
, src_deb = mplyer_share
, dest_sec = dest_org
)
createPaySheetTransactionLine ( new_title = title
, share = 'employer'
, src_deb = mplyer_share
, dest_sec = dest_org
)
return
createPaySheetTransactionLine ( new_title = title
, share = 'social'
, src_deb = float(mplyer_share) + float(mplyee_share)
, dest_sec = dest_org
)
createPaySheetTransactionLine ( new_title = title
, share = 'employer'
, src_deb = mplyer_share
, dest_sec = dest_org
)
# Only keep the PaySheetLine in the paysheet, delete all other objects
id_list = []
for paysheet_item in paysheet.objectValues():
if paysheet_item.getPortalType() != paysheet_line_type:
id_list.append(paysheet_item.getId())
paysheet.manage_delObjects(id_list)
# Get all amount
paysheet_details = paysheet.PaySheetTransaction_getDetails()
paysheet_categories = paysheet_details['paysheet_categories']
paysheet_formated_lines = []
for category in paysheet_categories:
for line in paysheet_categories[category]['lines']:
paysheet_formated_lines.append(line)
# Analyze every PaySheet Line
paysheet_lines = paysheet.objectValues()
for paysheet_item in paysheet_lines:
if paysheet_item.getPortalType() == paysheet_line_type:
# Find the dictionnary that contain the pre-calculated employer and employee share
employer_share = 0.0
employee_share = 0.0
for line in paysheet_formated_lines:
if line['id'] == paysheet_item.getId():
er = line['employer_share']
ee = line['employee_share']
if er not in (None, ''):
employer_share += abs(float(er))
if ee not in (None, ''):
employee_share += abs(float(ee))
# Get the destination organisation
paysheet_line_service = paysheet_item.getResourceValue()
organisation = paysheet_line_service.getSource()
# Add accounting item corresponding to the PaySheet Line
addAccountingItem ( title = paysheet_item.getTitle()
, mplyer_share = employer_share
, mplyee_share = employee_share
, dest_org = organisation
)
# Add the gross salary
createPaySheetTransactionLine ( new_title = 'Salaire brut'
, src_sec = employer
, src = charge_salariale
, src_deb = abs(float(paysheet_details['gross_salary']))
, dest_sec = employee
, dest = produit_salarial
)
# Add the final salary
createPaySheetTransactionLine ( new_title = 'Salaire net'
, src_sec = employer
, src = dette_salarie
, src_deb = abs(float(paysheet_details['net_salary']))
, dest_sec = employee
, dest = creance_salarie
)
# 'refresh' screen
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=Pay+Sheet+Transaction+Lines+created.')
<?xml version="1.0"?>
<form>
<title></title>
<row_length>4</row_length>
<name>pay_sheet_list</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>ID</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>person</default_module>
<description>Destination section</description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Person', 'Person'), ('Organisation', 'Organisation')]</portal_type>
<required type="int">0</required>
<title>Third party account</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>account</default_module>
<description>Destination</description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Account', 'account')]</portal_type>
<required type="int">0</required>
<title>Mirror account</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
<field><id>my_source_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description>Source section</description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Analytical section</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>account</default_module>
<description>Section</description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Account', 'account')]</portal_type>
<required type="int">0</required>
<title>Account</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Source debit (in euros)</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Source credit (in euros)</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "PaySheetTransaction_calcul_OLD"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=agff_slice_1_base=None, agff_slice_1_er=None, agff_slice_1_sr=None, agff_slice_2_base=None, agff_slice_2_er=None, agff_slice_2_sr=None, agff_slice_a_base=None, agff_slice_a_er=None, agff_slice_a_sr=None, agff_slice_b_base=None, agff_slice_b_er=None, agff_slice_b_sr=None, agirc_slice_b_base=None, agirc_slice_b_er=None, agirc_slice_b_sr=None, agirc_slice_c_base=None, agirc_slice_c_er=None, agirc_slice_c_sr=None, ags_slice_a_base=None, ags_slice_a_er=None, ags_slice_b_base=None, ags_slice_b_er=None, apec_slice_b_base=None, apec_slice_b_er=None, apec_slice_b_sr=None, arrco_slice_1_base=None, arrco_slice_1_er=None, arrco_slice_1_sr=None, arrco_slice_2_base=None, arrco_slice_2_er=None, arrco_slice_2_sr=None, arrco_slice_a_base=None, arrco_slice_a_er=None, arrco_slice_a_sr=None, cet_slice_a_base=None, cet_slice_a_er=None, cet_slice_a_sr=None, cet_slice_b_base=None, cet_slice_b_er=None, cet_slice_b_sr=None, cet_slice_c_base=None, cet_slice_c_er=None, cet_slice_c_sr=None, construction_tax_base=None, construction_tax_er=None, courses_tax_base=None, courses_tax_er=None, crds_base=None, crds_sr=None, csg_deductible_base=None, csg_deductible_sr=None, csg_non_deductible_base=None, csg_non_deductible_sr=None, family_benefits_base=None, family_benefits_er=None, industrial_accident_base=None, industrial_accident_er=None, life_insurance_slice_a_base=None, life_insurance_slice_a_er=None, lodging_helps_base=None, lodging_helps_er=None, lodging_helps_limited_base=None, lodging_helps_limited_er=None, oldage_insurance_base=None, oldage_insurance_er=None, oldage_insurance_limited_base=None, oldage_insurance_limited_er=None, oldage_insurance_limited_sr=None, sickness_insurance_base=None, sickness_insurance_er=None, sickness_insurance_sr=None, syntec_base=None, syntec_er=None, syntec_sr=None, training_tax_base=None, training_tax_er=None, transport_payment_base=None, transport_payment_er=None, unemployment_insurance_slice_a_base=None, unemployment_insurance_slice_a_er=None, unemployment_insurance_slice_a_sr=None, unemployment_insurance_slice_b_base=None, unemployment_insurance_slice_b_er=None, unemployment_insurance_slice_b_sr=None, widowhood_insurance_base=None, widowhood_insurance_sr=None
##title=
##
True = 1
False = 0
global paysheet
paysheet = context.getObject()
paysheet_type = paysheet.getPortalType()
paysheet_line_type = 'Pay Sheet Line'
paysheet_cell_type = 'Pay Sheet Cell'
employee = paysheet.getDestinationSection()
employee_object = paysheet.getDestinationSectionValue()
employer = paysheet.getSourceSection()
employer_object = paysheet.getSourceSectionValue()
gross_salary = abs(paysheet.getGrossSalary())
#paysheet_resource = paysheet.getCurrency() why it doesn't work ?????
paysheet_resource = 'currency/EUR'
# set the title if empty
months = ['janvier', 'fvrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'aot', 'septembre', 'octobre', 'novembre', 'dcembre']
if paysheet.getTitle() in ('', None):
paysheet.setTitle('Salaire ' + str(employee_object.getTitle()) + ' ' + months[int(str(paysheet.getStartDate())[5:7])-1] + ' ' + str(paysheet.getStartDate())[0:4])
#########################################################################
# This part of the script implement functions to register all pay sheet
# informations from an ERP5 point of view.
#########################################################################
def createPaySheetItem(title='', res='', dest_org='', cells=[]):
global paysheet
# select good cells only
good_cells = []
for cell in cells:
if cell["base"] not in ('', 0, None) and cell["rate"] not in ('', 0, None):
good_cells.append(cell)
if len(good_cells) == 0:
return
# get all variation categories used in cells
var_cat_list = []
for cell in good_cells:
var_cat_list.append(cell["x"])
var_cat_list.append(cell["y"])
# add a new Pay Sheet Line
payline = paysheet.newContent( portal_type = 'Pay Sheet Line'
, title = title
, resource = res
, destination_section = dest_org
, destination = dest_org
, variation_base_category_list = ('tax_category', 'salary_range')
, variation_category_list = var_cat_list
)
# fill each cell with values
for cell in good_cells:
paycell = payline.getCell(cell["x"], cell["y"], base_id = 'movement')
paycell.edit(quantity=-cell["base"], price=cell["rate"]/100.0)
#########################################################################
# This part of script describe the behaviour of the calculation process
# from accountant point of view.
#########################################################################
# social organism
org_urssaf = 'organisation/urssaf'
org_assedic = 'organisation/assedic'
org_arrco = 'organisation/arrco'
org_agff = 'organisation/agff'
org_agirc = 'organisation/agirc'
org_apec = 'organisation/apec'
org_etat = 'organisation/etat'
org_ener = 'organisation/henner'
# variation categories
cat_social_salary_share = 'tax_category/social/salary_share'
cat_social_employer_share = 'tax_category/social/employer_share'
cat_syntec_employer_share = 'tax_category/syntec_insurance/employer_share'
cat_syntec_salary_share = 'tax_category/syntec_insurance/salary_share'
cat_csg = 'tax_category/csg/salary_share'
cat_crds = 'tax_category/crds/salary_share'
cat_unemployment_salary_share = 'tax_category/unemployment/salary_share'
cat_unemployment_employer_share = 'tax_category/unemployment/employer_share'
cat_ags = 'tax_category/ags/employer_share'
cat_supplementary_pension_salary_share = 'tax_category/supplementary_pension/salary_share'
cat_supplementary_pension_employer_share = 'tax_category/supplementary_pension/employer_share'
cat_life_insurance_employer_share = 'tax_category/life_insurance/employer_share'
cat_apec_salary_share = 'tax_category/apec/salary_share'
cat_apec_employer_share = 'tax_category/apec/employer_share'
cat_taxes = 'tax_category/taxes/employer_share'
cat_gross_salary = 'salary_range/france/salaire_brut'
cat_limited_salary = 'salary_range/france/salaire_plafonne'
cat_syntec_limited_salary = 'salary_range/france/salaire_plafonne_syntec'
cat_brut_csg_salary = 'salary_range/france/salaire_brut_csg'
cat_brut_crds_salary = 'salary_range/france/salaire_brut_crds'
cat_slice_a = 'salary_range/france/tranche_a'
cat_slice_b = 'salary_range/france/tranche_b'
cat_slice_c = 'salary_range/france/tranche_c'
cat_slice_1 = 'salary_range/france/tranche_1'
cat_slice_2 = 'salary_range/france/tranche_2'
# sickness insurance = assurance maladie
createPaySheetItem( title = 'Assurance maladie'
, res = 'service/sickness_insurance'
, dest_org = org_urssaf
, cells = [ { "x" : cat_social_salary_share
, "y" : cat_gross_salary
, "base" : sickness_insurance_base
, "rate" : sickness_insurance_sr
},
{ "x" : cat_social_employer_share
, "y" : cat_gross_salary
, "base" : sickness_insurance_base
, "rate" : sickness_insurance_er
}
]
)
# old-age insurance = assurance vieillesse
createPaySheetItem( title = 'Assurance vieillesse'
, res = 'service/oldage_insurance'
, dest_org = org_urssaf
, cells = [ { "x" : cat_social_salary_share
, "y" : cat_limited_salary
, "base" : oldage_insurance_limited_base
, "rate" : oldage_insurance_limited_sr
},
{ "x" : cat_social_employer_share
, "y" : cat_gross_salary
, "base" : oldage_insurance_base
, "rate" : oldage_insurance_er
},
{ "x" : cat_social_employer_share
, "y" : cat_limited_salary
, "base" : oldage_insurance_limited_base
, "rate" : oldage_insurance_limited_er
}
]
)
# widowhood insurance = assurance veuvage
createPaySheetItem( title = 'Assurance veuvage'
, res = 'service/widowhood_insurance'
, dest_org = org_urssaf
, cells = [ { "x" : cat_social_salary_share
, "y" : cat_gross_salary
, "base" : widowhood_insurance_base
, "rate" : widowhood_insurance_sr
}
]
)
# family benefits = allocations familiales
createPaySheetItem( title = 'Allocations familiales'
, res = 'service/family_benefits'
, dest_org = org_urssaf
, cells = [ { "x" : cat_social_employer_share
, "y" : cat_gross_salary
, "base" : family_benefits_base
, "rate" : family_benefits_er
}
]
)
# industrial accident = accidents du travail
createPaySheetItem( title = 'Accidents du travail'
, res = 'service/industrial_accident'
, dest_org = org_urssaf
, cells = [ { "x" : cat_social_employer_share
, "y" : cat_gross_salary
, "base" : industrial_accident_base
, "rate" : industrial_accident_er
}
]
)
# lodging helps = aide au logement
createPaySheetItem( title = 'Aide au logement'
, res = 'service/lodging_helps'
, dest_org = org_urssaf
, cells = [ { "x" : cat_social_employer_share
, "y" : cat_gross_salary
, "base" : lodging_helps_base
, "rate" : lodging_helps_er
},
{ "x" : cat_social_employer_share
, "y" : cat_limited_salary
, "base" : lodging_helps_limited_base
, "rate" : lodging_helps_limited_er
}
]
)
# transport payment = versement au transport
createPaySheetItem( title = 'Versement au transport'
, res = 'service/transport_payment'
, dest_org = org_urssaf
, cells = [ { "x" : cat_social_employer_share
, "y" : cat_gross_salary
, "base" : transport_payment_base
, "rate" : transport_payment_er
}
]
)
# CSG = Contribution Sociale Generalisee (dductible / non dductible)
createPaySheetItem( title = 'CSG deductible'
, res = 'service/csg_deductible'
, dest_org = org_urssaf
, cells = [ { "x" : cat_csg
, "y" : cat_brut_csg_salary
, "base" : csg_deductible_base
, "rate" : csg_deductible_sr
}
]
)
createPaySheetItem( title = 'CSG non deductible'
, res = 'service/csg_non_deductible'
, dest_org = org_urssaf
, cells = [ { "x" : cat_csg
, "y" : cat_brut_csg_salary
, "base" : csg_non_deductible_base
, "rate" : csg_non_deductible_sr
}
]
)
# CRDS = Contribution pour le Remboursement de la Dette Sociale
createPaySheetItem( title = 'CRDS imposable'
, res = 'service/crds'
, dest_org = org_urssaf
, cells = [ { "x" : cat_crds
, "y" : cat_brut_crds_salary
, "base" : crds_base
, "rate" : crds_sr
}
]
)
# unemployment insurance = assurance chomage
createPaySheetItem( title = 'Assurance chomage'
, res = 'service/unemployment_insurance'
, dest_org = org_assedic
, cells = [ { "x" : cat_unemployment_salary_share
, "y" : cat_slice_a
, "base" : unemployment_insurance_slice_a_base
, "rate" : unemployment_insurance_slice_a_sr
},
{ "x" : cat_unemployment_employer_share
, "y" : cat_slice_a
, "base" : unemployment_insurance_slice_a_base
, "rate" : unemployment_insurance_slice_a_er
},
{ "x" : cat_unemployment_salary_share
, "y" : cat_slice_b
, "base" : unemployment_insurance_slice_b_base
, "rate" : unemployment_insurance_slice_b_sr
},
{ "x" : cat_unemployment_employer_share
, "y" : cat_slice_b
, "base" : unemployment_insurance_slice_b_base
, "rate" : unemployment_insurance_slice_b_er
}
]
)
# AGS (FNGS)
createPaySheetItem( title = 'AGS'
, res = 'service/ags'
, dest_org = org_assedic
, cells = [ { "x" : cat_ags
, "y" : cat_slice_a
, "base" : ags_slice_a_base
, "rate" : ags_slice_a_er
},
{ "x" : cat_ags
, "y" : cat_slice_b
, "base" : ags_slice_b_base
, "rate" : ags_slice_b_er
}
]
)
# ARRCO
createPaySheetItem( title = 'ARRCO'
, res = 'service/arrco'
, dest_org = org_arrco
, cells = [ { "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_1
, "base" : arrco_slice_1_base
, "rate" : arrco_slice_1_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_1
, "base" : arrco_slice_1_base
, "rate" : arrco_slice_1_er
},
{ "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_2
, "base" : arrco_slice_2_base
, "rate" : arrco_slice_2_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_2
, "base" : arrco_slice_2_base
, "rate" : arrco_slice_1_er
},
{ "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_a
, "base" : arrco_slice_a_base
, "rate" : arrco_slice_a_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_a
, "base" : arrco_slice_a_base
, "rate" : arrco_slice_a_er
}
]
)
# AGFF
createPaySheetItem( title = 'AGFF'
, res = 'service/agff'
, dest_org = org_agff
, cells = [ { "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_1
, "base" : agff_slice_1_base
, "rate" : agff_slice_1_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_1
, "base" : agff_slice_1_base
, "rate" : agff_slice_1_er
},
{ "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_2
, "base" : agff_slice_2_base
, "rate" : agff_slice_2_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_2
, "base" : agff_slice_2_base
, "rate" : agff_slice_2_er
},
{ "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_a
, "base" : agff_slice_a_base
, "rate" : agff_slice_a_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_a
, "base" : agff_slice_a_base
, "rate" : agff_slice_a_er
},
{ "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_b
, "base" : agff_slice_b_base
, "rate" : agff_slice_b_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_b
, "base" : agff_slice_b_base
, "rate" : agff_slice_b_er
}
]
)
# AGIRC
createPaySheetItem( title = 'AGIRC'
, res = 'service/agirc'
, dest_org = org_agirc
, cells = [ { "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_b
, "base" : agirc_slice_b_base
, "rate" : agirc_slice_b_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_b
, "base" : agirc_slice_b_base
, "rate" : agirc_slice_b_er
},
{ "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_c
, "base" : agirc_slice_c_base
, "rate" : agirc_slice_c_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_c
, "base" : agirc_slice_c_base
, "rate" : agirc_slice_c_er
}
]
)
# CET
createPaySheetItem( title = 'CET'
, res = 'service/cet'
, dest_org = org_agirc
, cells = [ { "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_a
, "base" : cet_slice_a_base
, "rate" : cet_slice_a_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_a
, "base" : cet_slice_a_base
, "rate" : cet_slice_a_er
},
{ "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_b
, "base" : cet_slice_b_base
, "rate" : cet_slice_b_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_b
, "base" : cet_slice_b_base
, "rate" : cet_slice_b_er
},
{ "x" : cat_supplementary_pension_salary_share
, "y" : cat_slice_c
, "base" : cet_slice_c_base
, "rate" : cet_slice_c_sr
},
{ "x" : cat_supplementary_pension_employer_share
, "y" : cat_slice_c
, "base" : cet_slice_c_base
, "rate" : cet_slice_c_er
}
]
)
# life insurance = assurance deces
createPaySheetItem( title = 'Assurance deces'
, res = 'service/life_insurance'
, dest_org = org_urssaf
, cells = [ { "x" : cat_life_insurance_employer_share
, "y" : cat_slice_a
, "base" : life_insurance_slice_a_base
, "rate" : life_insurance_slice_a_er
}
]
)
# APEC
createPaySheetItem( title = 'APEC'
, res = 'service/apec'
, dest_org = org_apec
, cells = [ { "x" : cat_apec_salary_share
, "y" : cat_slice_b
, "base" : apec_slice_b_base
, "rate" : apec_slice_b_sr
},
{ "x" : cat_apec_employer_share
, "y" : cat_slice_b
, "base" : apec_slice_b_base
, "rate" : apec_slice_b_er
}
]
)
# construction tax
createPaySheetItem( title = 'Construction'
, res = 'service/construction'
, dest_org = org_etat
, cells = [ { "x" : cat_taxes
, "y" : cat_gross_salary
, "base" : construction_tax_base
, "rate" : construction_tax_er
}
]
)
# training tax
createPaySheetItem( title = 'Apprentissage'
, res = 'service/training_tax'
, dest_org = org_etat
, cells = [ { "x" : cat_taxes
, "y" : cat_gross_salary
, "base" : training_tax_base
, "rate" : training_tax_er
}
]
)
# courses tax
createPaySheetItem( title = 'Formation professionnelle'
, res = 'service/courses_tax'
, dest_org = org_etat
, cells = [ { "x" : cat_taxes
, "y" : cat_gross_salary
, "base" : courses_tax_base
, "rate" : courses_tax_er
}
]
)
# Syntec convention
createPaySheetItem( title = 'Convention SYNTEC'
, res = 'service/syntec_insurance'
, dest_org = org_ener
, cells = [ { "x" : cat_syntec_salary_share
, "y" : cat_syntec_limited_salary
, "base" : syntec_base
, "rate" : syntec_sr
},
{ "x" : cat_syntec_employer_share
, "y" : cat_syntec_limited_salary
, "base" : syntec_base
, "rate" : syntec_er
}
]
)
#########################################################################
# Create all Pay sheet transaction lines
#########################################################################
#get_transaction().commit()
#context.PaySheetTransactionLine_generate()
# return to pay sheet
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=Pay+Sheet+Calculation+done.')
## Script (Python) "PaySheetTransaction_checkParameters"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
paysheet = context.getObject()
paysheet_type = paysheet.getPortalType()
employee = paysheet.getDestinationSection()
employer = paysheet.getSourceSection()
if paysheet.getGrossSalary() == None:
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=Gross+salary+is+required')
if employee in ('', None):
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=The+employee+is+required')
if employer in ('', None):
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=The+employer+is+required')
employee_obj = paysheet.getDestinationSectionValue()
employer_obj = paysheet.getSourceSectionValue()
if employee_obj.getCareerGrade() in ('', None):
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=The+employee+must+have+a+career+grade')
if employer_obj.getCreationDate() in ('', None):
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=The+employer+must+have+an+organisation+creation+date')
if employer_obj.getDefaultAddress().getZipCode() in ('', None):
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=The+employer+must+have+a+zip+code')
# parameters are OK, go to the pre-calculation form
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + "/PaySheetTransaction_previewForm?selection_name=default&amp;dialog_category=object_action&amp;form_id=PaySheetTransaction_view")
## Script (Python) "PaySheetTransaction_getDetails"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# this dict contain all paysheet details
paysheet_details = {}
# initialize the employee and employer share total
total_employee_share = 0.0
total_employer_share = 0.0
total_taxable_employee_share = 0.0
# get the gross salary
gross_salary = context.getGrossSalary()
if gross_salary == None:
gross_salary = 0.0
paysheet_cat = {}
object_list = []
for object in context.objectValues():
object_list += [object]
# Sort the list by id since lines are already ordered by id.
object_list.sort(lambda x, y: cmp(int(x.getId()), int(y.getId())))
for pay_sheet_line in object_list:
variation_list = pay_sheet_line.getVariationCategoryList()
range_variation = []
for variation in variation_list:
if variation.find('salary_range')==0:
if not variation in range_variation: # Extra checking because
# get VariationCategoryList returns
# the same 1 items 2 times
range_variation += [variation]
for range in range_variation:
pay_sheet_dict = {}
#pay_sheet_dict['range']=range[range.rfind('/')+1:]
pay_sheet_dict['id'] = pay_sheet_line.getId()
pay_sheet_dict['title'] = pay_sheet_line.getResourceTitle()
for cell in pay_sheet_line.objectValues():
predicate_list = cell.getPredicateValueList()
if range in predicate_list:
pay_sheet_dict['base_name'] = context.portal_categories.resolveCategory(range).getTitleOrId()
for predicate in predicate_list:
if cell.getTotalPrice() != 0:
if predicate.find('employee_share')>=0:
pay_sheet_dict['base']= - cell.getQuantity()
pay_sheet_dict['employee_share'] = cell.getTotalPrice()
pay_sheet_dict['employee_share_rate'] = cell.getPrice() * 100
total_employee_share += float(-pay_sheet_dict['employee_share'])
# here we decide if a resource is taxable or not
if str(pay_sheet_line.getResource())[-14:] == 'non_deductible' or str(pay_sheet_line.getResource())[-4:] == 'crds' or str(pay_sheet_line.getResource())[-7:] == 'taxable':
pay_sheet_dict['taxable']='yes'
elif str(pay_sheet_line.getResource())[-10:] == 'deductible':
pay_sheet_dict['taxable']='no'
else:
pay_sheet_dict['taxable']='no'
if pay_sheet_dict['taxable'] == 'yes':
total_taxable_employee_share += float(-pay_sheet_dict['employee_share'])
elif predicate.find('employer_share')>=0:
pay_sheet_dict['base'] = - cell.getQuantity()
pay_sheet_dict['employer_share'] = cell.getTotalPrice()
pay_sheet_dict['employer_share_rate'] = cell.getPrice() * 100
total_employer_share += float(-pay_sheet_dict['employer_share'])
for key in ('employee_share','employee_share_rate','employer_share','employer_share_rate'):
if not (pay_sheet_dict.has_key(key)):
pay_sheet_dict[key]='' # so that we can display nothing
# find the category of the current pay sheet line
cat_id = None
cat_path = None
for var in variation_list:
sub_cat = var.split('/')
if sub_cat[0] == 'tax_category':
cat_id = sub_cat[1]
cat_path = sub_cat[0] + '/' + sub_cat[1]
break
if cat_id == None:
cat_id = 'no_cat'
# add the current pay sheet line to its category
if not paysheet_cat.has_key(cat_id):
paysheet_cat[cat_id] = {}
paysheet_cat[cat_id]['lines'] = []
if cat_path != None:
paysheet_cat[cat_id]['title'] = context.portal_categories.resolveCategory(cat_path).getTitleOrId()
paysheet_cat[cat_id]['lines'].append(pay_sheet_dict)
# get all paysheet transaction to calculate the sum of different value in a year
accounting_folder = context.aq_parent
paysheet_transactions = accounting_folder.contentValues(filter={'portal_type':'Pay Sheet Transaction'})
# initialize every yearly variable
yearly_net_salary = 0.0
yearly_gross_salary = 0.0
yearly_employee_share = 0.0
yearly_employer_share = 0.0
yearly_taxable_net_salary = 0.0
# get the current paysheet start date and employee
start_date = context.getStartDate()
employee = context.restrictedTraverse(context.getDestinationSectionRelativeUrl())
# browse through paysheet transaction
for paysheet_obj in paysheet_transactions:
# ignore the current paysheet to avoid infinite loop
if paysheet_obj.getId() != context.getId():
# the paysheet must have the same employee
if (employee==None) or (employee!=None and context.restrictedTraverse(paysheet_obj.getDestinationSectionRelativeUrl())==employee):
# check the date
if (start_date==None) or (start_date!=None and paysheet_obj.getStartDate()!=None and start_date.year()==paysheet_obj.getStartDate().year() and paysheet_obj.getStartDate()<= start_date):
# get all detailed values of the paysheet
ps_details = paysheet_obj.PaySheetTransaction_getDetails()
# sum of yearly values
yearly_net_salary += float(ps_details['net_salary'])
yearly_gross_salary += float(ps_details['gross_salary'])
yearly_employee_share += float(ps_details['total_employee_share'])
yearly_employer_share += float(ps_details['total_employer_share'])
yearly_taxable_net_salary += float(ps_details['taxable_net_salary'])
# save the total share values in the exported dict
paysheet_details['net_salary'] = gross_salary - total_employee_share
paysheet_details['gross_salary'] = gross_salary
paysheet_details['paysheet_categories'] = paysheet_cat
paysheet_details['total_employee_share'] = total_employee_share
paysheet_details['taxable_net_salary'] = paysheet_details['net_salary'] + total_taxable_employee_share
paysheet_details['total_employer_share'] = total_employer_share
paysheet_details['total_taxable_employee_share'] = total_taxable_employee_share
# don't forget to add the current values to the yearly sum
paysheet_details['yearly_net_salary'] = yearly_net_salary + paysheet_details['net_salary']
paysheet_details['yearly_gross_salary'] = yearly_gross_salary + paysheet_details['gross_salary']
paysheet_details['yearly_employee_share'] = yearly_employee_share + paysheet_details['total_employee_share']
paysheet_details['yearly_employer_share'] = yearly_employer_share + paysheet_details['total_employer_share']
paysheet_details['yearly_taxable_net_salary'] = yearly_taxable_net_salary + paysheet_details['taxable_net_salary']
return paysheet_details
## Script (Python) "PaySheetTransaction_getDetails_BACKUP"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# this dict contain all paysheet details
paysheet_details = {}
# initialize the salary and employer share total
total_salary_share = 0.0
total_employer_share = 0.0
total_taxable_salary_share = 0.0
# get the gross salary
gross_salary = context.getGrossSalary()
pay_sheet_lines=tuple()
object_list = []
for object in context.objectValues():
object_list += [object]
# Sort the list by id since lines are already ordered by id.
object_list.sort(lambda x, y: cmp(int(x.getId()), int(y.getId())))
for pay_sheet_line in object_list:
variation_list = pay_sheet_line.getVariationCategoryList()
range_variation = []
for variation in variation_list:
if variation.find('salary_range')==0:
if not variation in range_variation: # Extra checking because
# get VariationCategoryList returns
# the same 1 items 2 times
range_variation += [variation]
for range in range_variation:
pay_sheet_dict = {}
#pay_sheet_dict['range']=range[range.rfind('/')+1:]
pay_sheet_dict['id'] = pay_sheet_line.getId()
pay_sheet_dict['title'] = pay_sheet_line.getResourceTitle()
for cell in pay_sheet_line.objectValues():
predicate_list = cell.getPredicateValueList()
if range in predicate_list:
for predicate in predicate_list:
if cell.getTotalPrice() != 0:
if predicate.find('salary_share')>=0:
pay_sheet_dict['base']= - cell.getQuantity()
pay_sheet_dict['salary_share'] = cell.getTotalPrice()
pay_sheet_dict['salary_share_rate'] = cell.getPrice() * 100
total_salary_share += float(-pay_sheet_dict['salary_share'])
# here we decide if a resource is taxable or not
if str(pay_sheet_line.getResource())[-14:] == 'non_deductible' or str(pay_sheet_line.getResource())[-4:] == 'crds' or str(pay_sheet_line.getResource())[-7:] == 'taxable':
pay_sheet_dict['taxable']='yes'
elif str(pay_sheet_line.getResource())[-10:] == 'deductible':
pay_sheet_dict['taxable']='no'
else:
pay_sheet_dict['taxable']='no'
if pay_sheet_dict['taxable'] == 'yes':
total_taxable_salary_share += float(-pay_sheet_dict['salary_share'])
elif predicate.find('employer_share')>=0:
pay_sheet_dict['base'] = - cell.getQuantity()
pay_sheet_dict['employer_share'] = cell.getTotalPrice()
pay_sheet_dict['employer_share_rate'] = cell.getPrice() * 100
total_employer_share += float(-pay_sheet_dict['employer_share'])
for key in ('salary_share','salary_share_rate','employer_share','employer_share_rate'):
if not (pay_sheet_dict.has_key(key)):
pay_sheet_dict[key]='' # so that we can display nothing
pay_sheet_lines += (pay_sheet_dict,)
# get all paysheet transaction to calculate the sum of different value in a year
accounting_folder = context.aq_parent
paysheet_transactions = accounting_folder.contentValues(filter={'portal_type':'Pay Sheet Transaction'})
# initialize every yearly variable
yearly_net_salary = 0.0
yearly_gross_salary = 0.0
yearly_salary_share = 0.0
yearly_employer_share = 0.0
yearly_taxable_net_salary = 0.0
# get the current paysheet start date and employee
start_date = context.getStartDate()
employee = context.restrictedTraverse(context.getDestinationSectionRelativeUrl())
# browse through paysheet transaction
for paysheet_obj in paysheet_transactions:
# ignore the current paysheet
if paysheet_obj.getId() != context.getId():
# the paysheet must have the same employee
if (employee==None) or (employee!=None and context.restrictedTraverse(paysheet_obj.getDestinationSectionRelativeUrl())==employee):
# check the date
if (start_date==None) or (start_date!=None and paysheet_obj.getStartDate()!=None and start_date.year()==paysheet_obj.getStartDate().year() and paysheet_obj.getStartDate()<= start_date):
# get all detailed values of the paysheet
ps_details = paysheet_obj.PaySheetTransaction_getDetails()
# sum of yearly values
yearly_net_salary += float(ps_details['net_salary'])
yearly_gross_salary += float(ps_details['gross_salary'])
yearly_salary_share += float(ps_details['total_salary_share'])
yearly_employer_share += float(ps_details['total_employer_share'])
yearly_taxable_net_salary += float(ps_details['taxable_net_salary'])
# save the total share values in the exported dict
paysheet_details['net_salary'] = gross_salary - total_salary_share
paysheet_details['gross_salary'] = gross_salary
paysheet_details['paysheet_lines'] = pay_sheet_lines
paysheet_details['total_salary_share'] = total_salary_share
paysheet_details['taxable_net_salary'] = paysheet_details['net_salary'] + total_taxable_salary_share
paysheet_details['total_employer_share'] = total_employer_share
paysheet_details['total_taxable_salary_share'] = total_taxable_salary_share
# don't forget to add the current values to the yearly sum
paysheet_details['yearly_net_salary'] = yearly_net_salary + paysheet_details['net_salary']
paysheet_details['yearly_gross_salary'] = yearly_gross_salary + paysheet_details['gross_salary']
paysheet_details['yearly_salary_share'] = yearly_salary_share + paysheet_details['total_salary_share']
paysheet_details['yearly_employer_share'] = yearly_employer_share + paysheet_details['total_employer_share']
paysheet_details['yearly_taxable_net_salary'] = yearly_taxable_net_salary + paysheet_details['taxable_net_salary']
return paysheet_details
## Script (Python) "PaySheetTransaction_getFormattedLines_OLD"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# Example code:
pay_sheet_lines=tuple()
object_list = []
for object in context.objectValues():
object_list += [object]
# Sort the list by id since lines are already ordered by id.
object_list.sort(lambda x, y: cmp(int(x.getId()), int(y.getId())))
for pay_sheet_line in object_list:
variation_list = pay_sheet_line.getVariationCategoryList()
range_variation = []
for variation in variation_list:
if variation.find('salary_range')==0:
if not variation in range_variation: # Extra checking because
# get VariationCategoryList returns
# the same 1 items 2 times
range_variation += [variation]
for range in range_variation:
pay_sheet_dict = {}
#pay_sheet_dict['range']=range[range.rfind('/')+1:]
pay_sheet_dict['id'] = pay_sheet_line.getId()
pay_sheet_dict['title'] = pay_sheet_line.getResourceTitle()
for cell in pay_sheet_line.objectValues():
predicate_list = cell.getPredicateValueList()
if range in predicate_list:
for predicate in predicate_list:
if cell.getTotalPrice() != 0:
if predicate.find('salary_share')>=0:
pay_sheet_dict['range']= - cell.getQuantity()
pay_sheet_dict['salary_share']='%.2f' % cell.getTotalPrice()
pay_sheet_dict['salary_share_rate']='%.3f %%' % (cell.getPrice()*100)
if str(pay_sheet_line.getResource())[-14:] == 'non_deductible' or str(pay_sheet_line.getResource())[-4:] == 'crds' or str(pay_sheet_line.getResource())[-7:] == 'taxable':
pay_sheet_dict['taxable']='yes'
elif str(pay_sheet_line.getResource())[-10:] == 'deductible':
pay_sheet_dict['taxable']='no'
else:
pay_sheet_dict['taxable']='no'
elif predicate.find('employer_share')>=0:
pay_sheet_dict['range']= - cell.getQuantity()
pay_sheet_dict['employer_share']='%.2f' % cell.getTotalPrice()
pay_sheet_dict['employer_share_rate']='%.3f %%' % (cell.getPrice()*100)
for key in ('salary_share','salary_share_rate','employer_share','employer_share_rate'):
if not (pay_sheet_dict.has_key(key)):
pay_sheet_dict[key]='' # so that we can display nothing
pay_sheet_lines += (pay_sheet_dict,)
return pay_sheet_lines
## Script (Python) "PaySheetTransaction_getPreavis"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# Définition des préavis selon le temps dans l'entreprise (en jours)
seuils = [ { 'limite':30 , 'preavis':'1 jour' }, # 1er mois d'essai
{ 'limite':60 , 'preavis':'1 semaine' }, # 2e mois d'essai
{ 'limite':730, 'preavis':'1 mois' }, # 2 premières années
{ 'limite':0, 'preavis':'2 mois' } ] # Après les 2 premières années
paysheet = context.getObject()
employee_object = paysheet.getDestinationSectionValue()
# Récupération de l'entreprise actuelle
currentOrg = None
if hasattr(employee_object,"default_career"):
currentOrg = employee_object["default_career"].getSubordinationValue()
if currentOrg == None:
return '???'
# Calcul du temps total dans cette entreprise
totalTime = 0
steps = employee_object.contentValues()
for step in steps:
if step.getPortalType() == "Career" and step.getId() != "default_career":
if step.getSubordinationValue() == currentOrg:
difference = step.getStopDate() - step.getStartDate()
if difference > 0:
totalTime = totalTime + difference
totalTime = int( totalTime + (DateTime() - employee_object["default_career"].getStartDate()) )
# Détermination du préavis
for i in range(len(seuils)):
if i < len(seuils)-1:
if seuils[i]['limite'] >= totalTime:
return seuils[i]['preavis']
else:
return seuils[i]['preavis']
## Script (Python) "PaySheetTransaction_initializePreview"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=**kw
##title=
##
import random
from Products.ERP5Type.Document import newTempBase
from string import zfill
global portal_object, num, l
portal_object = context.getPortalObject()
num = 0
l = []
# get all pre-calculated rates and bases
default_values = context.PaySheetTransaction_preCalculation()
# function to create a new preview line
def createPreviewLine ( new_id = None
, new_title = None
, new_base = None
, new_base_name = None
, new_employee_rate = None
, new_employer_rate = None
, new_service_url = None
, new_organisation_url = None
, new_salary_range_cat = None
, new_tax_cat = None
):
global portal_object, num, l
num += 1
int_len = 3
o = newTempBase(portal_object, new_id)
o.setUid('new_%s' % zfill(num, int_len))
o.edit(uid='new_%s' % zfill(num, int_len))
o.edit ( id = new_id
, title = new_title
, base = new_base
, base_name = new_base_name
, employee_share_rate = new_employee_rate
, employer_share_rate = new_employer_rate
, service_url = new_service_url
, organisation_url = new_organisation_url
, salary_range_cat = new_salary_range_cat
, tax_cat = new_tax_cat
)
l.append(o)
# get all services related to pay sheet transaction
paysheet_services = []
erp5site = context.portal_url.getPortalObject()
for service in erp5site['service'].objectValues():
base_cat = service.getVariationRangeBaseCategoryList()
# a service is related to paysheet transaction if it has 'tax_category' et 'salary_range' as base category
if 'tax_category' in base_cat and 'salary_range' in base_cat:
paysheet_services.append(service)
# Sort the service list by id
paysheet_services.sort(lambda x, y: cmp(x.getId(), y.getId()))
# generate all lines for the preview form
for serv in paysheet_services:
cat_list = serv.getCategoryList()
# store all categories of the service into lists
tax_cat = []
range_cat = []
for cat in cat_list:
if str(cat).find('tax_category') != -1:
tax_cat.append(cat)
if str(cat).find('salary_range') != -1:
range_cat.append(cat)
# create a line for every salary_range of the service
for base in range_cat:
name = serv.getId() + '/' + context.portal_categories.resolveCategory(base).getId()
# a preview line is composed of a base calculation, an employee share rate and an employer share rate
if default_values.has_key(name):
new_base = default_values[name]['base']
new_employee_rate = default_values[name]['employee_rate']
new_employer_rate = default_values[name]['employer_rate']
# create a preview line for every salary_range value of the service
createPreviewLine ( new_id = serv.getId()
, new_title = serv.getTitleOrId()
, new_base = new_base
, new_base_name = context.portal_categories.resolveCategory(base).getTitleOrId()
, new_employee_rate = new_employee_rate
, new_employer_rate = new_employer_rate
, new_service_url = serv.getRelativeUrl()
, new_organisation_url = serv.getSource()
, new_salary_range_cat = base
, new_tax_cat = tax_cat
)
# return the list of preview lines
return l
<tal:block tal:define="employee python: here.getDestinationSectionValue();
employer python: here.getSourceSectionValue();
paysheet_details python: here.PaySheetTransaction_getDetails();
paysheet_categories python: paysheet_details['paysheet_categories'];
urssaf python: employer.getDestinationSectionValue();
start_date python: here.getStartDate()">
<template bottommargin='0.665cm' showboundary='0' topmargin='0.635cm' rightmargin='0.665cm' tal:define='portal python:here.portal_url.getPortalObject()' filename='paysheet.pdf' pagesize='A4' allowsplitting='1' landscape='0' leftmargin='0.635cm'>
<stylesheet>
<tablestyle name="decompte">
<stylecmd expr="('FONTSIZE', (0,0), (-1,-1), 7)"/>
<stylecmd expr="('OUTLINE', (0,0), (-1,-1), 0.7, (0.4,0.4,0.4))"/>
<stylecmd expr="('LINEAFTER', (0,0), (-1,-1), 0.1, (0.4,0.4,0.4))"/>
<stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 4)"/>
<!-- Entte -->
<stylecmd expr="('TEXTCOLOR', (0,0), (-1,0), colors.white)"/>
<stylecmd expr="('FONT', (0,0), (-1,0), 'Helvetica-Bold', 7)"/>
<stylecmd expr="('BACKGROUND', (0,0), (-1,0), (0.4,0.4,0.4))"/>
<stylecmd expr="('LINEAFTER', (0,0), (-2,0), 0.1, colors.white)"/>
<stylecmd expr="('LEFTPADDING', (0,0), (-1,0), 0)"/>
<stylecmd expr="('RIGHTPADDING', (0,0), (-1,0), 0)"/>
<stylecmd expr="('ALIGNMENT', (0,0), (-1,0), 'CENTER')"/>
<!-- Corps -->
<stylecmd expr="('TOPPADDING', (0,1), (-1,-1), 2)"/>
<stylecmd expr="('BOTTOMPADDING', (0,1), (-1,-1), 2)"/>
<stylecmd expr="('BACKGROUND', (0,1), (-1,-1), (0.95, 0.95, 0.95))"/>
<stylecmd expr="('TEXTCOLOR', (0,1), (-1,-1), colors.black)"/>
<stylecmd expr="('ALIGNMENT', (-5,1), (-1,-1), 'RIGHT')"/>
<!-- Pied de tableau -->
<stylecmd expr="('BACKGROUND', (-1,1), (-1,-2), (0.85,0.85,0.85))"/>
<stylecmd expr="('BACKGROUND', (0,-1), (-2,-1), (0.85,0.85,0.85))"/>
<stylecmd expr="('BACKGROUND', (-1,-1), (-1,-1), (0.75,0.75,0.75))"/>
<stylecmd expr="('LINEABOVE', (0,-1), (-1,-1), 0.1, (0.4,0.4,0.4))"/>
</tablestyle>
<tablestyle name="cumul_conges">
<stylecmd expr="('FONTSIZE', (0,0), (-1,-1), 7)"/>
<stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 4)"/>
<!-- Entte gauche -->
<stylecmd expr="('TEXTCOLOR', (0,0), (0,0), colors.white)"/>
<stylecmd expr="('FONT', (0,0), (0,0), 'Helvetica-Bold', 7)"/>
<stylecmd expr="('BACKGROUND', (0,0), (0,0), (0.4,0.4,0.4))"/>
<stylecmd expr="('TOPPADDING', (0,0), (0,0), 0)"/>
<stylecmd expr="('BOTTOMPADDING', (0,0), (0,0), 0)"/>
<stylecmd expr="('ALIGNMENT', (0,0), (0,0), 'CENTER')"/>
<stylecmd expr="('VALIGN', (0,0), (0,0), 'MIDDLE')"/>
<!-- <!- Premire ligne de droite ->
<stylecmd expr="('LINEABOVE', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>
<stylecmd expr="('LINEBEFORE', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>
<stylecmd expr="('LINEAFTER', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>
-->
</tablestyle>
<tablestyle name="cumul_conges_corps">
<stylecmd expr="('FONTSIZE', (0,0), (-1,-1), 7)"/>
<stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 4)"/>
<!--Tableau de gauche -->
<stylecmd expr="('GRID', (0,0), (4,1), 0.1, (0.4,0.4,0.4))"/>
<stylecmd expr="('ALIGNMENT', (0,0), (4,0), 'CENTER')"/>
<stylecmd expr="('ALIGNMENT', (0,1), (4,1), 'RIGHT')"/>
<!-- Deuxime ligne de droite -->
<!-- <stylecmd expr="('LINEBELOW', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>
<stylecmd expr="('LINEBEFORE', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>
<stylecmd expr="('LINEAFTER', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>
-->
<stylecmd expr="('OUTLINE', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>
</tablestyle>
</stylesheet>
<pagetemplate startframe='content' id='FirstPage'>
<static>
<!-- ATTENTION : L'image ne doit pas tre en format png -->
<fixedimage filename='zodb:logo.jpg' y='27.275cm' x='1.016cm'/>
<infostring z='' color='(0.0,0.0,0.0)' align='center' y='27.5160804cm' x='14.208cm' font='Helvetica' size='20'>FEUILLE DE SALAIRE</infostring>
<!-- Cadre employeur -->
<tal:block tal:condition="python: employer not in (None, '') and employer.getPortalType() == 'Organisation'">
<tal:block tal:define="employer_group python: employer.getGroup()">
<rectangle z='' height='5.239cm' width='7.038cm' stroke='(0.4,0.4,0.4)' y='21.074cm' x='1.016cm' linewidth='1'/>
<line y2='23.646cm' linewidth='1' z='' x2='8.042cm' stroke='(0.6,0.6,0.6)' y1='23.646cm' x1='1.016cm'/>
<line y2='21.741cm' linewidth='1' z='' x2='8.042cm' stroke='(0.6,0.6,0.6)' y1='21.741cm' x1='1.016cm'/>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='25.90483216cm' x='1.278cm' font='Helvetica-Bold' size='8'
tal:content="python: employer.getCorporateName()">Nexedi sarl</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='25.49483216cm' x='1.626cm' font='Helvetica' size='8'
tal:content="python: employer.getDefaultAddress().getStreetAddress()">943 Avenue de la Rpublique</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='25.21366432cm' x='1.626cm' font='Helvetica' size='8'
tal:content='python:employer.getDefaultAddress().getZipCode() + " " + employer.getDefaultAddress().getCity()'>59700 Marcq-en-Baroeul</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='24.70683216cm' x='1.27cm' font='Helvetica' size='8'
tal:content="python: 'Etablissement : %s' % employer_group" tal:condition="python: employer_group != None">Etablissement : nexedi</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='24.70683216cm' x='1.27cm' font='Helvetica' size='8'
tal:content="python: 'Etablissement : Etablissement principal'" tal:condition="python: employer_group == None">Etablissement : nexedi</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='24.42566432cm' x='1.27cm' font='Helvetica' size='8'
tal:content="python: 'Siret : %s' % employer.getGeographicIncorporateCode()">Siret : 440047504 00012</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='24.14449648cm' x='1.27cm' font='Helvetica' size='8'
tal:content="python: 'NAF (ex APE) : %s' % employer.getActivityCode()">NAF (ex APE) : 722Z</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='23.23783216cm' x='1.27cm' font='Helvetica' size='8'
tal:content="python: 'NURSSAF : %s' % employer.getSocialCode()">NURSSAF : 592 190071289 1013</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='22.95666432cm' x='1.27cm' font='Helvetica' size='8'
tal:content="python:urssaf.getTitle()">URSSAF de Roubaix-Tourcoing</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='22.37383216cm' x='1.626cm' font='Helvetica' size='8'
tal:content="python:urssaf.getDefaultAddress().getStreetAddress()">28, avenue de la Marne</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='22.09266432cm' x='1.626cm' font='Helvetica' size='8'
tal:content="python:urssaf.getDefaultAddress().getZipCode() + ' ' + urssaf.getDefaultAddress().getCity()">59208 Tourcoing</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='21.33283216cm' x='1.27cm' font='Helvetica' size='8'
tal:content="python: 'Convention collective de branche : %s' % employee.getDefaultCollectiveAgreementTitle()">Convention collective de branche : SYNTEC</infostring>
</tal:block>
</tal:block>
<!-- Cadre employ -->
<tal:block tal:condition="python: employee not in (None, '') and employee.getPortalType() == 'Person'">
<rectangle z='' height='5.239cm' width='7.038cm' stroke='(0.4,0.4,0.4)' y='21.074cm' x='12.065cm' linewidth='1'/>
<line y2='23.994cm' linewidth='1' z='' x2='19.099cm' stroke='(0.6,0.6,0.6)' y1='23.994cm' x1='12.073cm'/>
<line y2='22.165cm' linewidth='1' z='' x2='19.099cm' stroke='(0.6,0.6,0.6)' y1='22.165cm' x1='12.073cm'/>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='25.91383216cm' x='12.327cm' font='Helvetica-Bold' size='8'
tal:content="python: employee.getTitle()">Sbastien Robin</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='25.50383216cm' x='12.675cm' font='Helvetica' size='8'
tal:content="python:employee.getDefaultAddress().getStreetAddress()">11, rue des chaudrons</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='25.22266432cm' x='12.675cm' font='Helvetica' size='8'
tal:content="python:employee.getDefaultAddress().getZipCode() + ' ' + employee.getDefaultAddress().getCity()">59300 Valenciennes</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='24.29683216cm' x='12.327cm' font='Helvetica' size='8'
tal:content="python: 'NSecu.Soc. : %s' % employee.getSocialCode()">NSecu.Soc. : 1 80 04 85 047 027 25</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='23.58583216cm' x='12.327cm' font='Helvetica' size='8'
tal:content="python: 'Emploi : %s' % employee.getDefaultCareerTitle()">Emploi : Directeur Technique</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='23.30466432cm' x='12.327cm' font='Helvetica' size='8'
tal:content="python: 'Qualification : %s' % employee.getCareerGrade().split('/')[-1:][0]">Qualification : ingenieur</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='23.02349648cm' x='12.327cm' font='Helvetica' size='8'
tal:content="python: 'Echelon : %s' % employee.getDefaultCareerSalaryLevel()">Echelon : 1</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='22.74232864cm' x='12.327cm' font='Helvetica' size='8'
tal:content="python: 'Coefficient : %s' % employee.getDefaultCareerSalaryCoefficient()">Coefficient : 1</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='21.75683216cm' x='12.327cm' font='Helvetica' size='8'
tal:content="python: 'Priode : du %s au %s' % (start_date, here.getStopDate())">Priode : du 2003/11/01 au 2003/11/30</infostring>
<infostring z='' color='(0.0,0.0,0.0)' align='left' y='21.47566432cm' x='12.327cm' font='Helvetica' size='8'
tal:content="python: 'Date de paiement : %s' % here.getTargetStopDate()">Date de paiement : 2003/11/04</infostring>
</tal:block>
<line y2='1.506cm' linewidth='1' z='' x2='19.075cm' stroke='(0.6,0.6,0.6)' y1='1.506cm' x1='1.905cm'/>
<infostring z='' color='(0.0,0.0,0.0)' align='center' y='1.00183216cm' x='10.4855cm' font='Helvetica' size='8'>Dans votre intrt et pour vous aider faire valoir vos droits, conservez ce bulletin de paie sans limitation de dure.</infostring>
</static>
<frame showBoundary='0' leftpadding='0.1cm' height='18.74cm' width='19.701cm' rightpadding='0.1cm' y='1.689cm' x='0.635cm' nextid='content' toppadding='0.2cm' id='content' bottompadding='0.5cm'/>
</pagetemplate>
</template>
</tal:block>
\ No newline at end of file
## Script (Python) "PaySheetTransaction_postCalculation"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=listbox=[],**kw
##title=
##
True = 1
False = 0
global paysheet
paysheet = context.getObject()
paysheet_type = paysheet.getPortalType()
paysheet_line_type = 'Pay Sheet Line'
paysheet_cell_type = 'Pay Sheet Cell'
employee = paysheet.getDestinationSection()
employee_object = paysheet.getDestinationSectionValue()
employer = paysheet.getSourceSection()
employer_object = paysheet.getSourceSectionValue()
# delete all objects in the paysheet
id_list = []
for paysheet_item in paysheet.objectValues():
id_list.append(paysheet_item.getId())
paysheet.manage_delObjects(id_list)
# this function register all paysheet informations in paysheet lines and cells
def createPaySheetItem(title='', res='', dest_org='', cells=[]):
global paysheet
# select good cells only
good_cells = []
for cell in cells:
if cell["base"] not in ('', 0, None) and cell["rate"] not in ('', 0, None):
good_cells.append(cell)
if len(good_cells) == 0:
return
# get all variation categories used in cells
var_cat_list = []
for cell in good_cells:
var_cat_list.append(cell["x"])
var_cat_list.append(cell["y"])
# add a new Pay Sheet Line
payline = paysheet.newContent( portal_type = 'Pay Sheet Line'
, title = title
, resource = res
, destination_section = dest_org
, destination = dest_org
, variation_base_category_list = ('tax_category', 'salary_range')
, variation_category_list = var_cat_list
)
# fill each cell with values
for cell in good_cells:
paycell = payline.getCell(cell["x"], cell["y"], base_id = 'movement')
paycell.edit(quantity=-cell["base"], price=cell["rate"]/100.0)
# set the title of the paysheet if empty
months = ['janvier', 'fvrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'aot', 'septembre', 'octobre', 'novembre', 'dcembre']
if paysheet.getTitle() in ('', None):
new_title = 'Salaire ' + str(employee_object.getTitle())
if paysheet.getStartDate() not in ('', None):
new_title = ' ' + months[int(str(paysheet.getStartDate())[5:7])-1] + ' ' + str(paysheet.getStartDate())[0:4]
paysheet.setTitle(new_title)
# get the ordered list of standard preview line objects
std_lines = context.PaySheetTransaction_initializePreview()
# this list contain all paysheet items, indexed by service
paysheet_items = {}
# scan every standard preview line to create an item for each service
for std_line in std_lines:
# get the service url (unique because containing the id)
service = std_line.getProperty('service_url')
# verify that the service is not existing
if not paysheet_items.has_key(service):
# create a temporary service item
temp_item = {}
# fill the new item with needed data
temp_item['title'] = std_line.getProperty('title')
temp_item['res'] = std_line.getProperty('service_url')
temp_item['dest_org'] = std_line.getProperty('organisation_url')
temp_item['cells'] = []
# add the new service item to the list
paysheet_items[service] = temp_item
# initialise the user preview line index
user_line_index = 0
# scan every standard preview line and get the correspondant user preview line to put user parameters in appropriate cells
for std_line in std_lines:
# define some values related to current standard preview line
service = std_line.getProperty('service_url')
salary_range_cat = std_line.getProperty('salary_range_cat')
tax_cat = std_line.getProperty('tax_cat')
# increment the user line index: we can use this strategy because preview lines (user or standard ones) are sorted
user_line_index += 1
# get user paysheet parameters stored in user preview line (=listbox)
for user_line in listbox:
# search the user preview line corresponding to the standard preview line
if user_line.has_key('listbox_key') and int(user_line['listbox_key'])==user_line_index:
# got it ! we have the right line
# get the base salary
base = user_line['base']
# scan allowed tax categories to get employee and/or employer share rate
for cat in tax_cat:
# define an empty new cell
new_cell = None
mployee_r = user_line['employee_share_rate']
mployer_r = user_line['employer_share_rate']
if str(cat).find('employer_share') != -1 and mployer_r not in (None, ''):
new_cell = { "x" : cat
, "y" : salary_range_cat
, "base" : base
, "rate" : mployer_r
}
if str(cat).find('employee_share') != -1 and mployee_r not in (None, ''):
new_cell = { "x" : cat
, "y" : salary_range_cat
, "base" : base
, "rate" : mployee_r
}
# add the cell to the conresponding paysheet item
if new_cell != None:
paysheet_items[service]['cells'].append(new_cell)
# create a paysheet item for each service with user data in it
for item in paysheet_items:
if paysheet_items[item]['cells'] not in ([], None, ''):
#print item
createPaySheetItem ( title = paysheet_items[item]['title']
, res = paysheet_items[item]['res']
, dest_org = paysheet_items[item]['dest_org']
, cells = paysheet_items[item]['cells']
)
# calculation of all paysheet transaction lines
#get_transaction().commit()
#context.PaySheetTransactionLine_generate()
context.immediateReindexObject()
# return to pay sheet
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '?portal_status_message=Pay+sheet+calculation+done.')
## Script (Python) "PaySheetTransaction_preCalculation"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=ags_rate=None, industrial_accident_rate=None, transport_payment_rate=None, syntec_rate=None
##title=
##
True = 1
False = 0
global paysheet
paysheet = context.getObject()
paysheet_type = paysheet.getPortalType()
employee = paysheet.getDestinationSection()
employee_object = paysheet.getDestinationSectionValue()
employer = paysheet.getSourceSection()
employer_object = paysheet.getSourceSectionValue()
gross_salary = abs(paysheet.getGrossSalary())
# check if the employee is executive or not
if employee_object.getCareerGrade().split('/')[-1:][0] in ('engineer'):
executive = True
else:
executive = False
company_birth = employer_object.getCreationDate()
employer_region = employer_object.getDefaultAddress().getZipCode()[:2]
# get the number of person which are employed by the company ,
# sub_list = employer_object.getSubordinationRelatedValueList()
# company_size = 0
# for person in sub_list:
# if person.getPortalType() == 'Person': # add condition: if current role == internal and defaultCareerEnd and defaultCareerStart fit in the current year
# #print repr(person) + repr(person.getTitle())
# company_size += 1
#
# print repr(company_size)
#
# return printed
company_size = 3
# limited salary = salaire plafonn
if gross_salary < 2432: #!!! depending of the wage periodicity, 2432 euros is for a month
limited_salary = gross_salary
else:
limited_salary = 2432
# "Char" slice type
slice_a_value = 2432
slice_b_value = 9728
slice_c_value = 19456
char_slices = {}
if gross_salary < slice_a_value:
char_slices['A'] = gross_salary
else:
char_slices['A'] = slice_a_value
if gross_salary < slice_b_value:
char_slices['B'] = float(gross_salary) - float(slice_a_value)
else:
char_slices['B'] = slice_b_value
if gross_salary < slice_c_value:
char_slices['C'] = float(gross_salary) - float(slice_b_value)
else:
char_slices['C'] = slice_c_value
# "Number" slice type
slice_1_value = 2432
slice_2_value = 7296
num_slices = {}
if gross_salary < slice_1_value:
char_slices['1'] = gross_salary
else:
char_slices['1'] = slice_1_value
if gross_salary < slice_2_value:
char_slices['2'] = gross_salary - slice_1_value
else:
char_slices['2'] = slice_2_value
# age-slice of the company
old_limit = DateTime(1997, 1, 1)
if company_birth < old_limit:
comp_type = 'old'
else:
comp_type = 'new'
#################
# This script will fill the PaySheetTransaction_preview with default values for base salary calculation, employer and employee share
#################
default = {}
# initialize all variables to None
paysheet_services = []
erp5site = context.portal_url.getPortalObject()
for service in erp5site['service'].objectValues():
base_cat = service.getVariationRangeBaseCategoryList()
if 'tax_category' in base_cat and 'salary_range' in base_cat:
paysheet_services.append(service)
for serv in paysheet_services:
cat_list = serv.getCategoryList()
tax_cat = []
range_cat = []
for cat in cat_list:
if str(cat).find('tax_category') != -1:
tax_cat.append(cat)
if str(cat).find('salary_range') != -1:
range_cat.append(cat)
for base in range_cat:
new_name = serv.getId() + '/' + context.portal_categories.resolveCategory(base).getId()
default[new_name] = {'employer_rate':None,'employee_rate':None,'base':None}
# sickness insurance
if employer_region in ('57', '67', '68'):
er = 1.70
else:
er = 0.75
default['sickness_insurance/salaire_brut'] = \
{ 'employer_rate' : 12.80
, 'employee_rate' : er
, 'base' : gross_salary
}
# old-age insurance
default['oldage_insurance/salaire_brut'] = \
{ 'employer_rate' : 1.60
, 'employee_rate' : None
, 'base' : gross_salary
}
default['oldage_insurance/salaire_plafonne'] = \
{ 'employer_rate' : 8.20
, 'employee_rate' : 6.55
, 'base': limited_salary
}
# widowhood insurance
default['widowhood_insurance/salaire_brut'] = \
{ 'employer_rate' : None
, 'employee_rate' : 0.10
, 'base' : gross_salary
}
# family benefits
default['family_benefits/salaire_brut'] = \
{ 'employer_rate' : 5.40
, 'employee_rate' : None
, 'base' : gross_salary
}
# industrial accident
# industrial_accident_rate is a parameter of this script, because rate depending of company size, department & trade (1.10 is for Nexedi, 1.0 is the default value)
if industrial_accident_rate in ('', 0, None):
industrial_accident_rate = 1.0
default['industrial_accident/salaire_brut'] = \
{ 'employer_rate' : industrial_accident_rate
, 'employee_rate' : None
, 'base' : gross_salary
}
# lodging helps
if company_size > 9:
default['lodging_helps/salaire_brut'] = \
{ 'employer_rate' : 0.40
, 'employee_rate' : None
, 'base' : gross_salary
}
else:
default['lodging_helps/salaire_plafonne'] = \
{ 'employer_rate' : 0.10
, 'employee_rate' : None
, 'base': limited_salary
}
# transport payment
# TODO: rate depending of the town, 1.80 is the 'default' value (when the town isn't referenced by laws)
if transport_payment_rate in ('', 0, None):
transport_payment_rate = 1.80
if company_size > 9:
default['transport_payment/salaire_brut'] = \
{ 'employer_rate' : transport_payment_rate
, 'employee_rate' : None
, 'base' : gross_salary
}
# CSG
default['csg_deductible/salaire_brut_csg'] = \
{ 'employer_rate' :None
, 'employee_rate' :5.10
, 'base' : 0.95 * gross_salary
}
default['csg_non_deductible/salaire_brut_csg'] = \
{ 'employer_rate' :None,
'employee_rate' : 2.4
, 'base' : 0.95 * gross_salary
}
# CRDS
default['crds/salaire_brut_crds'] = \
{ 'employer_rate':None,
'employee_rate' : 0.50
, 'base' : 0.95 * gross_salary
}
# unemployment insurance
if char_slices.has_key('A'):
default['unemployment_insurance/tranche_a']['employer_rate'] = 4.0
default['unemployment_insurance/tranche_a']['employee_rate'] = 2.4
default['unemployment_insurance/tranche_a']['base'] = char_slices['A']
if char_slices.has_key('B'):
default['unemployment_insurance/tranche_b']['employer_rate'] = 4.0
default['unemployment_insurance/tranche_b']['employee_rate'] = 2.4
default['unemployment_insurance/tranche_b']['base'] = char_slices['B']
# AGS
# ags_rate is a parameter of this script, 0.35% was the default value, now it's 0.45%
if ags_rate in ('', 0, None):
ags_rate = 0.45
if char_slices.has_key('A'):
default['ags/tranche_a']['employer_rate'] = ags_rate
default['ags/tranche_a']['base'] = char_slices['A']
if char_slices.has_key('B'):
default['ags/tranche_b']['employer_rate'] = ags_rate
default['ags/tranche_b']['base'] = char_slices['B']
# ARRCO
if executive == False:
if num_slices.has_key('1'):
default['arrco/tranche_1']['employer_rate'] = 4.5
default['arrco/tranche_1']['employee_rate'] = 3.0
default['arrco/tranche_1']['base'] = num_slices['1']
if num_slices.has_key('2'):
if comp_type == 'old':
employee_share_rate = 6.0
employer_share_rate = 9.0
else:
employee_share_rate = 8.0
employer_share_rate = 12.0
default['arrco/tranche_2']['employer_rate'] = employer_share_rate
default['arrco/tranche_2']['employee_rate'] = employee_share_rate
default['arrco/tranche_2']['base'] = num_slices['2']
elif char_slices.has_key('A'):
default['arrco/tranche_a']['employer_rate'] = 4.5
default['arrco/tranche_a']['employee_rate'] = 3.0
default['arrco/tranche_a']['base'] = char_slices['A']
# AGFF
if executive == True:
if char_slices.has_key('A'):
default['agff/tranche_a']['employer_rate'] = 1.20
default['agff/tranche_a']['employee_rate'] = 0.80
default['agff/tranche_a']['base'] = char_slices['A']
if char_slices.has_key('B'):
default['agff/tranche_b']['employer_rate'] = 1.30
default['agff/tranche_b']['employee_rate'] = 0.90
default['agff/tranche_b']['base'] = char_slices['B']
else:
if num_slices.has_key('1'):
default['agff/tranche_1']['employer_rate'] = 1.20
default['agff/tranche_1']['employee_rate'] = 0.80
default['agff/tranche_1']['base'] = num_slices['1']
if num_slices.has_key('2'):
default['agff/tranche_2']['employer_rate'] = 1.30
default['agff/tranche_2']['employee_rate'] = 0.90
default['agff/tranche_2']['base'] = num_slices['2']
# AGIRC
# TODO: fix the repartition of share rate in case of slice C
if executive == True:
if char_slices.has_key('B'):
default['agirc/tranche_b']['employer_rate'] = 12.50
default['agirc/tranche_b']['employee_rate'] = 7.50
default['agirc/tranche_b']['base'] = char_slices['B']
if char_slices.has_key('C'):
# free repartition (20% to share between employee & employer)
default['agirc/tranche_b']['employer_rate'] = 10.00
default['agirc/tranche_b']['employee_rate'] = 10.00
default['agirc/tranche_b']['base'] = char_slices['C']
# CET
if executive == True:
if char_slices.has_key('A'):
default['cet/tranche_a']['employer_rate'] = 0.22
default['cet/tranche_a']['employee_rate'] = 0.13
default['cet/tranche_a']['base'] = char_slices['A']
if char_slices.has_key('B'):
default['cet/tranche_b']['employer_rate'] = 0.22
default['cet/tranche_b']['employee_rate'] = 0.13
default['cet/tranche_b']['base'] = char_slices['B']
if char_slices.has_key('C'):
default['cet/tranche_c']['employer_rate'] = 0.22
default['cet/tranche_c']['employee_rate'] = 0.13
default['cet/tranche_c']['base'] = char_slices['C']
# life insurance
if executive == True and char_slices.has_key('A'):
default['life_insurance/tranche_a'] = \
{ 'employer_rate' : 1.5
, 'employee_rate': None
, 'base' : char_slices['A']
}
# APEC
if char_slices.has_key('B'):
default['apec/tranche_b'] = \
{ 'employer_rate' : 0.036
, 'employee_rate' : 0.024
, 'base' : char_slices['B']
}
# construction tax
if company_size > 9:
default['construction_tax/salaire_brut'] = \
{ 'employer_rate' : 0.45
, 'employee_rate': None
, 'base' : gross_salary
}
# training tax
default['training_tax/salaire_brut'] = \
{ 'employer_rate' : 0.50
, 'employee_rate': None
, 'base' : gross_salary
}
# courses tax
if company_size < 10:
rate = 0.15
else:
rate = 1.5
default['courses_tax/salaire_brut'] = \
{ 'employer_rate' : rate
, 'employee_rate':None
, 'base' : gross_salary
}
# Syntec convention
#syntec_rate = 0.915
# XXX If it is the paysheet of yoshinory , we do *2 because he is married.
# if married(employee) : syntec_rate = syntec_rate * 2
#syntec_rate = 1.83
if syntec_rate in ('', 0, None):
syntec_rate = 0.915
default['syntec_insurance/salaire_plafonne_syntec'] = \
{ 'employer_rate' : syntec_rate
, 'employee_rate' : syntec_rate
, 'base' : 2432
}
return default
<?xml version="1.0"?>
<form>
<title>Calculate the Pay Sheet Transaction</title>
<row_length>4</row_length>
<name>PaySheetTransaction_postCalculation</name>
<pt>form_view_dialog</pt>
<action>PaySheetTransaction_postCalculation</action>
<update_action></update_action>
<method>POST</method>
<enctype>multipart/form-data</enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[('title', 'Tax title'), ('base_name', 'Base name'), ('base', 'Base value'), ('employer_share_rate', 'Employer share rate'), ('employee_share_rate', 'Employee share rate')]</all_columns>
<all_editable_columns type="list">[('base', 'Base value'), ('employer_share_rate', 'Employer share rate'), ('employee_share_rate', 'Employee share rate')]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('title', 'Tax title'), ('base_name', 'Base name'), ('base', 'Base value'), ('employer_share_rate', 'Employer share rate'), ('employee_share_rate', 'Employee share rate')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('base', 'Base value'), ('employer_share_rate', 'Employer share rate'), ('employee_share_rate', 'Employee share rate')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">100</lines>
<list_action>folder_contents</list_action>
<list_method type="method">PaySheetTransaction_initializePreview</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>pay_sheet_transaction_calcul_preview</selection_name>
<sort type="list">[('title', 'Tax title'), ('base_name', 'Base name')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>listbox</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>listbox_base</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">15</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Base value</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_employer_share_rate</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Employer share rate (%)</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_base_name</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Base name</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>listbox_employee_share_rate</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Employee share rate (%)</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html tal:define="employee python: here.restrictedTraverse(here.getDestinationSectionRelativeUrl());
employer python: here.restrictedTraverse(here.getSourceSectionRelativeUrl());
paysheet_details python: here.PaySheetTransaction_getDetails();
paysheet_categories python: paysheet_details['paysheet_categories'];
urssaf python: here.restrictedTraverse(employer.getDestinationSection());
start_date python: here.getStartDate()">
<head>
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
<title tal:content="python: here.getTitleOrId()"/>
<style type="text/css">@import "PaySheet.css";</style>
</head>
<body>
<div class="page">
<div class="logotitle">
<table width="100%">
<tr>
<td><img src="logo.png"></td>
<td><h1>FEUILLE DE SALAIRE</h1></td>
</tr>
</table>
</div>
<div class="left" tal:condition="python: employer not in (None, '') and employer.getPortalType() == 'Organisation'">
<div class="details" tal:define="employer_group python: employer.getGroup()">
<p>
<span class="name" tal:content="python: employer.getCorporateName()"/><br/>
<span id="sub" tal:content="python: employer.getDefaultAddress().getStreetAddress()"/><br/>
<span id="sub" tal:content="python: employer.getDefaultAddress().getZipCode() + ' ' + employer.getDefaultAddress().getCity()"/><br/>
<span tal:replace="python: 'Etablissement : %s' % employer_group" tal:condition="python: employer_group != None"/><span tal:replace="python: 'Etablissement : Etablissement principal'" tal:condition="python: employer_group == None"/><br/>
<!--span tal:replace="python: 'Tel : %s' % employer.getDefaultTelephone().asText()"/><br/><!--optional-->
<!--span tal:replace="python: 'Fax : %s' % employer.getDefaultFax().asText()"/><br/><!--optional-->
<!--span tal:replace="python: 'E-mail : %s' % employer.getDefaultEmail().asText()"/><br/><!--optional-->
<span tal:replace="python: 'Siret : %s' % employer.getGeographicIncorporateCode()"/><br/>
<span tal:replace="python: 'NAF (ex APE) : %s' % employer.getActivityCode()"/><br/>
</p>
<div class="topline">
<p>
<span tal:replace="python: 'NURSSAF : %s' % employer.getSocialCode()"/><br/>
<span tal:replace="python:urssaf.getTitle()"/><br/>
<span id="sub" tal:content="python:urssaf.getDefaultAddress().getStreetAddress()"/><br/>
<span id="sub" tal:content="python:urssaf.getDefaultAddress().getZipCode() + ' ' + urssaf.getDefaultAddress().getCity()"/><br/>
</p>
</div>
<div class="topline">
<p>
<span tal:replace="python: 'Convention collective de branche : %s' % employee.getDefaultCollectiveAgreementTitle()"/><br/>
</p>
</div>
</div>
</div>
<div class="right" tal:condition="python: employee not in (None, '') and employee.getPortalType() == 'Person'">
<div class="details">
<p>
<span class="name" tal:content="python: employee.getTitle()"/><br/>
<span id="sub" tal:content="python:employee.getDefaultAddress().getStreetAddress()"/><br/>
<span id="sub" tal:content="python:employee.getDefaultAddress().getZipCode() + ' ' + employee.getDefaultAddress().getCity()"/><br/>
<!--span tal:replace="python: 'Tel : %s' % employee.getDefaultTelephone().asText()"/><br/><!--optional-->
<!--span tal:replace="python: 'Fax : %s' % employee.getDefaultFax().asText()"/><br/><!--optional-->
<!--span tal:replace="python: 'E-mail : %s' % employee.getDefaultEmail().asText()"/><br/><!--optional-->
<span tal:replace="python: 'NSecu.Soc. : %s' % employee.getSocialCode()"/><br/>
</p>
<div class="topline">
<p>
<!--span tal:replace="python: 'Matricule : %s' % employee.getId()"/><br/><!--optional-->
<span tal:replace="python: 'Emploi : %s' % employee.getDefaultCareerTitle()"/><br/>
<span tal:replace="python: 'Qualification : %s' % employee.getCareerGrade().split('/')[-1:][0]"/><br/>
<span tal:replace="python: 'Echelon : %s' % employee.getDefaultCareerSalaryLevel()"/><br/>
<span tal:replace="python: 'Coefficient : %s' % employee.getDefaultCareerSalaryCoefficient()"/><br/>
</p>
</div>
<div class="topline">
<p>
<span tal:replace="python: 'Periode : du %s au %s' % (start_date, here.getStopDate())"/><br/>
<span tal:replace="python: 'Date de paiement : %s' % here.getTargetStopDate()"/><br/>
<!--span>Type de paiement: ???</span><br/><!--optional-->
</p>
</div>
</div>
</div>
<div class="spacer">&nbsp;</div>
<br/>
<br/>
<table width="100%" cellspacing="0" class="data">
<tr class="header">
<td class="text">Nature</td>
<td class="text">Assiette</td>
<td class="number">Montant</td>
<td class="number">Taux part patronale</td>
<td class="number">Part patronale</td>
<td class="number">Taux part salariale</td>
<td class="number">Part salariale</td>
</tr>
<tr class="subtotal">
<td class="text">Salaire brut</td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '%.2f' % paysheet_details['gross_salary']" condition="python: paysheet_details['gross_salary'] not in (None, '')">&nbsp;</tal:block></td>
</tr>
<tal:block condition="python: paysheet_categories.has_key('no_cat')">
<tal:block define="no_cat_lines python: paysheet_categories['no_cat']['lines']">
<tr tal:repeat="line no_cat_lines">
<td class="text" id="sub"><tal:block content="python: line['title']"/></td>
<td class="text"><tal:block content="python: line['base_name']"/></td>
<td class="number"><tal:block replace="python: '%.2f' % line['base']" condition="python: line['base'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employer_share_rate']" condition="python: line['employer_share_rate'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.2f' % line['employer_share']" condition="python: line['employer_share'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employee_share_rate']" condition="python: line['employee_share_rate'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.2f' % line['employee_share']" condition="python: line['employee_share'] not in (None, '')">&nbsp;</tal:block></td>
</tr>
</tal:block>
</tal:block>
<tal:block repeat="category paysheet_categories">
<tr class="category">
<td class="text"><tal:block content="python: paysheet_categories[category]['title']"/></td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
</tr>
<tal:block define="paysheet_lines python: paysheet_categories[category]['lines']">
<tr tal:repeat="line paysheet_lines">
<td class="text" id="sub"><tal:block content="python: line['title']"/></td>
<td class="text"><tal:block content="python: line['base_name']"/></td>
<td class="number"><tal:block replace="python: '%.2f' % line['base']" condition="python: line['base'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employer_share_rate']" condition="python: line['employer_share_rate'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.2f' % line['employer_share']" condition="python: line['employer_share'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employee_share_rate']" condition="python: line['employee_share_rate'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.2f' % line['employee_share']" condition="python: line['employee_share'] not in (None, '')">&nbsp;</tal:block></td>
</tr>
</tal:block>
</tal:block>
<tr class="subtotal">
<td class="text">Total des cotisations</td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '-%.2f' % paysheet_details['total_employer_share']" condition="python: paysheet_details['total_employer_share'] not in ('', None)">&nbsp;</tal:block></td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '-%.2f' % paysheet_details['total_employee_share']" condition="python: paysheet_details['total_employee_share'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
<tr class="total">
<td class="text">Salaire Net</td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '%.2f' % paysheet_details['net_salary']" condition="python: paysheet_details['net_salary'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
<tal:block repeat="category paysheet_categories">
<tal:block define="paysheet_lines python: paysheet_categories[category]['lines']">
<tal:block repeat="line paysheet_lines">
<tr tal:condition="python: line.has_key('taxable') and line['taxable']=='yes'">
<td class="text"><tal:block content="python: line['title']"/></td>
<td class="text"><tal:block content="python: line['base_name']"/></td>
<td class="number"><tal:block replace="python: '%.2f' % line['base']" condition="python: line['base'] not in ('', None)">&nbsp;</tal:block></td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employee_share_rate']" condition="python: line['employee_share_rate'] not in ('', None)">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '+%.2f' % abs(float(line['employee_share']))" condition="python: line['employee_share'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
</tal:block>
</tal:block>
</tal:block>
<tr class="total">
<td class="text">Salaire Net Imposable</td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '%.2f' % paysheet_details['taxable_net_salary']" condition="python: paysheet_details['taxable_net_salary'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
</table>
<br/>
<br/>
<div class="left">
<table cellspacing="0" class="yearly-sum">
<caption tal:content="python: 'Cumuls annuels (%s)' % start_date.year()" tal:condition="python: start_date not in ('', None)"/>
<tr class="header">
<td>Salaire brut</td>
<td>Cotisations salariales</td>
<td>Salaire net</td>
<td>Net imposable</td>
<td>Part patronale</td>
</tr>
<tr class="total">
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_gross_salary']" condition="python: paysheet_details['yearly_gross_salary'] not in ('', None)">&nbsp;</tal:block></td>
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_employee_share']" condition="python: paysheet_details['yearly_employee_share'] not in ('', None)">&nbsp;</tal:block></td>
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_net_salary']" condition="python: paysheet_details['yearly_net_salary'] not in ('', None)">&nbsp;</tal:block></td>
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_taxable_net_salary']" condition="python: paysheet_details['yearly_taxable_net_salary'] not in ('', None)">&nbsp;</tal:block></td>
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_employer_share']" condition="python: paysheet_details['yearly_employer_share'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
</table>
</div>
<div class="right">
<div class="details">
<p>
<span tal:replace="python: 'Dure des congs pays : ???'"/><br/>
<span tal:replace="python: 'Dure des dlais de pravis : ???'"/><br/>
</p>
</div>
</div>
<div class="spacer">&nbsp;</div>
<br/>
<br/>
<div class="disclaimer">
Dans votre intrt et pour vous aider faire valoir vos droits, conservez ce bulletin de paie sans limitation de dure.
</div>
</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html tal:define="employee python: here.restrictedTraverse(here.getDestinationSectionRelativeUrl());
employer python: here.restrictedTraverse(here.getSourceSectionRelativeUrl());
paysheet_details python: here.PaySheetTransaction_getDetails();
paysheet_categories python: paysheet_details['paysheet_categories'];
urssaf python: here.restrictedTraverse(employer.getDestinationSection());
start_date python: here.getStartDate()">
<head>
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
<title tal:content="python: here.getTitleOrId()"/>
<style type="text/css">@import "PaySheet.css";</style>
</head>
<body>
<div class="page">
<div class="logotitle">
<table width="100%">
<tr>
<td><img src="logo.png"></td>
<td><h1>FEUILLE DE SALAIRE</h1></td>
</tr>
</table>
</div>
<div class="left" tal:condition="python: employer not in (None, '') and employer.getPortalType() == 'Organisation'">
<div class="details" tal:define="employer_group python: employer.getGroup()">
<p>
<span class="name" tal:content="python: employer.getCorporateName()"/><br/>
<span id="sub" tal:content="python: employer.getDefaultAddress().getStreetAddress()"/><br/>
<span id="sub" tal:content="python: employer.getDefaultAddress().getZipCode() + ' ' + employer.getDefaultAddress().getCity()"/><br/>
<span tal:replace="python: 'Etablissement : %s' % employer_group" tal:condition="python: employer_group != None"/><span tal:replace="python: 'Etablissement : Etablissement principal'" tal:condition="python: employer_group == None"/><br/>
<!--span tal:replace="python: 'Tel : %s' % employer.getDefaultTelephone().asText()"/><br/><!--optional-->
<!--span tal:replace="python: 'Fax : %s' % employer.getDefaultFax().asText()"/><br/><!--optional-->
<!--span tal:replace="python: 'E-mail : %s' % employer.getDefaultEmail().asText()"/><br/><!--optional-->
<span tal:replace="python: 'Siret : %s' % employer.getGeographicIncorporateCode()"/><br/>
<span tal:replace="python: 'NAF (ex APE) : %s' % employer.getActivityCode()"/><br/>
</p>
<div class="topline">
<p>
<span tal:replace="python: 'NURSSAF : %s' % employer.getSocialCode()"/><br/>
<span tal:replace="python:urssaf.getTitle()"/><br/>
<span id="sub" tal:content="python:urssaf.getDefaultAddress().getStreetAddress()"/><br/>
<span id="sub" tal:content="python:urssaf.getDefaultAddress().getZipCode() + ' ' + urssaf.getDefaultAddress().getCity()"/><br/>
</p>
</div>
<div class="topline">
<p>
<span tal:replace="python: 'Convention collective de branche : %s' % employee.getDefaultCollectiveAgreementTitle()"/><br/>
</p>
</div>
</div>
</div>
<div class="right" tal:condition="python: employee not in (None, '') and employee.getPortalType() == 'Person'">
<div class="details">
<p>
<span class="name" tal:content="python: employee.getTitle()"/><br/>
<span id="sub" tal:content="python:employee.getDefaultAddress().getStreetAddress()"/><br/>
<span id="sub" tal:content="python:employee.getDefaultAddress().getZipCode() + ' ' + employee.getDefaultAddress().getCity()"/><br/>
<!--span tal:replace="python: 'Tel : %s' % employee.getDefaultTelephone().asText()"/><br/><!--optional-->
<!--span tal:replace="python: 'Fax : %s' % employee.getDefaultFax().asText()"/><br/><!--optional-->
<!--span tal:replace="python: 'E-mail : %s' % employee.getDefaultEmail().asText()"/><br/><!--optional-->
<span tal:replace="python: 'NSecu.Soc. : %s' % employee.getSocialCode()"/><br/>
</p>
<div class="topline">
<p>
<!--span tal:replace="python: 'Matricule : %s' % employee.getId()"/><br/><!--optional-->
<span tal:replace="python: 'Emploi : %s' % employee.getDefaultCareerTitle()"/><br/>
<span tal:replace="python: 'Qualification : %s' % employee.getCareerGrade().split('/')[-1:][0]"/><br/>
<span tal:replace="python: 'Echelon : %s' % employee.getDefaultCareerSalaryLevel()"/><br/>
<span tal:replace="python: 'Coefficient : %s' % employee.getDefaultCareerSalaryCoefficient()"/><br/>
</p>
</div>
<div class="topline">
<p>
<span tal:replace="python: 'Periode : du %s au %s' % (start_date, here.getStopDate())"/><br/>
<span tal:replace="python: 'Date de paiement : %s' % here.getTargetStopDate()"/><br/>
<!--span>Type de paiement: ???</span><br/><!--optional-->
</p>
</div>
</div>
</div>
<div class="spacer">&nbsp;</div>
<br/>
<br/>
<table width="100%" cellspacing="0" class="data">
<tr class="header">
<td class="text">Nature</td>
<td class="text">Assiette</td>
<td class="number">Montant</td>
<td class="number">Taux part patronale</td>
<td class="number">Part patronale</td>
<td class="number">Taux part salariale</td>
<td class="number">Part salariale</td>
</tr>
<tr class="subtotal">
<td class="text">Salaire brut</td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '%.2f' % paysheet_details['gross_salary']" condition="python: paysheet_details['gross_salary'] not in (None, '')">&nbsp;</tal:block></td>
</tr>
<tal:block condition="python: paysheet_categories.has_key('no_cat')">
<tal:block define="no_cat_lines python: paysheet_categories['no_cat']['lines']">
<tr tal:repeat="line no_cat_lines">
<td class="text" id="sub"><tal:block content="python: line['title']"/></td>
<td class="text"><tal:block content="python: line['base_name']"/></td>
<td class="number"><tal:block replace="python: '%.2f' % line['base']" condition="python: line['base'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employer_share_rate']" condition="python: line['employer_share_rate'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.2f' % line['employer_share']" condition="python: line['employer_share'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employee_share_rate']" condition="python: line['employee_share_rate'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.2f' % line['employee_share']" condition="python: line['employee_share'] not in (None, '')">&nbsp;</tal:block></td>
</tr>
</tal:block>
</tal:block>
<tal:block repeat="category paysheet_categories">
<tr class="category">
<td class="text"><tal:block content="python: paysheet_categories[category]['title']"/></td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
</tr>
<tal:block define="paysheet_lines python: paysheet_categories[category]['lines']">
<tr tal:repeat="line paysheet_lines">
<td class="text" id="sub"><tal:block content="python: line['title']"/></td>
<td class="text"><tal:block content="python: line['base_name']"/></td>
<td class="number"><tal:block replace="python: '%.2f' % line['base']" condition="python: line['base'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employer_share_rate']" condition="python: line['employer_share_rate'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.2f' % line['employer_share']" condition="python: line['employer_share'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employee_share_rate']" condition="python: line['employee_share_rate'] not in (None, '')">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '%.2f' % line['employee_share']" condition="python: line['employee_share'] not in (None, '')">&nbsp;</tal:block></td>
</tr>
</tal:block>
</tal:block>
<tr class="subtotal">
<td class="text">Total des cotisations</td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '-%.2f' % paysheet_details['total_employer_share']" condition="python: paysheet_details['total_employer_share'] not in ('', None)">&nbsp;</tal:block></td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '-%.2f' % paysheet_details['total_employee_share']" condition="python: paysheet_details['total_employee_share'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
<tr class="total">
<td class="text">Salaire Net</td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '%.2f' % paysheet_details['net_salary']" condition="python: paysheet_details['net_salary'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
<tal:block repeat="category paysheet_categories">
<tal:block define="paysheet_lines python: paysheet_categories[category]['lines']">
<tal:block repeat="line paysheet_lines">
<tr tal:condition="python: line.has_key('taxable') and line['taxable']=='yes'">
<td class="text"><tal:block content="python: line['title']"/></td>
<td class="text"><tal:block content="python: line['base_name']"/></td>
<td class="number"><tal:block replace="python: '%.2f' % line['base']" condition="python: line['base'] not in ('', None)">&nbsp;</tal:block></td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '%.3f %%' % line['employee_share_rate']" condition="python: line['employee_share_rate'] not in ('', None)">&nbsp;</tal:block></td>
<td class="number"><tal:block replace="python: '+%.2f' % abs(float(line['employee_share']))" condition="python: line['employee_share'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
</tal:block>
</tal:block>
</tal:block>
<tr class="total">
<td class="text">Salaire Net Imposable</td>
<td class="text">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number">&nbsp;</td>
<td class="number"><tal:block replace="python: '%.2f' % paysheet_details['taxable_net_salary']" condition="python: paysheet_details['taxable_net_salary'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
</table>
<br/>
<br/>
<div class="left">
<table cellspacing="0" class="yearly-sum">
<caption tal:content="python: 'Cumuls annuels (%s)' % start_date.year()" tal:condition="python: start_date not in ('', None)"/>
<tr class="header">
<td>Salaire brut</td>
<td>Cotisations salariales</td>
<td>Salaire net</td>
<td>Net imposable</td>
<td>Part patronale</td>
</tr>
<tr class="total">
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_gross_salary']" condition="python: paysheet_details['yearly_gross_salary'] not in ('', None)">&nbsp;</tal:block></td>
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_employee_share']" condition="python: paysheet_details['yearly_employee_share'] not in ('', None)">&nbsp;</tal:block></td>
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_net_salary']" condition="python: paysheet_details['yearly_net_salary'] not in ('', None)">&nbsp;</tal:block></td>
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_taxable_net_salary']" condition="python: paysheet_details['yearly_taxable_net_salary'] not in ('', None)">&nbsp;</tal:block></td>
<td><tal:block replace="python: '%.2f' % paysheet_details['yearly_employer_share']" condition="python: paysheet_details['yearly_employer_share'] not in ('', None)">&nbsp;</tal:block></td>
</tr>
</table>
</div>
<div class="right">
<div class="details">
<p>
<span tal:replace="python: 'Dure des congs pays : ???'"/><br/>
<span tal:replace="python: 'Dure des dlais de pravis : ???'"/><br/>
</p>
</div>
</div>
<div class="spacer">&nbsp;</div>
<br/>
<br/>
<div class="disclaimer">
Dans votre intrt et pour vous aider faire valoir vos droits, conservez ce bulletin de paie sans limitation de dure.
</div>
</div>
</body>
</html>
<?xml version="1.0"?>
<form>
<title></title>
<row_length>4</row_length>
<name>pay_sheet_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>Default</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>ID</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<read_only type="int">0</read_only>
<relation_setter_id></relation_setter_id>
<required type="int">0</required>
<title>Employer</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>person</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<portal_type type="list">[('Person', 'Person')]</portal_type>
<read_only type="int">0</read_only>
<relation_setter_id></relation_setter_id>
<required type="int">0</required>
<title>Employee</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_gross_salary</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Gross Salary (Euros)</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Begin</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">1</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>End</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_target_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">1</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Payment date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'ID'), ('getTitle', 'Tax title'), ('getSourceSectionTitle', 'Source'), ('getDestinationSectionTitle', 'Destination'), ('getQuantity', 'Amount (in euros)')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description>Details of contributions based on salary.</description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">200</lines>
<list_action>list</list_action>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<not_viewable type="int">0</not_viewable>
<portal_types type="list">[]</portal_types>
<read_only type="int">0</read_only>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>paysheet_line_list_selection</selection_name>
<sort type="list">[]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Pay Sheet Details</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "PaySheet_getReportLines"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
report_items = context.PaySheet_zGetDetailedTotal()
report_lines = []
# scan every sql report item
for item in report_items:
line = { 'title' : None
, 'employer_totalbase' : None
, 'employer_rate' : None
, 'employer_total' : None
, 'employee_totalbase' : None
, 'employee_rate' : None
, 'employee_total' : None
, 'total' : None
}
# sort by employer/salary share
if item['variation_text'].find('employee_share') != -1:
line['title'] = item['parent_title']
line['employee_totalbase'] = item['base']
line['employee_rate'] = item['rate']
line['employee_total'] = item['total_price']
if item['variation_text'].find('employer_share') != -1:
line['title'] = item['parent_title']
line['employer_totalbase'] = item['base']
line['employer_rate'] = item['rate']
line['employer_total'] = item['total_price']
report_lines.append(line)
# scan every line and group them
#here.portal
# first grouping:
return report_lines
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html tal:define="report_items python: here.PaySheet_getReportLines()">
<head>
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
<title>Pay Sheet Annual Report</title>
<style type="text/css">@import "PaySheet.css";</style>
</head>
<body>
<div class="spacer">&nbsp;</div>
<div class="logotitle">
<table width="100%">
<tr>
<td><img src="logo.png"></td>
<td><h1>Rapport Annuel: Charges payer par caisses</h1></td>
</tr>
</table>
</div>
<div class="spacer">&nbsp;</div>
<table>
<tr class="big-header">
<th>Caisse</th>
<th>Base patronale</th>
<th>Taux patronal</th>
<th>Part patronale</th>
<th>Base salariale</th>
<th>Taux salarial</th>
<th>Part salariale</th>
<th>Total</th>
</tr>
<tr class="line" tal:repeat="item python: report_items">
<td class="line-data"><span tal:content="python: item['title']"/></td>
<td class="line-data"><span tal:content="python: item['employer_totalbase']"/></td>
<td class="line-data"><span tal:content="python: item['employer_rate']"/></td>
<td class="line-data"><span tal:content="python: item['employer_total']"/></td>
<td class="line-data"><span tal:content="python: item['employee_totalbase']"/></td>
<td class="line-data"><span tal:content="python: item['employee_rate']"/></td>
<td class="line-data"><span tal:content="python: item['employee_total']"/></td>
<td class="line-data"><span tal:content="python: item['total']"/></td>
</tr>
</table>
</body>
</html>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Account List</title>
<row_length>4</row_length>
<name>accounting_transaction_list</name>
<pt>form_list</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('target_start_date', 'target_start_date'), ('destination_title', 'destination_title'), ('variation_text', 'variation_text'), ('total_price', 'total_price')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">25</lines>
<list_action>list</list_action>
<list_method type="method">PaySheet_zGetTotalDestinationList</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">1</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>paysheet_total_selection</selection_name>
<sort type="list">[]</sort>
<stat_method></stat_method>
<title>Account Listbox</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:
class_file:
</dtml-comment>
<params>year</params>
SELECT
parent.title AS parent_title,
movement.variation_text AS variation_text,
destination.title AS destination_title,
movement.price AS rate,
- SUM(movement.quantity) AS base,
- SUM(movement.total_price) AS total_price
FROM
catalog
LEFT JOIN
movement ON (movement.uid = catalog.uid)
LEFT JOIN
catalog AS destination ON (movement.destination_uid = destination.uid)
LEFT JOIN
catalog AS parent ON (catalog.parent_uid = parent.uid)
WHERE
catalog.portal_type = "Pay Sheet Cell" <dtml-if year>and YEAR(movement.target_stop_date) = <dtml-sqlvar year type="int"> </dtml-if>
GROUP BY
movement.resource_uid, movement.variation_text, movement.price
\ No newline at end of file
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:
class_file:
</dtml-comment>
<params>year</params>
SELECT
YEAR(movement.target_stop_date) as target_stop_date,
movement.variation_text AS variation_text,
destination.title as destination_title,
- SUM(movement.total_price) as total_price
FROM
catalog
LEFT JOIN
movement ON (movement.uid = catalog.uid)
LEFT JOIN
catalog AS destination ON (movement.destination_uid = destination.uid)
WHERE
catalog.portal_type = "Pay Sheet Cell" <dtml-if year>and YEAR(movement.target_stop_date)=<dtml-sqlvar year type="int"> </dtml-if>
GROUP BY
movement.target_stop_date, movement.destination_uid, movement.variation_text
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Payment Transaction</title>
<row_length>4</row_length>
<name>PaymentTransaction_detail</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_source_section</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">1</required>
<size type="int">1</size>
<title>Section</title>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: [['Nexedi', 'organisation/nexedi']]</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<relation_setter_id></relation_setter_id>
<required type="int">0</required>
<title>Third Party</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission></editable_permission>
<editable_role></editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Invoice Number</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission></viewable_permission>
<viewable_role></viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_resource</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:[('','')]+map(lambda x:(x.id,'currency/%s' %x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Start Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Stop Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>simulation_state</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>State</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Third Party Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('source', 'Section Account'), ('source_debit', 'Debit'), ('source_credit', 'Credit'), ('destination', 'Third Party Account'), ('destination_debit', 'Debit'), ('destination_credit', 'Credit')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('source_debit', 'Debit'), ('source_credit', 'Credit'), ('destination', 'Destination'), ('source', 'Source')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[('resource', 'resource')]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_method type="method">searchInvoiceTransaction</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>payment_transaction_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Payment Transaction Lines</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>listbox_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_destination</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_destination</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineDestinationItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Payment Transaction</title>
<row_length>4</row_length>
<name>PaymentTransaction_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_source_section</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">1</required>
<size type="int">1</size>
<title>Section</title>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: [['Nexedi', 'organisation/nexedi'], ]</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_payment</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Section Account</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: here.getAccountingTransactionSourcePaymentItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<relation_setter_id></relation_setter_id>
<required type="int">0</required>
<title>Third Party</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_payment</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Third Party Account</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: here.getAccountingTransactionDestinationPaymentItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission></editable_permission>
<editable_role></editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Invoice Number</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission></viewable_permission>
<viewable_role></viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_resource</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:[('','')]+map(lambda x:(x.id,'currency/%s' %x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Operation Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>simulation_state</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>State</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Third Party Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('source', 'Account'), ('source_debit', 'Debit'), ('source_credit', 'Credit')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('source_debit', 'Debit'), ('source_credit', 'Credit'), ('source', 'Account')]</editable_columns>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[('resource', 'resource')]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_method type="method">searchInvoiceTransaction</list_method>
<meta_types type="list">[]</meta_types>
<not_viewable type="int">0</not_viewable>
<portal_types type="list">[]</portal_types>
<read_only type="int">0</read_only>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>payment_transaction_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Payment Transaction Lines</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>listbox_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_destination</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_destination</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineDestinationItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_credit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:InventoryBrain
class_file:InventoryBrain.py
</dtml-comment>
<params>resource_uid:list
resource:list
from_date
to_date
node
section
node_uid
section_uid
variation_text=None
node_category
section_category
resource_category
omit_simulation
omit_input
omit_output
simulation_state
query</params>
SELECT
SUM(stock.quantity) AS inventory,
SUM(stock.quantity) AS quantity,
COUNT(DISTINCT node.title) AS node_title,
COUNT(DISTINCT node.relative_url) AS node_relative_url,
COUNT(DISTINCT section.title) AS section_title,
COUNT(DISTINCT section.relative_url) AS section_relative_url,
COUNT(DISTINCT resource.title) AS resource_title,
COUNT(DISTINCT resource.relative_url) AS resource_relative_url,
COUNT(DISTINCT movement.variation_text) AS variation_text,
MAX(stock.resource_uid) AS resource_uid,
COUNT(DISTINCT stock.uid) AS stock_uid
FROM
movement
LEFT JOIN catalog ON (movement.uid = catalog.uid)
LEFT JOIN stock ON (movement.uid = stock.uid)
, catalog AS node, catalog AS section, catalog AS resource <dtml-if node_category>, catalog AS node_c, catalog AS node_bc, category AS node_membership </dtml-if> <dtml-if section_category>, catalog AS section_c, catalog AS section_bc, category AS section_membership</dtml-if> <dtml-if resource_category>, catalog AS resource_c, catalog AS resource_bc, category AS resource_membership </dtml-if> <dtml-if query>, category </dtml-if>
WHERE
1 = 1
<dtml-if resource>AND (<dtml-in resource> resource.relative_url = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>)
</dtml-if><dtml-if resource_uid>AND (<dtml-in resource_uid> movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>)
</dtml-if><dtml-if "variation_text not in (None, 'None')">AND movement.variation_text = <dtml-sqlvar variation_text type="string">
</dtml-if>AND movement.is_accountable = 1
AND node.uid = stock.node_uid
AND section.uid = stock.section_uid
AND stock.resource_uid = resource.uid
<dtml-if from_date>AND movement.stop_date >= <dtml-sqlvar from_date type="string">
</dtml-if><dtml-if to_date>AND movement.stop_date < <dtml-sqlvar to_date type="string">
</dtml-if><dtml-if node_uid>AND stock.node_uid = <dtml-sqlvar node_uid type="int">
</dtml-if><dtml-if section_uid>AND stock.section_uid = <dtml-sqlvar section_uid type="int">
</dtml-if><dtml-if node>AND node.relative_url = <dtml-sqlvar node type="string">
</dtml-if><dtml-if section>AND section.relative_url = <dtml-sqlvar section type="string">
</dtml-if><dtml-if node_category>AND node_c.relative_url = <dtml-sqlvar node_category type="string">
AND node_membership.category_uid = node_c.uid
AND node_membership.base_category_uid = node_bc.uid
AND node_membership.uid = node.uid
</dtml-if><dtml-if section_category>AND section_c.relative_url = <dtml-sqlvar section_category type="string">
AND section_membership.category_uid = section_c.uid
AND section_membership.base_category_uid = section_bc.uid
AND section_membership.uid = section.uid
</dtml-if><dtml-if resource_category>AND resource_c.relative_url = <dtml-sqlvar resource_category type="string">
AND resource_membership.category_uid = resource_c.uid
AND resource_membership.base_category_uid = resource_bc.uid
AND resource_membership.uid = resource.uid
</dtml-if><dtml-if omit_simulation>AND catalog.portal_type != "Simulation Movement"
</dtml-if><dtml-if omit_input>AND stock.quantity < 0 AND movement.source_uid <> movement.destination_uid
</dtml-if><dtml-if omit_output>AND stock.quantity > 0 AND movement.source_uid <> movement.destination_uid
</dtml-if><dtml-if simulation_state>AND (<dtml-in simulation_state> catalog.simulation_state = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>)
</dtml-if><dtml-if query>AND category.uid = node.uid
AND <dtml-var query></dtml-if>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Account</title>
<row_length>4</row_length>
<name>accounting_transaction_list</name>
<pt>form_view</pt>
<action>base_edit</action>
<method>POST</method>
<enctype></enctype>
<groups>
<group>
<title>left</title>
<fields>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('quantity', 'Quantity'), ('parent_title', 'Concerned Invoice'), ('type', 'Type'), ('date', 'Date')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">1</domain_tree>
<editable_columns type="list">[]</editable_columns>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">25</lines>
<list_action>list</list_action>
<list_method type="method">sql_stock_account_parent</list_method>
<meta_types type="list">[]</meta_types>
<not_viewable type="int">0</not_viewable>
<portal_types type="list">[('Accounting Transaction', 'Accounting Transaction'), ('Purchase Invoice Transaction', 'Purchase Invoice Transaction'), ('Sale Invoice Transaction', 'Sale Invoice Transaction')]</portal_types>
<read_only type="int">0</read_only>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">1</search>
<search_columns type="list">[]</search_columns>
<select type="int">1</select>
<selection_name>account_selection</selection_name>
<sort type="list">[]</sort>
<stat_method></stat_method>
<title>Transactions concerned by this account</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Accounting Report</title>
<row_length>1</row_length>
<name>accounting_transaction_search</name>
<pt>form_dialog</pt>
<action>transaction_line_list</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">1</required>
<time_separator>:</time_separator>
<title>Start date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">1</required>
<time_separator>:</time_separator>
<title>Stop date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Accounting Transaction</title>
<row_length>4</row_length>
<name>accounting_transaction_detail</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_source_section</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Section</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: [['Nexedi', 'organisation/nexedi']]</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Section Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<relation_setter_id></relation_setter_id>
<required type="int">0</required>
<title>Third Party</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission></editable_permission>
<editable_role></editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission></viewable_permission>
<viewable_role></viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_resource</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:[('','')]+map(lambda x:(x.id,'currency/%s' %x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Start Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Stop Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>simulation_state</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>State</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Third Party Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('source', 'Section Account'), ('source_debit', 'Debit'), ('source_credit', 'Credit'), ('destination', 'Third Party Account'), ('destination_debit', 'Debit'), ('destination_credit', 'Credit')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('source_debit', 'Debit'), ('source_credit', 'Credit'), ('destination', 'Destination'), ('source', 'Source')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[('resource', 'resource')]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_method type="method">searchInvoiceTransaction</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>accounting_transaction_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Accounting Transaction Lines</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>listbox_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_destination</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_destination</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineDestinationItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "calculPaySheet"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# TODO: "#!!!" style comment
# o replace etat by right organism
True = 1
False = 0
pay_sheet = context.getObject()
pay_sheet_type = pay_sheet.getPortalType()
pay_sheet_line_type = pay_sheet_type + ' Line'
employee = pay_sheet.getDestinationSection()
employer = pay_sheet.getSourceSection()
employer_object = pay_sheet.getSourceSectionValue()
# social organism
org_urssaf = 'organisation/urssaf'
org_assedic = 'organisation/assedic'
org_arrco = 'organisation/arrco'
org_agff = 'organisation/agff'
org_agirc = 'organisation/agirc'
org_apec = 'organisation/apec'
org_etat = 'organisation/etat'
# gross salary source and destination
charge_salariale = 'account/charges_salariales'
produit_salarial = 'account/produits_salariales'
# final salary source and destination
dette_salarie = 'account/dettes_salaries'
creance_salarie = 'account/creances_salaries'
# employer share source and destination
charge_sociale = 'account/charges_sociales'
produit_social = 'account/produits_sociaux'
# employer + employee share source and destination
dette_sociale = 'account/dettes_sociales'
creance_sociale = 'account/creances_sociales'
### get the gross salary and other basic informations to calculate the paysheet
gross_salary = abs(pay_sheet.getGrossSalary())
#pay_sheet_resource = pay_sheet.getCurrency() why it doesn't work ?????
pay_sheet_resource = 'currency/EUR'
global salary_share_total
salary_share_total = 0.0
executive = True ################### #!!! dynamic get
company_birth = DateTime(2000, 10, 21)
employer_region = employer_object.getDefaultAddress().getZipCode()[:2]
sub_list = employer_object.getSubordinationRelatedValueList()
company_size = 0
for person in sub_list:
if person.getPortalType() == 'Person':
company_size += 1
company_size = 3
### define some parameters for the calculation
# ceiling salary
if gross_salary < 2432: #!!! depending of the wage periodicity, 2432 euros is for a month
ceiling_salary = gross_salary
else:
ceiling_salary = 2432
# "Char" slice type
if gross_salary <= 2432:
char_slice = 'A'
elif gross_salary <= 9728:
char_slice = 'B'
elif gross_salary <= 19456:
char_slice = 'C'
else:
char_slice = ''
# "Number" slice type
if gross_salary <= 2432:
num_slice = 1
elif gross_salary <= 7296:
num_slice = 2
else:
num_slice = 0
# age-slice of the company
old_limit = DateTime(1997, 1, 1)
if company_birth < old_limit:
comp_type = 'old'
else:
comp_type = 'new'
### create a new pay sheet line
def createPaySheetLine(new_id='', new_title='', share='',
src_sec='', src='', src_deb=None,
dest_sec='', dest='', new_desc=''):
suffix = {'cs': '',
'pp': ' (part patronale)'}
if share == 'pp' or share == 'cs':
new_id = string.replace(string.lower(new_title), ' ', '_')
new_id += '_' + share
#new_title = string.replace(new_title, '?', 'e')
#new_title = string.replace(new_title, '?', 'e')
#new_title = string.replace(new_title, '?', 'o')
new_title += suffix[share]
if share == 'cs':
src_sec = employer
src = dette_sociale
dest = creance_sociale
elif share == 'pp':
src_sec = employer
src = charge_sociale
dest = produit_social
#if wrong ID (existing or wrong name): new_id = str(pay_sheet.generateNewId())
context.portal_types.constructContent(type_name = pay_sheet_line_type,
container = pay_sheet,
id = new_id)
pay_sheet[new_id].setTitle(new_title)
pay_sheet[new_id].setResource(pay_sheet_resource) # default currency
pay_sheet[new_id].setSourceSection(src_sec)
pay_sheet[new_id].setSource(src)
pay_sheet[new_id].setDestinationSection(dest_sec)
pay_sheet[new_id].setDestination(dest)
pay_sheet[new_id].setSourceDebit(src_deb)
pay_sheet[new_id].setSourceDebit(src_deb)
pay_sheet[new_id].setDescription(new_desc)
### add a pay sheet item and manage the accounting writing rules
def addPaySheetItem(title='', values={'salary_share_rate':None, 'employer_share_rate':None, 'base_value':None, 'base_description':None}, dest_org=''):
global salary_share_total
salary_share_value = None
employer_share_value = None
ps_description = None
pp_description = None
if values['salary_share_rate']!=None and values['base_value']!=None:
salary_share_value = (float(values['salary_share_rate']) / 100) * values['base_value']
ps_description = "= " + str(values['salary_share_rate']) + "% * " + str(values['base_value']) + " (=" + str(values['base_description']) + ")"
if values['employer_share_rate']!=None and values['base_value']!=None:
employer_share_value = (float(values['employer_share_rate']) / 100) * values['base_value']
pp_description = "= " + str(values['employer_share_rate']) + "% * " + str(values['base_value']) + " (=" + str(values['base_description']) + ")"
if salary_share_value == None and employer_share_value == None:
return
if salary_share_value != None:
salary_share_total += float(salary_share_value)
if employer_share_value == None:
createPaySheetLine( new_title = title,
share = 'cs',
src_deb = salary_share_value,
dest_sec = dest_org,
new_desc = ps_description)
return
if salary_share_value == None:
createPaySheetLine( new_title = title,
share = 'cs',
src_deb = employer_share_value,
dest_sec = dest_org,
new_desc = ps_description)
createPaySheetLine( new_title = title,
share = 'pp',
src_deb = employer_share_value,
dest_sec = dest_org,
new_desc = pp_description)
return
createPaySheetLine( new_title = title,
share = 'cs',
src_deb = float(employer_share_value) + float(salary_share_value),
dest_sec = dest_org,
new_desc = ps_description)
createPaySheetLine( new_title = title,
share = 'pp',
src_deb = employer_share_value,
dest_sec = dest_org,
new_desc = pp_description)
### add the gross salary Pay Sheet Line
createPaySheetLine( new_id = 'gs',
new_title = 'Salaire brut',
src_sec = employer,
src = charge_salariale,
src_deb = gross_salary,
dest_sec = employee,
dest = produit_salarial)
### Social Security
# sickness insurance
sickness_insurance = { 'salary_share_rate' : None
, 'employer_share_rate' : 12.80
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if employer_region == '57' or employer_region == '67' or employer_region == '68':
sickness_insurance['salary_share_rate'] = 1.70
else:
sickness_insurance['salary_share_rate'] = 0.75
addPaySheetItem(title = 'Assurance maladie',
values = sickness_insurance,
dest_org = org_urssaf)
# old-age insurance
# this contribution is special because salary and employer shares are calculated from 2 base
# salary_share_value = (6.55 / 100) * ceiling_salary
# salary_share_total += float(salary_share_value)
# ps_description = "= 6.55% * " + str(ceiling_salary) + " (=salaire plafonn)"
# employer_share_value = gross_salary * (1.60 / 100) + ceiling_salary * (8.20 / 100)
# pp_description = "= 1.60% * " + str(gross_salary) + " + 8.20% * " + str(ceiling_salary) + " = 1.60% * salaire brut + 8.20% * salaire plafonn"
# createPaySheetLine( new_title = 'Assurance vieillesse',
# share = 'cs',
# src_deb = float(employer_share_value) + float(salary_share_value),
# dest_sec = org_urssaf,
# new_desc = ps_description)
# createPaySheetLine( new_title = 'Assurance vieillesse',
# share = 'pp',
# src_deb = employer_share_value,
# dest_sec = org_urssaf,
# new_desc = pp_description)
oldage_insurance1 = { 'salary_share_rate' : None
, 'employer_share_rate' : 1.60
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Assurance vieillesse 1',
values = oldage_insurance1,
dest_org = org_urssaf)
oldage_insurance2 = { 'salary_share_rate' : 6.55
, 'employer_share_rate' : 8.20
, 'base_value' : ceiling_salary
, 'base_description' : "salaire plafonn"
}
addPaySheetItem(title = 'Assurance vieillesse 2',
values = oldage_insurance2,
dest_org = org_urssaf)
# widowhood insurance
widowhood_insurance = { 'salary_share_rate' : 0.10
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Assurance veuvage',
values = widowhood_insurance,
dest_org = org_urssaf)
# family benefits
family_benefits = { 'salary_share_rate' : None
, 'employer_share_rate' : 5.40
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Allocations familiales',
values = family_benefits,
dest_org = org_urssaf)
# industrial accident
industrial_accident = { 'salary_share_rate' : None
, 'employer_share_rate' : 1.10 # rate depending of company size, department & trade; 1.0 as standard rate, 1.1 for IT
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Accidents du travail',
values = industrial_accident,
dest_org = org_urssaf)
# lodging helps
lodging_helps = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : None
, 'base_description' : None
}
if company_size > 9:
lodging_helps['employer_share_rate'] = 0.40
lodging_helps['base_description'] = "salaire brut"
lodging_helps['base_value'] = gross_salary
else:
lodging_helps['employer_share_rate'] = 0.10
lodging_helps['base_description'] = "salaire plafonn"
lodging_helps['base_value'] = ceiling_salary
addPaySheetItem(title = 'Aide au logement',
values = lodging_helps,
dest_org = org_urssaf)
# transport payment
if company_size > 9:
transport_payment = { 'salary_share_rate' : None
, 'employer_share_rate' : 1.80 # rate depending of the town
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Versement au transport',
values = transport_payment,
dest_org = org_urssaf)
### CSG = Contribution Sociale Generalisee (deductible / non deductible)
CSGd = { 'salary_share_rate' : 2.4
, 'employer_share_rate' : None
, 'base_value' : 0.95 * gross_salary
, 'base_description' : "95% du salaire brut"
}
addPaySheetItem(title = 'CSG deductible',
values = CSGd,
dest_org = org_urssaf)
CSGnd = { 'salary_share_rate' : 5.1
, 'employer_share_rate' : None
, 'base_value' : 0.95 * gross_salary
, 'base_description' : "95% du salaire brut"
}
addPaySheetItem(title = 'CSG non deductible',
values = CSGnd,
dest_org = org_urssaf)
### CRDS = Contribution pour le Remboursement de la Dette Sociale
CRDS = { 'salary_share_rate' : 0.5
, 'employer_share_rate' : None
, 'base_value' : 0.95 * gross_salary
, 'base_description' : "95% du salaire brut"
}
addPaySheetItem(title = 'CRDS',
values = CRDS,
dest_org = org_urssaf)
### Unemployment Insurance
if char_slice == 'A' or char_slice == 'B':
unemployment_insurance = { 'salary_share_rate' : 2.4
, 'employer_share_rate' : 4.0
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Assurance chomage',
values = unemployment_insurance,
dest_org = org_assedic)
### AGS (FNGS)
if char_slice == 'A' or char_slice == 'B':
AGS = { 'salary_share_rate' : None
, 'employer_share_rate' : 0.35
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'AGS',
values = AGS,
dest_org = org_assedic)
### supplementary pension
# ARRCO
ARRCO = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if executive == False:
if num_slice == 1:
ARRCO['salary_share_rate'] = 3.0
ARRCO['employer_share_rate'] = 4.5
elif num_slice == 2:
if comp_type == 'old':
ARRCO['salary_share_rate'] = 6.0
ARRCO['employer_share_rate'] = 9.0
else:
ARRCO['salary_share_rate'] = 8.0
ARRCO['employer_share_rate'] = 12.0
elif char_slice == 'A':
ARRCO['salary_share_rate'] = 3.0
ARRCO['employer_share_rate'] = 4.5
addPaySheetItem(title = 'ARRCO',
values = ARRCO,
dest_org = org_arrco)
# AGFF
AGFF = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if ((executive == False and num_slice == 1) or
(executive == True and char_slice == 'A')):
AGFF['salary_share_rate'] = 0.80
AGFF['employer_share_rate'] = 1.20
elif ((executive == False and num_slice == 2) or
(executive == True and char_slice == 'B')):
AGFF['salary_share_rate'] = 0.90
AGFF['employer_share_rate'] = 1.30
addPaySheetItem(title = 'AGFF',
values = AGFF,
dest_org = org_agff)
# AGIRC
if executive == True:
AGIRC = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if char_slice == 'B':
AGIRC['salary_share_rate'] = 7.50
AGIRC['employer_share_rate'] = 12.50
elif char_slice == 'C':
# free repartition (20% to share between employee & employer)
AGIRC['salary_share_rate'] = 10.0
AGIRC['employer_share_rate'] = 10.0
addPaySheetItem(title = 'AGIRC',
values = AGIRC,
dest_org = org_agirc)
# CET
if executive == True and (char_slice == 'A' or char_slice == 'B' or char_slice == 'C'):
CET = { 'salary_share_rate' : 0.13
, 'employer_share_rate' : 0.22
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'CET',
values = CET,
dest_org = org_agirc)
### life insurance
if executive == True and char_slice == 'A':
life_insurance = { 'salary_share_rate' : None
, 'employer_share_rate' : 1.5
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Assurance deces',
values = life_insurance,
dest_org = org_urssaf)
### APEC
if char_slice == 'B':
APEC = { 'salary_share_rate' : 0.024
, 'employer_share_rate' : 0.036
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
#!!! verifier l'application de cette histoire de forfait...
#if executive == True and DateTime.Date.Today().month == 3:
# apec['s'] = apec['s'] + 7.0
# apec['e'] = apec['e'] + 10.51
addPaySheetItem(title = 'APEC',
values = APEC,
dest_org = org_apec)
### Taxes
# construction tax
if company_size > 9:
construction_tax = { 'salary_share_rate' : None
, 'employer_share_rate' : 0.45
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Construction',
values = construction_tax,
dest_org = org_etat)
# training tax
training_tax = { 'salary_share_rate' : None
, 'employer_share_rate' : 0.50
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Apprentissage',
values = training_tax,
dest_org = org_etat)
# courses tax
courses_tax = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if company_size < 10:
courses_tax['employer_share_rate'] = 0.15
else:
courses_tax['employer_share_rate'] = 1.5
addPaySheetItem(title = 'Formation professionnelle',
values = courses_tax,
dest_org = org_etat)
### Take Home salary
final_salary = gross_salary - salary_share_total
createPaySheetLine(new_id = 'final_salary',
new_title = 'Salaire Net',
src_sec = employer,
src = dette_salarie,
src_deb = final_salary,
dest_sec = employee,
dest = creance_salarie)
## Script (Python) "calculPaySheetTransaction"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# TODO: "#!!!" style comment
# o replace etat by right organism
True = 1
False = 0
pay_sheet = context.getObject()
pay_sheet_type = pay_sheet.getPortalType()
pay_sheet_line_type = pay_sheet_type + ' Line'
employee = pay_sheet.getDestinationSection()
employer = pay_sheet.getSourceSection()
employer_object = pay_sheet.getSourceSectionValue()
# social organism
org_urssaf = 'organisation/urssaf'
org_assedic = 'organisation/assedic'
org_arrco = 'organisation/arrco'
org_agff = 'organisation/agff'
org_agirc = 'organisation/agirc'
org_apec = 'organisation/apec'
org_etat = 'organisation/etat'
# gross salary source and destination
charge_salariale = 'account/charges_salariales'
produit_salarial = 'account/produits_salariales'
# final salary source and destination
dette_salarie = 'account/dettes_salaries'
creance_salarie = 'account/creances_salaries'
# employer share source and destination
charge_sociale = 'account/charges_sociales'
produit_social = 'account/produits_sociaux'
# employer + employee share source and destination
dette_sociale = 'account/dettes_sociales'
creance_sociale = 'account/creances_sociales'
### get the gross salary and other basic informations to calculate the paysheet
gross_salary = abs(pay_sheet.getGrossSalary())
#pay_sheet_resource = pay_sheet.getCurrency() why it doesn't work ?????
pay_sheet_resource = 'currency/EUR'
global salary_share_total
salary_share_total = 0.0
executive = True ################### #!!! dynamic get
company_birth = DateTime(2000, 10, 21)
employer_region = employer_object.getDefaultAddress().getZipCode()[:2]
sub_list = employer_object.getSubordinationRelatedValueList()
company_size = 0
for person in sub_list:
if person.getPortalType() == 'Person':
company_size += 1
company_size = 3
### define some parameters for the calculation
# ceiling salary
if gross_salary < 2432: #!!! depending of the wage periodicity, 2432 euros is for a month
ceiling_salary = gross_salary
else:
ceiling_salary = 2432
# "Char" slice type
if gross_salary <= 2432:
char_slice = 'A'
elif gross_salary <= 9728:
char_slice = 'B'
elif gross_salary <= 19456:
char_slice = 'C'
else:
char_slice = ''
# "Number" slice type
if gross_salary <= 2432:
num_slice = 1
elif gross_salary <= 7296:
num_slice = 2
else:
num_slice = 0
# age-slice of the company
old_limit = DateTime(1997, 1, 1)
if company_birth < old_limit:
comp_type = 'old'
else:
comp_type = 'new'
### create a new pay sheet line
def createPaySheetLine(new_id='', new_title='', share='',
src_sec='', src='', src_deb=None,
dest_sec='', dest='', new_desc=''):
suffix = {'cs': '',
'pp': ' (part patronale)'}
if share == 'pp' or share == 'cs':
new_id = string.replace(string.lower(new_title), ' ', '_')
new_id += '_' + share
#new_title = string.replace(new_title, '?', 'e')
#new_title = string.replace(new_title, '?', 'e')
#new_title = string.replace(new_title, '?', 'o')
new_title += suffix[share]
if share == 'cs':
src_sec = employer
src = dette_sociale
dest = creance_sociale
elif share == 'pp':
src_sec = employer
src = charge_sociale
dest = produit_social
#if wrong ID (existing or wrong name): new_id = str(pay_sheet.generateNewId())
context.portal_types.constructContent(type_name = pay_sheet_line_type,
container = pay_sheet,
id = new_id)
pay_sheet[new_id].setTitle(new_title)
pay_sheet[new_id].setResource(pay_sheet_resource) # default currency
pay_sheet[new_id].setSourceSection(src_sec)
pay_sheet[new_id].setSource(src)
pay_sheet[new_id].setDestinationSection(dest_sec)
pay_sheet[new_id].setDestination(dest)
pay_sheet[new_id].setSourceDebit(src_deb)
pay_sheet[new_id].setSourceDebit(src_deb)
pay_sheet[new_id].setDescription(new_desc)
### add a pay sheet item and manage the accounting writing rules
def addPaySheetItem(title='', values={'salary_share_rate':None, 'employer_share_rate':None, 'base_value':None, 'base_description':None}, dest_org=''):
global salary_share_total
salary_share_value = None
employer_share_value = None
ps_description = None
pp_description = None
if values['salary_share_rate']!=None and values['base_value']!=None:
salary_share_value = (float(values['salary_share_rate']) / 100) * values['base_value']
ps_description = "= " + str(values['salary_share_rate']) + "% * " + str(values['base_value']) + " (=" + str(values['base_description']) + ")"
if values['employer_share_rate']!=None and values['base_value']!=None:
employer_share_value = (float(values['employer_share_rate']) / 100) * values['base_value']
pp_description = "= " + str(values['employer_share_rate']) + "% * " + str(values['base_value']) + " (=" + str(values['base_description']) + ")"
if salary_share_value == None and employer_share_value == None:
return
if salary_share_value != None:
salary_share_total += float(salary_share_value)
if employer_share_value == None:
createPaySheetLine( new_title = title,
share = 'cs',
src_deb = salary_share_value,
dest_sec = dest_org,
new_desc = ps_description)
return
if salary_share_value == None:
createPaySheetLine( new_title = title,
share = 'cs',
src_deb = employer_share_value,
dest_sec = dest_org,
new_desc = ps_description)
createPaySheetLine( new_title = title,
share = 'pp',
src_deb = employer_share_value,
dest_sec = dest_org,
new_desc = pp_description)
return
createPaySheetLine( new_title = title,
share = 'cs',
src_deb = float(employer_share_value) + float(salary_share_value),
dest_sec = dest_org,
new_desc = ps_description)
createPaySheetLine( new_title = title,
share = 'pp',
src_deb = employer_share_value,
dest_sec = dest_org,
new_desc = pp_description)
### add the gross salary Pay Sheet Line
createPaySheetLine( new_id = 'gs',
new_title = 'Salaire brut',
src_sec = employer,
src = charge_salariale,
src_deb = gross_salary,
dest_sec = employee,
dest = produit_salarial)
### Social Security
# sickness insurance
sickness_insurance = { 'salary_share_rate' : None
, 'employer_share_rate' : 12.80
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if employer_region == '57' or employer_region == '67' or employer_region == '68':
sickness_insurance['salary_share_rate'] = 1.70
else:
sickness_insurance['salary_share_rate'] = 0.75
addPaySheetItem(title = 'Assurance maladie',
values = sickness_insurance,
dest_org = org_urssaf)
# old-age insurance
# this contribution is special because salary and employer shares are calculated from 2 base
# salary_share_value = (6.55 / 100) * ceiling_salary
# salary_share_total += float(salary_share_value)
# ps_description = "= 6.55% * " + str(ceiling_salary) + " (=salaire plafonn)"
# employer_share_value = gross_salary * (1.60 / 100) + ceiling_salary * (8.20 / 100)
# pp_description = "= 1.60% * " + str(gross_salary) + " + 8.20% * " + str(ceiling_salary) + " = 1.60% * salaire brut + 8.20% * salaire plafonn"
# createPaySheetLine( new_title = 'Assurance vieillesse',
# share = 'cs',
# src_deb = float(employer_share_value) + float(salary_share_value),
# dest_sec = org_urssaf,
# new_desc = ps_description)
# createPaySheetLine( new_title = 'Assurance vieillesse',
# share = 'pp',
# src_deb = employer_share_value,
# dest_sec = org_urssaf,
# new_desc = pp_description)
oldage_insurance1 = { 'salary_share_rate' : None
, 'employer_share_rate' : 1.60
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Assurance vieillesse 1',
values = oldage_insurance1,
dest_org = org_urssaf)
oldage_insurance2 = { 'salary_share_rate' : 6.55
, 'employer_share_rate' : 8.20
, 'base_value' : ceiling_salary
, 'base_description' : "salaire plafonn"
}
addPaySheetItem(title = 'Assurance vieillesse 2',
values = oldage_insurance2,
dest_org = org_urssaf)
# widowhood insurance
widowhood_insurance = { 'salary_share_rate' : 0.10
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Assurance veuvage',
values = widowhood_insurance,
dest_org = org_urssaf)
# family benefits
family_benefits = { 'salary_share_rate' : None
, 'employer_share_rate' : 5.40
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Allocations familiales',
values = family_benefits,
dest_org = org_urssaf)
# industrial accident
industrial_accident = { 'salary_share_rate' : None
, 'employer_share_rate' : 1.10 # rate depending of company size, department & trade; 1.0 as standard rate, 1.1 for IT
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Accidents du travail',
values = industrial_accident,
dest_org = org_urssaf)
# lodging helps
lodging_helps = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : None
, 'base_description' : None
}
if company_size > 9:
lodging_helps['employer_share_rate'] = 0.40
lodging_helps['base_description'] = "salaire brut"
lodging_helps['base_value'] = gross_salary
else:
lodging_helps['employer_share_rate'] = 0.10
lodging_helps['base_description'] = "salaire plafonn"
lodging_helps['base_value'] = ceiling_salary
addPaySheetItem(title = 'Aide au logement',
values = lodging_helps,
dest_org = org_urssaf)
# transport payment
if company_size > 9:
transport_payment = { 'salary_share_rate' : None
, 'employer_share_rate' : 1.80 # rate depending of the town
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Versement au transport',
values = transport_payment,
dest_org = org_urssaf)
### CSG = Contribution Sociale Generalisee (deductible / non deductible)
CSGd = { 'salary_share_rate' : 2.4
, 'employer_share_rate' : None
, 'base_value' : 0.95 * gross_salary
, 'base_description' : "95% du salaire brut"
}
addPaySheetItem(title = 'CSG deductible',
values = CSGd,
dest_org = org_urssaf)
CSGnd = { 'salary_share_rate' : 5.1
, 'employer_share_rate' : None
, 'base_value' : 0.95 * gross_salary
, 'base_description' : "95% du salaire brut"
}
addPaySheetItem(title = 'CSG non deductible',
values = CSGnd,
dest_org = org_urssaf)
### CRDS = Contribution pour le Remboursement de la Dette Sociale
CRDS = { 'salary_share_rate' : 0.5
, 'employer_share_rate' : None
, 'base_value' : 0.95 * gross_salary
, 'base_description' : "95% du salaire brut"
}
addPaySheetItem(title = 'CRDS',
values = CRDS,
dest_org = org_urssaf)
### Unemployment Insurance
if char_slice == 'A' or char_slice == 'B':
unemployment_insurance = { 'salary_share_rate' : 2.4
, 'employer_share_rate' : 4.0
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Assurance chomage',
values = unemployment_insurance,
dest_org = org_assedic)
### AGS (FNGS)
if char_slice == 'A' or char_slice == 'B':
AGS = { 'salary_share_rate' : None
, 'employer_share_rate' : 0.35
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'AGS',
values = AGS,
dest_org = org_assedic)
### supplementary pension
# ARRCO
ARRCO = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if executive == False:
if num_slice == 1:
ARRCO['salary_share_rate'] = 3.0
ARRCO['employer_share_rate'] = 4.5
elif num_slice == 2:
if comp_type == 'old':
ARRCO['salary_share_rate'] = 6.0
ARRCO['employer_share_rate'] = 9.0
else:
ARRCO['salary_share_rate'] = 8.0
ARRCO['employer_share_rate'] = 12.0
elif char_slice == 'A':
ARRCO['salary_share_rate'] = 3.0
ARRCO['employer_share_rate'] = 4.5
addPaySheetItem(title = 'ARRCO',
values = ARRCO,
dest_org = org_arrco)
# AGFF
AGFF = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if ((executive == False and num_slice == 1) or
(executive == True and char_slice == 'A')):
AGFF['salary_share_rate'] = 0.80
AGFF['employer_share_rate'] = 1.20
elif ((executive == False and num_slice == 2) or
(executive == True and char_slice == 'B')):
AGFF['salary_share_rate'] = 0.90
AGFF['employer_share_rate'] = 1.30
addPaySheetItem(title = 'AGFF',
values = AGFF,
dest_org = org_agff)
# AGIRC
if executive == True:
AGIRC = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if char_slice == 'B':
AGIRC['salary_share_rate'] = 7.50
AGIRC['employer_share_rate'] = 12.50
elif char_slice == 'C':
# free repartition (20% to share between employee & employer)
AGIRC['salary_share_rate'] = 10.0
AGIRC['employer_share_rate'] = 10.0
addPaySheetItem(title = 'AGIRC',
values = AGIRC,
dest_org = org_agirc)
# CET
if executive == True and (char_slice == 'A' or char_slice == 'B' or char_slice == 'C'):
CET = { 'salary_share_rate' : 0.13
, 'employer_share_rate' : 0.22
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'CET',
values = CET,
dest_org = org_agirc)
### life insurance
if executive == True and char_slice == 'A':
life_insurance = { 'salary_share_rate' : None
, 'employer_share_rate' : 1.5
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Assurance deces',
values = life_insurance,
dest_org = org_urssaf)
### APEC
if char_slice == 'B':
APEC = { 'salary_share_rate' : 0.024
, 'employer_share_rate' : 0.036
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
#!!! verifier l'application de cette histoire de forfait...
#if executive == True and DateTime.Date.Today().month == 3:
# apec['s'] = apec['s'] + 7.0
# apec['e'] = apec['e'] + 10.51
addPaySheetItem(title = 'APEC',
values = APEC,
dest_org = org_apec)
### Taxes
# construction tax
if company_size > 9:
construction_tax = { 'salary_share_rate' : None
, 'employer_share_rate' : 0.45
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Construction',
values = construction_tax,
dest_org = org_etat)
# training tax
training_tax = { 'salary_share_rate' : None
, 'employer_share_rate' : 0.50
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
addPaySheetItem(title = 'Apprentissage',
values = training_tax,
dest_org = org_etat)
# courses tax
courses_tax = { 'salary_share_rate' : None
, 'employer_share_rate' : None
, 'base_value' : gross_salary
, 'base_description' : "salaire brut"
}
if company_size < 10:
courses_tax['employer_share_rate'] = 0.15
else:
courses_tax['employer_share_rate'] = 1.5
addPaySheetItem(title = 'Formation professionnelle',
values = courses_tax,
dest_org = org_etat)
### Take Home salary
final_salary = gross_salary - salary_share_total
createPaySheetLine(new_id = 'final_salary',
new_title = 'Salaire Net',
src_sec = employer,
src = dette_salarie,
src_deb = final_salary,
dest_sec = employee,
dest = creance_salarie)
<template bottommargin='0.665cm' showboundary='0' topmargin='0.635cm' rightmargin='0.665cm' tal:define='portal python:here.portal_url.getPortalObject()' filename='paysheet.pdf' pagesize='A4' allowsplitting='1' landscape='0' leftmargin='0.635cm'>
<pagetemplate startframe='content' id='FirstPage'>
<static>
<infostring x='3cm' y='3cm'>blabla</infostring>
</static>
<frame showBoundary='0' leftpadding='0.1cm' height='18.14cm' width='19.701cm' rightpadding='0.1cm' y='2.289cm' x='0.635cm' nextid='content' toppadding='0.2cm' id='content' bottompadding='0.5cm'/>
</pagetemplate>
</template>
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:InventoryBrain
class_file:InventoryBrain.py
</dtml-comment>
<params>resource_uid:list
resource:list
from_date
to_date
node
section
node_uid
section_uid
variation_text=None
node_category
section_category
resource_category
omit_simulation
omit_input
omit_output
simulation_state
query</params>
SELECT
SUM(stock.quantity) AS inventory
FROM
movement
LEFT JOIN catalog ON (movement.uid = catalog.uid)
LEFT JOIN stock ON (movement.uid = stock.uid)
, catalog AS node, catalog AS section, catalog AS resource
WHERE
1 = 1
AND movement.is_accountable = 1
AND node.uid = stock.node_uid
AND section.uid = stock.section_uid
AND stock.resource_uid = resource.uid
## Script (Python) "getAccountPcgItemList"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
def display(x):
return "%s - %s" % (x.getId(), x.getTitle())
def sort(x,y):
return cmp(display(x), display(y))
obj = context.restrictedTraverse('portal_categories/pcg')
item_list = obj.getCategoryChildItemList(base=0, display_method=display, sort_method=sort)
return item_list
<?xml version="1.0"?>
<form>
<title></title>
<row_length>4</row_length>
<name>pay_sheet_line_view</name>
<pt>form_view</pt>
<action></action>
<method>POST</method>
<enctype></enctype>
<groups>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title></title>
<row_length>4</row_length>
<name>pay_sheet_list</name>
<pt>form_view</pt>
<action></action>
<method>POST</method>
<enctype></enctype>
<groups>
</groups>
</form>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
<title>Pay Sheet</title>
<style type="text/css">
@import "pay_sheet_css.css";
</style>
</head>
<body tal:define="employee python: here.restrictedTraverse(here.getDestinationSectionRelativeUrl());
employer python: here.restrictedTraverse(here.getSourceSectionRelativeUrl())">
<div class="spacer">&nbsp;</div>
<div class="logo">
<img src="logo.png">
</div>
<div class="title">
<h1>FEUILLE DE SALAIRE</h1>
<h2 tal:content="python: '- n%s -' % here.getId()"/>
</div>
<div class="spacer">&nbsp;</div>
<div class="employer">
<span class="name" tal:content="python: employer.getCorporateName()"/><br/>
<span tal:content="python: '%s %s %s' % (
employer.getDefaultAddress().getStreetAddress(),
employer.getDefaultAddress().getZipCode(),
employer.getDefaultAddress().getCity())"/><br/>
<span tal:content="python: 'Tel: %s' % employer.getDefaultTelephone().asText()"/><br/><!--optional-->
<span tal:content="python: 'Fax: %s' % employer.getDefaultFax().asText()"/><br/><!--optional-->
<span tal:content="python: 'E-mail: %s' % employer.getDefaultEmail().asText()"/><br/><!--optional-->
<span tal:content="python: 'NSiret: '"/><br/><!-- from organisation details -->
<span tal:content="python: 'NAPE: '"/><br/><!-- from organisation details -->
<span tal:content="python: 'NURSSAF: '"/><br/><!-- from organisation details -->
<span tal:content="python: 'Adresse URSSAF: '"/><br/><!-- from organisation details -->
</div>
<div class="employee">
<span class="name" tal:content="python: employee.getTitle()"/><br/>
<span>Emploi: Directeur Recherche et Dveloppement</span><br/><!-- from career -->
<span tal:content="python: 'Matricule: %s' % employee.getId()"/><br/><!--optional-->
<span>Qualification: Ingnieur</span><br/><!-- from career -->
<span>Echelon: 1</span><br/><!-- from career -->
<span>Coefficient: 1.0</span><br/><!-- from career -->
<span tal:content="python: '%s %s %s' % (
employee.getDefaultAddress().getStreetAddress(),
employee.getDefaultAddress().getZipCode(),
employee.getDefaultAddress().getCity())"/><br/><!--optional-->
<span tal:content="python: 'Tel: %s' % employee.getDefaultTelephone().asText()"/><br/><!--optional-->
<span tal:content="python: 'Fax: %s' % employee.getDefaultFax().asText()"/><br/><!--optional-->
<span tal:content="python: 'E-mail: %s' % employee.getDefaultEmail().asText()"/><br/><!--optional-->
<span tal:content="python: 'NSecu: '"/><br/><!--optional-->
</div>
<div class="spacer">&nbsp;</div>
<div class="contract_rules">
<span tal:content="python: 'Convention collective de banche:'"/><br/>
<span tal:content="python: 'Dure des congs de pays:'"/><br/>
<span tal:content="python: 'Dure des dlais de pravis:'"/><br/>
</div>
<div class="payment">
<span tal:content="python: 'Periode: du %s au %s' % (
here.getStartDate(),
here.getStopDate())"/><br/>
<span tal:content="python: 'Date de paiement: %s' % here.getTargetStopDate()"/><br/>
<span>Type de paiement: Virement</span><br/><!-- from salary information in person --><!--optional-->
</div>
<div class="disclaimer">
Dans votre intrt et pour vous aider faire valoir vos droits, conservez ce bulletin de paie sans limitation de dure.
</div>
<br>
<table width="100%">
<tr bgcolor=000000>
<th><font color=ffffff>Nature</font></th>
<th><font color=ffffff>Part patronale</font></th>
<th><font color=ffffff>Calcul PP</font></th>
<th><font color=ffffff>Part salariale</font></th>
<th><font color=ffffff>Calcul PS</font></th>
</tr>
<tr>
<td tal:content="python: here.gs.getTitle()"/>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td tal:content="python: '%.2f' % here.gs.getDestinationCredit()"/>
<td>&nbsp;</td>
</tr>
<tr tal:define="pay_sheet_lines python: here.PaySheetLinesPrintFormat()"
tal:repeat="line pay_sheet_lines">
<td class="line"><span tal:content="python: line['title']"/></td>
<td class="line"><span tal:content="python: line['pp']"/></td>
<td class="line"><span tal:content="python: line['pp_desc']"/></td>
<td class="line"><span tal:content="python: line['ps']"/></td>
<td class="line"><span tal:content="python: line['ps_desc']"/></td>
</tr>
<tr >
<td><b tal:content="python: here.final_salary.getTitle()"/> (EUR)</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><b tal:content="python: '%.2f' % here.final_salary.getDestinationCredit()"/></td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>
<?xml version="1.0"?>
<form>
<title></title>
<row_length>4</row_length>
<name>pay_sheet_view</name>
<pt>form_view</pt>
<action></action>
<method>POST</method>
<enctype></enctype>
<groups>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Purchase Invoice Transaction</title>
<row_length>4</row_length>
<name>purchase_invoice_list</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_source_section</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">1</required>
<size type="int">1</size>
<title>Customer</title>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: [['Nexedi', 'organisation/nexedi']]</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Vendor</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission></editable_permission>
<editable_role></editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Invoice Number</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission></viewable_permission>
<viewable_role></viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_resource</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:[('','')]+map(lambda x:(x.id,'currency/%s' %x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Start Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Stop Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>simulation_state</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>State</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Vendor Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('source', 'Customer Account'), ('source_debit', 'Debit'), ('source_credit', 'Credit'), ('destination', 'Vendor Account'), ('destination_debit', 'Debit'), ('destination_credit', 'Credit')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('source_debit', 'Debit'), ('source_credit', 'Credit'), ('destination', 'Destination'), ('source', 'Source')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[('resource', 'resource')]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_method type="method">searchInvoiceTransaction</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>purchase_invoice_transaction_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Purchase Invoice Transaction Lines</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>listbox_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_destination</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_destination</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineDestinationItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Sale Invoice Transaction</title>
<row_length>4</row_length>
<name>sale_invoice_transaction_detail</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Client</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Vendor</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>resource</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/l0/getDefaultResource | nothing</default>
<items>python:map(lambda x: (x.id,'currency/%s' % x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_causality_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>causality</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>sale_packing_list</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Sale Packing List', 'Sale Packing List')]</portal_type>
<required type="int">0</required>
<title>Packing List</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Start Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">0</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Stop Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('title', 'Title'), ('source', 'Source'), ('source_debit', 'Debit'), ('source_credit', 'Credit'), ('destination', 'Destination'), ('destination_debit', 'Debit'), ('destination_credit', 'Credit')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('title', 'Title'), ('source_debit', 'Debit'), ('source_credit', 'Credit'), ('destination', 'Destination'), ('source', 'Source')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[('resource', 'resource')]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Sale Invoice Transaction Line', 'Sale Invoice Transaction Line'), ('Accounting Transaction Line', 'Accounting Transaction Line')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>purchase_invoice_transaction_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Sale Invoice Transaction Lines</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>listbox_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_destination</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_destination</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineDestinationItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "searchInvoiceTransaction"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=**kw
##title=
##
sort_dict = { 'income': '\0\0',
'expense': '\0\0',
'receivable': '\0\1',
'payable': '\0\1',
'collected_vat': '\0\2',
'refundable_vat': '\0\3' }
def sortInvoiceTransactionLine(a, b):
a_id = a.getId()
if a_id in sort_dict:
a_id = sort_dict[a_id]
b_id = b.getId()
if b_id in sort_dict:
b_id = sort_dict[b_id]
return cmp(a_id, b_id)
object_list = []
for o in context.searchFolder(**kw):
obj = o.getObject()
object_list.append(obj)
object_list.sort(sortInvoiceTransactionLine)
return object_list
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:ZSQLBrain
class_file:zsqlbrain.py
</dtml-comment>
<params>query</params>
<dtml-if query>
SELECT DISTINCT catalog.*, stock.quantity, movement.start_date, movement.stop_date, resource.title
FROM catalog, stock, category, catalog as resource, movement
WHERE catalog.uid = stock.uid
AND movement.resource_uid=resource.uid
AND movement.uid = catalog.uid
AND category.uid = stock.node_uid
AND (<dtml-var query>)
<dtml-else>
SELECT DISTINCT catalog.*, stock.quantity, movement.start_date, movement.stop_date, resource.title
FROM catalog, catalog as node, stock, catalog as resource, movement
WHERE catalog.uid = stock.uid
AND stock.node_uid = node.uid
AND movement.resource_uid=resource.uid
AND movement.uid = catalog.uid
</dtml-if>
\ No newline at end of file
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:ZSQLBrain
class_file:zsqlbrain.py
</dtml-comment>
<params>query
stat_query</params>
<dtml-if query>
SELECT <dtml-var stat_query>
FROM catalog, stock, category, catalog as resource, movement
WHERE catalog.uid = stock.uid
AND movement.resource_uid=resource.uid
AND movement.uid = catalog.uid
AND category.uid = stock.node_uid
AND (<dtml-var query>)
<dtml-else>
SELECT <dtml-var stat_query>
FROM catalog, catalog as node, stock, catalog as resource, movement
WHERE catalog.uid = stock.uid
AND stock.node_uid = node.uid
AND movement.resource_uid=resource.uid
AND movement.uid = catalog.uid
</dtml-if>
\ No newline at end of file
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:ZSQLBrain
class_file:zsqlbrain.py
</dtml-comment>
<params>getUid
query</params>
<dtml-if getUid>
SELECT DISTINCT catalog.*, stock.quantity, parent.Title as parent_title
FROM catalog, catalog as node, stock, catalog as parent, category
WHERE catalog.uid = stock.uid
AND stock.node_uid = node.uid
AND catalog.parent_uid = parent.uid
AND stock.node_uid = <dtml-var getUid>
AND stock.quantity != 0.0
<dtml-if query>
AND category.uid = stock.section_uid
AND <dtml-var query>
</dtml-if>
</dtml-if>
\ No newline at end of file
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:
class_file:
</dtml-comment>
<params>query</params>
SELECT SUM(stock.quantity)
FROM catalog, catalog as node, stock, category
WHERE catalog.uid = stock.uid
AND node.uid = category.uid
AND stock.node_uid = node.uid
AND <dtml-var query>
\ No newline at end of file
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:
class_file:
</dtml-comment>
<params>query
getUid</params>
SELECT DISTINCT catalog.*, stock.quantity
FROM catalog, catalog as node, stock, category
WHERE catalog.uid = stock.uid
AND node.uid = category.uid
AND stock.node_uid = node.uid
AND <dtml-var query>
<?xml version="1.0"?>
<form>
<title></title>
<row_length>4</row_length>
<name>accounting_transaction_list</name>
<pt>form_list</pt>
<action></action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>Default</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('start_date', 'start_date'), ('stop_date', 'stop_date'), ('id', 'id'), ('Type', 'Type')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[('portal_categories/pcg', 'PCG'), ('portal_categories/financial_section', 'Financial Section'), ('portal_categories/account_type', 'Account type')]</domain_root_list>
<domain_tree type="int">1</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">30</lines>
<list_action>list</list_action>
<list_method type="method">sql_stock_account_date</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Accounting Transaction', 'Accounting Transaction'), ('Purchase Invoice Transaction', 'Purchase Invoice Transaction'), ('Sale Invoice Transaction', 'Sale Invoice Transaction')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">1</search>
<search_columns></search_columns>
<select type="int">1</select>
<selection_name>transaction_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<stat_method type="method">sql_stock_account_date_stat</stat_method>
<title>Transaction Line List</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Set List Setting</title>
<row_length>2</row_length>
<name>transaction_list_ui</name>
<pt>form_list_ui</pt>
<action>base_list_ui</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>columns</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[('None', 'None'), ('Id', 'id'), ('Title', 'Title'), ('Description', 'Description')]</items>
<required type="int">1</required>
<size type="int">1</size>
<title>columns</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>lines</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[('5', '5'), ('10', '10'), ('25', '25'), ('50', '50'), ('100', '100'), ('200', '200'), ('500', '500')]</items>
<required type="int">1</required>
<size type="int">1</size>
<title>Line</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Assignment</title>
<row_length>4</row_length>
<name>General</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>Left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>ID</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/id</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Title</title>
<truncate type="int">0</truncate>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Begin</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>End</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Right</title>
<fields>
<field><id>my_function</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[('Registered office', 'Registered office'), ('Store', 'Store'), ('Wharehouse', 'Wharehouse'), ('Workshop', 'Workshop')]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Function</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/getDefaultFunction</default>
<items>here/portal_categories/function/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_activity</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[('Distribution', 'Distribution'), ('Manufacture', 'Manufacture'), ('Transport', 'Transport')]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Activity</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/getDefaultActivity</default>
<items>here/portal_categories/activity/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Middle</title>
<fields>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">3</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Comments</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">100</width>
</values>
<tales>
<default>here/Description</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>List</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "Career_shiftDefault"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
object_list = []
default_career = None
new_start_date = None
# Create a list of all career line except the default one
for object in context.objectValues():
if object.getPortalType() == 'Career':
if object.getId() != 'default_career':
object_list += [object]
else:
default_career = object
new_start_date = default_career.getStopDate()
# No default career
if default_career == None:
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '/person_career_view' + '?portal_status_message=Current+career+need+to+be+defined')
# Inverse sort of the list by id
object_list.sort(lambda x, y: -cmp(int(x.getId()), int(y.getId())))
# Shift all career lines id values
new_id = str(context.generateNewId())
for career_line in object_list:
current_id = career_line.getId()
context.manage_renameObject(current_id, new_id)
new_id = current_id
# Create a new default_career
context.manage_renameObject('default_career', new_id)
new_default = context.manage_copyObjects(ids=(new_id,))
new_object = context.manage_pasteObjects(new_default)
context.manage_renameObject(new_object[0]['new_id'], 'default_career')
context.setDefaultCareerStopDate(None)
context.setDefaultCareerStartDate(new_start_date)
return context.REQUEST.RESPONSE.redirect(context.absolute_url() + '/person_career_view' + '?portal_status_message=New+career+step+added')
<?xml version="1.0"?>
<form>
<title>Career</title>
<row_length>4</row_length>
<name>General</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>Left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>ID</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/id</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_subordination_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>subordination</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<required type="int">0</required>
<title>Organisation</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Begin</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">1</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>End</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Right</title>
<fields>
<field><id>my_collective_agreement_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Collective agreement title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_role</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Role</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/getDefaultRole</default>
<items>here/portal_categories/role/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_grade</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Grade</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/getDefaultGrade</default>
<items>here/portal_categories/grade/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_salary_level</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<start></start>
<title>Salary level</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
<field><id>my_salary_coefficient</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<start></start>
<title>Salary coefficient</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
<field><id>my_skill_list</id> <type>MultiListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="list">[]</default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">5</size>
<title>Skills</title>
<unicode type="int">0</unicode>
<view_separator>&lt;br /&gt;
</view_separator>
</values>
<tales>
<default>here/getSkillList</default>
<items>here/portal_categories/skill/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Middle</title>
<fields>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">3</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Comments</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">100</width>
</values>
<tales>
<default>here/Description</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>List</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "event_2_sale_opportunity"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# this script allow to create a new object from this current one
current_object = context.getObject()
module = context.getPortalObject().opportunity
# Create a new object
new_id = str(module.generateNewId())
context.portal_types.constructContent(type_name='Sale Opportunity',
container=module,
id=new_id
)
new_object = module[new_id]
# If we do this before, each added line will take 20 times more time
# because of programmable acquisition
new_object.edit(
title=current_object.getTitle(),
client_value_list = current_object.getSourceValueList()
)
# Now create the relation between the current object and the new one
current_object.setFollowUpValueList([new_object])
## Script (Python) "event_2_support_request"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# this script allow to create a new object from this current one
current_object = context.getObject()
module = context.getPortalObject().support_request
# Create a new object
new_id = str(module.generateNewId())
context.portal_types.constructContent(type_name='Support Request',
container=module,
id=new_id
)
new_object = module[new_id]
# If we do this before, each added line will take 20 times more time
# because of programmable acquisition
new_object.edit(
title=current_object.getTitle(),
client_value_list = current_object.getSourceValueList()
)
# Now create the relation between the current object and the new one
current_object.setFollowUpValueList([new_object])
<?xml version="1.0"?>
<form>
<title>Person Assignment View</title>
<row_length>4</row_length>
<name>General</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>id</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Usual Name</title>
<truncate type="int">0</truncate>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[('getStartDate', 'getStartDate'), ('getStopDate', 'getStopDate')]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('getStartDate', 'Begin'), ('getStopDate', 'End'), ('title', 'Title'), ('function', 'Function'), ('activity', 'Activity')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[('id', "''"), ('Title', "''")]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('getStartDate', 'getStartDate'), ('getStopDate', 'getStopDate')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<global_attributes type="list">[]</global_attributes>
<height type="int">5</height>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_cookie>CONTACT_LIST</list_cookie>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Assignment', 'Assignment')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<reverse type="int">0</reverse>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>folder_selection</selection_name>
<sort type="list">[]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Assignments</title>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<html>
<head>
<title tal:content="template/title">The title</title>
</head>
<body>
<img src="logo.png" />
<h2 align="center"><span tal:condition="template/title"
tal:replace="template/title">optional template id</span></h2>
<table width="100%" border="1">
<tr>
<th>Nom</th>
<th>Date Naissance</th>
<th>Nationalité</th>
<th>Sexe</th>
<th>Compétences</th>
<th>Affectation</th>
<th>Arrivée</th>
<th>Départ</th>
<th>Description</th>
</tr>
<tr tal:repeat="item python:here.sort_sql_list(here.z_person_career_log(),(('start_date','ASC'),))">
<span tal:define="my_assignment python:item.getObject();
my_person python:my_assignment.aq_parent"
>
<td valign="top"><a tal:content="my_person/getTitle"
tal:attributes="href python:'%s/person_viewProfile' % my_person.getRelativeUrl()" /></td>
<td valign="top" ><font size="-2" tal:content="my_assignment/getBirthday"/></td>
<td valign="top" ><font size="-2" tal:content="my_assignment/getDefaultNationality"/></td>
<td valign="top" ><font size="-2" tal:content="my_assignment/getGender"/></td>
<td valign="top"><font size="-2"><ul><li tal:repeat="skill my_assignment/getSkillList"
tal:content="skill"></li></ul></font></td>
<td valign="top"><a tal:content="item/getTitle" tal:attributes="href item/getPath"/></td>
<td valign="top"><font size="-2" tal:content="my_assignment/getStartDate"/></td>
<td valign="top"><font size="-2" tal:content="my_assignment/getStopDate"/></td>
<td valign="top"><font size="-2" tal:content="item/Description"/></td>
</span>
</tr>
</table>
</body>
</html>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Person Career View</title>
<row_length>4</row_length>
<name>General</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>id</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Usual name</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_default_career_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Career title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_default_career_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Beginning of this career step</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_default_career_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">1</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>End of this current career step</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_subordination_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>subordination</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<relation_setter_id>setCareerSubordinationUidList</relation_setter_id>
<required type="int">0</required>
<title>Current organisation</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_default_collective_agreement_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Collective agreement title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_default_career_salary_level</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<start></start>
<title>Current salary level</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
<field><id>my_default_career_salary_coefficient</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<start></start>
<title>Current salary coefficient</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
<field><id>my_career_role</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Current role</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/role/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_career_grade</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Current grade</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/grade/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_career_skill_list</id> <type>MultiListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="list">[]</default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">5</size>
<title>Current skills</title>
<unicode type="int">0</unicode>
<view_separator>&lt;br /&gt;</view_separator>
</values>
<tales>
<items>here/portal_categories/skill/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
<field><id>my_default_career_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">3</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Current career comments</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">100</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[('getStartDate', 'getStartDate'), ('getStopDate', 'getStopDate')]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('getStartDate', 'Begin'), ('getStopDate', 'End'), ('title', 'Title'), ('getSubordinationTitle', 'Organisation'), ('collective_agreement_title', 'Collective agreement'), ('role', 'Role'), ('grade', 'Grade'), ('salary_level', 'Salary level'), ('salary_coefficient', 'Salary coeff.')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[('id', "''"), ('Title', "''")]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('getStartDate', 'getStartDate'), ('getStopDate', 'getStopDate')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<global_attributes type="list">[]</global_attributes>
<height type="int">5</height>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_cookie>CONTACT_LIST</list_cookie>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Career', 'Career')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<reverse type="int">0</reverse>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>folder_selection</selection_name>
<sort type="list">[]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Career step list</title>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Details</title>
<row_length>4</row_length>
<name>person_viewDetails</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>id</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Usual Name</title>
<truncate type="int">0</truncate>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_first_name</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Personal Name</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/getFirstName</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_last_name</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Surname</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/getLastName</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_middle_name</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Middle Name</title>
<truncate type="int">0</truncate>
</values>
<tales>
<default>here/getMiddleName</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_prefix</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Prefix</title>
<truncate type="int">0</truncate>
</values>
<tales>
<default>here/getPrefix</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_suffix</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Suffix</title>
<truncate type="int">0</truncate>
</values>
<tales>
<default>here/getSuffix</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_social_code</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Social code</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<external_validator></external_validator>
<extra></extra>
<height type="int">3</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Comments</title>
<width type="int">100</width>
</values>
<tales>
<default>here/Description</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Project Line</title>
<row_length>4</row_length>
<name>project_line_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype>multipart/form-data</enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>Left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Id</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_target_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Start</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_target_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Stop</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Right</title>
<fields>
<field><id>my_source_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>person</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Collaborateur</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_base_price</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Taux horaire ou journalier</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_quantity_unit</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[('Heure', 'Heure'), ('Journ\xe9e', 'Journ\xe9e')]</items>
<required type="int">1</required>
<size type="int">2</size>
<title>Unité</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_target_quantity</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Quantity</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>my_destination_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<required type="int">0</required>
<title>Lieu</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Project</title>
<row_length>4</row_length>
<name>project_list</name>
<pt>form_list</pt>
<action>doSelect</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'ID'), ('title', 'Title'), ('default_destination_title', 'Real Client'), ('default_destination_section_title', 'Invoiced Client'), ('getStartDate', 'Start Date'), ('getStopDate', 'Stop Date')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>list</list_action>
<list_method type="method">portal_catalog</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Project', 'Project')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">1</search>
<search_columns type="list">[]</search_columns>
<select type="int">1</select>
<selection_name>project_selection</selection_name>
<sort type="list">[]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Project List</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>line of a project report</title>
<row_length>4</row_length>
<name>project_report_line_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Project report line Id</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>dmy</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>start date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>dmy</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>stop date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_default_order_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>order</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>project</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Project', 'Project')]</portal_type>
<required type="int">0</required>
<title>Project</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/getDefaultOrderTitle</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_id</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default>Billiable</default>
<description>This field describes if the line expense can be billiable to the invoiced client</description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[('Billiable', 'Billiable'), ('Non Billiable', 'Non Billiable')]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Billiable ?</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_destination_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description>The client for which the expense was done</description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<required type="int">0</required>
<title>Client</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_quantity</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>quantity</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_quantity_unit</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default>EUR</default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:map(lambda x: (x.id,'currency/%s' % x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_expense_type</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Expense Type</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/expense_type/getCategoryChildTitleItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>destination_price</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Reimboursement</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>source_price</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Amount</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Project Report</title>
<row_length>4</row_length>
<name>project_report_list</name>
<pt>form_list</pt>
<action>doSelect</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'Id'), ('Start_date', 'Start Date'), ('Stop_date', 'Stop Date'), ('Source_section_title', 'name of the employee'), ('project_report_state', 'state'), ('TotalBilliableQuantity', 'Billiable Expense'), ('TotalNonBilliableQuantity', 'Non Billiable Expense'), ('TotalQuantity', 'Total')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>list</list_action>
<list_method type="method">portal_catalog</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Project Report', 'Project Report')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>project report selection</selection_name>
<sort type="list">[]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Project Report List</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>View of a project report</title>
<row_length>4</row_length>
<name>project_report_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>Left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Id of a project report</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>person</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Worker name</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_section_id</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_section</base_category>
<catalog_index>Id</catalog_index>
<css_class></css_class>
<default></default>
<default_module>person</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('person', 'person')]</portal_type>
<required type="int">0</required>
<title>Worker Id</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>dmy</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>start date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>dmy</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>stop date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>project_report_state</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Project Report State</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:here.portal_workflow.getInfoFor(here, 'project_report_state')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Center</title>
<fields>
<field><id>TotalBilliableQuantity</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Billiable Expense</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>TotalNonBilliableQuantity</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Non Billiable Expense</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>TotalQuantity</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Total Expense</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[('id', 'id'), ('Title', 'Title'), ('target_quantity', 'target_quantity')]</all_columns>
<all_editable_columns type="list">[('target_quantity', 'target_quantity')]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('Start_date', 'Date'), ('Default_order_title', 'Projet'), ('target_quantity', 'target_quantity'), ('Title', 'Title')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('target_quantity', 'target_quantity')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>list</list_action>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Project Report Line', 'Project Report Line')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">1</search>
<search_columns></search_columns>
<select type="int">1</select>
<selection_name>project_report_selection</selection_name>
<sort type="list">[]</sort>
<stat_method></stat_method>
<title>listbox</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Hidden</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>View of a project</title>
<row_length>4</row_length>
<name>project_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Id of the project</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Project Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<required type="int">0</required>
<title>Invoiced Client</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<required type="int">0</required>
<title>Real Client</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>dmy</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Start Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_stop_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>dmy</input_order>
<input_style>text</input_style>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Stop Date</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
<field><id>TotalEstimatedTime</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description>The total estimated time spent on the project</description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Estimated Time</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>TotalBilliableTime</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description>The estimated revenue that project brings to the company</description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Revenue of Billiable Time</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>TotalEstimatedBilliableTime</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description>The estimated billiable time that project brings to the company</description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Estimated Billiable Time</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[('id', 'id'), ('Title', 'Title'), ('source_title', 'Colleague'), ('target_quantity', 'Estimated Time'), ('destination_title', 'Location')]</all_columns>
<all_editable_columns type="list">[('target_quantity', 'Estimated Time')]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('Title', 'Task Title'), ('source_title', 'Colleague'), ('target_quantity', 'Estimated Time'), ('quantity_unit', 'Unit'), ('destination_title', 'Location')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('target_quantity', 'Estimated Time')]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>list</list_action>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Project Line', 'Project Line')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">1</search>
<search_columns></search_columns>
<select type="int">1</select>
<selection_name>project_selection</selection_name>
<sort type="list">[]</sort>
<stat_method></stat_method>
<title>listbox</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_target_quantity</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_quantity</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Support Request</title>
<row_length>4</row_length>
<name>support_request_list</name>
<pt>form_list</pt>
<action>doSelect</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[('Description', 'Description')]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('Title', 'Title'), ('sale_state', 'State'), ('Description', 'Description')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[('Title', "''"), ('sale_state', "''"), ('Description', "''")]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<global_attributes type="list">[]</global_attributes>
<height type="int">5</height>
<hidden type="int">0</hidden>
<lines type="int">30</lines>
<list_action>list</list_action>
<list_cookie>PERSON_LIST</list_cookie>
<list_method type="method">portal_catalog</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Support Request', 'Support Request')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<reverse type="int">0</reverse>
<search type="int">1</search>
<search_columns type="list">[]</search_columns>
<select type="int">1</select>
<selection_name>support_request_selection</selection_name>
<sort type="list">[]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Support Request List</title>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Support Request</title>
<row_length>4</row_length>
<name>General</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>Left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>ID</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/id</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">30</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Usual Name</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>here/Title</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Right</title>
<fields>
<field><id>my_client_person_title_list</id> <type>MultiRelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>client</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default type="list">[]</default>
<default_module>person</default_module>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<portal_type type="list">[('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Client persons</title>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<view_separator>&lt;br /&gt;
</view_separator>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
<default>here/getClientPersonTitleList</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>my_client_organisation_title_list</id> <type>MultiRelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>client</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default type="list">[]</default>
<default_module>organisation</default_module>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<required type="int">0</required>
<title>Client organisations</title>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<view_separator>&lt;br /&gt;
</view_separator>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
<default>here/getClientOrganisationTitleList</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>Middle</title>
<fields>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">3</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Comments</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">100</width>
</values>
<tales>
<default>here/Description</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[('id', 'id'), ('portal_type', 'Type'), ('Title', 'Title')]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('portal_type', 'Type'), ('Title', 'Title')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<global_attributes type="list">[]</global_attributes>
<height type="int">5</height>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_cookie>CONTACT_LIST</list_cookie>
<list_method type="method">getFollowUpRelatedValueList</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<reverse type="int">0</reverse>
<search type="int">0</search>
<search_columns></search_columns>
<select type="int">0</select>
<selection_name>contact_list_selection</selection_name>
<sort type="list">[]</sort>
<stat_method></stat_method>
<title>Contacts</title>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<dtml-comment>
title:Registre du personnel
connection_id:MySQL
max_rows:10
max_cache:0
cache_time:1
class_name:ZSQLBrain
class_file:zsqlbrain.py
</dtml-comment>
<params></params>
SELECT *
FROM catalog
WHERE portal_type = 'Assignment'
ORDER BY Date
\ No newline at end of file
## Script (Python) "AccountingTransaction_addPaymentTransaction"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=folder, id
##title=
##
product = container.manage_addProduct[ 'ERP5' ]
product.addAccountingTransaction(id)
my_transaction = folder[id]
my_transaction.newContent(portal_type='Accounting Transaction Line',
source='account/prestation_service',
id='receivable')
my_transaction.newContent(portal_type='Accounting Transaction Line',
source='account/achat_pc_storever',
id='payable')
my_transaction.newContent(portal_type='Accounting Transaction Line',
source='account/banques_etablissements_financiers',
id='bank')
return my_transaction
## Script (Python) "DeliveryLine_asCellRange"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
line_ids = context.order_line_matrix_item_list(base_category_list = ('tax_category', 'coloris', 'variante'), base=1)
column_ids = context.order_line_matrix_item_list(base_category_list = ('salary_range','taille',), base=1)
tab_ids = context.order_line_matrix_item_list(base_category_list = ('salary_range','tax_category', 'taille','coloris','variante'),
base=1, include=0)
line_ids = map(lambda x: x[0], line_ids)
column_ids = map(lambda x: x[0], column_ids)
tab_ids = map(lambda x: x[0], tab_ids)
if len(tab_ids) is 0:
return [line_ids, column_ids]
elif tab_ids[0] is None:
return [line_ids, column_ids]
else:
return [line_ids, column_ids, tab_ids]
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:
class_file:
</dtml-comment>
<params>uid</params>
SELECT
SUM(quantity) AS total_quantity,
SUM(total_price) AS total_price,
SUM(target_quantity) AS target_total_quantity,
SUM(target_total_price) AS target_total_price,
AVG(price) AS average_price
FROM catalog, movement
WHERE
catalog.parent_uid = <dtml-sqlvar uid type="int">
AND
catalog.uid = movement.uid
<dtml-comment>
title:
connection_id:MySQL
max_rows:1000
max_cache:100
cache_time:0
class_name:
class_file:
</dtml-comment>
<params>uid
resource_uid
variation_text</params>
SELECT
SUM(quantity) AS inventory,
SUM(quantity) AS total_quantity,
SUM(total_price) AS total_price,
SUM(target_quantity) AS target_total_quantity,
SUM(target_total_price) AS target_total_price,
AVG(price) AS average_price
FROM movement, catalog
WHERE
movement.delivery_uid = <dtml-sqlvar uid type="int">
<dtml-if resource_uid>AND (<dtml-in resource_uid> movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>)
</dtml-if><dtml-if variation_text>AND movement.variation_text = <dtml-sqlvar variation_text type="string">
</dtml-if>
AND movement.is_accountable = 1
AND catalog.portal_type <> "Container"
AND catalog.portal_type <> "Simulation Movement"
AND catalog.uid = movement.uid
\ No newline at end of file
## Script (Python) "Invoice_addPurchaseInvoice"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=folder, id
##title=
##
product = container.manage_addProduct[ 'ERP5' ]
product.addInvoice(id)
my_transaction = folder[id]
my_transaction.newContent(portal_type='Purchase Invoice Transaction Line',
source='account/dette_fournisseur',
id='expense')
my_transaction.newContent(portal_type='Purchase Invoice Transaction Line',
source='account/achat_pc_storever',
id='payable')
my_transaction.newContent(portal_type='Purchase Invoice Transaction Line',
source='account/tva_collectee_196',
id='collected_vat')
my_transaction.newContent(portal_type='Purchase Invoice Transaction Line',
source='account/tva_recuperable_196',
id='refundable_vat')
return my_transaction
## Script (Python) "Invoice_addSaleInvoice"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=folder, id
##title=
##
product = container.manage_addProduct[ 'ERP5' ]
product.addInvoice(id)
my_transaction = folder[id]
my_transaction.newContent(portal_type='Sale Invoice Transaction Line',
source='account/ventes_composants_storever',
id='income')
my_transaction.newContent(portal_type='Sale Invoice Transaction Line',
source='account/prestation_service',
id='receivable')
my_transaction.newContent(portal_type='Sale Invoice Transaction Line',
source='account/tva_collectee_196',
id='collected_vat')
return my_transaction
<?xml version="1.0"?>
<form>
<title>Sale Invoice Transaction</title>
<row_length>4</row_length>
<name>sale_invoice_list</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_source_section</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<size type="int">1</size>
<title>Vendor</title>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: [['Nexedi', 'organisation/nexedi']]</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<read_only type="int">0</read_only>
<relation_setter_id></relation_setter_id>
<required type="int">0</required>
<title>Customer</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>Invoice Number</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_resource</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:[('','')]+map(lambda x:(x.id,'currency/%s' %x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">1</default_now>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>ymd</input_order>
<input_style>text</input_style>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Invoice Date</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">5</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>simulation_state</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>State</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">0</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Customer Transaction Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('source', 'Account'), ('source_debit', 'Debit'), ('source_credit', 'Credit')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('source_debit', 'Debit'), ('source_credit', 'Credit'), ('source', 'Source')]</editable_columns>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[('resource', 'resource')]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_method type="method">searchInvoiceTransaction</list_method>
<meta_types type="list">[]</meta_types>
<not_viewable type="int">0</not_viewable>
<portal_types type="list">[('Sale Invoice Transaction Line', 'Sale Invoice Transaction Line'), ('Accounting Transaction Line', 'Accounting Transaction Line')]</portal_types>
<read_only type="int">0</read_only>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>purchase_invoice_transaction_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Sale Invoice Transaction Lines</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_destination</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_destination</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineDestinationItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Sale Invoice Transaction</title>
<row_length>4</row_length>
<name>sale_invoice_list</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Identity</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_section</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<size type="int">1</size>
<title>Vendor</title>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: [['Nexedi', 'organisation/nexedi']]</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>Invoice Reference</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<height type="int">3</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>my_source_administration_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_administration</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>person</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Sale Manager</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_start_date</id> <type>DateTimeField</type>
<values>
<allow_empty_time type="int">0</allow_empty_time>
<alternate_name></alternate_name>
<ampm_time_style type="int">0</ampm_time_style>
<css_class></css_class>
<date_only type="int">1</date_only>
<date_separator>/</date_separator>
<default_now type="int">0</default_now>
<description></description>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<hidden type="int">0</hidden>
<input_order>dmy</input_order>
<input_style>text</input_style>
<not_viewable type="int">0</not_viewable>
<read_only type="int">0</read_only>
<required type="int">0</required>
<time_separator>:</time_separator>
<title>Invoice Date</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_datetime">You did not enter a valid date and time.</message>
<message name="datetime_out_of_range">The date and time you entered were out of range.</message>
</messages>
</field>
<field><id>my_price_currency</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Currency</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:[('','')]+map(lambda x:(x.id,'currency/%s' %x.id),here.currency.objectValues())</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>simulation_state</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">0</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<read_only type="int">1</read_only>
<required type="int">0</required>
<title>State</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_causality_id</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>causality</base_category>
<catalog_index>id</catalog_index>
<css_class></css_class>
<default></default>
<default_module>sale_packing_list</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<portal_type type="list">[('Sale Packing List', 'Sale Packing List')]</portal_type>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>Packing List No</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation')]</portal_type>
<required type="int">0</required>
<title>Deliver to</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<not_viewable type="int">0</not_viewable>
<portal_type type="list">[('Organisation', 'Organisation'), ('Person', 'Person')]</portal_type>
<read_only type="int">0</read_only>
<required type="int">0</required>
<title>For the account of</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_value_added_tax_recoverable</id> <type>CheckBoxField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="int">0</default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<title>VAT in use</title>
</values>
<tales>
<default>here/getValueAddedTaxRecoverable</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
<field><id>my_value_added_tax_ratio</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>VAT ratio</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_incoterm</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Incoterm</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_delivery_mode</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>Delivery Mode</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/delivery_mode/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'id'), ('resource_title', 'Resource'), ('quantity', 'Quantity'), ('quantity_unit', 'Unit')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[('quantity', 'quantity')]</editable_columns>
<editable_expression></editable_expression>
<editable_permission type="list">[]</editable_permission>
<editable_role type="list">[]</editable_role>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>folder_contents</list_action>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<not_viewable type="int">0</not_viewable>
<portal_types type="list">[('Invoice Line', 'Invoice Line')]</portal_types>
<read_only type="int">0</read_only>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>sale_invoice_line_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Sale Invoice Transaction Lines</title>
<viewable_expression></viewable_expression>
<viewable_permission type="list">[]</viewable_permission>
<viewable_role type="list">[]</viewable_role>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
<field><id>listbox_title</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Title</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>listbox_source</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_source</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineSourceItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_destination</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>listbox_destination</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python:cell.getObject().getInvoiceTransactionLineDestinationItemList()</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>listbox_source_debit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>listbox_source_credit</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">5</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>listbox_source_debit</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "Invoice_zGetDescription"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
from string import join
description = context.getComment('')
return description
# Try to cut the comment without cutting the words
# pbl: capital letter are larger, and the test on the length of sentence isn't good ...
def recursive_string_cut(b,s):
l = 80
if len(s) < l:
return b+s
else:
c = s[:l].split(' ')
if len(c) < 2:
# I don't think that a word with more than 80 caracters can exist ... and it can crash the memory
return s[:l]
else:
return recursive_string_cut(b+join(c[:-2],' ')+'\n', join(c[-2:],' ')+s[l:] )
# get all the lines
description_lines = description.split('\n')
# cut the too long lines
result_description_lines = map( ( lambda x: recursive_string_cut('',x) ),description_lines)
# recreate a string
result = join(result_description_lines,'\n')
return result
## Script (Python) "Invoice_zGetDueDate"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
packing_list_list = context.getCausalityValueList(portal_type=['Sale Packing List','Sales Packing List'])
if len(packing_list_list) > 0:
packing_list = context.getCausalityValueList(portal_type=['Sale Packing List','Sales Packing List'])[0]
order = packing_list.SalesPackingList_getCausalitySalesOrder()
from DateTime import DateTime
due_date = packing_list.getTargetStopDate( DateTime() )
pat = order.getPaymentAdditionalTerm()
else:
due_date = context.getStartDate()
pat = None
due_date += context.getPaymentTerm(30)
peom = context.getPaymentEndOfMonth()
if peom:
i = 0
month = due_date.month()
while (month == (due_date + i).month()):
i += 1
due_date = (due_date + i - 1)
if pat != None:
due_date += pat
else:
if pat != None:
i = 0
month = due_date.month()
while (month == (due_date + i).month()):
i -= 1
due_date = (due_date + i + pat)
return due_date
## Script (Python) "Invoice_zGetEscompteDescription"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
tmp_list = context.contentValues(filter={'portal_type':'Remise', 'discount_type_title':'Escompte'})
escompte_list = filter(lambda item: item.getDiscountType() == 'Escompte', tmp_list)
if escompte_list != []:
escompte_object = escompte_list[0]
if escompte_object.getDescription() != None:
escompte_description = string.replace(escompte_object.getDescription(),'%','%%')[:45]
elif escompte_object.getDiscountRatio() != None:
escompte_description = '%.2f' % (escompte_object.getDiscountRatio() * 100) + '%% sous 10 jours'
else:
escompte_description = '2%% sous 10 jours'
else:
escompte_description = '2%% sous 10 jours'
return escompte_description
## Script (Python) "Invoice_zGetPaymentTime"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
packing_list = context.getCausalityValueList(portal_type=['Sale Packing List','Sales Packing List'])[0]
#order = packing_list.getCausalityValueList(portal_type=['Sale Order','Sales Order'])[0]
order = packing_list.SalesPackingList_getCausalitySalesOrder()
payment_term = context.getPaymentTerm(30)
payment_end_of_month = context.getPaymentEndOfMonth()
pat = order.getPaymentAdditionalTerm()
result = '%i jours ' % payment_term
if pat == None:
if payment_end_of_month:
result += 'en fin de mois'
else:
result += 'net'
else:
result += 'le %i' % pat
return result
## Script (Python) "Invoice_zGetSourceSectionDescription"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
source_section_title = context.getSourceSectionTitle()
case = {
'Coramy': ('Coramy',
'5 bis, rue Denis Cordonnier - 59820 Gravelines - Tél. : 33(0)3 28 51 91 51 - Fax : 33(0)3 28 23 34 96',
'MAILLOTS DE BAIN - GYM - SWIMSUITS - FITNESS',
'S.A.S. au capital de 435.200 € - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971',
'40'),
'BLS': ('BLS' ,
'5 bis, rue Denis Cordonnier - 59820 Gravelines - Tél. : 33(0)3 28 51 86 26 - Fax : 33(0)3 28 23 34 96',
'LICENSE MAILLOTS DE BAIN DIM FEMME & HOMME',
'S.A.R.L. au capital de 10.000 € - T.V.A. FR 51 442 959 243 - R.C. Dunkerque 442 959 243 - SIRET 442 959 243 00019'
'60'),
'Houvenaegel':('Houvenaegel' ,
'5 bis, rue Denis Cordonnier - 59820 Gravelines - Tél. : 33(0)3 28 51 91 55 - Fax : 33(0)3 28 23 34 96',
'MAILLOTS DE BAIN - GYM - SWIMSUITS - FITNESS',
'S.A.R.L. au capital de 7.622,45 € - T.V.A. FR 07 422 769 810 - R.C. Dunkerque 422 769 810 - SIRET 422 769 810 00025',
'20')
}
return case[ source_section_title ]
<dtml-comment>
title:
connection_id:MySQL
max_rows:100000
max_cache:100
cache_time:0
class_name:ZSQLBrain
class_file:zsqlbrain.py
</dtml-comment>
<params>uid</params>
SELECT sum(movement.quantity) AS total_quantity, sum(movement.total_price) AS total_price from movement
WHERE movement.delivery_uid = <dtml-var uid>
AND movement.has_cell_content = 0
\ No newline at end of file
## Script (Python) "Invoice_zGetTotalNetPrice"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# price = context.getTotalPrice()
price = context.Invoice_zGetTotal()[0].total_price
discount_list_tmp = context.contentValues(filter={'portal_type':'Remise'})
discount_list = filter(lambda x: x not in [None,0] ,discount_list_tmp)
if len(discount_list) > 1:
discount_list.sort(lambda x,y: cmp(x.getIntIndex(),y.getIntIndex()))
for discount_line in discount_list:
if discount_line.getImmediateDiscount():
price *= (1 - discount_line.getDiscountRatio())
return price
## Script (Python) "Invoice_zGetTotalVat"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
price = context.Invoice_zGetTotalNetPrice()
if context.getValueAddedTaxRecoverable():
vat_ratio = context.getValueAddedTaxRatio()
if vat_ratio != None:
price *= vat_ratio
else:
price = 0
else:
price = 0
return price
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
<title tal:content="here/getTitle">Nexedi</title>
</head>
<body bgcolor="#ffffff"
tal:define="from_organisation python:here.restrictedTraverse('/nexedi/organisation/nexedi');
client_invoice python:here.getDefaultValue('destination',spec=['Organisation', 'Person']);
client_delivery python:here.getDefaultValue('destination',spec=['Organisation', 'Person']);
order_line_list python:here.contentValues(filter={'portal_type':'Sale Order Line'});
total_price python:here.getDefaultTotalPrice()">
<table width=100%>
<tr>
<td colspan=3><img src="logo.png"></td>
</tr>
<tr>
<td align=left tal:content="python: from_organisation.getCorporateName()" colspan="2" />
<td align=right tal:content="python: 'Shipping Date: %s' % here.getStartDate()"/>
</tr>
<tr>
<td align=left tal:content="python: 'Tel: %s' % from_organisation.getDefaultTelephone().asText()" colspan="2"/>
<td align=right tal:content="python: 'Delivery Date: %s' % here.getStopDate()"/>
</tr>
<tr>
<td tal:content="python: from_organisation.getDefaultAddress().getStreetAddress()" colspan="2"/>
<td align=right tal:content="python: 'Proforma No: ERP5/%s' % here.getId()"/>
</tr>
<tr>
<td tal:content="python: '%s %s' %
(from_organisation.getDefaultAddress().getZipCode(),
from_organisation.getDefaultAddress().getCity())" colspan="3"/>
</tr>
<tr>
<td tal:content="python: from_organisation.getDefaultAddress().getRegionTitle()" colspan="3"/>
</tr>
<tr>
<th colspan=3>
<h2>PROFORMA</h2>
</th>
</tr>
</table>
<br/>
<table width=100%>
<tr bgcolor=000000>
<th align=left><font color=ffffff>PROFORMA ADDRESS</font></th>
<th align=left><font color=ffffff>DELIVERY ADDRESS</font></th>
</tr>
<tr>
<td align=left tal:content="client_invoice/getCorporateName | client_invoice/getTitle"/>
<td align=left tal:content="client_delivery/getCorporateName | client_delivery/getTitle"/>
</tr>
<tr>
<td align=left tal:content="python: client_invoice.getDefaultAddress().getStreetAddress()" tal:on-error="nothing"/>
<td align=left tal:content="python: client_delivery.getDefaultAddress().getStreetAddress()" tal:on-error="nothing"/>
</tr>
<tr>
<td align=left>
<tal:block tal:replace="python: client_invoice.getDefaultAddress().getZipCode()" tal:on-error="nothing"/>
<tal:block tal:replace="python: client_invoice.getDefaultAddress().getCity()" tal:on-error="nothing"/>
</td>
<td align=left>
<tal:block tal:replace="python: client_delivery.getDefaultAddress().getZipCode()" tal:on-error="nothing"/>
<tal:block tal:replace="python: client_delivery.getDefaultAddress().getCity()" tal:on-error="nothing"/>
</td>
</tr>
<tr>
<td align=left tal:content="python: client_invoice.getDefaultAddress().getRegionTitle()" tal:on-error="nothing"/>
<td align=left tal:content="python: client_delivery.getDefaultAddress().getRegionTitle()" tal:on-error="nothing"/>
</tr>
</table>
<br/>
<table width=100%>
<tr bgcolor=000000>
<th align=left nowrap><font color=ffffff>Number</font></th>
<th align=left nowrap><font color=ffffff>Description</font></th>
<th nowrap><font color=ffffff>Quantity</th>
<th nowrap><font color=ffffff>Unit</font></th>
<th nowrap><font color=ffffff>Unit Price</font></th>
<th nowrap><font color=ffffff>Total Price</font></th>
</tr>
<tal:block tal:repeat="line order_line_list">
<tr valign=top tal:condition="python:line.getQuantity()>0">
<td align=left tal:content="python:line.getId()"></td>
<!-- <td> </td> -->
<td tal:content="python: line.getResourceTitle()"></td>
<td align=right tal:content="python: '%.0f' % line.getQuantity()"></td>
<td align=right tal:content="python: line.getQuantityUnit()"></td>
<td align=right tal:content="python: '%.02f' % line.getPrice()"></td>
<td align=right tal:content="python: '%.02f' % line.getTotalPrice()"></td>
</tr>
</tal:block>
<tr>
<td colspan=6><hr noshade></td>
</tr>
<tr>
<th colspan=4 align=right>Total
(<span tal:replace="here/income/getResourceId | nothing"/>)</th>
<td colspan=2 align=right tal:content="python: '%.02f' % round(here.Invoice_zGetTotal()[0].total_price, 2)" tal:on-error="nothing"></td>
</tr>
<tr>
<td colspan=1 align=left tal:content="python:here.getDescription()"></td>
<th colspan=3 align=right>VAT <tal:block tal:replace="python: ( 0.0) * 100.0"/> % (<span tal:replace="here/income/getResourceId | nothing"/>)</th>
<td colspan=2 align=right tal:content="python: '%.02f' % round(here.Invoice_zGetTotalVat(), 2)" tal:on-error="nothing"></td>
</tr>
<tr>
<td colspan=3>&nbsp;</td>
<td colspan=3><hr noshade></td>
</tr>
<tr>
<td colspan=3></td>
<th colspan=1 align=right nowrap>Amount Paid
(<span tal:replace="here/income/getResourceId | nothing"/>)</th>
<th colspan=2 align=right tal:content="python: '%.02f' % (round(here.Invoice_zGetTotalVat(), 2) + round(here.Invoice_zGetTotalNetPrice(), 2))" tal:on-error="nothing"></th>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
<table width="100%">
<tr>
<td><center><h6>RCS Roubaix Tourcoing 440 047 504<br>
Banque:&nbsp;30027&nbsp;Guichet:&nbsp;00039&nbsp;Compte:&nbsp;00000013323&nbsp;RIB:&nbsp;36<br>IBAN: FR76 3002 7175 3900 0410 2760 135<br>
VAT FR72440047504</h6></center></td>
</tr>
</table>
</body>
</html>
<?xml version="1.0"?>
<form>
<title>Remise</title>
<row_length>4</row_length>
<name>remise_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Discount</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<external_validator></external_validator>
<extra></extra>
<height type="int">3</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>my_int_index</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">1</required>
<start></start>
<title>Order No</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_discount_type</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">1</required>
<size type="int">1</size>
<title>Discount Type</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/discount_type/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_immediate_discount</id> <type>CheckBoxField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="int">0</default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<title>Discount deduced on invoice</title>
</values>
<tales>
<default>here/getImmediateDiscount</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
<field><id>my_discount_ratio</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Discount Ratio</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_discount</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Total</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
## Script (Python) "getAccountingTransactionDestinationPaymentItemList"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
def sort(a, b):
return cmp(a[0], b[0])
item_list = [['', '']]
organisation = context.getDestinationSectionValue()
if organisation is not None:
bank_account_list = organisation.contentValues(filter={'portal_type': 'Bank Account'})
for bank_account in bank_account_list:
url = bank_account.getRelativeUrl()
label = bank_account.getIban()
item_list.append([label, url])
item_list.sort(sort)
return item_list
## Script (Python) "getAccountingTransactionSourcePaymentItemList"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
def sort(a, b):
return cmp(a[0], b[0])
item_list = [['', '']]
organisation = context.getSourceSectionValue()
if organisation is not None:
bank_account_list = organisation.contentValues(filter={'portal_type': 'Bank Account'})
for bank_account in bank_account_list:
url = bank_account.getRelativeUrl()
label = bank_account.getIban()
item_list.append([label, url])
item_list.sort(sort)
return item_list
## Script (Python) "getBalanceTransactionLineSourcePaymentItemList"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
def sort(a, b):
return cmp(a[0], b[0])
item_list = [['', '']]
organisation = context.aq_parent.getSourceSectionValue()
if organisation is not None:
bank_account_list = organisation.contentValues(filter={'portal_type': 'Bank Account'})
for bank_account in bank_account_list:
url = bank_account.getRelativeUrl()
label = bank_account.getIban()
item_list.append([label, url])
item_list.sort(sort)
return item_list
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
<title tal:content="here/getTitle">Nexedi</title>
</head>
<body bgcolor="#ffffff"
tal:define="packing_list python:here.getDefaultValue('causality',spec=['Sale Packing List']);
invoice_line_list python:here.contentValues(filter={'portal_type':'Invoice Line'});
from_organisation python:here.restrictedTraverse('/nexedi/organisation/nexedi');
client_invoice python:here.getDefaultValue('destination_section',spec=['Organisation', 'Person']);
client_delivery python:here.getDefaultValue('destination_section',spec=['Organisation', 'Person']);
total_price python:here.getDefaultTotalPrice()">
<table width=100%>
<tr>
<td colspan=3><img src="logo.png"></td>
</tr>
<tr>
<td align=left tal:content="python: from_organisation.getCorporateName()" colspan="2" />
<td align=right tal:content="python: 'Invoice Date: %s' % here.getStartDate()"/>
</tr>
<tr>
<td align=left tal:content="python: 'Tel: %s' % from_organisation.getDefaultTelephone().asText()" colspan="2"/>
<td align=right tal:content="python: 'Pay Before: %s' % here.Invoice_zGetDueDate()"/>
</tr>
<tr>
<td tal:content="python: from_organisation.getDefaultAddress().getStreetAddress()" colspan="2"/>
<td align=right tal:content="python: 'Invoice No: ERP5/%s' % here.getId()"/>
</tr>
<tr>
<td tal:content="python: '%s %s' %
(from_organisation.getDefaultAddress().getZipCode(),
from_organisation.getDefaultAddress().getCity())" colspan="3"/>
</tr>
<tr>
<td tal:content="python: from_organisation.getDefaultAddress().getRegionTitle()" colspan="3"/>
</tr>
<tr>
<th colspan=3>
<h2>INVOICE</h2>
</th>
</tr>
</table>
<br/>
<table width=100%>
<tr bgcolor=000000>
<th align=left><font color=ffffff>INVOICE ADDRESS</font></th>
<th align=left><font color=ffffff>DELIVERY ADDRESS</font></th>
</tr>
<tr>
<td align=left tal:content="client_invoice/getCorporateName | client_invoice/getTitle"/>
<td align=left tal:content="client_delivery/getCorporateName | client_delivery/getTitle"/>
</tr>
<tr>
<td align=left tal:content="python: client_invoice.getDefaultAddress().getStreetAddress()" tal:on-error="nothing"/>
<td align=left tal:content="python: client_delivery.getDefaultAddress().getStreetAddress()" tal:on-error="nothing"/>
</tr>
<tr>
<td align=left>
<tal:block tal:replace="python: client_invoice.getDefaultAddress().getZipCode()" tal:on-error="nothing"/>
<tal:block tal:replace="python: client_invoice.getDefaultAddress().getCity()" tal:on-error="nothing"/>
</td>
<td align=left>
<tal:block tal:replace="python: client_delivery.getDefaultAddress().getZipCode()" tal:on-error="nothing"/>
<tal:block tal:replace="python: client_delivery.getDefaultAddress().getCity()" tal:on-error="nothing"/>
</td>
</tr>
<tr>
<td align=left tal:content="python: client_invoice.getDefaultAddress().getRegionTitle()" tal:on-error="nothing"/>
<td align=left tal:content="python: client_delivery.getDefaultAddress().getRegionTitle()" tal:on-error="nothing"/>
</tr>
</table>
<br/>
<table width=100%>
<tr bgcolor=000000>
<th align=left nowrap><font color=ffffff>Number</font></th>
<th align=left nowrap><font color=ffffff>Description</font></th>
<th nowrap><font color=ffffff>Quantity</th>
<th nowrap><font color=ffffff>Unit</font></th>
<th nowrap><font color=ffffff>Unit Price</font></th>
<th nowrap><font color=ffffff>Total Price</font></th>
</tr>
<tal:block tal:condition="python: packing_list is not None">
<span tal:define="ordered_line_list python:packing_list.contentValues(filter={'portal_type':'Delivery Line'})"
tal:repeat="line ordered_line_list">
<tr valign=top tal:condition="python:line.getQuantity()>0">
<td align=left tal:content="python:line.getId()"></td>
<!-- <td> </td> -->
<td tal:content="python: line.getResourceTitle()"></td>
<td align=right tal:content="python: '%.0f' % line.getQuantity()"></td>
<td>n/a</td>
<td align=right tal:content="python: '%.02f' % line.getPrice()"></td>
<td align=right tal:content="python: '%.02f' % line.getTotalPrice()"></td>
</tr>
</span>
</tal:block>
<tal:block tal:condition="python: invoice_line_list is not None">
<tal:block tal:repeat="line invoice_line_list">
<tr valign=top tal:condition="python:line.getQuantity() not in (0.0, -0.0, 0)">
<td align=left tal:content="python:line.getId()"></td>
<!-- <td> </td> -->
<td tal:content="python: line.getResourceTitle()"></td>
<td align=right tal:content="python: '%.0f' % line.getQuantity()"></td>
<td align=right tal:content="python: line.getQuantityUnitTitle()">n/a</td>
<td align=right tal:content="python: '%.02f' % line.getPrice()"></td>
<td align=right tal:content="python: '%.02f' % line.getTotalPrice()"></td>
</tr>
</tal:block>
</tal:block>
<tr>
<td colspan=6><hr noshade></td>
</tr>
<tr>
<th colspan=4 align=right>Total
(<span tal:replace="here/income/getResourceId | nothing"/>)</th>
<td colspan=2 align=right tal:content="python: '%.02f' % round(here.getTotalPrice(), 2)" tal:on-error="nothing"></td>
</tr>
<tr>
<td colspan=1 align=left tal:content="python:here.getDescription()"></td>
<th colspan=3 align=right>VAT <tal:block tal:replace="python: (here.getValueAddedTaxRatio() or 0.0) * 100.0"/> % (<span tal:replace="here/income/getResourceId | nothing"/>)</th>
<td colspan=2 align=right tal:content="python: '%.02f' % round(here.Invoice_zGetTotalVat(), 2)" tal:on-error="nothing"></td>
</tr>
<tr>
<td colspan=3>&nbsp;</td>
<td colspan=3><hr noshade></td>
</tr>
<tr>
<td colspan=3>A rgler dans <b tal:content="python: here.getPaymentTerm(30)">0</b> jours au plus tard.
<br><font size="-3">Conditions de rglement: par chue, 0 jours date de la facture. Paiement accept en euros.
Tout retard de rglement donnera lieu une pnalit de 1,5% du montant d par mois.
Rserve de proprit nous conservons la pleine proprit des marchandises jusqu'au paiement intgral du prix, des taxes et accessoires.</font></td>
<th colspan=1 align=right nowrap>Amount Paid
(<span tal:replace="here/income/getResourceId | nothing"/>)</th>
<th colspan=2 align=right tal:content="python: '%.02f' % (round(here.Invoice_zGetTotalVat(), 2) + round(here.Invoice_zGetTotalNetPrice(), 2))" tal:on-error="nothing"></th>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
<table width="100%">
<tr>
<td><center><h6>RCS Roubaix Tourcoing 440 047 504<br>
Banque:&nbsp;30027&nbsp;Guichet:&nbsp;00039&nbsp;Compte:&nbsp;00000013323&nbsp;RIB:&nbsp;36<br>IBAN: FR76 3002 7175 3900 0410 2760 135<br>
VAT FR72440047504</h6></center></td>
</tr>
</table>
</body>
</html>
## Script (Python) "order_line_matrix_item_list"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=base_category_list=[], base=1, include=1
##title=
##
clist = []
variation_category_list=[]
if include == 1 :
for category in context.getVariationBaseCategoryList():
if category in base_category_list :
variation_category_list.append(category)
else :
for category in context.getVariationBaseCategoryList():
if not category in base_category_list :
variation_category_list.append(category)
for base_category in variation_category_list :
if base_category in ('coloris','morphologie','variante'):
title_list = map(lambda x:('/'.join(x.getPhysicalPath()[len(x.portal_categories.getPhysicalPath()):])),
context.getValueList(base_category))
value_list = context.getCategoryMembershipList(base_category, base=base)
for index in range(len(title_list)) :
clist += [(value_list[index],title_list[index])]
else :
title_list = context.getCategoryMembershipList(base_category, base=0)
value_list = context.getCategoryMembershipList(base_category, base=base)
for index in range(len(title_list)) :
clist += [(value_list[index],title_list[index])]
if len(clist)==0 :
clist.append((None,None))
return clist
<?xml version="1.0"?>
<form>
<title>Condition de paiement</title>
<row_length>4</row_length>
<name>condition_paiement_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_id</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">1</required>
<title>Payment</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_description</id> <type>TextAreaField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<external_validator></external_validator>
<extra></extra>
<height type="int">3</height>
<hidden type="int">0</hidden>
<max_length></max_length>
<max_linelength></max_linelength>
<max_lines></max_lines>
<required type="int">0</required>
<title>Description</title>
<width type="int">40</width>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_many_lines">You entered too many lines.</message>
<message name="line_too_long">A line was too long.</message>
<message name="too_long">You entered too many characters.</message>
</messages>
</field>
<field><id>my_payment_ratio</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Percentage of total</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
<field><id>my_payment_amount</id> <type>FloatField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<title>Total</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_float">You did not enter a floating point number.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_payment_mode</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">1</required>
<size type="int">1</size>
<title>Payment Mode</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/payment_mode/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_payment_term</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">1</required>
<start></start>
<title>Payment Delay (days)</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
<field><id>my_payment_end_of_month</id> <type>CheckBoxField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="int">0</default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<title>Payment at the end of month</title>
</values>
<tales>
<default>here/getPaymentEndOfMonth</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
<field><id>my_payment_additional_term</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<start></start>
<title>Supplemental Delay (days)</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
<field><id>my_trade_date</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">1</required>
<size type="int">1</size>
<title>Reference Date</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/trade_date/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Discounts</title>
<row_length>4</row_length>
<name>trade_condition_profile_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[('id', 'Discount'), ('description', 'Description'), ('getDiscountRatio', 'Ratio')]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'Discount'), ('description', 'Description'), ('getDiscountRatio', 'Ratio')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[('id', "''"), ('description', "''")]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>list</list_action>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Discount', 'Discount')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>discount_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Discounts</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Payment</title>
<row_length>4</row_length>
<name>trade_condition_payment_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_payment_mode</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">1</required>
<size type="int">1</size>
<title>Payment Mode</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/payment_mode/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_payment_term</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">1</required>
<start></start>
<title>Payment Delay (days)</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
<field><id>my_payment_end_of_month</id> <type>CheckBoxField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default type="int">0</default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<title>Payment at the end of month</title>
</values>
<tales>
<default>here/getPaymentEndOfMonth</default>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
<field><id>my_payment_additional_term</id> <type>IntegerField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">10</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<end></end>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<required type="int">0</required>
<start></start>
<title>Supplemental Delay (days)</title>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="not_integer">You did not enter an integer.</message>
<message name="integer_out_of_range">The integer you entered was out of range.</message>
</messages>
</field>
<field><id>my_trade_date</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">1</required>
<size type="int">1</size>
<title>Reference Date</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>here/portal_categories/trade_date/getFormItemList</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
</fields>
</group>
<group>
<title>center</title>
<fields>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
<field><id>listbox</id> <type>ListBox</type>
<values>
<all_columns type="list">[('id', 'Payment'), ('description', 'Description')]</all_columns>
<all_editable_columns type="list">[]</all_editable_columns>
<alternate_name></alternate_name>
<columns type="list">[('id', 'Payment'), ('description', 'Description')]</columns>
<css_class></css_class>
<default></default>
<default_params type="list">[('id', "''"), ('description', "''")]</default_params>
<description></description>
<domain_root_list type="list">[]</domain_root_list>
<domain_tree type="int">0</domain_tree>
<editable type="int">1</editable>
<editable_columns type="list">[]</editable_columns>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<global_attributes type="list">[]</global_attributes>
<hidden type="int">0</hidden>
<lines type="int">10</lines>
<list_action>list</list_action>
<list_method type="method">searchFolder</list_method>
<meta_types type="list">[]</meta_types>
<portal_types type="list">[('Payment Condition', 'Payment Condition')]</portal_types>
<report_root_list type="list">[]</report_root_list>
<report_tree type="int">0</report_tree>
<search type="int">0</search>
<search_columns type="list">[]</search_columns>
<select type="int">0</select>
<selection_name>payment_condition_selection</selection_name>
<sort type="list">[('id', 'id')]</sort>
<sort_columns type="list">[]</sort_columns>
<stat_method></stat_method>
<title>Supplemental Payments</title>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
<?xml version="1.0"?>
<form>
<title>Profile of Trade</title>
<row_length>4</row_length>
<name>trade_condition_profile_view</name>
<pt>form_view</pt>
<action>base_edit</action>
<update_action></update_action>
<method>POST</method>
<enctype></enctype>
<encoding>UTF-8</encoding>
<stored_encoding>ISO-8859-1</stored_encoding>
<unicode_mode>false</unicode_mode>
<groups>
<group>
<title>left</title>
<fields>
<field><id>my_source_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Delivered by</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_section</id> <type>ListField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<extra_item></extra_item>
<first_item type="int">0</first_item>
<hidden type="int">0</hidden>
<items type="list">[]</items>
<required type="int">0</required>
<size type="int">1</size>
<title>For the account of</title>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
<items>python: [['Nexedi', 'organisation/nexedi']]</items>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="unknown_selection">You selected an item that was not in the list.</message>
</messages>
</field>
<field><id>my_source_decision_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_decision</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Ordered for</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_administration_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_administration</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Managed by</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_source_payment_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>source_payment</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Paid for</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>right</title>
<fields>
<field><id>my_destination_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Deliver to</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_section_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_section</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>For the account of</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_decision_organisation_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_decision</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type>
<required type="int">0</required>
<title>Ordered by</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_administration_organisation_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_administration</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type>
<required type="int">0</required>
<title>Invoice for</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
<field><id>my_destination_payment_title</id> <type>RelationStringField</type>
<values>
<alternate_name></alternate_name>
<base_category>destination_payment</base_category>
<catalog_index>Title</catalog_index>
<css_class></css_class>
<default></default>
<default_module>organisation</default_module>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<jump_method>base_jump_relation</jump_method>
<max_length></max_length>
<portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type>
<required type="int">0</required>
<title>Paid by</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<update_method>base_update_relation</update_method>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>center</title>
<fields>
<field><id>my_source_decision_destination_reference</id> <type>StringField</type>
<values>
<alternate_name></alternate_name>
<css_class></css_class>
<default></default>
<description></description>
<display_maxwidth></display_maxwidth>
<display_width type="int">20</display_width>
<editable type="int">1</editable>
<enabled type="int">1</enabled>
<external_validator></external_validator>
<extra></extra>
<hidden type="int">0</hidden>
<max_length></max_length>
<required type="int">0</required>
<title>Provider Code</title>
<truncate type="int">0</truncate>
<unicode type="int">0</unicode>
<whitespace_preserve type="int">0</whitespace_preserve>
</values>
<tales>
</tales>
<messages>
<message name="external_validator_failed">The input failed the external validator.</message>
<message name="required_not_found">Input is required but no input given.</message>
<message name="too_long">Too much input was given.</message>
</messages>
</field>
</fields>
</group>
<group>
<title>bottom</title>
<fields>
</fields>
</group>
<group>
<title>hidden</title>
<fields>
</fields>
</group>
</groups>
</form>
\ No newline at end of file
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