[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
This commit is contained in:
psi (Open ERP) 2011-05-18 15:39:41 +05:30
parent 7499c98d42
commit f3387aa616
9 changed files with 415 additions and 70 deletions

View File

@ -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',

View File

@ -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'),
}

View File

@ -1,65 +1,74 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- <report
auto="False"
id="salary_payslip"
model="hr.payslip"
name="payslip.pdf"
rml="hr_payroll/report/payslip.rml"
string="Employee PaySlip" />-->
<report
auto="False"
id="payslip_report"
model="hr.payslip"
name="test.pdf"
rml="hr_payroll/report/report_payslip.rml"
<data>
<!-- <report
auto="False"
id="salary_payslip"
model="hr.payslip"
name="payslip.pdf"
rml="hr_payroll/report/payslip.rml"
string="Employee PaySlip" />-->
<report
auto="False"
id="payslip_report"
model="hr.payslip"
name="test.pdf"
rml="hr_payroll/report/report_payslip.rml"
string="Employee PaySlip" />
<report
auto="False"
id="payroll_advice"
model="hr.payroll.advice"
name="payroll.advice"
rml="hr_payroll/report/report_payroll_advice.rml"
string="Bank Payment Advice" />
<report
auto="False"
id="year_salary_report"
model="hr.payslip"
name="year.salary"
rml="hr_payroll/report/report_year_report.rml"
menu = "False"
string="Year Salary Report" />
<report
auto="False"
id="year_payroll_register"
model="hr.payroll.register"
name="hr.payroll.register.sheet"
rml="hr_payroll/report/payroll_register.rml"
menu = "True"
string="Print Statement" />
<report
auto="False"
id="payroll_advice"
model="hr.payroll.advice"
name="payroll.advice"
rml="hr_payroll/report/report_payroll_advice.rml"
string="Bank Payment Advice" />
<report
auto="False"
id="year_employees_detail"
model="hr.payslip"
name="employees.salary"
rml="hr_payroll/report/report_employees_detail.rml"
menu = "False"
string="Employees Salary Detail" />
<report
auto="False"
id="salary_structure_register"
model="hr.employee"
name="salary.structure"
rml="hr_payroll/report/report_emp_salary_structure.rml"
menu = "True"
string="Salary Structure" groups="base.group_hr_manager"/>
</data>
<report
auto="False"
menu="False"
id="contribution_register"
model="hr.contribution.register"
name="contribution.register.lines"
rml="hr_payroll/report/report_contribution_register.rml"
string="PaySlip Lines By Conribution Register" />
<report
auto="False"
id="year_salary_report"
model="hr.payslip"
name="year.salary"
rml="hr_payroll/report/report_year_report.rml"
menu = "False"
string="Year Salary Report" />
<report
auto="False"
id="year_payroll_register"
model="hr.payroll.register"
name="hr.payroll.register.sheet"
rml="hr_payroll/report/payroll_register.rml"
menu = "True"
string="Print Statement" />
<report
auto="False"
id="year_employees_detail"
model="hr.payslip"
name="employees.salary"
rml="hr_payroll/report/report_employees_detail.rml"
menu = "False"
string="Employees Salary Detail" />
<report
auto="False"
id="salary_structure_register"
model="hr.employee"
name="salary.structure"
rml="hr_payroll/report/report_emp_salary_structure.rml"
menu = "True"
string="Salary Structure" groups="base.group_hr_manager"/>
</data>
</openerp>

View File

@ -3,7 +3,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). 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:

View File

@ -0,0 +1,82 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
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:

View File

@ -0,0 +1,148 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table2">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table16">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="P1" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P2" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P3" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P4" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P5" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P6" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P7" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P9" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT"/>
<paraStyle name="P10" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/>
<paraStyle name="P11" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT"/>
<paraStyle name="P12" fontName="Helvetica" fontSize="2.0" leading="3"/>
<paraStyle name="P13" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_space" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Table Contents" fontName="Helvetica"/>
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
<paraStyle name="payslip_adj" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
<para style="P1">[[repeatIn(objects,'o')]]</para>
<blockTable colWidths="539.0" style="Table1">
<tr>
<td>
<para style="P6">PaySlip Lines by Contribution Register</para>
</td>
</tr>
</blockTable>
<para style="P7">
<font color="white"> </font>
</para>
<para style="P5">
<font color="white"> </font>
</para>
<para style="terp_default_Bold_8">
<font face="Helvetica-Bold" size="8.0">Register Name: [[o.name]]</font>
</para>
<para style="P8">
<font color="white"> </font>
</para>
<blockTable colWidths="115.0,46.0,289.0,88.0" style="Table2">
<tr>
<td>
<para style="P9">PaySlip Name</para>
</td>
<td>
<para style="P9">Code</para>
</td>
<td>
<para style="P9">Name</para>
</td>
<td>
<para style="P10">Amount (in [[o.company_id and o.company_id.currency_id.symbol or '']])</para>
</td>
</tr>
</blockTable>
<section>
<para style="P3">[[repeatIn(get_payslip_lines(o, data['form']),'r') ]]</para>
<blockTable colWidths="116.0,46.0,289.0,88.0" style="Table16">
<tr>
<td>
<para style="P13">[[ r.get('payslip_name', False) ]]<font face="Helvetica">[[ r.get('payslip_name', False) and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font')]]</font></para>
</td>
<td>
<para style="P3">[[ r['code'] ]]</para>
</td>
<td>
<para style="P3">[[ r['name'] ]]</para>
</td>
<td>
<para style="P4">[[ r['total'] or '0.0']]</para>
</td>
</tr>
</blockTable>
</section>
<para style="P8">
<font color="white"> </font>
</para>
<para style="P2">
<font color="white"> </font>
</para>
<para style="Standard">
<font color="white"> </font>
</para>
</story>
</document>

View File

@ -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:

View File

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
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:

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_payslip_lines_contribution_register" model="ir.ui.view">
<field name="name">payslip.lines.contribution.register</field>
<field name="model">payslip.lines.contribution.register</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Contribution Register's Payslip Lines">
<group col="4" colspan="6">
<field name="date_from"/>
<newline/>
<field name="date_to"/>
</group>
<separator colspan="4"/>
<group col="2" colspan="4">
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
<button name="print_report" string="Print" colspan="1" type="object" icon="gtk-print"/>
</group>
</form>
</field>
</record>
<record id="action_payslip_lines_contribution_register" model="ir.actions.act_window">
<field name="name">PaySlip Lines</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">payslip.lines.contribution.register</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record model="ir.values" id="hr_holidays_summary_employee_value">
<field name="model_id" ref="model_hr_contribution_register" />
<field name="object" eval="1" />
<field name="name">PaySlip Lines</field>
<field name="key2">client_print_multi</field>
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_payslip_lines_contribution_register'))" />
<field name="key">action</field>
<field name="model">hr.contribution.register</field>
</record>
</data>
</openerp>