From f3387aa6163ddcfae4d450698c0207dbeadcde50 Mon Sep 17 00:00:00 2001 From: "psi (Open ERP)" Date: Wed, 18 May 2011 15:39:41 +0530 Subject: [PATCH 01/12] [ADD] hr_payroll: Add report on pyaslip.register object to get details of the payslip lines based on payslip register bzr revid: psi@tinyerp.co.in-20110518100941-ur7d0bqukd7tr3g0 --- addons/hr_payroll/__openerp__.py | 1 + addons/hr_payroll/hr_payroll.py | 22 +-- addons/hr_payroll/hr_payroll_report.xml | 127 ++++++++------- addons/hr_payroll/report/__init__.py | 3 +- .../report/report_contribution_register.py | 82 ++++++++++ .../report/report_contribution_register.rml | 148 ++++++++++++++++++ addons/hr_payroll/wizard/__init__.py | 1 + .../hr_payroll_cotribution_register_report.py | 56 +++++++ ...hr_payroll_cotribution_register_report.xml | 45 ++++++ 9 files changed, 415 insertions(+), 70 deletions(-) create mode 100644 addons/hr_payroll/report/report_contribution_register.py create mode 100644 addons/hr_payroll/report/report_contribution_register.rml create mode 100644 addons/hr_payroll/wizard/hr_payroll_cotribution_register_report.py create mode 100644 addons/hr_payroll/wizard/hr_payroll_cotribution_register_report.xml diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py index 44c0fb93506..1bb571f453e 100644 --- a/addons/hr_payroll/__openerp__.py +++ b/addons/hr_payroll/__openerp__.py @@ -58,6 +58,7 @@ Generic Payroll system. 'security/ir.model.access.csv', 'wizard/hr_payroll_employees_detail.xml', 'wizard/hr_payroll_year_salary.xml', + 'wizard/hr_payroll_cotribution_register_report.xml', ], 'test': [ # 'test/payslip.yml', diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index b70b30676a8..0be53dc1f22 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -698,16 +698,18 @@ class hr_salary_rule(osv.osv): 'amount_python_compute':fields.text('Python Code'), 'amount_percentage_base':fields.char('Percentage based on',size=1024, required=False, readonly=False, help='result will be affected to a variable'), 'child_ids':fields.one2many('hr.salary.rule', 'parent_rule_id', 'Child Salary Rule'), - 'register_id':fields.property( - 'hr.contribution.register', - type='many2one', - relation='hr.contribution.register', - string="Contribution Register", - method=True, - view_load=True, - help="Contribution register based on company", - required=False - ), + 'register_id':fields.many2one('hr.contribution.register', 'Contribution Register', help="Contribution register based on company", required=False), +# 'register_id':fields.property( +# 'hr.contribution.register', +# type='many2one', +# relation='hr.contribution.register', +# string="Contribution Register", +# method=True, +# view_load=True, +# help="Contribution register based on company", +# required=False +# ), + 'input_ids': fields.one2many('hr.rule.input', 'input_id', 'Inputs'), 'note':fields.text('Description'), } diff --git a/addons/hr_payroll/hr_payroll_report.xml b/addons/hr_payroll/hr_payroll_report.xml index 23e72d511f0..acaef4d7229 100644 --- a/addons/hr_payroll/hr_payroll_report.xml +++ b/addons/hr_payroll/hr_payroll_report.xml @@ -1,65 +1,74 @@ - - - - + + + - - - - - + - - - - - + + + + + + + + + + + diff --git a/addons/hr_payroll/report/__init__.py b/addons/hr_payroll/report/__init__.py index 3113f281326..d4bc44ab74b 100644 --- a/addons/hr_payroll/report/__init__.py +++ b/addons/hr_payroll/report/__init__.py @@ -3,7 +3,7 @@ ############################################################################## # -# OpenERP, Open Source Management Solution +# OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved # d$ # @@ -28,5 +28,6 @@ import report_year_salary import report_payroll_register import report_employees_detail import report_emp_salary_structure +import report_contribution_register # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/hr_payroll/report/report_contribution_register.py b/addons/hr_payroll/report/report_contribution_register.py new file mode 100644 index 00000000000..5edde72b561 --- /dev/null +++ b/addons/hr_payroll/report/report_contribution_register.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python +#-*- coding:utf-8 -*- + +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved +# d$ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import time +from datetime import datetime +from dateutil import relativedelta + +from report import report_sxw + +class contribution_register_report(report_sxw.rml_parse): + def __init__(self, cr, uid, name, context): + super(contribution_register_report, self).__init__(cr, uid, name, context) + self.localcontext.update({ + 'get_payslip_lines': self._get_payslip_lines, + 'get_registers': self._get_registers, + }) + + def set_context(self, objects, data, ids, report_type=None): + self.date_from = data['form'].get('date_from', time.strftime('%Y-%m-%d')) + self.date_to = data['form'].get('date_to', str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10]) + return super(contribution_register_report, self).set_context(objects, data, ids, report_type=report_type) + + def _get_registers(self,form): + result = [] + periods = [] + register_obj = self.pool.get('hr.contribution.register') + register_ids = form['contribution_register'] + result = register_obj.browse(self.cr,self.uid, register_ids) + return result + + def _get_payslip_lines(self, obj, form): + payslip_obj = self.pool.get('hr.payslip') + payslip_line = self.pool.get('hr.payslip.line') + res = [] + result = {} + + self.cr.execute("SELECT pl.id, pl.slip_id from hr_payslip_line as pl "\ + "LEFT JOIN hr_payslip AS hp on (pl.slip_id = hp.id) "\ + "WHERE (hp.date_from >= %s) AND (hp.date_to <= %s) "\ + "AND pl.register_id = %s "\ + "GROUP BY pl.slip_id, pl.sequence, pl.id, pl.category_id "\ + "ORDER BY pl.sequence", + (self.date_from, self.date_to, obj.id)) + for x in self.cr.fetchall(): + result.setdefault(x[1], []) + result[x[1]].append(x[0]) + for key, value in result.iteritems(): + res.append({ + 'payslip_name': payslip_obj.browse(self.cr, self.uid, [key])[0].name, + }) + for line in payslip_line.browse(self.cr, self.uid, value): + res.append({ + 'name': line.name, + 'code': line.code, + 'total': line.total, + }) + return res + +report_sxw.report_sxw('report.contribution.register.lines', 'hr.contribution.register', 'hr_payroll/report/report_contribution_register.rml', parser=contribution_register_report) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/hr_payroll/report/report_contribution_register.rml b/addons/hr_payroll/report/report_contribution_register.rml new file mode 100644 index 00000000000..441641d6ac9 --- /dev/null +++ b/addons/hr_payroll/report/report_contribution_register.rml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [[repeatIn(objects,'o')]] + + + + PaySlip Lines by Contribution Register + + + + + + + + + + + Register Name: [[o.name]] + + + + + + + + PaySlip Name + + + Code + + + Name + + + Amount (in [[o.company_id and o.company_id.currency_id.symbol or '']]) + + + +
+ [[repeatIn(get_payslip_lines(o, data['form']),'r') ]] + + + + [[ r.get('payslip_name', False) ]][[ r.get('payslip_name', False) and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font')]] + + + [[ r['code'] ]] + + + [[ r['name'] ]] + + + [[ r['total'] or '0.0']] + + + +
+ + + + + + + + + +
+
+ diff --git a/addons/hr_payroll/wizard/__init__.py b/addons/hr_payroll/wizard/__init__.py index 73a1b7ceb9e..b6aeacbd7db 100644 --- a/addons/hr_payroll/wizard/__init__.py +++ b/addons/hr_payroll/wizard/__init__.py @@ -25,5 +25,6 @@ import hr_payroll_employees_detail #import hr_payroll_create_analytic import hr_payroll_year_salary import hr_payroll_payslips_by_employees +import hr_payroll_cotribution_register_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/hr_payroll/wizard/hr_payroll_cotribution_register_report.py b/addons/hr_payroll/wizard/hr_payroll_cotribution_register_report.py new file mode 100644 index 00000000000..f429dd61618 --- /dev/null +++ b/addons/hr_payroll/wizard/hr_payroll_cotribution_register_report.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import time +from datetime import datetime +from dateutil import relativedelta + +from osv import osv, fields + +class payslip_lines_contribution_register(osv.osv_memory): + _name = 'payslip.lines.contribution.register' + _description = 'PaySlip Lines by Contribution Registers' + _columns = { + 'date_from': fields.date('Date From', required=True), + 'date_to': fields.date('Date To', required=True), + } + + _defaults = { + 'date_from': lambda *a: time.strftime('%Y-%m-01'), + 'date_to': lambda *a: str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10], + } + + def print_report(self, cr, uid, ids, context=None): + data = self.read(cr, uid, ids, [], context=context)[0] + datas = { + 'ids': context.get('active_ids', []), + 'model': 'hr.contribution.register', + 'form': data + } + return { + 'type': 'ir.actions.report.xml', + 'report_name': 'contribution.register.lines', + 'datas': datas, + } + +payslip_lines_contribution_register() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_payroll/wizard/hr_payroll_cotribution_register_report.xml b/addons/hr_payroll/wizard/hr_payroll_cotribution_register_report.xml new file mode 100644 index 00000000000..9b5710a5efa --- /dev/null +++ b/addons/hr_payroll/wizard/hr_payroll_cotribution_register_report.xml @@ -0,0 +1,45 @@ + + + + + + payslip.lines.contribution.register + payslip.lines.contribution.register + form + +
+ + + + + + + +