From a454122e2be1fe521a61bc81bf603c479a13985d Mon Sep 17 00:00:00 2001
From: Jean-Paul Smets <jp@nexedi.com>
Date: Mon, 12 Jul 2004 15:55:18 +0000
Subject: [PATCH] initial check in

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@1166 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../ERP5/Extensions/CheckAllPermissions.py    |  24 +
 .../Account_countAccountingTransactions.py    |  25 +
 .../Account_getTotalSourceCredit.py           |  24 +
 .../Account_getTotalSourceDebit.py            |  24 +
 .../erp5_accounting/Account_list_ui.form      |  29 +
 .../skins/erp5_accounting/Account_search.py   |  15 +
 .../skins/erp5_accounting/Account_stat.py     |  12 +
 .../Account_viewTransactionList.form          |  89 +++
 .../BalanceTransactionLine_view.form          | 213 ++++++
 .../BalanceTransaction_view.form              | 422 ++++++++++
 .../PaySheetLine_quantityView.form            | 389 ++++++++++
 .../erp5_accounting/PaySheetLine_view.form    | 367 +++++++++
 .../PaySheetLinesPrintFormat.py               |  61 ++
 .../PaySheetTransactionLine_generate.py       | 175 +++++
 .../PaySheetTransactionLine_view.form         | 283 +++++++
 .../PaySheetTransaction_calcul_OLD.py         | 538 +++++++++++++
 .../PaySheetTransaction_checkParameters.py    |  38 +
 .../PaySheetTransaction_getDetails.py         | 139 ++++
 .../PaySheetTransaction_getDetails_BACKUP.py  | 118 +++
 ...ySheetTransaction_getFormattedLines_OLD.py |  57 ++
 .../PaySheetTransaction_getPreavis.py         |  48 ++
 .../PaySheetTransaction_initializePreview.py  |  98 +++
 .../PaySheetTransaction_pdf_template.pt       | 163 ++++
 .../PaySheetTransaction_postCalculation.py    | 156 ++++
 .../PaySheetTransaction_preCalculation.py     | 356 +++++++++
 .../PaySheetTransaction_previewForm.form      | 218 ++++++
 .../PaySheetTransaction_print.pt              | 233 ++++++
 .../PaySheetTransaction_print_old.pt          | 233 ++++++
 .../PaySheetTransaction_view.form             | 351 +++++++++
 .../PaySheet_getReportLines.py                |  45 ++
 .../PaySheet_printAnnualReport.pt             |  49 ++
 .../PaySheet_totalDestinationList.form        |  80 ++
 .../PaySheet_zGetDetailedTotal.zsql           |  29 +
 .../PaySheet_zGetTotalDestinationList.zsql    |  25 +
 .../PaymentTransaction_detail.form            | 570 ++++++++++++++
 .../PaymentTransaction_view.form              | 607 +++++++++++++++
 .../Resource_zGetInventory.zsql               |  76 ++
 .../account_template_view.form                |  82 ++
 .../erp5_accounting/accounting_report.form    |  99 +++
 .../accounting_transaction_detail.form        | 562 ++++++++++++++
 .../skins/erp5_accounting/calculPaySheet.py   | 514 +++++++++++++
 .../calculPaySheetTransaction.py              | 514 +++++++++++++
 ...opy_of_PaySheetTransaction_pdf_template.pt |   8 +
 .../copy_of_Resource_zGetInventory.zsql       |  39 +
 .../erp5_accounting/getAccountPcgItemList.py  |  18 +
 .../erp5_accounting/pay_sheet_line_view.form  |  13 +
 .../skins/erp5_accounting/pay_sheet_list.form |  13 +
 .../skins/erp5_accounting/pay_sheet_print.pt  | 114 +++
 .../skins/erp5_accounting/pay_sheet_view.form |  13 +
 .../purchase_invoice_transaction_detail.form  | 569 ++++++++++++++
 .../sale_invoice_transaction_detail.form      | 472 ++++++++++++
 .../searchInvoiceTransaction.py               |  33 +
 .../sql_stock_account_date.zsql               |  26 +
 .../sql_stock_account_date_stat.zsql          |  27 +
 .../sql_stock_account_parent.zsql             |  25 +
 .../erp5_accounting/sql_stock_count.zsql      |  16 +
 .../erp5_accounting/sql_stock_search.zsql     |  17 +
 .../transaction_line_list.form                |  62 ++
 .../erp5_accounting/transaction_list_ui.form  |  85 +++
 .../ERP5/skins/erp5_crm/Assignment_view.form  | 244 ++++++
 .../skins/erp5_crm/Career_shiftDefault.py     |  45 ++
 product/ERP5/skins/erp5_crm/Career_view.form  | 396 ++++++++++
 .../erp5_crm/event_2_sale_opportunity.py      |  31 +
 .../skins/erp5_crm/event_2_support_request.py |  31 +
 .../erp5_crm/person_assignment_view.form      | 138 ++++
 .../skins/erp5_crm/person_career_log_print.pt |  43 ++
 .../skins/erp5_crm/person_career_view.form    | 464 +++++++++++
 .../skins/erp5_crm/person_viewDetails.form    | 282 +++++++
 .../skins/erp5_crm/project_line_view.form     | 326 ++++++++
 product/ERP5/skins/erp5_crm/project_list.form |  81 ++
 .../erp5_crm/project_report_line_view.form    | 394 ++++++++++
 .../skins/erp5_crm/project_report_list.form   |  81 ++
 .../skins/erp5_crm/project_report_view.form   | 353 +++++++++
 product/ERP5/skins/erp5_crm/project_view.form | 377 +++++++++
 .../skins/erp5_crm/support_request_list.form  |  86 +++
 .../skins/erp5_crm/support_request_view.form  | 255 +++++++
 .../skins/erp5_crm/z_person_career_log.zsql   |  14 +
 ...untingTransaction_addPaymentTransaction.py |  25 +
 .../erp5_trade/DeliveryLine_asCellRange.py    |  25 +
 .../erp5_trade/DeliveryLine_zGetTotal.zsql    |  21 +
 .../skins/erp5_trade/Delivery_zGetTotal.zsql  |  29 +
 .../erp5_trade/Invoice_addPurchaseInvoice.py  |  28 +
 .../erp5_trade/Invoice_addSaleInvoice.py      |  25 +
 .../Invoice_viewAccountingLineList.form       | 565 ++++++++++++++
 .../Invoice_viewInvoiceLineList.form          | 721 ++++++++++++++++++
 .../erp5_trade/Invoice_zGetDescription.py     |  39 +
 .../skins/erp5_trade/Invoice_zGetDueDate.py   |  43 ++
 .../Invoice_zGetEscompteDescription.py        |  25 +
 .../erp5_trade/Invoice_zGetPaymentTime.py     |  31 +
 .../Invoice_zGetSourceSectionDescription.py   |  31 +
 .../skins/erp5_trade/Invoice_zGetTotal.zsql   |  13 +
 .../erp5_trade/Invoice_zGetTotalNetPrice.py   |  23 +
 .../skins/erp5_trade/Invoice_zGetTotalVat.py  |  21 +
 .../ERP5/skins/erp5_trade/SaleOrder_print.pt  | 148 ++++
 .../ERP5/skins/erp5_trade/discount_view.form  | 229 ++++++
 ...ngTransactionDestinationPaymentItemList.py |  24 +
 ...ountingTransactionSourcePaymentItemList.py |  24 +
 ...nceTransactionLineSourcePaymentItemList.py |  24 +
 .../erp5_trade/invoice_transaction_print.pt   | 169 ++++
 .../erp5_trade/order_line_matrix_item_list.py |  38 +
 .../erp5_trade/payment_condition_view.form    | 286 +++++++
 .../trade_condition_discount_view.form        |  87 +++
 .../trade_condition_payment_view.form         | 221 ++++++
 .../trade_condition_profile_view.form         | 410 ++++++++++
 104 files changed, 16666 insertions(+)
 create mode 100755 product/ERP5/Extensions/CheckAllPermissions.py
 create mode 100755 product/ERP5/skins/erp5_accounting/Account_countAccountingTransactions.py
 create mode 100755 product/ERP5/skins/erp5_accounting/Account_getTotalSourceCredit.py
 create mode 100755 product/ERP5/skins/erp5_accounting/Account_getTotalSourceDebit.py
 create mode 100755 product/ERP5/skins/erp5_accounting/Account_list_ui.form
 create mode 100755 product/ERP5/skins/erp5_accounting/Account_search.py
 create mode 100755 product/ERP5/skins/erp5_accounting/Account_stat.py
 create mode 100755 product/ERP5/skins/erp5_accounting/Account_viewTransactionList.form
 create mode 100755 product/ERP5/skins/erp5_accounting/BalanceTransactionLine_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/BalanceTransaction_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetLine_quantityView.form
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetLine_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetLinesPrintFormat.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransactionLine_generate.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransactionLine_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_calcul_OLD.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_checkParameters.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_getDetails.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_getDetails_BACKUP.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_getFormattedLines_OLD.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_getPreavis.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_initializePreview.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_pdf_template.pt
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_postCalculation.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_preCalculation.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_previewForm.form
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_print.pt
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_print_old.pt
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheetTransaction_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheet_getReportLines.py
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheet_printAnnualReport.pt
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheet_totalDestinationList.form
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheet_zGetDetailedTotal.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/PaySheet_zGetTotalDestinationList.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/PaymentTransaction_detail.form
 create mode 100755 product/ERP5/skins/erp5_accounting/PaymentTransaction_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/Resource_zGetInventory.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/account_template_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/accounting_report.form
 create mode 100755 product/ERP5/skins/erp5_accounting/accounting_transaction_detail.form
 create mode 100755 product/ERP5/skins/erp5_accounting/calculPaySheet.py
 create mode 100755 product/ERP5/skins/erp5_accounting/calculPaySheetTransaction.py
 create mode 100755 product/ERP5/skins/erp5_accounting/copy_of_PaySheetTransaction_pdf_template.pt
 create mode 100755 product/ERP5/skins/erp5_accounting/copy_of_Resource_zGetInventory.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/getAccountPcgItemList.py
 create mode 100755 product/ERP5/skins/erp5_accounting/pay_sheet_line_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/pay_sheet_list.form
 create mode 100755 product/ERP5/skins/erp5_accounting/pay_sheet_print.pt
 create mode 100755 product/ERP5/skins/erp5_accounting/pay_sheet_view.form
 create mode 100755 product/ERP5/skins/erp5_accounting/purchase_invoice_transaction_detail.form
 create mode 100755 product/ERP5/skins/erp5_accounting/sale_invoice_transaction_detail.form
 create mode 100755 product/ERP5/skins/erp5_accounting/searchInvoiceTransaction.py
 create mode 100755 product/ERP5/skins/erp5_accounting/sql_stock_account_date.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/sql_stock_account_date_stat.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/sql_stock_account_parent.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/sql_stock_count.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/sql_stock_search.zsql
 create mode 100755 product/ERP5/skins/erp5_accounting/transaction_line_list.form
 create mode 100755 product/ERP5/skins/erp5_accounting/transaction_list_ui.form
 create mode 100755 product/ERP5/skins/erp5_crm/Assignment_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/Career_shiftDefault.py
 create mode 100755 product/ERP5/skins/erp5_crm/Career_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/event_2_sale_opportunity.py
 create mode 100755 product/ERP5/skins/erp5_crm/event_2_support_request.py
 create mode 100755 product/ERP5/skins/erp5_crm/person_assignment_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/person_career_log_print.pt
 create mode 100755 product/ERP5/skins/erp5_crm/person_career_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/person_viewDetails.form
 create mode 100755 product/ERP5/skins/erp5_crm/project_line_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/project_list.form
 create mode 100755 product/ERP5/skins/erp5_crm/project_report_line_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/project_report_list.form
 create mode 100755 product/ERP5/skins/erp5_crm/project_report_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/project_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/support_request_list.form
 create mode 100755 product/ERP5/skins/erp5_crm/support_request_view.form
 create mode 100755 product/ERP5/skins/erp5_crm/z_person_career_log.zsql
 create mode 100755 product/ERP5/skins/erp5_trade/AccountingTransaction_addPaymentTransaction.py
 create mode 100755 product/ERP5/skins/erp5_trade/DeliveryLine_asCellRange.py
 create mode 100755 product/ERP5/skins/erp5_trade/DeliveryLine_zGetTotal.zsql
 create mode 100755 product/ERP5/skins/erp5_trade/Delivery_zGetTotal.zsql
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_addPurchaseInvoice.py
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_addSaleInvoice.py
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_viewAccountingLineList.form
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_viewInvoiceLineList.form
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_zGetDescription.py
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_zGetDueDate.py
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_zGetEscompteDescription.py
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_zGetPaymentTime.py
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_zGetSourceSectionDescription.py
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_zGetTotal.zsql
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_zGetTotalNetPrice.py
 create mode 100755 product/ERP5/skins/erp5_trade/Invoice_zGetTotalVat.py
 create mode 100755 product/ERP5/skins/erp5_trade/SaleOrder_print.pt
 create mode 100755 product/ERP5/skins/erp5_trade/discount_view.form
 create mode 100755 product/ERP5/skins/erp5_trade/getAccountingTransactionDestinationPaymentItemList.py
 create mode 100755 product/ERP5/skins/erp5_trade/getAccountingTransactionSourcePaymentItemList.py
 create mode 100755 product/ERP5/skins/erp5_trade/getBalanceTransactionLineSourcePaymentItemList.py
 create mode 100755 product/ERP5/skins/erp5_trade/invoice_transaction_print.pt
 create mode 100755 product/ERP5/skins/erp5_trade/order_line_matrix_item_list.py
 create mode 100755 product/ERP5/skins/erp5_trade/payment_condition_view.form
 create mode 100755 product/ERP5/skins/erp5_trade/trade_condition_discount_view.form
 create mode 100755 product/ERP5/skins/erp5_trade/trade_condition_payment_view.form
 create mode 100755 product/ERP5/skins/erp5_trade/trade_condition_profile_view.form

