From a75715ec9740297bc4c3a44dc80fc7d8cde33ed6 Mon Sep 17 00:00:00 2001 From: "psi (Open ERP)" Date: Thu, 14 Apr 2011 18:45:55 +0530 Subject: [PATCH 1/6] [IMP] Improved payslip report bzr revid: psi@tinyerp.co.in-20110414131555-6d5tgt5vwjt05rn2 --- addons/hr_payroll/report/report_payslip.py | 54 +- addons/hr_payroll/report/report_payslip.rml | 535 +++++++++++--------- 2 files changed, 353 insertions(+), 236 deletions(-) diff --git a/addons/hr_payroll/report/report_payslip.py b/addons/hr_payroll/report/report_payslip.py index 0e6f9137330..31f99607a1e 100644 --- a/addons/hr_payroll/report/report_payslip.py +++ b/addons/hr_payroll/report/report_payslip.py @@ -37,8 +37,8 @@ class payslip_report(report_sxw.rml_parse): 'get_deductions':self.get_deductions, 'get_leave': self.get_leave, 'get_payslip_lines': self.get_payslip_lines, -# 'get_details_by_salary_head': self.get_details_by_salary_head - }) + 'get_details_by_salary_head': self.get_details_by_salary_head, + }) def convert(self, amount, cur): amt_en = amount_to_text_en.amount_to_text(amount, 'en', cur) @@ -84,7 +84,7 @@ class payslip_report(report_sxw.rml_parse): date = datetime.strptime(obj.date, '%Y-%m-%d') res['mname']= date.strftime('%B')+"-"+date.strftime('%Y') return res['mname'] - + def get_payslip_lines(self, obj): payslip_line = self.pool.get('hr.payslip.line') res = [] @@ -96,6 +96,54 @@ class payslip_report(report_sxw.rml_parse): res = payslip_line.browse(self.cr, self.uid, ids) return res + def get_recursive_parent(self, heads): + if not heads: + return [] + if heads[0].parent_id: + heads.insert(0, heads[0].parent_id) + self.get_recursive_parent(heads) + return heads + + def get_details_by_salary_head(self, obj): + payslip_line = self.pool.get('hr.payslip.line') + salary_head = self.pool.get('hr.salary.head') + res = [] + result = {} + ids = [] + for id in range(len(obj)): + ids.append(obj[id].id) + if ids: + self.cr.execute('''SELECT pl.id, pl.category_id FROM hr_payslip_line as pl \ + LEFT JOIN hr_salary_head AS sh on (pl.category_id = sh.id) \ + WHERE pl.id in %s \ + GROUP BY sh.parent_id, sh.sequence, pl.sequence, pl.id, pl.category_id \ + ORDER BY sh.sequence, pl.sequence, sh.parent_id''',(tuple(ids),)) + for x in self.cr.fetchall(): + result.setdefault(x[1], []) + result[x[1]].append(x[0]) + for key, value in result.iteritems(): + heads = salary_head.browse(self.cr, self.uid, [key]) + parents = self.get_recursive_parent(heads) + level = 0 + for parent in parents: + res.append({ + 'salary_head': parent.name, + 'name': parent.name, + 'code': parent.code, + 'level': level + }) + level += 1 + lines = payslip_line.browse(self.cr, self.uid, value) + for line in lines: + res.append({ + 'salary_head': line.name, + 'name': line.name, + 'code': line.code, + 'total': line.total, + 'level': level + }) + return res + report_sxw.report_sxw('report.payslip.pdf', 'hr.payslip', 'hr_payroll/report/payslip.rml', parser=payslip_report) report_sxw.report_sxw('report.test.pdf', 'hr.payslip', 'hr_payroll/report/report_payslip.rml', parser=payslip_report) diff --git a/addons/hr_payroll/report/report_payslip.rml b/addons/hr_payroll/report/report_payslip.rml index a827ee3ce7b..31e71f9c98f 100644 --- a/addons/hr_payroll/report/report_payslip.rml +++ b/addons/hr_payroll/report/report_payslip.rml @@ -10,73 +10,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -96,248 +34,379 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - [[repeatIn(objects,'o')]] - + [[repeatIn(objects,'o')]] + - Pay Slip - - + Pay Slip + + + + + [[o.credit_note==False and removeParentNode('para')]] + Credit + + Note + + ([[o.name]]) + + + + Name + + + [[o.employee_id.name]] + + + Designation + + + [[ o.employee_id.contract_id and o.employee_id.contract_id.job_id.name or '' ]] + + + + + + + + Address - - - - - - - - Code - - - [[ o.employee_id.sinid or '' ]] - - - Name - - - [[o.employee_id.name]] + [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]] - + - Address + Email - [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]] + [[ o.employee_id.work_email or '' ]] + + + + Identification No + + + + [[ o.employee_id.identification_id or '' ]] - + - Email + Slip ID - [[ o.employee_id.work_email or '' ]] + [[ o.number or '' ]] - Bank Details + Bank Details - [[ o.employee_id.otherid or '' ]] + [[ o.employee_id.otherid or '' ]] - + - Slip ID + Date From - [[ o.number or '' ]] + [[ o.date_from or '']] - Identification No + + Date To + - [[ o.employee_id.passport_id and o.employee_id.passport_id.name or '' ]] + [[ o.date_to or '' ]] - - - - Register - - - [[ o.register_id and o.register_id.name or '' ]] - - - Designation - - - [[ o.employee_id.contract_id and o.employee_id.contract_id.job_id.name or '' ]] - - - - - - Payslip Lines - - - - - Sequence - - - Name - - - Code - - - Sub Total - - - - - [[repeatIn(get_payslip_lines(o.line_ids),'p') ]] [[ p.sequence ]] - - - [[ p.name ]] - - - [[ p.code ]] - - - [[ p.total ]] [[ o.company_id and o.company_id.currency_id.symbol or '' ]] - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - - - - - + + - + Payslip Lines: + + + + + + + Code + + + Name + + + Amount (in [[o.company_id and o.company_id.currency_id.symbol or '']]) + + + +
+ [[repeatIn(get_payslip_lines(o.line_ids),'p') ]] + + + + [[ p.code ]] + + + [[ p.name ]] + + + [[ p.total or '0.0']] + + + +
+ + + + + + + Details By Salary Head: + + + + + + + Code + + + Salary Head + + + Name + + + Amount(in [[o.company_id and o.company_id.currency_id.symbol or '']]) + + + +
+ [[repeatIn(get_details_by_salary_head(o.line_ids),'h') ]] + + + + + [[ h['code'] ]] + [[ h['total'] and ( setTag('para','para',{'style':'terp_default_8'}))]] + + + + [[ '..'*h['level'] ]][[ h['salary_head'] ]][[ h['total'] and ( setTag('para','para',{'style':'terp_default_9'}))]] + + + [[ h['name'] ]][[ h['total'] and ( setTag('para','para',{'style':'terp_default_8'}))]] + + + [[ h['total'] ]] + + + +
+ + + + + + + + + + + + + - Authorized Signature + Authorized Signature - +
From 34e9bed678b095d8abd2f4feb376f7f01a8efb28 Mon Sep 17 00:00:00 2001 From: "psi (Open ERP)" Date: Fri, 15 Apr 2011 11:11:45 +0530 Subject: [PATCH 2/6] [FIX] remove warning of keyError bzr revid: psi@tinyerp.co.in-20110415054145-m3w71j5837v0su2j --- addons/hr_payroll/report/report_payslip.rml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/hr_payroll/report/report_payslip.rml b/addons/hr_payroll/report/report_payslip.rml index 31e71f9c98f..58d558f42cb 100644 --- a/addons/hr_payroll/report/report_payslip.rml +++ b/addons/hr_payroll/report/report_payslip.rml @@ -370,17 +370,17 @@ [[ h['code'] ]] - [[ h['total'] and ( setTag('para','para',{'style':'terp_default_8'}))]] + [[ h.get('total', False) and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]] - [[ '..'*h['level'] ]][[ h['salary_head'] ]][[ h['total'] and ( setTag('para','para',{'style':'terp_default_9'}))]] + [[ '..'*h['level'] ]][[ h['salary_head'] ]][[ h.get('total', False) and ( setTag('para','para',{'style':'terp_default_9'})) or removeParentNode('font') ]] - [[ h['name'] ]][[ h['total'] and ( setTag('para','para',{'style':'terp_default_8'}))]] + [[ h['name'] ]][[ h.get('total', False) and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]] - [[ h['total'] ]] + [[ h['total'] ]] From 06f47c3c3e86df249a0acfc9a77beef50afceb39 Mon Sep 17 00:00:00 2001 From: mtr Date: Tue, 26 Apr 2011 16:22:15 +0530 Subject: [PATCH 3/6] [IMP] hr_payroll:calculates total for salary head in payslip report bzr revid: mtr@mtr-20110426105215-aiijosjm7wv2rjjr --- addons/hr_payroll/report/report_payslip.py | 7 ++++++- addons/hr_payroll/report/report_payslip.rml | 16 +++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/addons/hr_payroll/report/report_payslip.py b/addons/hr_payroll/report/report_payslip.py index 31f99607a1e..84fc85e10c8 100644 --- a/addons/hr_payroll/report/report_payslip.py +++ b/addons/hr_payroll/report/report_payslip.py @@ -110,6 +110,7 @@ class payslip_report(report_sxw.rml_parse): res = [] result = {} ids = [] + for id in range(len(obj)): ids.append(obj[id].id) if ids: @@ -124,13 +125,17 @@ class payslip_report(report_sxw.rml_parse): for key, value in result.iteritems(): heads = salary_head.browse(self.cr, self.uid, [key]) parents = self.get_recursive_parent(heads) + head_total = 0 + for line in payslip_line.browse(self.cr, self.uid, value): + head_total += line.total level = 0 for parent in parents: res.append({ 'salary_head': parent.name, 'name': parent.name, 'code': parent.code, - 'level': level + 'level': level, + 'total': head_total, }) level += 1 lines = payslip_line.browse(self.cr, self.uid, value) diff --git a/addons/hr_payroll/report/report_payslip.rml b/addons/hr_payroll/report/report_payslip.rml index 58d558f42cb..76b28a65fb2 100644 --- a/addons/hr_payroll/report/report_payslip.rml +++ b/addons/hr_payroll/report/report_payslip.rml @@ -178,6 +178,7 @@ + @@ -193,6 +194,7 @@ + @@ -229,7 +231,7 @@ Designation - [[ o.employee_id.contract_id and o.employee_id.contract_id.job_id.name or '' ]] + [[ o.employee_id.job_id.name or '' ]] @@ -266,7 +268,7 @@ - Slip ID + Reference [[ o.number or '' ]] @@ -275,7 +277,7 @@ Bank Details - [[ o.employee_id.otherid or '' ]] + [[ o.employee_id.bank_account_id.acc_number or '' ]] @@ -370,17 +372,17 @@ [[ h['code'] ]] - [[ h.get('total', False) and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]] + [[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]] - [[ '..'*h['level'] ]][[ h['salary_head'] ]][[ h.get('total', False) and ( setTag('para','para',{'style':'terp_default_9'})) or removeParentNode('font') ]] + [[ '..'*h['level'] ]][[ h['salary_head'] ]][[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_9'})) or removeParentNode('font') ]] - [[ h['name'] ]][[ h.get('total', False) and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]] + [[ h['name'] ]][[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]] - [[ h['total'] ]] + [[ h['total'] ]][[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]] From f90308d9e8abe635745ab313f806ef9f7048e3c8 Mon Sep 17 00:00:00 2001 From: mtr Date: Tue, 26 Apr 2011 16:47:15 +0530 Subject: [PATCH 4/6] [IMP] hr_payroll:improved bank details on payslip report bzr revid: mtr@mtr-20110426111715-p3kt5lz3arw1wgda --- addons/hr_payroll/report/report_payslip.rml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/hr_payroll/report/report_payslip.rml b/addons/hr_payroll/report/report_payslip.rml index 76b28a65fb2..c3b3cb935c7 100644 --- a/addons/hr_payroll/report/report_payslip.rml +++ b/addons/hr_payroll/report/report_payslip.rml @@ -274,10 +274,10 @@ [[ o.number or '' ]] - Bank Details + Bank Account - [[ o.employee_id.bank_account_id.acc_number or '' ]] + [[o.employee_id.bank_account_id and o.employee_id.bank_account_id.acc_number or '' ]] From e91a6c9f0366c694e9ef7ebfbfd8428e1f3aecbc Mon Sep 17 00:00:00 2001 From: mtr Date: Tue, 26 Apr 2011 17:05:59 +0530 Subject: [PATCH 5/6] [IMP] hr_payroll:commented older payslip report bzr revid: mtr@mtr-20110426113559-bd8dr2d2txe1njxj --- addons/hr_payroll/hr_payroll_report.xml | 6 +++--- addons/hr_payroll/report/report_payslip.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/hr_payroll/hr_payroll_report.xml b/addons/hr_payroll/hr_payroll_report.xml index 67eea27b26c..23e72d511f0 100644 --- a/addons/hr_payroll/hr_payroll_report.xml +++ b/addons/hr_payroll/hr_payroll_report.xml @@ -1,13 +1,13 @@ - + string="Employee PaySlip" />--> + string="Employee PaySlip" /> Date: Thu, 12 May 2011 19:09:40 +0530 Subject: [PATCH 6/6] [IMP] pass details_by_salary_rule_category instead of line_ids so the report will show payslip_lines with rule as Appear on payslip checked bzr revid: psi@tinyerp.co.in-20110512133940-cwmcdbtl3rz8giru --- addons/hr_payroll/report/report_payslip.rml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/hr_payroll/report/report_payslip.rml b/addons/hr_payroll/report/report_payslip.rml index 5be4e17a875..02c97e1ec62 100644 --- a/addons/hr_payroll/report/report_payslip.rml +++ b/addons/hr_payroll/report/report_payslip.rml @@ -404,7 +404,7 @@
- [[repeatIn(get_details_by_rule_category(o.line_ids),'h') ]] + [[repeatIn(get_details_by_rule_category(o.details_by_salary_rule_category),'h') ]] @@ -452,7 +452,7 @@
- [[repeatIn(get_lines_by_contribution_register(o.line_ids),'r') ]] + [[repeatIn(get_lines_by_contribution_register(o.details_by_salary_rule_category),'r') ]]