diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReport.py b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReport.py
new file mode 100644
index 0000000000000000000000000000000000000000..0b1b25c2451fe2c4aa662d501fb62b4d8b1b52ee
--- /dev/null
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReport.py
@@ -0,0 +1,45 @@
+"""
+================================================================================
+Create the actual report and return parameters for the report header
+================================================================================
+"""
+# parameters
+# ------------------------------------------------------------------------------
+#
+
+def translateText(snip):
+ return rep_localiser.erp5_ui.gettext(snip, lang=rep_language).encode('utf-8').strip()
+
+rep = context
+rep_language = rep.getLanguage() if getattr(rep, 'getLanguage', None) else None
+rep_localiser = rep.getPortalObject().Localizer
+rep_data_source_caller = None
+
+rep_start_date = kwargs.get('start_date', None)
+rep_stop_date = kwargs.get('stop_date', None)
+rep_title = kwargs.get('report_title')
+
+# bridge for filling in testdata and setting exported title to bogus dates
+if kwargs.get('override_batch_mode'):
+ rep_data_source_caller = getattr(context, "PaySheetTransaction_getPayslipTestData", None)
+ rep_start_date = DateTime("1976-11-04")
+ rep_stop_date = DateTime("1976-11-30")
+
+if rep_data_source_caller is None:
+ rep_data_source_caller = getattr(context, "PaySheetTransaction_getPayslipTestData")
+ rep_start_date = rep_start_date or context.Base_getFirstAndLastDayOfMonth(day="first")
+ rep_stop_date = rep_stop_date or context.Base_getFirstAndLastDayOfMonth(day="last")
+
+kwargs["report_data"] = rep_data_source_caller(start_date=rep_start_date,stop_date=rep_stop_date)
+
+rep_content = context.Person_generatePayslipReportContent(*args, **kwargs)
+
+if isinstance(rep_content, unicode):
+ rep_content = rep_content.encode("utf8")
+
+return rep_content, rep_title, ' '.join([
+ translateText("from").title(),
+ rep_start_date.strftime('%Y/%m/%d'),
+ translateText("to"),
+ rep_stop_date.strftime('%Y/%m/%d')
+])
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReport.xml b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..55b79883a0f744709f06419028bf5a1a62a93676
--- /dev/null
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReport.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ -
+ Script_magic
+ 3
+
+ -
+ _bind_names
+
+
+
+
+ -
+ _params
+ *args, **kwargs
+
+ -
+ id
+ PaySheetTransaction_generatePayslipReport
+
+
+
+
+
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReportContent.xml b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReportContent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e85c63b3d4592cb9e7553d08a6c36553021075ec
--- /dev/null
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReportContent.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+ -
+ _bind_names
+
+
+
+
+ -
+ content_type
+ text/html
+
+ -
+ expand
+ 0
+
+ -
+ id
+ PaySheetTransaction_generatePayslipReportContent
+
+ -
+ output_encoding
+ utf-8
+
+ -
+ title
+
+
+
+
+
+
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReportContent.zpt b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReportContent.zpt
new file mode 100644
index 0000000000000000000000000000000000000000..cac053579e55af88d2882bf4fe0d57473f0f6165
--- /dev/null
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_generatePayslipReportContent.zpt
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Designation |
+ Base |
+ Employee Share (%) |
+ Employee Share |
+ Employer Share (%) |
+ Employer Share |
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Net payable
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_getPayslipData.py b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_getPayslipData.py
new file mode 100644
index 0000000000000000000000000000000000000000..124cae989427750373385b356b0068ab3c8b8fb5
--- /dev/null
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_getPayslipData.py
@@ -0,0 +1,84 @@
+"""
+================================================================================
+Get data to build a payslip report based on a person's paysheet transaction
+================================================================================
+"""
+#
+# parameters
+# ------------------------------------------------------------------------------
+# start_date start date of the report
+# stop_date stop date of the report
+#
+# returns:
+# {
+# "general_data_dict": {
+# "year": 2017,
+# "net_salary": "2 300.93",
+# "gross_salary": "3 085.28"
+# },
+# "cumulative_title_list": [
+# {"value": "Gross Salary", "is_header": True},
+# ...
+# ],
+# "cumulative_info_list":[
+# {"value": "3 085.28", "is_header": True},
+# ...
+# ],
+# 'destination_address_line_list': [
+# {"value": "USERTEST Slicea", "is_header": True},
+# {"value": "2 rue unerue"},
+# ...
+# ],
+# 'destination_hiring_info_list': [
+# {"value": "Hiring Date: 1990/10/10"},
+# ...
+# ],
+# 'destination_attendance_info_list': [
+# {"value": "Normal Working Hours": 151.67"},
+# ...
+# ]
+# 'destination_vacation_info_list': [
+# {"value": "Earned this period: "},
+# ...
+# ],
+# 'destination_taxation_info_list': [
+# {"value": "Price Currency: EUR"},
+# ],
+# 'source_address_line_list: [
+# {"value": "Nexedi SA", "is_header": True},
+# {"value": "147 Rue du Ballon"}
+# ...
+# ],
+# source_corporate_info_line_list: [
+# {"value": "Corporate Registration Code: 440047504 00020"},
+# {"value": "Activity Code: 5829C"},
+# ...
+# ],
+# "payslip_section_list": [
+# [
+# {"value": "Usertest Slicea", "is_header": True, "value_base": "", "value_employee_share_rate": "", "value_employee_share": "", "value_employer_share_rate": "", "value_employer_share": ""},
+# {"value": "Salarie de Base", "value_base": "2 805.28", "value_employee_share_rate": "", "value_employee_share": "", "value_employer_share_rate": "", "value_employer_share": ""}
+# ], [
+# ...
+# ]
+# ]
+#}
+
+response = {
+ "general_data_dict": {
+ "year": "",
+ "net_salary": "",
+ "gross_salary": ""
+ },
+ "cumulative_title_list": [],
+ "cumulative_info_list": [],
+ "destination_address_line_list": [],
+ "destination_hiring_info_list": [],
+ "destination_attendance_info_list": [],
+ "destination_vacation_info_list": [],
+ "destination_taxation_info_list": [],
+ "source_address_line_list": [],
+ "source_corporate_info_line_list": [],
+ "payslip_section_list": []
+}
+return response
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_getPayslipData.xml b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_getPayslipData.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6fdc04573f32071ea68468f1d64feabe64bc6fa1
--- /dev/null
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_getPayslipData.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ -
+ Script_magic
+ 3
+
+ -
+ _bind_names
+
+
+
+
+ -
+ _params
+ start_date=None, stop_date=None, **kw
+
+ -
+ id
+ PaySheetTransaction_getPayslipData
+
+
+
+
+
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_printPayslipReport.py b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_printPayslipReport.py
new file mode 100644
index 0000000000000000000000000000000000000000..65a3a33c7d88255d0f4dcd287c399d46afb95ebc
--- /dev/null
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_printPayslipReport.py
@@ -0,0 +1,23 @@
+"""
+================================================================================
+Wire PaySheetTransaction through to erp5_corporate_identity Report
+================================================================================
+"""
+# ERP5 web uses format= argument, which is also a python builtin
+# pylint: disable=redefined-builtin
+
+# parameters (* default)
+# ------------------------------------------------------------------------------
+# format: output in html*, pdf
+# international_form translate terms
+# language target_language
+
+return context.Base_printAsReport(
+ format=format,
+ report_title="Payslip",
+ report_name="Person_generatePayslipReport",
+ language=target_language,
+ start_date=context.getStartDate() or None,
+ stop_date=context.getStopDate() or None,
+ **kw
+)
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_printPayslipReport.xml b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_printPayslipReport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e3bdba786f69de51a8860b06d74c2733ed347ab5
--- /dev/null
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheetTransaction_printPayslipReport.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ -
+ Script_magic
+ 3
+
+ -
+ _bind_names
+
+
+
+
+ -
+ _params
+ format=None, international_form=None, target_language=None, *args,**kw
+
+ -
+ id
+ PaySheetTransaction_printPayslipReport
+
+
+
+
+
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheet_getODTStyleSheet.obj b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheet_getODTStyleSheet.bin
similarity index 100%
rename from bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheet_getODTStyleSheet.obj
rename to bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheet_getODTStyleSheet.bin
diff --git a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheet_viewODTPrintDialog.xml b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheet_viewODTPrintDialog.xml
index ec9e692c899cd2ed227f4da12ca1b1680a2f16dd..16cdeba8f83d1280db4ad9f7c6f7b6a2f5f71664 100644
--- a/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheet_viewODTPrintDialog.xml
+++ b/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/PaySheet_viewODTPrintDialog.xml
@@ -35,7 +35,7 @@
-
action
- PaySheet_printAsODT
+ PaySheetTransaction_printPayslipReport
-
description
@@ -124,6 +124,10 @@
update_action
+ -
+ update_action_title
+
+