diff --git a/product/ERP5/Extensions/CheckAllPermissions.py b/product/ERP5/Extensions/CheckAllPermissions.py
new file mode 100755
index 0000000000..208b7d994d
--- /dev/null
+++ b/product/ERP5/Extensions/CheckAllPermissions.py
@@ -0,0 +1,24 @@
+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)
diff --git a/product/ERP5/skins/erp5_accounting/Account_countAccountingTransactions.py b/product/ERP5/skins/erp5_accounting/Account_countAccountingTransactions.py
new file mode 100755
index 0000000000..c765489ab3
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/Account_countAccountingTransactions.py
@@ -0,0 +1,25 @@
+## 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)
diff --git a/product/ERP5/skins/erp5_accounting/Account_getTotalSourceCredit.py b/product/ERP5/skins/erp5_accounting/Account_getTotalSourceCredit.py
new file mode 100755
index 0000000000..97225341ea
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/Account_getTotalSourceCredit.py
@@ -0,0 +1,24 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/Account_getTotalSourceDebit.py b/product/ERP5/skins/erp5_accounting/Account_getTotalSourceDebit.py
new file mode 100755
index 0000000000..e7d70b6ca2
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/Account_getTotalSourceDebit.py
@@ -0,0 +1,24 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/Account_list_ui.form b/product/ERP5/skins/erp5_accounting/Account_list_ui.form
new file mode 100755
index 0000000000..3fcd321808
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/Account_list_ui.form
@@ -0,0 +1,29 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/Account_search.py b/product/ERP5/skins/erp5_accounting/Account_search.py
new file mode 100755
index 0000000000..d97f34d7bc
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/Account_search.py
@@ -0,0 +1,15 @@
+## 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)
diff --git a/product/ERP5/skins/erp5_accounting/Account_stat.py b/product/ERP5/skins/erp5_accounting/Account_stat.py
new file mode 100755
index 0000000000..9fff15bb0f
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/Account_stat.py
@@ -0,0 +1,12 @@
+## 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)
diff --git a/product/ERP5/skins/erp5_accounting/Account_viewTransactionList.form b/product/ERP5/skins/erp5_accounting/Account_viewTransactionList.form
new file mode 100755
index 0000000000..42b7f3ceab
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/Account_viewTransactionList.form
@@ -0,0 +1,89 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/BalanceTransactionLine_view.form b/product/ERP5/skins/erp5_accounting/BalanceTransactionLine_view.form
new file mode 100755
index 0000000000..7665ee50b0
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/BalanceTransactionLine_view.form
@@ -0,0 +1,213 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/BalanceTransaction_view.form b/product/ERP5/skins/erp5_accounting/BalanceTransaction_view.form
new file mode 100755
index 0000000000..5aa5f31238
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/BalanceTransaction_view.form
@@ -0,0 +1,422 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetLine_quantityView.form b/product/ERP5/skins/erp5_accounting/PaySheetLine_quantityView.form
new file mode 100755
index 0000000000..ec5f4fc4aa
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetLine_quantityView.form
@@ -0,0 +1,389 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetLine_view.form b/product/ERP5/skins/erp5_accounting/PaySheetLine_view.form
new file mode 100755
index 0000000000..a6ddec73ec
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetLine_view.form
@@ -0,0 +1,367 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetLinesPrintFormat.py b/product/ERP5/skins/erp5_accounting/PaySheetLinesPrintFormat.py
new file mode 100755
index 0000000000..0838d741ea
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetLinesPrintFormat.py
@@ -0,0 +1,61 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransactionLine_generate.py b/product/ERP5/skins/erp5_accounting/PaySheetTransactionLine_generate.py
new file mode 100755
index 0000000000..e74851495d
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransactionLine_generate.py
@@ -0,0 +1,175 @@
+## 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.')
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransactionLine_view.form b/product/ERP5/skins/erp5_accounting/PaySheetTransactionLine_view.form
new file mode 100755
index 0000000000..afcff3c18f
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransactionLine_view.form
@@ -0,0 +1,283 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_calcul_OLD.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_calcul_OLD.py
new file mode 100755
index 0000000000..c51a0ad72e
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_calcul_OLD.py
@@ -0,0 +1,538 @@
+## 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', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre']
+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 (déductible / non déductible)
+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.')
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_checkParameters.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_checkParameters.py
new file mode 100755
index 0000000000..9947906b3f
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_checkParameters.py
@@ -0,0 +1,38 @@
+## 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")
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getDetails.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getDetails.py
new file mode 100755
index 0000000000..4ba813d07c
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getDetails.py
@@ -0,0 +1,139 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getDetails_BACKUP.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getDetails_BACKUP.py
new file mode 100755
index 0000000000..19678da97e
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getDetails_BACKUP.py
@@ -0,0 +1,118 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getFormattedLines_OLD.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getFormattedLines_OLD.py
new file mode 100755
index 0000000000..e8683d8bdf
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getFormattedLines_OLD.py
@@ -0,0 +1,57 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getPreavis.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getPreavis.py
new file mode 100755
index 0000000000..741cf86e6b
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_getPreavis.py
@@ -0,0 +1,48 @@
+## 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']
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_initializePreview.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_initializePreview.py
new file mode 100755
index 0000000000..8e9a2cfd6f
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_initializePreview.py
@@ -0,0 +1,98 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_pdf_template.pt b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_pdf_template.pt
new file mode 100755
index 0000000000..ca5123a05f
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_pdf_template.pt
@@ -0,0 +1,163 @@
+<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)"/>
+
+        <!-- Entête -->
+        <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)"/>
+
+        <!-- Entête 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')"/>
+        
+        
+        <!-- <!- Première 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')"/>
+
+        <!-- Deuxième 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 République</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: 'N°URSSAF : %s' % employer.getSocialCode()">N°URSSAF : 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()">Sébastien 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: 'N°Secu.Soc. : %s' % employee.getSocialCode()">N°Secu.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: 'Période : du %s au %s' % (start_date, here.getStopDate())">Période : 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 intérêt et pour vous aider à faire valoir vos droits, conservez ce bulletin de paie sans limitation de durée.</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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_postCalculation.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_postCalculation.py
new file mode 100755
index 0000000000..e89a8a5749
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_postCalculation.py
@@ -0,0 +1,156 @@
+## 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', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre']
+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.')
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_preCalculation.py b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_preCalculation.py
new file mode 100755
index 0000000000..68e46c2774
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_preCalculation.py
@@ -0,0 +1,356 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_previewForm.form b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_previewForm.form
new file mode 100755
index 0000000000..8abb86211e
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_previewForm.form
@@ -0,0 +1,218 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_print.pt b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_print.pt
new file mode 100755
index 0000000000..73cc35b516
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_print.pt
@@ -0,0 +1,233 @@
+<!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: 'N°URSSAF : %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: 'N°Secu.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: 'Durée des congés payés : ???'"/><br/>
+        <span tal:replace="python: 'Durée des délais de préavis : ???'"/><br/>
+      </p>
+    </div>
+  </div>
+
+  <div class="spacer">&nbsp;</div>
+
+  <br/>
+  <br/>
+
+  <div class="disclaimer">
+  Dans votre intérêt et pour vous aider à faire valoir vos droits, conservez ce bulletin de paie sans limitation de durée.
+  </div>
+
+  </div>
+  </body>
+</html>
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_print_old.pt b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_print_old.pt
new file mode 100755
index 0000000000..73cc35b516
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_print_old.pt
@@ -0,0 +1,233 @@
+<!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: 'N°URSSAF : %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: 'N°Secu.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: 'Durée des congés payés : ???'"/><br/>
+        <span tal:replace="python: 'Durée des délais de préavis : ???'"/><br/>
+      </p>
+    </div>
+  </div>
+
+  <div class="spacer">&nbsp;</div>
+
+  <br/>
+  <br/>
+
+  <div class="disclaimer">
+  Dans votre intérêt et pour vous aider à faire valoir vos droits, conservez ce bulletin de paie sans limitation de durée.
+  </div>
+
+  </div>
+  </body>
+</html>
diff --git a/product/ERP5/skins/erp5_accounting/PaySheetTransaction_view.form b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_view.form
new file mode 100755
index 0000000000..89651eb1b6
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheetTransaction_view.form
@@ -0,0 +1,351 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheet_getReportLines.py b/product/ERP5/skins/erp5_accounting/PaySheet_getReportLines.py
new file mode 100755
index 0000000000..0369bdb14d
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheet_getReportLines.py
@@ -0,0 +1,45 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheet_printAnnualReport.pt b/product/ERP5/skins/erp5_accounting/PaySheet_printAnnualReport.pt
new file mode 100755
index 0000000000..ab670cdd1e
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheet_printAnnualReport.pt
@@ -0,0 +1,49 @@
+<!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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheet_totalDestinationList.form b/product/ERP5/skins/erp5_accounting/PaySheet_totalDestinationList.form
new file mode 100755
index 0000000000..2381c19afb
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheet_totalDestinationList.form
@@ -0,0 +1,80 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheet_zGetDetailedTotal.zsql b/product/ERP5/skins/erp5_accounting/PaySheet_zGetDetailedTotal.zsql
new file mode 100755
index 0000000000..e0822d5d1a
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheet_zGetDetailedTotal.zsql
@@ -0,0 +1,29 @@
+<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
diff --git a/product/ERP5/skins/erp5_accounting/PaySheet_zGetTotalDestinationList.zsql b/product/ERP5/skins/erp5_accounting/PaySheet_zGetTotalDestinationList.zsql
new file mode 100755
index 0000000000..035ddb4031
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaySheet_zGetTotalDestinationList.zsql
@@ -0,0 +1,25 @@
+<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
diff --git a/product/ERP5/skins/erp5_accounting/PaymentTransaction_detail.form b/product/ERP5/skins/erp5_accounting/PaymentTransaction_detail.form
new file mode 100755
index 0000000000..103be42465
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaymentTransaction_detail.form
@@ -0,0 +1,570 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/PaymentTransaction_view.form b/product/ERP5/skins/erp5_accounting/PaymentTransaction_view.form
new file mode 100755
index 0000000000..36d11b7b99
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/PaymentTransaction_view.form
@@ -0,0 +1,607 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/Resource_zGetInventory.zsql b/product/ERP5/skins/erp5_accounting/Resource_zGetInventory.zsql
new file mode 100755
index 0000000000..66200e3245
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/Resource_zGetInventory.zsql
@@ -0,0 +1,76 @@
+<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
diff --git a/product/ERP5/skins/erp5_accounting/account_template_view.form b/product/ERP5/skins/erp5_accounting/account_template_view.form
new file mode 100755
index 0000000000..5952448786
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/account_template_view.form
@@ -0,0 +1,82 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/accounting_report.form b/product/ERP5/skins/erp5_accounting/accounting_report.form
new file mode 100755
index 0000000000..1efcd7cbaf
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/accounting_report.form
@@ -0,0 +1,99 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/accounting_transaction_detail.form b/product/ERP5/skins/erp5_accounting/accounting_transaction_detail.form
new file mode 100755
index 0000000000..d9c3868865
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/accounting_transaction_detail.form
@@ -0,0 +1,562 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/calculPaySheet.py b/product/ERP5/skins/erp5_accounting/calculPaySheet.py
new file mode 100755
index 0000000000..1c02556c31
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/calculPaySheet.py
@@ -0,0 +1,514 @@
+## 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)
diff --git a/product/ERP5/skins/erp5_accounting/calculPaySheetTransaction.py b/product/ERP5/skins/erp5_accounting/calculPaySheetTransaction.py
new file mode 100755
index 0000000000..761a903a51
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/calculPaySheetTransaction.py
@@ -0,0 +1,514 @@
+## 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)
diff --git a/product/ERP5/skins/erp5_accounting/copy_of_PaySheetTransaction_pdf_template.pt b/product/ERP5/skins/erp5_accounting/copy_of_PaySheetTransaction_pdf_template.pt
new file mode 100755
index 0000000000..358f09964b
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/copy_of_PaySheetTransaction_pdf_template.pt
@@ -0,0 +1,8 @@
+  <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>
diff --git a/product/ERP5/skins/erp5_accounting/copy_of_Resource_zGetInventory.zsql b/product/ERP5/skins/erp5_accounting/copy_of_Resource_zGetInventory.zsql
new file mode 100755
index 0000000000..b8debda7f7
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/copy_of_Resource_zGetInventory.zsql
@@ -0,0 +1,39 @@
+<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
diff --git a/product/ERP5/skins/erp5_accounting/getAccountPcgItemList.py b/product/ERP5/skins/erp5_accounting/getAccountPcgItemList.py
new file mode 100755
index 0000000000..c945dc4f23
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/getAccountPcgItemList.py
@@ -0,0 +1,18 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/pay_sheet_line_view.form b/product/ERP5/skins/erp5_accounting/pay_sheet_line_view.form
new file mode 100755
index 0000000000..59eeb39cf4
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/pay_sheet_line_view.form
@@ -0,0 +1,13 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/pay_sheet_list.form b/product/ERP5/skins/erp5_accounting/pay_sheet_list.form
new file mode 100755
index 0000000000..9e026ce88a
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/pay_sheet_list.form
@@ -0,0 +1,13 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/pay_sheet_print.pt b/product/ERP5/skins/erp5_accounting/pay_sheet_print.pt
new file mode 100755
index 0000000000..22dacd4dff
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/pay_sheet_print.pt
@@ -0,0 +1,114 @@
+<!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: 'N°Siret: '"/><br/><!-- from organisation details -->
+        <span tal:content="python: 'N°APE: '"/><br/><!-- from organisation details -->
+        <span tal:content="python: 'N°URSSAF: '"/><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 Développement</span><br/><!-- from career -->
+        <span tal:content="python: 'Matricule: %s' % employee.getId()"/><br/><!--optional-->
+        <span>Qualification: Ingénieur</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: 'N°Secu: '"/><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: 'Durée des congés de payés:'"/><br/>
+        <span tal:content="python: 'Durée des délais de préavis:'"/><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 intérêt et pour vous aider à faire valoir vos droits, conservez ce bulletin de paie sans limitation de durée.
+    </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>
diff --git a/product/ERP5/skins/erp5_accounting/pay_sheet_view.form b/product/ERP5/skins/erp5_accounting/pay_sheet_view.form
new file mode 100755
index 0000000000..c9503bf60b
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/pay_sheet_view.form
@@ -0,0 +1,13 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/purchase_invoice_transaction_detail.form b/product/ERP5/skins/erp5_accounting/purchase_invoice_transaction_detail.form
new file mode 100755
index 0000000000..93fcd668a0
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/purchase_invoice_transaction_detail.form
@@ -0,0 +1,569 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/sale_invoice_transaction_detail.form b/product/ERP5/skins/erp5_accounting/sale_invoice_transaction_detail.form
new file mode 100755
index 0000000000..bd9c6917da
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/sale_invoice_transaction_detail.form
@@ -0,0 +1,472 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/searchInvoiceTransaction.py b/product/ERP5/skins/erp5_accounting/searchInvoiceTransaction.py
new file mode 100755
index 0000000000..04ed94c803
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/searchInvoiceTransaction.py
@@ -0,0 +1,33 @@
+## 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
diff --git a/product/ERP5/skins/erp5_accounting/sql_stock_account_date.zsql b/product/ERP5/skins/erp5_accounting/sql_stock_account_date.zsql
new file mode 100755
index 0000000000..510cf59fdd
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/sql_stock_account_date.zsql
@@ -0,0 +1,26 @@
+<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
diff --git a/product/ERP5/skins/erp5_accounting/sql_stock_account_date_stat.zsql b/product/ERP5/skins/erp5_accounting/sql_stock_account_date_stat.zsql
new file mode 100755
index 0000000000..0039808cf9
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/sql_stock_account_date_stat.zsql
@@ -0,0 +1,27 @@
+<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
diff --git a/product/ERP5/skins/erp5_accounting/sql_stock_account_parent.zsql b/product/ERP5/skins/erp5_accounting/sql_stock_account_parent.zsql
new file mode 100755
index 0000000000..ecc1eb567b
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/sql_stock_account_parent.zsql
@@ -0,0 +1,25 @@
+<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
diff --git a/product/ERP5/skins/erp5_accounting/sql_stock_count.zsql b/product/ERP5/skins/erp5_accounting/sql_stock_count.zsql
new file mode 100755
index 0000000000..9760f4ed90
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/sql_stock_count.zsql
@@ -0,0 +1,16 @@
+<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
diff --git a/product/ERP5/skins/erp5_accounting/sql_stock_search.zsql b/product/ERP5/skins/erp5_accounting/sql_stock_search.zsql
new file mode 100755
index 0000000000..a28063b877
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/sql_stock_search.zsql
@@ -0,0 +1,17 @@
+<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>
diff --git a/product/ERP5/skins/erp5_accounting/transaction_line_list.form b/product/ERP5/skins/erp5_accounting/transaction_line_list.form
new file mode 100755
index 0000000000..def9030a50
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/transaction_line_list.form
@@ -0,0 +1,62 @@
+<?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
diff --git a/product/ERP5/skins/erp5_accounting/transaction_list_ui.form b/product/ERP5/skins/erp5_accounting/transaction_list_ui.form
new file mode 100755
index 0000000000..ea529eb8e9
--- /dev/null
+++ b/product/ERP5/skins/erp5_accounting/transaction_list_ui.form
@@ -0,0 +1,85 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/Assignment_view.form b/product/ERP5/skins/erp5_crm/Assignment_view.form
new file mode 100755
index 0000000000..3bfefbc5b2
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/Assignment_view.form
@@ -0,0 +1,244 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/Career_shiftDefault.py b/product/ERP5/skins/erp5_crm/Career_shiftDefault.py
new file mode 100755
index 0000000000..3d9dcffcf9
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/Career_shiftDefault.py
@@ -0,0 +1,45 @@
+## 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')
diff --git a/product/ERP5/skins/erp5_crm/Career_view.form b/product/ERP5/skins/erp5_crm/Career_view.form
new file mode 100755
index 0000000000..cde6bd1728
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/Career_view.form
@@ -0,0 +1,396 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/event_2_sale_opportunity.py b/product/ERP5/skins/erp5_crm/event_2_sale_opportunity.py
new file mode 100755
index 0000000000..5d203e6840
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/event_2_sale_opportunity.py
@@ -0,0 +1,31 @@
+## 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])
diff --git a/product/ERP5/skins/erp5_crm/event_2_support_request.py b/product/ERP5/skins/erp5_crm/event_2_support_request.py
new file mode 100755
index 0000000000..5329b11f1a
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/event_2_support_request.py
@@ -0,0 +1,31 @@
+## 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])
diff --git a/product/ERP5/skins/erp5_crm/person_assignment_view.form b/product/ERP5/skins/erp5_crm/person_assignment_view.form
new file mode 100755
index 0000000000..2f1c5da300
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/person_assignment_view.form
@@ -0,0 +1,138 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/person_career_log_print.pt b/product/ERP5/skins/erp5_crm/person_career_log_print.pt
new file mode 100755
index 0000000000..e860c65b7e
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/person_career_log_print.pt
@@ -0,0 +1,43 @@
+<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
diff --git a/product/ERP5/skins/erp5_crm/person_career_view.form b/product/ERP5/skins/erp5_crm/person_career_view.form
new file mode 100755
index 0000000000..ab74656ceb
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/person_career_view.form
@@ -0,0 +1,464 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/person_viewDetails.form b/product/ERP5/skins/erp5_crm/person_viewDetails.form
new file mode 100755
index 0000000000..cea7358416
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/person_viewDetails.form
@@ -0,0 +1,282 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/project_line_view.form b/product/ERP5/skins/erp5_crm/project_line_view.form
new file mode 100755
index 0000000000..4bc356cafa
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/project_line_view.form
@@ -0,0 +1,326 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/project_list.form b/product/ERP5/skins/erp5_crm/project_list.form
new file mode 100755
index 0000000000..68d1beb27b
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/project_list.form
@@ -0,0 +1,81 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/project_report_line_view.form b/product/ERP5/skins/erp5_crm/project_report_line_view.form
new file mode 100755
index 0000000000..21a44becd6
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/project_report_line_view.form
@@ -0,0 +1,394 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/project_report_list.form b/product/ERP5/skins/erp5_crm/project_report_list.form
new file mode 100755
index 0000000000..4fb6570a32
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/project_report_list.form
@@ -0,0 +1,81 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/project_report_view.form b/product/ERP5/skins/erp5_crm/project_report_view.form
new file mode 100755
index 0000000000..66d1d8ceda
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/project_report_view.form
@@ -0,0 +1,353 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/project_view.form b/product/ERP5/skins/erp5_crm/project_view.form
new file mode 100755
index 0000000000..9f875749bf
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/project_view.form
@@ -0,0 +1,377 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/support_request_list.form b/product/ERP5/skins/erp5_crm/support_request_list.form
new file mode 100755
index 0000000000..5a569563ad
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/support_request_list.form
@@ -0,0 +1,86 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/support_request_view.form b/product/ERP5/skins/erp5_crm/support_request_view.form
new file mode 100755
index 0000000000..170ce9dd7d
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/support_request_view.form
@@ -0,0 +1,255 @@
+<?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
diff --git a/product/ERP5/skins/erp5_crm/z_person_career_log.zsql b/product/ERP5/skins/erp5_crm/z_person_career_log.zsql
new file mode 100755
index 0000000000..c6e7095718
--- /dev/null
+++ b/product/ERP5/skins/erp5_crm/z_person_career_log.zsql
@@ -0,0 +1,14 @@
+<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
diff --git a/product/ERP5/skins/erp5_trade/AccountingTransaction_addPaymentTransaction.py b/product/ERP5/skins/erp5_trade/AccountingTransaction_addPaymentTransaction.py
new file mode 100755
index 0000000000..17bbe8982e
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/AccountingTransaction_addPaymentTransaction.py
@@ -0,0 +1,25 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/DeliveryLine_asCellRange.py b/product/ERP5/skins/erp5_trade/DeliveryLine_asCellRange.py
new file mode 100755
index 0000000000..18bcc4c5da
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/DeliveryLine_asCellRange.py
@@ -0,0 +1,25 @@
+## 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]
diff --git a/product/ERP5/skins/erp5_trade/DeliveryLine_zGetTotal.zsql b/product/ERP5/skins/erp5_trade/DeliveryLine_zGetTotal.zsql
new file mode 100755
index 0000000000..6df107da08
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/DeliveryLine_zGetTotal.zsql
@@ -0,0 +1,21 @@
+<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
diff --git a/product/ERP5/skins/erp5_trade/Delivery_zGetTotal.zsql b/product/ERP5/skins/erp5_trade/Delivery_zGetTotal.zsql
new file mode 100755
index 0000000000..3dfe42fe07
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Delivery_zGetTotal.zsql
@@ -0,0 +1,29 @@
+<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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_addPurchaseInvoice.py b/product/ERP5/skins/erp5_trade/Invoice_addPurchaseInvoice.py
new file mode 100755
index 0000000000..a4d4950e44
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_addPurchaseInvoice.py
@@ -0,0 +1,28 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_addSaleInvoice.py b/product/ERP5/skins/erp5_trade/Invoice_addSaleInvoice.py
new file mode 100755
index 0000000000..fe186c2728
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_addSaleInvoice.py
@@ -0,0 +1,25 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_viewAccountingLineList.form b/product/ERP5/skins/erp5_trade/Invoice_viewAccountingLineList.form
new file mode 100755
index 0000000000..423791c46c
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_viewAccountingLineList.form
@@ -0,0 +1,565 @@
+<?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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_viewInvoiceLineList.form b/product/ERP5/skins/erp5_trade/Invoice_viewInvoiceLineList.form
new file mode 100755
index 0000000000..ab92a0b04f
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_viewInvoiceLineList.form
@@ -0,0 +1,721 @@
+<?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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_zGetDescription.py b/product/ERP5/skins/erp5_trade/Invoice_zGetDescription.py
new file mode 100755
index 0000000000..9fd2231d88
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_zGetDescription.py
@@ -0,0 +1,39 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_zGetDueDate.py b/product/ERP5/skins/erp5_trade/Invoice_zGetDueDate.py
new file mode 100755
index 0000000000..fdd031d426
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_zGetDueDate.py
@@ -0,0 +1,43 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_zGetEscompteDescription.py b/product/ERP5/skins/erp5_trade/Invoice_zGetEscompteDescription.py
new file mode 100755
index 0000000000..7865d5a1d2
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_zGetEscompteDescription.py
@@ -0,0 +1,25 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_zGetPaymentTime.py b/product/ERP5/skins/erp5_trade/Invoice_zGetPaymentTime.py
new file mode 100755
index 0000000000..f83260ebee
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_zGetPaymentTime.py
@@ -0,0 +1,31 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_zGetSourceSectionDescription.py b/product/ERP5/skins/erp5_trade/Invoice_zGetSourceSectionDescription.py
new file mode 100755
index 0000000000..0495701242
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_zGetSourceSectionDescription.py
@@ -0,0 +1,31 @@
+## 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 ]
diff --git a/product/ERP5/skins/erp5_trade/Invoice_zGetTotal.zsql b/product/ERP5/skins/erp5_trade/Invoice_zGetTotal.zsql
new file mode 100755
index 0000000000..491496a3fb
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_zGetTotal.zsql
@@ -0,0 +1,13 @@
+<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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_zGetTotalNetPrice.py b/product/ERP5/skins/erp5_trade/Invoice_zGetTotalNetPrice.py
new file mode 100755
index 0000000000..f8158636bf
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_zGetTotalNetPrice.py
@@ -0,0 +1,23 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/Invoice_zGetTotalVat.py b/product/ERP5/skins/erp5_trade/Invoice_zGetTotalVat.py
new file mode 100755
index 0000000000..6c08aad87f
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/Invoice_zGetTotalVat.py
@@ -0,0 +1,21 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/SaleOrder_print.pt b/product/ERP5/skins/erp5_trade/SaleOrder_print.pt
new file mode 100755
index 0000000000..33d61b9266
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/SaleOrder_print.pt
@@ -0,0 +1,148 @@
+<!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>
diff --git a/product/ERP5/skins/erp5_trade/discount_view.form b/product/ERP5/skins/erp5_trade/discount_view.form
new file mode 100755
index 0000000000..34fe4e0b9d
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/discount_view.form
@@ -0,0 +1,229 @@
+<?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
diff --git a/product/ERP5/skins/erp5_trade/getAccountingTransactionDestinationPaymentItemList.py b/product/ERP5/skins/erp5_trade/getAccountingTransactionDestinationPaymentItemList.py
new file mode 100755
index 0000000000..bf2718db39
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/getAccountingTransactionDestinationPaymentItemList.py
@@ -0,0 +1,24 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/getAccountingTransactionSourcePaymentItemList.py b/product/ERP5/skins/erp5_trade/getAccountingTransactionSourcePaymentItemList.py
new file mode 100755
index 0000000000..4e5723f031
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/getAccountingTransactionSourcePaymentItemList.py
@@ -0,0 +1,24 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/getBalanceTransactionLineSourcePaymentItemList.py b/product/ERP5/skins/erp5_trade/getBalanceTransactionLineSourcePaymentItemList.py
new file mode 100755
index 0000000000..a1f6327ef0
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/getBalanceTransactionLineSourcePaymentItemList.py
@@ -0,0 +1,24 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/invoice_transaction_print.pt b/product/ERP5/skins/erp5_trade/invoice_transaction_print.pt
new file mode 100755
index 0000000000..e9116a8b49
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/invoice_transaction_print.pt
@@ -0,0 +1,169 @@
+<!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 régler dans <b tal:content="python: here.getPaymentTerm(30)">0</b> jours au plus tard.
+    <br><font size="-3">Conditions de réglement: par chèue, à 0 jours date de la facture. Paiement accepté en euros.
+    Tout retard de réglement donnera lieu à une pénalité de 1,5% du montant dû par mois.
+    Réserve de propriété nous conservons la pleine propriété des marchandises jusqu'au paiement intégral 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>
diff --git a/product/ERP5/skins/erp5_trade/order_line_matrix_item_list.py b/product/ERP5/skins/erp5_trade/order_line_matrix_item_list.py
new file mode 100755
index 0000000000..1e90aa56b7
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/order_line_matrix_item_list.py
@@ -0,0 +1,38 @@
+## 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
diff --git a/product/ERP5/skins/erp5_trade/payment_condition_view.form b/product/ERP5/skins/erp5_trade/payment_condition_view.form
new file mode 100755
index 0000000000..5a7d39e9ec
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/payment_condition_view.form
@@ -0,0 +1,286 @@
+<?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
diff --git a/product/ERP5/skins/erp5_trade/trade_condition_discount_view.form b/product/ERP5/skins/erp5_trade/trade_condition_discount_view.form
new file mode 100755
index 0000000000..cdf20d19c7
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/trade_condition_discount_view.form
@@ -0,0 +1,87 @@
+<?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
diff --git a/product/ERP5/skins/erp5_trade/trade_condition_payment_view.form b/product/ERP5/skins/erp5_trade/trade_condition_payment_view.form
new file mode 100755
index 0000000000..a6227d7795
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/trade_condition_payment_view.form
@@ -0,0 +1,221 @@
+<?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
diff --git a/product/ERP5/skins/erp5_trade/trade_condition_profile_view.form b/product/ERP5/skins/erp5_trade/trade_condition_profile_view.form
new file mode 100755
index 0000000000..bde5a29ef9
--- /dev/null
+++ b/product/ERP5/skins/erp5_trade/trade_condition_profile_view.form
@@ -0,0 +1,410 @@
+<?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
-- 
2.30.9