Merge lp:~openerp-canada/openerp-canada/6.1-l10n_ca_hr_payroll into lp:openerp-canada/6.1

Status: Merged
Merged at revision: 5
Proposed branch: lp:~openerp-canada/openerp-canada/6.1-l10n_ca_hr_payroll
Merge into: lp:openerp-canada/6.1
Diff against target: 2837 lines (+2682/-0)
23 files modified
l10n_ca_hr_payroll/AUTHORS.txt (+4/-0)
l10n_ca_hr_payroll/__init__.py (+24/-0)
l10n_ca_hr_payroll/__openerp__.py (+50/-0)
l10n_ca_hr_payroll/l10n_ca_hr_payroll.py (+260/-0)
l10n_ca_hr_payroll/l10n_ca_hr_payroll_data.xml (+282/-0)
l10n_ca_hr_payroll/l10n_ca_hr_payroll_view.xml (+210/-0)
l10n_ca_hr_payroll_account/AUTHORS.txt (+3/-0)
l10n_ca_hr_payroll_account/__init__.py (+22/-0)
l10n_ca_hr_payroll_account/__openerp__.py (+51/-0)
l10n_ca_hr_payroll_account/l10n_ca_hr_payroll_account_data.xml (+31/-0)
l10n_ca_on_hr_payroll/__init__.py (+24/-0)
l10n_ca_on_hr_payroll/__openerp__.py (+52/-0)
l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll.py (+141/-0)
l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll_data.xml (+597/-0)
l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll_view.xml (+149/-0)
l10n_ca_qc_hr_payroll/__init__.py (+24/-0)
l10n_ca_qc_hr_payroll/__openerp__.py (+46/-0)
l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll.py (+38/-0)
l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll_data.xml (+534/-0)
l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll_view.xml (+18/-0)
l10n_ca_qc_hr_payroll_account/__init__.py (+22/-0)
l10n_ca_qc_hr_payroll_account/__openerp__.py (+56/-0)
l10n_ca_qc_hr_payroll_account/l10n_ca_qc_hr_payroll_account_data.xml (+44/-0)
To merge this branch: bzr merge lp:~openerp-canada/openerp-canada/6.1-l10n_ca_hr_payroll
Reviewer Review Type Date Requested Status
Maxime Chambreuil (http://www.savoirfairelinux.com) Approve
Review via email: mp+141101@code.launchpad.net

Description of the change

[ADD] Canadian and Quebec basic payroll rules
[ADD] Canadian and Quebec payroll accounting

To post a comment you must log in.
Revision history for this message
Maxime Chambreuil (http://www.savoirfairelinux.com) (max3903) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory 'l10n_ca_account_fiscal_position_rule/static'
=== added directory 'l10n_ca_account_fiscal_position_rule/static/src'
=== added directory 'l10n_ca_account_fiscal_position_rule/static/src/img'
=== added file 'l10n_ca_account_fiscal_position_rule/static/src/img/icon.png'
0Binary files l10n_ca_account_fiscal_position_rule/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_account_fiscal_position_rule/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ0Binary files l10n_ca_account_fiscal_position_rule/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_account_fiscal_position_rule/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ
=== added directory 'l10n_ca_hr_payroll'
=== added file 'l10n_ca_hr_payroll/AUTHORS.txt'
--- l10n_ca_hr_payroll/AUTHORS.txt 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll/AUTHORS.txt 2012-12-21 16:45:28 +0000
@@ -0,0 +1,4 @@
1Amura Consulting
2Pierre Lamarche <pierre.lamarche@savoirfairelinux.com>
3Maxime Chambreuil <maxime.chambreuil@savoirfairelinux.com>
4Savoir-faire Linux <contact@savoirfairelinux.com>
05
=== added file 'l10n_ca_hr_payroll/__init__.py'
--- l10n_ca_hr_payroll/__init__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll/__init__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,24 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 OpenERP Canada. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published
8# by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22import l10n_ca_hr_payroll
23
24# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
025
=== added file 'l10n_ca_hr_payroll/__openerp__.py'
--- l10n_ca_hr_payroll/__openerp__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll/__openerp__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,50 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 OpenERP Canada. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU Affero General Public License for more details.
15#
16# You should have received a copy of the GNU Affero General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
19##############################################################################
20{
21 'name': 'Canada - Payroll',
22 'category': 'Localization',
23 'version': '0.1',
24 'license': 'AGPL-3',
25 'category': 'Generic Modules/Human Resources',
26 'description': """
27Canada Payroll Rules
28==============================
29 * Adds Federal Salary Rules
30 * Adds Federal Salary Structure
31 * Adds Federal Claim Codes, Deductions and Exemptions on the Employee Form
32 * Adds 'Pays Per Year' field on the Contract Form
33 """,
34 'author':'OpenERP Canada',
35 'website':'http://launchpad.net/openerp-canada',
36 'depends': [
37 'hr_payroll',
38 'l10n_ca_toponyms',
39 ],
40 'data': [
41 'l10n_ca_hr_payroll_view.xml',
42 'l10n_ca_hr_payroll_data.xml',
43 ],
44 'test': [],
45 'demo': [],
46 'installable': True,
47 'active': False,
48}
49
50# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
051
=== added file 'l10n_ca_hr_payroll/l10n_ca_hr_payroll.py'
--- l10n_ca_hr_payroll/l10n_ca_hr_payroll.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll/l10n_ca_hr_payroll.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,260 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 Amura Consulting. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published
8# by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from osv import fields, osv
23
24def get_jurisdiction(self, cursor, user_id, context=None):
25 return (
26 ('federal', 'Federal'),
27 ('provincial', 'Provincial'))
28
29def get_type(self, cursor, user_id, context=None):
30 return (
31 ('federal', 'Federal'),
32 ('ei', 'Employment Insurance'),
33 ('qc', 'Quebec'),
34 ('rqap', 'RQAP / RRQ'),
35 ('csst', 'CSST'))
36
37class hr_payroll_tax_table(osv.osv):
38 '''
39 Canadian Tax Payroll Table
40 '''
41 _name = 'hr.payroll.tax.table'
42 _description = 'Canadian Tax Payroll Table'
43
44 def onchange_year(self, cr, uid, ids, year, prov=False):
45 res = {}
46 res['name'] = 'Tax Table: ' + str(year)
47 if prov:
48 prov_obj = self.pool.get('res.country.state').browse(cr, uid, prov)
49 res['name'] += ' / Provincial - ' + prov_obj.code
50 else:
51 res['name'] += ' / Federal'
52
53 return {'value': res}
54
55 _columns = {
56 'name': fields.char('Description', size=128),
57 'year': fields.integer('Year', required=True),
58 'date_from': fields.date('Date From'),
59 'date_to': fields.date('Date To'),
60 'jurisdiction': fields.selection(get_jurisdiction, 'Jurisdiction', required=True),
61 'state_id': fields.many2one('res.country.state', 'Province'),
62 'type': fields.selection(get_type, 'Type', required=True),
63 'line_federal_ids': fields.one2many('hr.payroll.tax.table.federal.line', 'table_id', 'Lines'),
64 'line_ei_ids': fields.one2many('hr.payroll.tax.table.ei.line', 'table_id', 'Lines'),
65 'line_qc_ids': fields.one2many('hr.payroll.tax.table.qc.line', 'table_id', 'Lines'),
66 'line_rqap_ids': fields.one2many('hr.payroll.tax.table.rqap.line', 'table_id', 'Lines'),
67 'line_csst_ids': fields.one2many('hr.payroll.tax.table.csst.line', 'table_id', 'Lines'),
68 }
69
70 _defaults = {
71 'jurisdiction': 'federal',
72 'type': 'federal',
73 }
74
75hr_payroll_tax_table()
76
77class hr_payroll_tax_table_federal_line(osv.osv):
78 '''
79 Federal Lines
80 '''
81 _name = 'hr.payroll.tax.table.federal.line'
82 _description = 'Federal Lines'
83 _columns = {
84 'table_id': fields.many2one('hr.payroll.tax.table', 'Table'),
85 'inc_from': fields.float('Income From', digits=(16, 2), required=True),
86 'inc_to': fields.float('Income To', digits=(16, 2), required=True),
87 'code0': fields.float('Code 0', digits=(16, 2)),
88 'code1': fields.float('Code 1', digits=(16, 2)),
89 'code2': fields.float('Code 2', digits=(16, 2)),
90 'code3': fields.float('Code 3', digits=(16, 2)),
91 'code4': fields.float('Code 4', digits=(16, 2)),
92 'code5': fields.float('Code 5', digits=(16, 2)),
93 'code6': fields.float('Code 6', digits=(16, 2)),
94 'code7': fields.float('Code 7', digits=(16, 2)),
95 'code8': fields.float('Code 8', digits=(16, 2)),
96 'code9': fields.float('Code 9', digits=(16, 2)),
97 'code10': fields.float('Code 10', digits=(16, 2)),
98 }
99
100 _rec_name = 'inc_from'
101
102hr_payroll_tax_table_federal_line()
103
104class hr_payroll_tax_table_ei_line(osv.osv):
105 '''
106 Employment Insurance Lines
107 '''
108 _name = 'hr.payroll.tax.table.ei.line'
109 _description = 'Employment Insurance Lines'
110 _columns = {
111 'table_id': fields.many2one('hr.payroll.tax.table', 'Table'),
112 'inc_from': fields.float('Income From', digits=(16, 2), required=True),
113 'inc_to': fields.float('Income To', digits=(16, 2), required=True),
114 'rate': fields.float('Rate', digits=(16, 2), required=True),
115 'max_annual_insurable_earnings': fields.float('Maximum Annual Insurable Earnings', digits=(16, 2), required=True),
116 }
117
118 _rec_name = 'inc_from'
119
120hr_payroll_tax_table_ei_line()
121
122class hr_payroll_tax_table_qc_line(osv.osv):
123 '''
124 Quebec Lines
125 '''
126 _name = 'hr.payroll.tax.table.qc.line'
127 _description = 'Quebec Lines'
128 _columns = {
129 'table_id': fields.many2one('hr.payroll.tax.table', 'Table'),
130 'inc_from': fields.float('Income From', digits=(16, 2), required=True),
131 'inc_to': fields.float('Income To', digits=(16, 2), required=True),
132 'code0': fields.float('Code 0', digits=(16, 2)),
133 'codeA': fields.float('Code A', digits=(16, 2)),
134 'codeB': fields.float('Code B', digits=(16, 2)),
135 'codeC': fields.float('Code C', digits=(16, 2)),
136 'codeD': fields.float('Code D', digits=(16, 2)),
137 'codeE': fields.float('Code E', digits=(16, 2)),
138 'codeF': fields.float('Code F', digits=(16, 2)),
139 'codeG': fields.float('Code G', digits=(16, 2)),
140 'codeH': fields.float('Code H', digits=(16, 2)),
141 'codeI': fields.float('Code I', digits=(16, 2)),
142 'codeJ': fields.float('Code J', digits=(16, 2)),
143 'codeK': fields.float('Code K', digits=(16, 2)),
144 'codeL': fields.float('Code L', digits=(16, 2)),
145 'codeM': fields.float('Code M', digits=(16, 2)),
146 'codeN': fields.float('Code N', digits=(16, 2)),
147 'codeY': fields.float('Code Y', digits=(16, 2)),
148 'codeZ': fields.float('Code Z', digits=(16, 2)),
149 }
150
151 _rec_name = 'inc_from'
152
153hr_payroll_tax_table_qc_line()
154
155class hr_payroll_tax_table_rqap_line(osv.osv):
156 '''
157 RQAP Lines
158 '''
159 _name = 'hr.payroll.tax.table.rqap.line'
160 _description = 'RQAP Lines'
161 _columns = {
162 'table_id': fields.many2one('hr.payroll.tax.table', 'Table'),
163 'inc_from': fields.float('Income From', digits=(16, 2), required=True),
164 'inc_to': fields.float('Income To', digits=(16, 2), required=True),
165 'employee_contrib': fields.float('Employee contribution', digits=(16, 2)),
166 'employer_contrib': fields.float('Employer contribution', digits=(16, 2)),
167 'max_annual_insurable_earnings': fields.float('Maximum Annual Insurable Earnings', digits=(16, 2)),
168 }
169
170hr_payroll_tax_table_rqap_line()
171
172class hr_payroll_tax_table_csst_line(osv.osv):
173 '''
174 CSST Lines
175 '''
176 _name = 'hr.payroll.tax.table.csst.line'
177 _description = 'CSST Lines'
178 _columns = {
179 'name': fields.char('Name', size=256, required=True),
180 'table_id': fields.many2one('hr.payroll.tax.table', 'Table'),
181 }
182
183hr_payroll_tax_table_csst_line()
184
185class hr_employee(osv.osv):
186 _name = 'hr.employee'
187 _inherit = 'hr.employee'
188
189 _columns = {
190 'ei_exempt': fields.boolean('EI Exempt'),
191 'td1f': fields.selection([('code1',1),('code2',2),('code3',3),('code4',4),('code5',5),('code6',6),('code7',7),('code8',8),('code9',9),('code10',10),('code0',0)], 'Federal Claim Code', required=True),
192 'td1p': fields.selection([('codeA','A'),('codeB','B'),('codeC','C'),('codeD','D'),('codeE','E'),('codeF','F'),('codeG','G'),('codeH','H'),('codeI','I'),('codeJ','J'),('codeK','K'),('codeL','L'),('codeM','M'),('codeN','N'),('codeY','Y'),('codeZ','Z'),('code0',0)], 'Provincial Claim Code', required=True),
193 'cpp_exempt': fields.boolean('CPP/QPP Exempt'),
194 'qpip_exempt': fields.boolean('QPIP Exempt'),
195 'cpp_ytd_adj': fields.float('CPP/QPP YTD Adjustment', help="Amount to adjust CPP/QPP for calculations. Used if employee has contributed elsewhere and will be factored in when calculating maximum CPP payment"),
196 'ei_ytd_adj': fields.float('EI YTD Adjustment', help="Amount to adjust EI for calculations. Used if employee has contributed elsewhere and will be factored in when calculating maximum EI payment"),
197 'vac_pay': fields.float('Vacation Pay %', digits=(16,2)),
198 'f1': fields.float('Childcare/Alimony (F1)', digits=(16,2), help="Annual deductions such as child care expenses and support payments, etc., authorized by a tax services office or tax centre"),
199 'f2': fields.float('Alimony/Maint Garnish (F2)', digits=(16,2), help="Alimony or maintenance payments required by a legal document to be payroll-deducted authorized by a tax services office or tax centre"),
200 'hd': fields.float('Prescribed Zone (HD)', digits=(16,2), help="Annual deduction for living in a prescribed zone as indicated on Form TD1"),
201 'lcf': fields.float('Fed Labour sponsored funds (LCF)', digits=(16,2), help="Federal labour-sponsored funds tax credit"),
202 'lcp': fields.float('Prov Labour sponsored funds (LCP)', digits=(16,2), help="Provincial or territorial labour-sponsored funds tax credit"),
203 'f': fields.float('RSP/RPP/RCA (F)', digits=(16,2), help="Payroll deductions for employee contributions to a registered pension plan (RPP), a registered retirement savings plan (RRSP), or a retirement compensation arrangement (RCA)"),
204 'l': fields.float('Extra Tax Deductions (L)', digits=(16,2), help="Extra tax deductions requested for the pay period."),
205 'k3': fields.float('Federal Medical (K3)', digits=(16,2), help="Other federal tax credits, such as medical expenses and charitable donations authorized by a tax services office or tax centre"),
206 'u1': fields.float('Union Dues (U1)', digits=(16,2), help="Union dues"),
207 'y': fields.float('MB/ON Extra Tax Reduction(Y)', digits=(16,2), help="Extra provincial or territorial tax reduction based on applicable amounts reported on the provincial or territorial Form TD1"),
208 'td1': fields.float('Personal Tax Credits Return (TD1)', digits=(16,2), required=True, help="Personal Tax Credits Return"),
209 'eeins': fields.float('Insurance - Employee Contribution (EeINS)', digits=(16,2), required=True),
210 'erins': fields.float('Insurance - Employer Contribution (ErINS)', digits=(16,2), required=True),
211 }
212
213 _defaults = {
214 'td1f': 'code1',
215 'td1p': 'codeA',
216 'td1': 10822.00,
217 'eeins': 0.00,
218 'erins': 0.00,
219 }
220
221hr_employee()
222
223class hr_contract(osv.osv):
224 _inherit = 'hr.contract'
225
226 def _get_pays_per_year(self, cr, uid, ids, names, arg, context=None):
227 """
228 @param ids: ID of contract
229 @return: The number of pays per year
230 """
231 res = {}
232 #FIXME: Should likely pull these values from somewhere else, depending on whether a 52 or 53 year week is used
233 schedule_pay = {
234 'weekly': 52,
235 'bi-weekly': 26,
236 'monthly': 12,
237 'bi-monthly': 6,
238 'quarterly': 4,
239 'semi-annually': 2,
240 'annually': 1,
241 }
242 for contract in self.browse(cr, uid, ids, context):
243 if contract.schedule_pay and schedule_pay.get(contract.schedule_pay, False):
244 res[contract.id] = schedule_pay[contract.schedule_pay]
245
246 return res
247
248 _columns = {
249 'pays_per_year': fields.function(_get_pays_per_year, method=True, string='Pays Per Year', type='float', readonly=True),
250 'weeks_of_vacation': fields.integer('Number of weeks of vacation', required=True),
251 }
252
253 _defaults = {
254 'weeks_of_vacation': 2,
255 }
256
257hr_contract()
258
259
260# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
0261
=== added file 'l10n_ca_hr_payroll/l10n_ca_hr_payroll_data.xml'
--- l10n_ca_hr_payroll/l10n_ca_hr_payroll_data.xml 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll/l10n_ca_hr_payroll_data.xml 2012-12-21 16:45:28 +0000
@@ -0,0 +1,282 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="1">
4
5 <!-- Salary Rules Category -->
6
7 <record id="I" model="hr.salary.rule.category">
8 <field name="name">Taxable Income</field>
9 <field name="code">I</field>
10 </record>
11
12 <record id="CALC" model="hr.salary.rule.category">
13 <field name="code">CALC</field>
14 <field name="name">Standard Calculation</field>
15 </record>
16
17 <record id="FCALC" model="hr.salary.rule.category">
18 <field name="code">FCALC</field>
19 <field name="name">Federal Calculation</field>
20 </record>
21
22 <record id="PCALC" model="hr.salary.rule.category">
23 <field name="code">PCALC</field>
24 <field name="name">Provincial Calculation</field>
25 </record>
26
27 <record id="EMP" model="hr.salary.rule.category">
28 <field name="code">EMP</field>
29 <field name="name">Employer Contribution</field>
30 </record>
31
32 <record id="SDED" model="hr.salary.rule.category">
33 <field name="code">SDED</field>
34 <field name="name">Source Deduction</field>
35 <field name="note">Used for after tax deductions at source</field>
36 </record>
37
38 <record id="VAC" model="hr.salary.rule.category">
39 <field name="code">VAC</field>
40 <field name="name">Vacation Calculation</field>
41 </record>
42
43 <!-- Update salary rules of hr_payroll -->
44
45 <record id="hr_payroll.hr_rule_basic" model="hr.salary.rule">
46 <field name="appears_on_payslip" eval="0"/>
47 </record>
48
49 <record id="hr_payroll.hr_rule_taxable" model="hr.salary.rule">
50 <field name="appears_on_payslip" eval="0"/>
51 </record>
52
53 <record id="hr_payroll.hr_rule_net" model="hr.salary.rule">
54 <field name="amount_python_compute">result = BASICP + categories.ALW - categories.DED - categories.SDED</field>
55 </record>
56
57 <!-- Common rules to all canadian salary structures -->
58
59 <record id="rule_ca_p" model="hr.salary.rule">
60 <field name="name">Pays Per Year</field>
61 <field name="sequence" eval="1"/>
62 <field name="code">P</field>
63 <field name="appears_on_payslip" eval="0"/>
64 <field name="active" eval="1"/>
65 <field name="category_id" ref="CALC"/>
66 <field name="condition_select">none</field>
67 <field name="amount_select">code</field>
68 <field name="amount_python_compute">result = contract.pays_per_year or 0</field>
69 <field name="note">Pays per year from the contract form</field>
70 </record>
71
72 <record id="rule_ca_pocc" model="hr.salary.rule">
73 <field name="name">Payslip Counter (POCC)</field>
74 <field name="sequence" eval="1"/>
75 <field name="code">POCC</field>
76 <field name="appears_on_payslip" eval="0"/>
77 <field name="active" eval="1"/>
78 <field name="category_id" ref="CALC"/>
79 <field name="condition_select">none</field>
80 <field name="amount_select">fix</field>
81 <field name="quantity">1.0</field>
82 <field name="amount_fix">1.0</field>
83 <field name="note">Sloppy way of counting payslips for use in PR calc</field>
84 </record>
85
86 <record id="rule_ca_basic" model="hr.salary.rule">
87 <field name="name">Basic per pay (BASICP)</field>
88 <field name="sequence" eval="10"/>
89 <field name="code">BASICP</field>
90 <field name="appears_on_payslip" eval="1"/>
91 <field name="active" eval="1"/>
92 <field name="category_id" ref="CALC"/>
93 <field name="condition_select">none</field>
94 <field name="amount_select">code</field>
95 <field name="amount_python_compute">result = BASIC / P</field>
96 </record>
97
98 <record id="rule_ca_gross" model="hr.salary.rule">
99 <field name="name">Gross per pay (GROSSP)</field>
100 <field name="sequence" eval="101"/>
101 <field name="code">GROSSP</field>
102 <field name="appears_on_payslip" eval="1"/>
103 <field name="active" eval="1"/>
104 <field name="category_id" ref="CALC"/>
105 <field name="condition_select">none</field>
106 <field name="amount_select">code</field>
107 <field name="amount_python_compute">result = GROSS / P</field>
108 </record>
109
110 <!-- Employment Insurance - 140 -->
111
112 <record id="rule_ca_ei_maxie" model="hr.salary.rule">
113 <field name="name">EI - Maximum Insurable Earnings (EIMAXIE)</field>
114 <field name="sequence" eval="140"/>
115 <field name="code">EIMAXIE</field>
116 <field name="appears_on_payslip" eval="0"/>
117 <field name="active" eval="1"/>
118 <field name="category_id" ref="FCALC"/>
119 <field name="condition_select">none</field>
120 <field name="amount_select">code</field>
121 <field name="amount_python_compute">result = min(GROSS,45900)</field>
122 </record>
123
124 <!-- Employment Insurance - Employer - 145 -->
125
126 <record id="rule_ca_ei_er_c" model="hr.salary.rule">
127 <field name="name">EI - Employer - Contribution (EIERC)</field>
128 <field name="sequence" eval="145"/>
129 <field name="code">EIERC</field>
130 <field name="category_id" ref="EMP"/>
131 <field name="appears_on_payslip" eval="0"/>
132 <field name="active" eval="1"/>
133 <field name="condition_select">python</field>
134 <field name="condition_python">result = not employee.ei_exempt</field>
135 <field name="amount_select">percentage</field>
136 <field name="amount_percentage_base">EIEEC</field>
137 <field name="quantity">1.0</field>
138 <field name="amount_percentage">140.0</field>
139 </record>
140
141 <record id="rule_ca_ei_er_pytdc" model="hr.salary.rule">
142 <field name="name">EI - Employer - Previous Year To Date Contribution (EIERPYTDC)</field>
143 <field name="sequence" eval="145"/>
144 <field name="code">EIERPYTDC</field>
145 <field name="category_id" ref="l10n_ca_hr_payroll.FCALC"/>
146 <field name="appears_on_payslip" eval="0"/>
147 <field name="active" eval="1"/>
148 <field name="condition_select">none</field>
149 <field name="amount_select">code</field>
150 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
151date_to = payslip.date_to
152result = payslip.sum('EIERYTDC',date_from,date_to)
153 </field>
154 </record>
155
156 <record id="rule_ca_ei_er_ytdc" model="hr.salary.rule">
157 <field name="name">EI - Employer - Year To Date Contribution (EIERYTDC)</field>
158 <field name="sequence" eval="146"/>
159 <field name="code">EIERYTDC</field>
160 <field name="category_id" ref="l10n_ca_hr_payroll.FCALC"/>
161 <field name="appears_on_payslip" eval="0"/>
162 <field name="active" eval="1"/>
163 <field name="condition_select">none</field>
164 <field name="amount_select">code</field>
165 <field name="amount_python_compute">result = EIERPYTDC + EIERC</field>
166 </record>
167
168 <!-- Federal Income Tax - 170 -->
169
170 <record id="rule_ca_fit_rate" model="hr.salary.rule">
171 <field name="name">FIT - Rate 16.5% (FITRATE)</field>
172 <field name="sequence" eval="170"/>
173 <field name="code">FITRATE</field>
174 <field name="appears_on_payslip" eval="0"/>
175 <field name="active" eval="1"/>
176 <field name="category_id" ref="FCALC"/>
177 <field name="condition_select">none</field>
178 <field name="amount_select">fix</field>
179 <field name="quantity">1.0</field>
180 <field name="amount_fix">16.5</field>
181 </record>
182
183 <record id="rule_ca_fit_ti" model="hr.salary.rule">
184 <field name="name">FIT - Taxable Income (FITTI)</field>
185 <field name="sequence" eval="171"/>
186 <field name="code">FITTI</field>
187 <field name="appears_on_payslip" eval="0"/>
188 <field name="active" eval="1"/>
189 <field name="category_id" ref="FCALC"/>
190 <field name="condition_select">none</field>
191 <field name="amount_select">code</field>
192 <field name="amount_python_compute">result = GROSS - (employee.td1 + QPIPEEMAXC + QPPEEMAXC + EIEEMAXC) * (1 + FITRATE * 0.01)</field>
193 </record>
194
195 <record id="rule_ca_fit" model="hr.salary.rule">
196 <field name="name">FIT - Federal Income Tax (FIT)</field>
197 <field name="sequence" eval="172"/>
198 <field name="code">FIT</field>
199 <field name="appears_on_payslip" eval="1"/>
200 <field name="active" eval="1"/>
201 <field name="category_id" ref="hr_payroll.DED"/>
202 <field name="condition_select">none</field>
203 <field name="amount_select">code</field>
204 <field name="amount_python_compute">if FITTI &gt;= 132407:
205 res = (FITTI - 132407) * 0.29 + (132407-85415) * 0.26 + (85414-42708) * 0.22 + 42707 * 0.15
206if FITTI &gt;= 85415 and FITTI &lt; 132407:
207 res = (FITTI - 85415) * 0.26 + (85414-42708) * 0.22 + 42707 * 0.15
208if FITTI &gt;= 42708 and FITTI &lt; 85414:
209 res = (FITTI - 42708) * 0.22 + 42707 * 0.15
210if FITTI &lt; 42707:
211 res = FITTI * 0.15
212result = res / P
213 </field>
214 </record>
215
216 <record id="rule_ca_fit_ytd" model="hr.salary.rule">
217 <field name="name">FIT - Year To Date (FITYTD)</field>
218 <field name="sequence" eval="173"/>
219 <field name="code">FITYTD</field>
220 <field name="category_id" ref="FCALC"/>
221 <field name="appears_on_payslip" eval="1"/>
222 <field name="active" eval="1"/>
223 <field name="condition_select">none</field>
224 <field name="amount_select">code</field>
225 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
226date_to = payslip.date_to
227result = payslip.sum('FITYTD',date_from,date_to) + FIT
228 </field>
229 </record>
230
231 <!-- Vacation - 210 -->
232
233 <record id="rule_ca_vac" model="hr.salary.rule">
234 <field name="name">Vacation (VAC)</field>
235 <field name="sequence" eval="210"/>
236 <field name="code">VAC</field>
237 <field name="category_id" ref="VAC"/>
238 <field name="condition_select">none</field>
239 <field name="amount_select">code</field>
240 <field name="amount_python_compute">result = GROSSP * contract.weeks_of_vacation * 0.02</field>
241 </record>
242
243 <record id="rule_ca_vac_ytd" model="hr.salary.rule">
244 <field name="name">Vacation - Year To Date (VACYTD)</field>
245 <field name="sequence" eval="211"/>
246 <field name="code">VACYTD</field>
247 <field name="category_id" ref="VAC"/>
248 <field name="appears_on_payslip" eval="1"/>
249 <field name="active" eval="1"/>
250 <field name="condition_select">none</field>
251 <field name="amount_select">code</field>
252 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
253date_to = payslip.date_to
254result = payslip.sum('VACYTD',date_from,date_to) + VAC
255 </field>
256 </record>
257
258 <!-- Base for Canadian Salary Structure -->
259
260 <record id="hr_structure_ca_base" model="hr.payroll.structure">
261 <field name="code">CA</field>
262 <field name="name">Canadian Base</field>
263 <field eval="[(6, 0, [
264 ref('rule_ca_p'),
265 ref('rule_ca_pocc'),
266 ref('rule_ca_basic'),
267 ref('rule_ca_gross'),
268 ref('rule_ca_ei_maxie'),
269 ref('rule_ca_ei_er_c'),
270 ref('rule_ca_ei_er_pytdc'),
271 ref('rule_ca_ei_er_ytdc'),
272 ref('rule_ca_fit_rate'),
273 ref('rule_ca_fit_ti'),
274 ref('rule_ca_fit'),
275 ref('rule_ca_fit_ytd'),
276 ref('rule_ca_vac'),
277 ref('rule_ca_vac_ytd')
278 ])]" name="rule_ids"/>
279 </record>
280
281 </data>
282</openerp>
0283
=== added file 'l10n_ca_hr_payroll/l10n_ca_hr_payroll_view.xml'
--- l10n_ca_hr_payroll/l10n_ca_hr_payroll_view.xml 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll/l10n_ca_hr_payroll_view.xml 2012-12-21 16:45:28 +0000
@@ -0,0 +1,210 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <record id="hr_payroll_tax_table_form" model="ir.ui.view">
6 <field name="name">hr.payroll.tax.table.form</field>
7 <field name="model">hr.payroll.tax.table</field>
8 <field name="type">form</field>
9 <field name="arch" type="xml">
10 <form string="Canadian Tax Table">
11 <field name="name" select="1"/>
12 <field name="year" select="1" on_change="onchange_year(year,state_id)"/>
13 <field name="date_from"/>
14 <field name="date_to"/>
15 <field name="jurisdiction"/>
16 <field name="state_id"
17 attrs="{'invisible': [('jurisdiction','!=','provincial')], 'required': [('jurisdiction','=','provincial')]}"
18 on_change="onchange_year(year,state_id)"
19 domain="[('country_id.code', '=', 'CA')]"/>
20 <field name="type"/>
21 <newline/>
22 <separator colspan="4"/>
23 <newline/>
24 <field name="line_federal_ids" nolabel="1" colspan="4" widget="one2many_list"
25 attrs="{'invisible': [('type','!=','federal')]}">
26 <tree string="Federal Lines" editable="top">
27 <field name="inc_from"/>
28 <field name="inc_to"/>
29 <field name="code0"/>
30 <field name="code1"/>
31 <field name="code2"/>
32 <field name="code3"/>
33 <field name="code4"/>
34 <field name="code5"/>
35 <field name="code6"/>
36 <field name="code7"/>
37 <field name="code8"/>
38 <field name="code9"/>
39 <field name="code10"/>
40 </tree>
41 </field>
42 <field name="line_ei_ids" nolabel="1" colspan="4" widget="one2many_list"
43 attrs="{'invisible': [('type','!=','ei')]}">
44 <tree string="Employment Insurance Lines" editable="top">
45 <field name="inc_from"/>
46 <field name="inc_to"/>
47 <field name="rate"/>
48 <field name="max_annual_insurable_earnings"/>
49 </tree>
50 </field>
51 <field name="line_qc_ids" nolabel="1" colspan="4" widget="one2many_list"
52 attrs="{'invisible': [('type','!=','qc')]}">
53 <tree string="Quebec Lines" editable="top">
54 <field name="inc_from"/>
55 <field name="inc_to"/>
56 <field name="code0"/>
57 <field name="codeA"/>
58 <field name="codeB"/>
59 <field name="codeC"/>
60 <field name="codeD"/>
61 <field name="codeE"/>
62 <field name="codeF"/>
63 <field name="codeG"/>
64 <field name="codeH"/>
65 <field name="codeI"/>
66 <field name="codeJ"/>
67 <field name="codeK"/>
68 <field name="codeL"/>
69 <field name="codeM"/>
70 <field name="codeN"/>
71 <field name="codeY"/>
72 <field name="codeZ"/>
73 </tree>
74 </field>
75 <field name="line_rqap_ids" nolabel="1" colspan="4" widget="one2many_list"
76 attrs="{'invisible': [('type','!=','rqap')]}">
77 <tree string="RQAP / RRQ Lines" editable="top">
78 <field name="inc_from"/>
79 <field name="inc_to"/>
80 <field name="employee_contrib"/>
81 <field name="employer_contrib"/>
82 <field name="max_annual_insurable_earnings"/>
83 </tree>
84 </field>
85 <field name="line_csst_ids" nolabel="1" colspan="4" widget="one2many_list"
86 attrs="{'invisible': [('type','!=','csst')]}">
87 <tree string="CSST Lines" editable="top">
88 <field name="name"/>
89 </tree>
90 </field>
91 </form>
92 </field>
93 </record>
94
95 <record id="hr_payroll_tax_table_search" model="ir.ui.view">
96 <field name="name">hr.payroll.tax.table.search</field>
97 <field name="model">hr.payroll.tax.table</field>
98 <field name="type">search</field>
99 <field name="arch" type="xml">
100 <search string="Canadian Tax Table">
101 <field name="name"/>
102 <field name="year"/>
103 <field name="jurisdiction"/>
104 <field name="state_id"/>
105 <field name="type"/>
106 </search>
107 </field>
108 </record>
109
110 <record id="hr_payroll_tax_table_tree" model="ir.ui.view">
111 <field name="name">hr.payroll.tax.table.tree</field>
112 <field name="model">hr.payroll.tax.table</field>
113 <field name="type">tree</field>
114 <field name="arch" type="xml">
115 <tree string="Canadian Tax Table">
116 <field name="name"/>
117 <field name="year"/>
118 <field name="jurisdiction"/>
119 <field name="state_id"/>
120 <field name="type"/>
121 </tree>
122 </field>
123 </record>
124
125 <record id="action_hr_payroll_tax_table_tree" model="ir.actions.act_window">
126 <field name="name">Canadian Tax Table</field>
127 <field name="res_model">hr.payroll.tax.table</field>
128 <field name="view_type">form</field>
129 <field name="view_mode">tree,form</field>
130 <field name="view_id" ref="hr_payroll_tax_table_tree"/>
131 <field name="search_view_id" ref="hr_payroll_tax_table_search"/>
132 </record>
133
134 <menuitem id="menu_hr_payroll_tax_table_tree" action="action_hr_payroll_tax_table_tree" parent="hr_payroll.payroll_configure"/>
135
136 <record id="hr_employee_view_form_inherit" model="ir.ui.view">
137 <field name="name">hr.employee.view.form.inherit</field>
138 <field name="model">hr.employee</field>
139 <field name="type">form</field>
140 <field name="inherit_id" ref="hr.view_employee_form"/>
141 <field name="arch" type="xml">
142 <notebook position="inside">
143 <page string="Canadian Payroll">
144 <group colspan="1" col="2">
145 <separator string="Claim Codes" colspan="2"/>
146 <field name="td1f" colspan="1"/>
147 <field name="td1p" colspan="1"/>
148 </group>
149 <group colspan="3" col="2">
150 <separator string="Exemptions" colspan="2"/>
151 <group colspan="1" col="2">
152 <field name="ei_ytd_adj"/>
153 <field name="cpp_ytd_adj"/>
154 </group>
155 <group colspan="1" col="2">
156 <field name="ei_exempt"/>
157 <field name="cpp_exempt"/>
158 <field name="qpip_exempt"/>
159 </group>
160 </group>
161 <separator string="Deductions" colspan="4"/>
162 <field name="f1"/>
163 <field name="f2"/>
164 <field name="hd"/>
165 <field name="lcf"/>
166 <field name="lcp"/>
167 <field name="f"/>
168 <field name="k3"/>
169 <field name="u1"/>
170 <field name="y"/>
171 <field name="l"/>
172 <field name="td1"/>
173 <field name="eeins"/>
174 <field name="erins"/>
175 </page>
176 </notebook>
177 </field>
178 </record>
179
180 <!-- Contract View -->
181 <record id="hr_contract_form_inherit" model="ir.ui.view">
182 <field name="name">hr.contract.view.form.inherit</field>
183 <field name="model">hr.contract</field>
184 <field name="type">form</field>
185 <field name="inherit_id" ref="hr_contract.hr_contract_view_form"/>
186 <field name="arch" type="xml">
187 <xpath expr="/form/notebook/page/group/field[@name='working_hours']" position="after">
188 <field name="pays_per_year"/>
189 <field name="weeks_of_vacation"/>
190 </xpath>
191 </field>
192 </record>
193
194 <!-- End Contract View-->
195
196 <!-- Salary Rules - unhide the sequence, not sure why it's invisible -->
197 <record id="hr_salary_rule_list_inherit" model="ir.ui.view">
198 <field name="name">hr.salary.rule.list.inherit</field>
199 <field name="model">hr.salary.rule</field>
200 <field name="type">tree</field>
201 <field name="inherit_id" ref="hr_payroll.hr_salary_rule_list"/>
202 <field name="arch" type="xml">
203 <xpath expr="//field[@name='sequence']" position="replace">
204 <field name="sequence" groups="base.group_extended"/>
205 </xpath>
206 </field>
207 </record>
208
209 </data>
210</openerp>
0211
=== added directory 'l10n_ca_hr_payroll/static'
=== added directory 'l10n_ca_hr_payroll/static/src'
=== added directory 'l10n_ca_hr_payroll/static/src/img'
=== added file 'l10n_ca_hr_payroll/static/src/img/icon.png'
1Binary files l10n_ca_hr_payroll/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_hr_payroll/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ212Binary files l10n_ca_hr_payroll/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_hr_payroll/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ
=== added directory 'l10n_ca_hr_payroll_account'
=== added file 'l10n_ca_hr_payroll_account/AUTHORS.txt'
--- l10n_ca_hr_payroll_account/AUTHORS.txt 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll_account/AUTHORS.txt 2012-12-21 16:45:28 +0000
@@ -0,0 +1,3 @@
1Pierre Lamarche <pierre.lamarche@savoirfairelinux.com>
2Maxime Chambreuil <maxime.chambreuil@savoirfairelinux.com>
3Savoir-faire Linux <contact@savoirfairelinux.com>
04
=== added file 'l10n_ca_hr_payroll_account/__init__.py'
--- l10n_ca_hr_payroll_account/__init__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll_account/__init__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,22 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 OpenERP Canada. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published
8# by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
023
=== added file 'l10n_ca_hr_payroll_account/__openerp__.py'
--- l10n_ca_hr_payroll_account/__openerp__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll_account/__openerp__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,51 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 OpenERP Canada. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU Affero General Public License for more details.
15#
16# You should have received a copy of the GNU Affero General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
19##############################################################################
20{
21 'name': 'Canada - Payroll Accounting',
22 'category': 'Localization',
23 'version': '0.1',
24 'license': 'AGPL-3',
25 'category': 'Generic Modules/Human Resources',
26 'description': """
27Canada Payroll Accounting
28=========================
29
30This module:
31 * creates salary journal
32 * creates financial accounts for payroll
33 * updates salary rules with accounting information
34 """,
35 'author':'OpenERP Canada',
36 'website':'http://launchpad.net/openerp-canada',
37 'depends': [
38 'l10n_ca',
39 'l10n_ca_hr_payroll',
40 'hr_payroll_account',
41 ],
42 'data': [
43 'l10n_ca_hr_payroll_account_data.xml',
44 ],
45 'test': [],
46 'demo': [],
47 'installable': True,
48 'active': False,
49}
50
51# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
052
=== added file 'l10n_ca_hr_payroll_account/l10n_ca_hr_payroll_account_data.xml'
--- l10n_ca_hr_payroll_account/l10n_ca_hr_payroll_account_data.xml 1970-01-01 00:00:00 +0000
+++ l10n_ca_hr_payroll_account/l10n_ca_hr_payroll_account_data.xml 2012-12-21 16:45:28 +0000
@@ -0,0 +1,31 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="1">
4
5 <!-- Payroll Journal -->
6
7 <record id="payroll_journal" model="account.journal">
8 <field name="name">Payroll Journal</field>
9 <field name="code">PAYJ</field>
10 <field name="type">general</field>
11 <field name="view_id" ref="account.account_journal_view"/>
12 </record>
13
14 <!-- Salary rules -->
15
16 <!-- Employment Insurance -->
17
18 <record id="l10n_ca_hr_payroll.rule_ca_ei_er_c" model="hr.salary.rule">
19 <field name="account_debit" model='account.account' search="[('code','like','51203')]"/>
20 <field name="account_credit" model='account.account' search="[('code','like','214112')]"/>
21 </record>
22
23 <!-- Federal Tax Income -->
24
25 <record id="l10n_ca_hr_payroll.rule_ca_fit" model="hr.salary.rule">
26 <field name="account_debit" model='account.account' search="[('code','like','51209')]"/>
27 <field name="account_credit" model='account.account' search="[('code','like','21412')]"/>
28 </record>
29
30 </data>
31</openerp>
032
=== added directory 'l10n_ca_hr_payroll_account/static'
=== added directory 'l10n_ca_hr_payroll_account/static/src'
=== added directory 'l10n_ca_hr_payroll_account/static/src/img'
=== added file 'l10n_ca_hr_payroll_account/static/src/img/icon.png'
1Binary files l10n_ca_hr_payroll_account/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_hr_payroll_account/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ33Binary files l10n_ca_hr_payroll_account/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_hr_payroll_account/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ
=== added directory 'l10n_ca_on_hr_payroll'
=== added file 'l10n_ca_on_hr_payroll/__init__.py'
--- l10n_ca_on_hr_payroll/__init__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_on_hr_payroll/__init__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,24 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 Amura Consulting. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published
8# by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22import l10n_ca_on_hr_payroll
23
24# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
025
=== added file 'l10n_ca_on_hr_payroll/__openerp__.py'
--- l10n_ca_on_hr_payroll/__openerp__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_on_hr_payroll/__openerp__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,52 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 Amura Consulting. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU Affero General Public License for more details.
15#
16# You should have received a copy of the GNU Affero General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
19##############################################################################
20{
21 'name': 'Canada - Ontario - Payroll',
22 'category': 'Localization',
23 'version': '0.9',
24 'category': 'Generic Modules/Human Resources',
25 'description': """
26Ontario Canadian Payroll Rules
27==============================
28 * Adds all Federal and Provincial Salary Rules for Ontario
29 * Adds Ontario Salary Structure
30 * Adds Claim Codes, Deductions and Exemptions on the Employee Form
31 * Adds 'Pays Per Year' field on the Contract Form
32 """,
33 'author':'Amura Consulting',
34 'website':'http://www.openerp.com',
35 'depends': [
36 'hr_payroll',
37 ],
38 'init_xml': [
39 ],
40 'update_xml': [
41 'l10n_ca_on_hr_payroll_view.xml',
42 'l10n_ca_on_hr_payroll_data.xml',
43 ],
44 'test': [
45 ],
46 'demo_xml': [
47 ],
48 'installable': True,
49 'active': False,
50}
51
52# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
053
=== added file 'l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll.py'
--- l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,141 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 Amura Consulting. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published
8# by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from osv import fields, osv
23
24"""
25class hr_payroll_tax_table(osv.osv):
26 '''
27 Canadian Tax Payroll Table
28 '''
29 _name = 'hr.payroll.tax.table'
30 _description = 'Canadian Tax Payroll Table'
31
32 def onchange_year(self, cr, uid, ids, year, prov=False):
33 res = {}
34 res['name'] = 'Tax Table: ' + str(year)
35 if prov:
36 prov_obj = self.pool.get('res.country.state').browse(cr, uid, prov)
37 res['name'] += ' / Provincial - ' + prov_obj.code
38 else:
39 res['name'] += ' / Federal'
40
41 return {'value': res}
42
43 _columns = {
44 'name': fields.char('Description', size=128),
45 'year': fields.integer('Year', required=True),
46 'date_from': fields.date('Date From'),
47 'date_to': fields.date('Date To'),
48 'fed_prov': fields.selection([
49 ('federal','Federal'),
50 ('provincial','Provincial')], 'Federal/Provincial', required=True),
51 'province': fields.many2one('res.country.state', 'Province'),
52 'line_ids': fields.one2many('hr.payroll.tax.table.line', 'table_id', 'Lines'),
53 }
54
55 _defaults = {
56 'fed_prov': 'federal',
57 }
58hr_payroll_tax_table()
59
60class hr_payroll_tax_table_line(osv.osv):
61 '''
62 Canadian Tax Payroll Table Lines
63 '''
64 _name = 'hr.payroll.tax.table.line'
65 _description = 'Canadian Tax Payroll Table Lines'
66 _columns = {
67 'name': fields.char('Name', size=64),
68 'code': fields.char('Code', size=16),
69 'inc_from': fields.float('Income From', digits=(16, 2)),
70 'inc_to': fields.float('Income To', digits=(16, 2)),
71 'rate': fields.float('Rate', digits=(16, 2)),
72 'table_id': fields.many2one('hr.payroll.tax.table', 'Table'),
73 }
74hr_payroll_tax_table_line()
75"""
76
77class hr_employee(osv.osv):
78 _name = 'hr.employee'
79 _inherit = 'hr.employee'
80
81 _columns = {
82 'ei_exempt': fields.boolean('EI Exempt'),
83 'td1f': fields.selection([(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10),(0,0)], 'Federal Claim Code', required=True),
84 'td1p': fields.selection([(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10),(0,0)], 'Provincial Claim Code', required=True),
85 'cpp_exempt': fields.boolean('CPP/QPP Exempt'),
86 'qpip_exempt': fields.boolean('QPIP Exempt'),
87 'cpp_ytd_adj': fields.float('CPP/QPP YTD Adjustment', help="Amount to adjust CPP/QPP for calculations. Used if employee has contributed elsewhere and will be factored in when calculating maximum CPP payment"),
88 'ei_ytd_adj': fields.float('EI YTD Adjustment', help="Amount to adjust EI for calculations. Used if employee has contributed elsewhere and will be factored in when calculating maximum EI payment"),
89 'vac_pay': fields.float('Vacation Pay %', digits=(16,2)),
90 'f1': fields.float('Childcare/Alimony (F1)', digits=(16,2), help="Annual deductions such as child care expenses and support payments, etc., authorized by a tax services office or tax centre"),
91 'f2': fields.float('Alimony/Maint Garnish (F2)', digits=(16,2), help="Alimony or maintenance payments required by a legal document to be payroll-deducted authorized by a tax services office or tax centre"),
92 'hd': fields.float('Prescribed Zone (HD)', digits=(16,2), help="Annual deduction for living in a prescribed zone as indicated on Form TD1"),
93 'lcf': fields.float('Fed Labour sponsored funds (LCF)', digits=(16,2), help="Federal labour-sponsored funds tax credit"),
94 'lcp': fields.float('Prov Labour sponsored funds (LCP)', digits=(16,2), help="Provincial or territorial labour-sponsored funds tax credit"),
95 'f': fields.float('RSP/RPP/RCA (F)', digits=(16,2), help="Payroll deductions for employee contributions to a registered pension plan (RPP), a registered retirement savings plan (RRSP), or a retirement compensation arrangement (RCA)"),
96 'l': fields.float('Extra Tax Deductions (L)', digits=(16,2), help="Extra tax deductions requested for the pay period."),
97 'k3': fields.float('Federal Medical (K3)', digits=(16,2), help="Other federal tax credits, such as medical expenses and charitable donations authorized by a tax services office or tax centre"),
98 'u1': fields.float('Union Dues (U1)', digits=(16,2), help="Union dues"),
99 'y': fields.float('MB/ON Extra Tax Reduction(Y)', digits=(16,2), help="Extra provincial or territorial tax reduction based on applicable amounts reported on the provincial or territorial Form TD1"),
100 }
101
102 _defaults = {
103 'td1f': 1,
104 'td1p': 1,
105 }
106
107hr_employee()
108
109class hr_contract(osv.osv):
110 _inherit = 'hr.contract'
111
112 def _get_pays_per_year(self, cr, uid, ids, names, arg, context=None):
113 """
114 @param ids: ID of contract
115 @return: The number of pays per year
116 """
117 res = {}
118 #FIXME: Should likely pull these values from somewhere else, depending on whether a 52 or 53 year week is used
119 schedule_pay = {
120 'monthly': 12,
121 'quarterly': 4,
122 'semi-annually': 2,
123 'annually': 1,
124 'weekly': 52,
125 'bi-weekly': 26,
126 'bi-monthly': 6,
127 }
128 for contract in self.browse(cr, uid, ids, context):
129 if contract.schedule_pay and schedule_pay.get(contract.schedule_pay, False):
130 res[contract.id] = schedule_pay[contract.schedule_pay]
131
132 return res
133
134 _columns = {
135 'pays_per_year': fields.function(_get_pays_per_year, method=True, string='Pays Per Year', type='float', readonly=True),
136 }
137
138hr_contract()
139
140
141# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
0142
=== added file 'l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll_data.xml'
--- l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll_data.xml 1970-01-01 00:00:00 +0000
+++ l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll_data.xml 2012-12-21 16:45:28 +0000
@@ -0,0 +1,597 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="1">
4
5 <record id="I" model="hr.salary.rule.category">
6 <field name="name">Taxable Income</field>
7 <field name="code">I</field>
8 </record>
9
10 <record id="CALC" model="hr.salary.rule.category">
11 <field name="code">CALC</field>
12 <field name="name">Standard Calculation</field>
13 </record>
14
15 <record id="FCALC" model="hr.salary.rule.category">
16 <field name="code">FCALC</field>
17 <field name="name">Federal Calculation</field>
18 </record>
19
20 <record id="PCALC" model="hr.salary.rule.category">
21 <field name="code">PCALC</field>
22 <field name="name">Provincial Calculation</field>
23 </record>
24
25 <record id="EMP" model="hr.salary.rule.category">
26 <field name="code">EMP</field>
27 <field name="name">Employer Contribution</field>
28 </record>
29
30 <record id="SDED" model="hr.salary.rule.category">
31 <field name="code">SDED</field>
32 <field name="name">Source Deduction</field>
33 <field name="notes">Used for after tax deductions at source</field>
34 </record>
35
36 <record id="hr_salary_rule_p" model="hr.salary.rule">
37 <field name="name">Pays Per Year</field>
38 <field name="sequence" eval="1"/>
39 <field name="code">P</field>
40 <field eval="0" name="appears_on_payslip"/>
41 <field eval="1" name="active"/>
42 <field name="category_id" ref="CALC"/>
43 <field name="condition_select">none</field>
44 <field name="amount_select">code</field>
45 <field name="amount_python_compute">result = contract.pays_per_year or 0</field>
46 <field name="notes">Pays per year from the contract form</field>
47 </record>
48
49 <record id="hr_salary_rule_pocc" model="hr.salary.rule">
50 <field name="name">Payslip Counter(POCC)</field>
51 <field name="sequence" eval="1"/>
52 <field name="code">POCC</field>
53 <field eval="0" name="appears_on_payslip"/>
54 <field eval="1" name="active"/>
55 <field name="category_id" ref="CALC"/>
56 <field name="condition_select">none</field>
57 <field name="amount_select">fix</field>
58 <field name="quantity">1.0</field>
59 <field name="amount_fix">1.0</field>
60 <field name="notes">Sloppy way of counting payslips for use in PR calc</field>
61 </record>
62
63 <record id="hr_salary_rule_cppmax" model="hr.salary.rule">
64 <field name="name">CPP Maximum(CPPMAX)</field>
65 <field name="sequence" eval="1"/>
66 <field name="code">CPPMAX</field>
67 <field eval="0" name="appears_on_payslip"/>
68 <field eval="1" name="active"/>
69 <field name="category_id" ref="CALC"/>
70 <field name="condition_select">none</field>
71 <field name="amount_select">fix</field>
72 <field name="quantity">1.0</field>
73 <field name="amount_fix">2306.70</field>
74 <field name="notes">Annual maximum employee CPP contribution</field>
75 </record>
76
77 <record id="hr_salary_rule_eimax" model="hr.salary.rule">
78 <field name="name">EI Maximum(EIMAX)</field>
79 <field name="sequence" eval="1"/>
80 <field name="code">EIMAX</field>
81 <field eval="0" name="appears_on_payslip"/>
82 <field eval="1" name="active"/>
83 <field name="category_id" ref="CALC"/>
84 <field name="condition_select">none</field>
85 <field name="amount_select">fix</field>
86 <field name="quantity">1.0</field>
87 <field name="amount_fix">839.97</field>
88 <field name="notes">Annual maximum employee EI contribution</field>
89 </record>
90
91 <record id="hr_salary_rule_pr" model="hr.salary.rule">
92 <field name="name">Pays Remaining(PR)</field>
93 <field name="sequence" eval="2"/>
94 <field name="code">PR</field>
95 <field eval="0" name="appears_on_payslip"/>
96 <field eval="1" name="active"/>
97 <field name="category_id" ref="CALC"/>
98 <field name="condition_select">none</field>
99 <field name="amount_select">code</field>
100 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
101date_to = payslip.date_to
102result = P - payslip.sum('POCC',date_from,date_to)</field>
103 </record>
104
105 <record id="hr_salary_rule_ca_wage" model="hr.salary.rule">
106 <field name="name">Base Pay</field>
107 <field name="sequence" eval="2"/>
108 <field name="code">CAWAGE</field>
109 <field name="category_id" ref="I"/>
110 <field name="condition_select">none</field>
111 <field name="amount_select">code</field>
112 <field name="amount_python_compute">result = contract.wage</field>
113 </record>
114
115 <record id="hr_salary_rule_vpay" model="hr.salary.rule">
116 <field name="name">Vacation Pay</field>
117 <field name="sequence" eval="2"/>
118 <field name="code">VPAY</field>
119 <field name="category_id" ref="I"/>
120 <field name="condition_select">none</field>
121 <field name="amount_select">code</field>
122 <field name="amount_python_compute">result = categories.I * 0.04</field>
123 </record>
124
125 <record id="hr_salary_rule_i" model="hr.salary.rule">
126 <field name="name">Gross Pay</field>
127 <field name="sequence" eval="40"/>
128 <field name="code">I</field>
129 <field name="category_id" ref="hr_payroll.GROSS"/>
130 <field name="condition_select">none</field>
131 <field name="amount_select">code</field>
132 <field name="amount_python_compute">result = categories.I + categories.ALW</field>
133 </record>
134
135 <record id="hr_salary_rule_pi_ytd" model="hr.salary.rule">
136 <field name="name">Pensionable Income YTD(PIYTD)</field>
137 <field eval="45" name="sequence"/>
138 <field name="code">PIYTD</field>
139 <field name="category_id" ref="CALC"/>
140 <field eval="1" name="appears_on_payslip"/>
141 <field eval="1" name="active"/>
142 <field name="condition_select">none</field>
143 <field name="amount_select">code</field>
144 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
145date_to = payslip.date_to
146result = min(payslip.sum('I',date_from,date_to) + I, 50100)</field>
147 </record>
148
149 <record id="hr_salary_rule_ie_ytd" model="hr.salary.rule">
150 <field name="name">Insurable Income YTD(IEYTD)</field>
151 <field eval="45" name="sequence"/>
152 <field name="code">IEYTD</field>
153 <field name="category_id" ref="CALC"/>
154 <field eval="1" name="appears_on_payslip"/>
155 <field eval="1" name="active"/>
156 <field name="condition_select">none</field>
157 <field name="amount_select">code</field>
158 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
159date_to = payslip.date_to
160result = min(payslip.sum('I',date_from,date_to) + I, 45900)</field>
161 </record>
162
163 <record id="hr_salary_rule_u1" model="hr.salary.rule">
164 <field name="name">Union Dues(U1)</field>
165 <field name="sequence" eval="50"/>
166 <field name="code">U1</field>
167 <field name="category_id" ref="hr_payroll.DED"/>
168 <field name="condition_select">none</field>
169 <field name="amount_select">code</field>
170 <field name="amount_python_compute">result = employee.u1</field>
171 </record>
172
173 <record id="hr_salary_rule_l" model="hr.salary.rule">
174 <field name="name">Extra Tax Deductions Requested(L)</field>
175 <field name="sequence" eval="50"/>
176 <field name="code">L</field>
177 <field name="category_id" ref="CALC"/>
178 <field name="condition_select">none</field>
179 <field name="amount_select">code</field>
180 <field name="amount_python_compute">result = (employee.l + inputs.L.amount) if I else 0.0</field>
181 </record>
182
183 <record id="hr_salary_rule_f" model="hr.salary.rule">
184 <field name="name">RSP/RPP/RCA(F)</field>
185 <field eval="60" name="sequence"/>
186 <field name="code">F</field>
187 <field name="category_id" ref="hr_payroll.DED"/>
188 <field eval="1" name="appears_on_payslip"/>
189 <field eval="1" name="active"/>
190 <field name="condition_select">none</field>
191 <field name="amount_select">code</field>
192 <field name="amount_python_compute">result = employee.f or 0.0</field>
193 </record>
194
195 <record id="hr_salary_rule_f1" model="hr.salary.rule">
196 <field name="name">Childcare/Alimony(F1)</field>
197 <field eval="60" name="sequence"/>
198 <field name="code">F1</field>
199 <field name="category_id" ref="hr_payroll.DED"/>
200 <field eval="1" name="appears_on_payslip"/>
201 <field eval="1" name="active"/>
202 <field name="condition_select">none</field>
203 <field name="amount_select">code</field>
204 <field name="amount_python_compute">result = employee.f1 or 0.0</field>
205 </record>
206
207 <record id="hr_salary_rule_f2" model="hr.salary.rule">
208 <field name="name">Alimony/Maintenance(F2)</field>
209 <field eval="60" name="sequence"/>
210 <field name="code">F2</field>
211 <field name="category_id" ref="hr_payroll.DED"/>
212 <field eval="1" name="appears_on_payslip"/>
213 <field eval="1" name="active"/>
214 <field name="condition_select">none</field>
215 <field name="amount_select">code</field>
216 <field name="amount_python_compute">result = employee.f2 or 0.0</field>
217 </record>
218
219 <record id="hr_salary_rule_hd" model="hr.salary.rule">
220 <field name="name">Prescribed Zone(HD)</field>
221 <field eval="60" name="sequence"/>
222 <field name="code">HD</field>
223 <field name="category_id" ref="hr_payroll.DED"/>
224 <field eval="1" name="appears_on_payslip"/>
225 <field eval="1" name="active"/>
226 <field name="condition_select">none</field>
227 <field name="amount_select">code</field>
228 <field name="amount_python_compute">result = employee.hd or 0.0</field>
229 </record>
230
231 <record id="hr_salary_rule_a" model="hr.salary.rule">
232 <field name="name">Annual Taxable Income(A)</field>
233 <field eval="101" name="sequence"/>
234 <field name="code">A</field>
235 <field name="category_id" ref="CALC"/>
236 <field eval="0" name="appears_on_payslip"/>
237 <field eval="1" name="active"/>
238 <field name="condition_select">none</field>
239 <field name="amount_select">code</field>
240 <field name="amount_python_compute">result = max((P * (I - F - F2 - U1)) - HD - F1, 0.0)</field>
241 </record>
242
243 <record id="hr_salary_rule_r" model="hr.salary.rule">
244 <field name="name">Annual Federal Tax Rate(R)</field>
245 <field eval="110" name="sequence"/>
246 <field name="code">R</field>
247 <field name="category_id" ref="FCALC"/>
248 <field eval="0" name="appears_on_payslip"/>
249 <field eval="1" name="active"/>
250 <field name="condition_select">none</field>
251 <field name="amount_select">code</field>
252 <field name="amount_python_compute">result = (A &gt; 132406 and 0.29) or (A &gt; 85424 and 0.26) or (A &gt; 42707 and 0.22) or 0.15</field>
253 </record>
254
255 <record id="hr_salary_rule_c" model="hr.salary.rule">
256 <field name="name">Canada Pension Plan(C)</field>
257 <field eval="140" name="sequence"/>
258 <field name="code">C</field>
259 <field name="category_id" ref="hr_payroll.DED"/>
260 <field eval="1" name="appears_on_payslip"/>
261 <field eval="1" name="active"/>
262 <field name="condition_select">python</field>
263 <field name="condition_python">result = not employee.cpp_exempt</field>
264 <field name="amount_select">code</field>
265 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
266date_to = payslip.date_to
267Ccalc = 0.0495 * (I - (3500.0 / P))
268result = max(Ccalc if (Ccalc &lt; (CPPMAX - (payslip.sum('C',date_from,date_to) + employee.cpp_ytd_adj))) else (CPPMAX - (payslip.sum('C',date_from,date_to) + employee.cpp_ytd_adj)), 0)</field>
269 </record>
270
271 <record id="hr_salary_rule_ei" model="hr.salary.rule">
272 <field name="name">Employment Insurance(EI)</field>
273 <field eval="140" name="sequence"/>
274 <field name="code">EI</field>
275 <field name="category_id" ref="hr_payroll.DED"/>
276 <field eval="1" name="appears_on_payslip"/>
277 <field eval="1" name="active"/>
278 <field name="condition_select">python</field>
279 <field name="condition_python">result = not employee.cpp_exempt</field>
280 <field name="amount_select">code</field>
281 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
282date_to = payslip.date_to
283EIcalc = 0.0183 * I
284result = max(min(EIcalc, (EIMAX - payslip.sum('EI',date_from,date_to) - employee.ei_ytd_adj)), 0.0)</field>
285 </record>
286
287 <record id="hr_salary_rule_c_ytd" model="hr.salary.rule">
288 <field name="name">Canada Pension Plan YTD</field>
289 <field eval="145" name="sequence"/>
290 <field name="code">CPPYTD</field>
291 <field name="category_id" ref="FCALC"/>
292 <field eval="1" name="appears_on_payslip"/>
293 <field eval="1" name="active"/>
294 <field name="condition_select">none</field>
295 <field name="amount_select">code</field>
296 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
297date_to = payslip.date_to
298result = payslip.sum('C',date_from,date_to) + C</field>
299 </record>
300
301 <record id="hr_salary_rule_ei_ytd" model="hr.salary.rule">
302 <field name="name">Employment Insurance YTD</field>
303 <field eval="145" name="sequence"/>
304 <field name="code">EIYTD</field>
305 <field name="category_id" ref="FCALC"/>
306 <field eval="1" name="appears_on_payslip"/>
307 <field eval="1" name="active"/>
308 <field name="condition_select">none</field>
309 <field name="amount_select">code</field>
310 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
311date_to = payslip.date_to
312result = payslip.sum('EI',date_from,date_to) + EI</field>
313 </record>
314
315 <record id="hr_salary_rule_empc" model="hr.salary.rule">
316 <field name="name">Employer CPP Contribution(EMPC)</field>
317 <field eval="146" name="sequence"/>
318 <field name="code">EMPC</field>
319 <field name="category_id" ref="EMP"/>
320 <field eval="0" name="appears_on_payslip"/>
321 <field eval="1" name="active"/>
322 <field name="condition_select">python</field>
323 <field name="condition_python">result = not employee.cpp_exempt</field>
324 <field name="amount_select">percentage</field>
325 <field name="amount_percentage_base">I</field>
326 <field name="quantity">1.0</field>
327 <field name="amount_percentage">100.0</field>
328 </record>
329
330 <record id="hr_salary_rule_empei" model="hr.salary.rule">
331 <field name="name">Employer EI Contribution(EMPEI)</field>
332 <field eval="146" name="sequence"/>
333 <field name="code">EMPEI</field>
334 <field name="category_id" ref="EMP"/>
335 <field eval="0" name="appears_on_payslip"/>
336 <field eval="1" name="active"/>
337 <field name="condition_select">python</field>
338 <field name="condition_python">result = not employee.ei_exempt</field>
339 <field name="amount_select">percentage</field>
340 <field name="amount_percentage_base">EI</field>
341 <field name="quantity">1.0</field>
342 <field name="amount_percentage">140.0</field>
343 </record>
344
345 <record id="hr_salary_rule_k" model="hr.salary.rule">
346 <field name="name">Annual Federal Constant(K)</field>
347 <field eval="150" name="sequence"/>
348 <field name="code">K</field>
349 <field name="category_id" ref="FCALC"/>
350 <field eval="0" name="appears_on_payslip"/>
351 <field eval="1" name="active"/>
352 <field name="condition_select">none</field>
353 <field name="amount_select">code</field>
354 <field name="amount_python_compute">result = (A &gt; 132406 and 10378) or (A &gt; 85424 and 6406) or (A &gt; 42707 and 2989) or 0.0</field>
355 </record>
356
357 <record id="hr_salary_rule_k1" model="hr.salary.rule">
358 <field name="name">Federal Personal Credit(K1)</field>
359 <field eval="150" name="sequence"/>
360 <field name="code">K1</field>
361 <field name="category_id" ref="FCALC"/>
362 <field eval="0" name="appears_on_payslip"/>
363 <field eval="1" name="active"/>
364 <field name="condition_select">none</field>
365 <field name="amount_select">code</field>
366 <field name="amount_python_compute">result = employee.td1f == 1 and 1623.30 or employee.td1f == 2 and 1778.40 or employee.td1f == 3 and 2088.60 or employee.td1f == 4 and 2398.80 or employee.td1f == 5 and 2709.00 or employee.td1f == 6 and 3019.20 or employee.td1f == 7 and 3329.40 or employee.td1f == 8 and 3639.60 or employee.td1f == 9 and 3949.80 or employee.td1f == 10 and 4260.00 or employee.td1f == 0 and 0.0</field>
367 <field name="notes">Federal non-refundable personal tax credit.
368Appears on the Employee Form in Canadian Payroll.</field>
369 </record>
370
371 <record id="hr_salary_rule_k2" model="hr.salary.rule">
372 <field name="name">Annual Federal CPP/QPP(K2)</field>
373 <field eval="150" name="sequence"/>
374 <field name="code">K2</field>
375 <field name="category_id" ref="FCALC"/>
376 <field eval="0" name="appears_on_payslip"/>
377 <field eval="1" name="active"/>
378 <field name="condition_select">none</field>
379 <field name="amount_select">code</field>
380 <field name="amount_python_compute">result = (0.15 * min(CPPYTD + (PR * C), CPPMAX)) + (0.15 * min(EIYTD + (PR * EI), EIMAX))</field>
381 <field name="notes">Federal Canada (or Quebec) Pension Plan contributions and employment insurance premiums tax credits for the year.
382Used for calculations only</field>
383 </record>
384
385 <record id="hr_salary_rule_k3" model="hr.salary.rule">
386 <field name="name">Other Federal Tax Credits(K3)</field>
387 <field eval="150" name="sequence"/>
388 <field name="code">K3</field>
389 <field name="category_id" ref="FCALC"/>
390 <field eval="0" name="appears_on_payslip"/>
391 <field eval="1" name="active"/>
392 <field name="condition_select">none</field>
393 <field name="amount_select">code</field>
394 <field name="amount_python_compute">result = employee.k3 or 0.0</field>
395 <field name="notes">Other federal tax credits (such as medical expenses and charitable donations authorized by a tax services office or tax centre)
396Appears on the Employee Form in Canadian Payroll.</field>
397 </record>
398
399 <record id="hr_salary_rule_k4" model="hr.salary.rule">
400 <field name="name">Canada Employment Credit(K4)</field>
401 <field eval="150" name="sequence"/>
402 <field name="code">K4</field>
403 <field name="category_id" ref="FCALC"/>
404 <field eval="0" name="appears_on_payslip"/>
405 <field eval="1" name="active"/>
406 <field name="condition_select">none</field>
407 <field name="amount_select">code</field>
408 <field name="amount_python_compute">result = min(0.15 * A, 0.15 * 1095)</field>
409 <field name="notes">Canada employment credit.
410Used for calculations only</field>
411 </record>
412
413 <record id="hr_salary_rule_tcp" model="hr.salary.rule">
414 <field name="name">Provincial Claim Amount(TCP)</field>
415 <field eval="150" name="sequence"/>
416 <field name="code">TCP</field>
417 <field name="category_id" ref="PCALC"/>
418 <field eval="0" name="appears_on_payslip"/>
419 <field eval="1" name="active"/>
420 <field name="condition_select">none</field>
421 <field name="amount_select">code</field>
422 <field name="amount_python_compute">result = employee.td1p == 1 and 9405.00 or employee.td1p == 2 and 10418.00 or employee.td1p == 3 and 12444.00 or employee.td1p == 4 and 14470.00 or employee.td1p == 5 and 16496.00 or employee.td1p == 6 and 18522.00 or employee.td1p == 7 and 20548.00 or employee.td1p == 8 and 22574.00 or employee.td1p == 9 and 24600.00 or employee.td1p == 10 and 26626.00 or employee.td1p == 0 and 0.0</field>
423 </record>
424
425 <record id="hr_salary_rule_v" model="hr.salary.rule">
426 <field name="name">Annual Provincial Tax Rate(V)</field>
427 <field eval="150" name="sequence"/>
428 <field name="code">V</field>
429 <field name="category_id" ref="PCALC"/>
430 <field eval="0" name="appears_on_payslip"/>
431 <field eval="1" name="active"/>
432 <field name="condition_select">none</field>
433 <field name="amount_select">code</field>
434 <field name="amount_python_compute">result = (A &gt; 78043 and 0.1116) or (A &gt; 39020 and A &lt;= 78043 and 0.0915) or 0.0505</field>
435 </record>
436
437 <record id="hr_salary_rule_kp" model="hr.salary.rule">
438 <field name="name">Provincial Constant(KP)</field>
439 <field eval="150" name="sequence"/>
440 <field name="code">KP</field>
441 <field name="category_id" ref="PCALC"/>
442 <field eval="0" name="appears_on_payslip"/>
443 <field eval="1" name="active"/>
444 <field name="condition_select">none</field>
445 <field name="amount_select">code</field>
446 <field name="amount_python_compute">result = (A &gt; 78043 and 3168) or (A &gt; 39020 and A &lt;= 78043 and 1600) or 0</field>
447 </record>
448
449 <record id="hr_salary_rule_k1p" model="hr.salary.rule">
450 <field name="name">Provincial Personal Tax Credit(K1P)</field>
451 <field eval="151" name="sequence"/>
452 <field name="code">K1P</field>
453 <field name="category_id" ref="PCALC"/>
454 <field eval="0" name="appears_on_payslip"/>
455 <field eval="1" name="active"/>
456 <field name="condition_select">none</field>
457 <field name="amount_select">code</field>
458 <field name="amount_python_compute">result = 0.0505 * TCP</field>
459 </record>
460
461 <record id="hr_salary_rule_k2p" model="hr.salary.rule">
462 <field name="name">Provincial CPP and EI Tax Credits(K2P)</field>
463 <field eval="151" name="sequence"/>
464 <field name="code">K2P</field>
465 <field name="category_id" ref="PCALC"/>
466 <field eval="0" name="appears_on_payslip"/>
467 <field eval="1" name="active"/>
468 <field name="condition_select">none</field>
469 <field name="amount_select">code</field>
470 <field name="amount_python_compute">result = (0.0505 * min(CPPYTD + (PR * C), CPPMAX)) + (0.0505 * min(EIYTD + (PR * EI), EIMAX))</field>
471 </record>
472
473 <record id="hr_salary_rule_t4" model="hr.salary.rule">
474 <field name="name">Annual Basic Provincial Tax(T4)</field>
475 <field eval="154" name="sequence"/>
476 <field name="code">T4</field>
477 <field name="category_id" ref="PCALC"/>
478 <field eval="0" name="appears_on_payslip"/>
479 <field eval="1" name="active"/>
480 <field name="condition_select">none</field>
481 <field name="amount_select">code</field>
482 <field name="amount_python_compute">result = max((V * A) - KP - K1P - K2P, 0.0)</field>
483 </record>
484
485 <record id="hr_salary_rule_v1" model="hr.salary.rule">
486 <field name="name">Surtax on Basic Provincial Tax(V1)</field>
487 <field eval="155" name="sequence"/>
488 <field name="code">V1</field>
489 <field name="category_id" ref="PCALC"/>
490 <field eval="0" name="appears_on_payslip"/>
491 <field eval="1" name="active"/>
492 <field name="condition_select">none</field>
493 <field name="amount_select">code</field>
494 <field name="amount_python_compute">result = (T4 &gt; 5392 and (0.20 * (T4 - 4213)) + (0.36 * (T4 - 5392))) or (T4 &gt; 4213 and T4 &lt;= 5392 and (0.20 * (T4 - 4213))) or 0</field>
495 </record>
496
497 <record id="hr_salary_rule_v2" model="hr.salary.rule">
498 <field name="name">Extra Tax for Ontario Health Premium(V2)</field>
499 <field eval="155" name="sequence"/>
500 <field name="code">V2</field>
501 <field name="category_id" ref="PCALC"/>
502 <field eval="0" name="appears_on_payslip"/>
503 <field eval="1" name="active"/>
504 <field name="condition_select">none</field>
505 <field name="amount_select">code</field>
506 <field name="amount_python_compute">result = (A &gt; 200000 and min(900, (750 + (0.25 * (A - 200000))))) or (A &gt; 72000 and A &lt;= 200000 and min(750, (600 + (0.25 * (A - 72000))))) or (A &gt; 48000 and A &lt;= 72000 and min(600, (450 + (0.25 * (A - 48000))))) or (A &gt; 36000 and A &lt;= 48000 and min(450, (300 + (0.06 * (A - 36000))))) or (A &gt; 20000 and A &lt;= 36000 and min(300, (0.06 * (A - 20000)))) or 0</field>
507 </record>
508
509 <record id="hr_salary_rule_s" model="hr.salary.rule">
510 <field name="name">Ontario or British Columbia Tax Reduction(S)</field>
511 <field eval="156" name="sequence"/>
512 <field name="code">S</field>
513 <field name="category_id" ref="PCALC"/>
514 <field eval="0" name="appears_on_payslip"/>
515 <field eval="1" name="active"/>
516 <field name="condition_select">none</field>
517 <field name="amount_select">code</field>
518 <field name="amount_python_compute">result = max(min((2 * (217 + employee.y) - (T4 + V1)), T4 + V1 ), 0.0)</field>
519 </record>
520
521 <record id="hr_salary_rule_t3" model="hr.salary.rule">
522 <field name="name">Annual Basic Federal Tax(T3)</field>
523 <field eval="170" name="sequence"/>
524 <field name="code">T3</field>
525 <field name="category_id" ref="FCALC"/>
526 <field eval="0" name="appears_on_payslip"/>
527 <field eval="1" name="active"/>
528 <field name="condition_select">none</field>
529 <field name="amount_select">code</field>
530 <field name="amount_python_compute">result = max((R * A) - K - K1 - K2 - K3 - K4, 0.0)</field>
531 </record>
532
533 <record id="hr_salary_rule_t1" model="hr.salary.rule">
534 <field name="name">Annual Federal Tax(T1)</field>
535 <field eval="170" name="sequence"/>
536 <field name="code">T1</field>
537 <field name="category_id" ref="FCALC"/>
538 <field eval="0" name="appears_on_payslip"/>
539 <field eval="1" name="active"/>
540 <field name="condition_select">none</field>
541 <field name="amount_select">code</field>
542 <field name="amount_python_compute">result = max(T3 - employee.lcf, 0.0)</field>
543 </record>
544
545 <record id="hr_salary_rule_t2" model="hr.salary.rule">
546 <field name="name">Annual Provincial Tax Deduction - Ontario(T2)</field>
547 <field eval="160" name="sequence"/>
548 <field name="code">T2</field>
549 <field name="category_id" ref="PCALC"/>
550 <field eval="0" name="appears_on_payslip"/>
551 <field eval="1" name="active"/>
552 <field name="condition_select">none</field>
553 <field name="amount_select">code</field>
554 <field name="amount_python_compute">result = max(T4 + V1 + V2 - S - employee.lcp, 0.0)</field>
555 </record>
556
557 <record id="hr_salary_rule_t" model="hr.salary.rule">
558 <field name="name">Tax Deductions(T)</field>
559 <field eval="190" name="sequence"/>
560 <field name="code">T</field>
561 <field name="category_id" ref="hr_payroll.DED"/>
562 <field eval="1" name="appears_on_payslip"/>
563 <field eval="1" name="active"/>
564 <field name="condition_select">none</field>
565 <field name="amount_select">code</field>
566 <field name="amount_python_compute">result = ((T1 + T2) / P) + L</field>
567 </record>
568
569 <record id="hr_salary_rule_net" model="hr.salary.rule">
570 <field name="name">Net Pay(N)</field>
571 <field eval="200" name="sequence"/>
572 <field name="code">N</field>
573 <field name="category_id" ref="hr_payroll.NET"/>
574 <field eval="1" name="appears_on_payslip"/>
575 <field eval="1" name="active"/>
576 <field name="condition_select">none</field>
577 <field name="amount_select">code</field>
578 <field name="amount_python_compute">result = categories.I + categories.ALW - categories.DED - categories.SDED</field>
579 </record>
580
581 <!-- Inputs -->
582
583 <record id="hr_input_l" model="hr.rule.input">
584 <field name="name">Extra Tax Deductions(L)</field>
585 <field name="code">L</field>
586 <field name="input_id" ref="hr_salary_rule_l"/>
587 </record>
588
589 <!-- Salary Structure -->
590 <record id="hr_structure_cabase" model="hr.payroll.structure">
591 <field name="code">CABASE</field>
592 <field name="name">Ontario Base - Non-Commisioned</field>
593 <field eval="[(6, 0, [ref('hr_salary_rule_p'), ref('hr_salary_rule_pocc'), ref('hr_salary_rule_pr'), ref('hr_salary_rule_cppmax'), ref('hr_salary_rule_eimax'), ref('hr_salary_rule_ca_wage'), ref('hr_salary_rule_vpay'), ref('hr_salary_rule_u1'), ref('hr_salary_rule_l'), ref('hr_salary_rule_hd'), ref('hr_salary_rule_f'), ref('hr_salary_rule_f1'), ref('hr_salary_rule_f2'), ref('hr_salary_rule_i'), ref('hr_salary_rule_pi_ytd'), ref('hr_salary_rule_ie_ytd'), ref('hr_salary_rule_a'), ref('hr_salary_rule_r'), ref('hr_salary_rule_c'), ref('hr_salary_rule_ei'), ref('hr_salary_rule_c_ytd'), ref('hr_salary_rule_ei_ytd'), ref('hr_salary_rule_empc'), ref('hr_salary_rule_empei'), ref('hr_salary_rule_k'), ref('hr_salary_rule_k1'), ref('hr_salary_rule_k2'), ref('hr_salary_rule_k3'), ref('hr_salary_rule_k4'), ref('hr_salary_rule_tcp'), ref('hr_salary_rule_v'),ref('hr_salary_rule_kp'), ref('hr_salary_rule_k1p'), ref('hr_salary_rule_k2p'), ref('hr_salary_rule_t4'), ref('hr_salary_rule_v1'), ref('hr_salary_rule_v2'), ref('hr_salary_rule_s'), ref('hr_salary_rule_t2'), ref('hr_salary_rule_t1'), ref('hr_salary_rule_t3'), ref('hr_salary_rule_t'), ref('hr_salary_rule_net')])]" name="rule_ids"/>
594 </record>
595
596 </data>
597</openerp>
0598
=== added file 'l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll_view.xml'
--- l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll_view.xml 1970-01-01 00:00:00 +0000
+++ l10n_ca_on_hr_payroll/l10n_ca_on_hr_payroll_view.xml 2012-12-21 16:45:28 +0000
@@ -0,0 +1,149 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4 <!--
5 <record id="hr_payroll_tax_table_form" model="ir.ui.view">
6 <field name="name">hr.payroll.tax.table.form</field>
7 <field name="model">hr.payroll.tax.table</field>
8 <field name="type">form</field>
9 <field name="arch" type="xml">
10 <form string="Canadian Tax Table">
11 <field name="name" select="1" readonly="1"/>
12 <field name="year" select="1" on_change="onchange_year(year,province)"/>
13 <field name="date_from"/>
14 <field name="date_to"/>
15 <field name="fed_prov"/>
16 <field name="province" attrs="{'readonly': [('fed_prov','!=','provincial')], 'required': [('fed_prov','=','provincial')]}" on_change="onchange_year(year,province)"/>
17 <field name="line_ids" nolabel="1" colspan="4" widget="one2many_list"/>
18 </form>
19 </field>
20 </record>
21
22 <record id="hr_payroll_tax_table_tree" model="ir.ui.view">
23 <field name="name">hr.payroll.tax.table.tree</field>
24 <field name="model">hr.payroll.tax.table</field>
25 <field name="type">tree</field>
26 <field name="arch" type="xml">
27 <tree string="Canadian Tax Table">
28 <field name="name" />
29 <field name="year" />
30 <field name="fed_prov"/>
31 <field name="province" />
32 </tree>
33 </field>
34 </record>
35
36 <record id="hr_payroll_tax_table_line_form" model="ir.ui.view">
37 <field name="name">hr.payroll.tax.table.line.form</field>
38 <field name="model">hr.payroll.tax.table.line</field>
39 <field name="type">form</field>
40 <field name="arch" type="xml">
41 <form string="Canadian Tax Table">
42 <group col="6" colspan="4">
43 <field name="name" readonly="1"/>
44 <field name="code" select="1" colspan="1"/>
45 <field name="inc_from"/>
46 <field name="inc_to" />
47 <field name="rate" />
48 </group>
49 </form>
50 </field>
51 </record>
52
53 <record id="hr_payroll_tax_table_line_tree" model="ir.ui.view">
54 <field name="name">hr.payroll.tax.table.line.tree</field>
55 <field name="model">hr.payroll.tax.table.line</field>
56 <field name="type">tree</field>
57 <field name="arch" type="xml">
58 <tree string="Canadian Tax Table">
59 <field name="name" readonly="1"/>
60 <field name="code" select="1" colspan="1"/>
61 <field name="inc_from"/>
62 <field name="inc_to" />
63 <field name="rate" />
64 </tree>
65 </field>
66 </record>
67
68 <record id="action_hr_payroll_tax_table_tree" model="ir.actions.act_window">
69 <field name="name">Canadian Tax Table</field>
70 <field name="res_model">hr.payroll.tax.table</field>
71 <field name="view_type">form</field>
72 <field name="view_mode">tree,form</field>
73 <field name="view_id" ref="hr_payroll_tax_table_tree"/>
74 </record>
75
76 <menuitem id="menu_hr_payroll_tax_table_tree" action="action_hr_payroll_tax_table_tree" parent="hr_payroll.payroll_configure"/>
77 -->
78
79 <record id="hr_employee_view_form_inherit" model="ir.ui.view">
80 <field name="name">hr.employee.view.form.inherit</field>
81 <field name="model">hr.employee</field>
82 <field name="type">form</field>
83 <field name="inherit_id" ref="hr.view_employee_form"/>
84 <field name="arch" type="xml">
85 <notebook position="inside">
86 <page string="Canadian Payroll">
87 <group colspan="1" col="2">
88 <separator string="Claim Codes" colspan="2"/>
89 <field name="td1f" colspan="1"/>
90 <field name="td1p" colspan="1"/>
91 </group>
92 <group colspan="3" col="2">
93 <separator string="Exemptions" colspan="2"/>
94 <group colspan="1" col="2">
95 <field name="ei_ytd_adj"/>
96 <field name="cpp_ytd_adj"/>
97 </group>
98 <group colspan="1" col="2">
99 <field name="ei_exempt"/>
100 <field name="cpp_exempt"/>
101 <field name="qpip_exempt"/>
102 </group>
103 </group>
104 <separator string="Deductions" colspan="4"/>
105 <field name="f1"/>
106 <field name="f2"/>
107 <field name="hd"/>
108 <field name="lcf"/>
109 <field name="lcp"/>
110 <field name="f"/>
111 <field name="k3"/>
112 <field name="u1"/>
113 <field name="y"/>
114 <field name="l"/>
115 </page>
116 </notebook>
117 </field>
118 </record>
119
120 <!-- Contract View -->
121 <record id="hr_contract_form_inherit" model="ir.ui.view">
122 <field name="name">hr.contract.view.form.inherit</field>
123 <field name="model">hr.contract</field>
124 <field name="type">form</field>
125 <field name="inherit_id" ref="hr_contract.hr_contract_view_form"/>
126 <field name="arch" type="xml">
127 <xpath expr="/form/notebook/page/group/field[@name='working_hours']" position="after">
128 <field name="pays_per_year"/>
129 </xpath>
130 </field>
131 </record>
132
133 <!-- End Contract View-->
134
135 <!-- Salary Rules - unhide the sequence, not sure why it's invisible -->
136 <record id="hr_salary_rule_list_inherit" model="ir.ui.view">
137 <field name="name">hr.salary.rule.list.inherit</field>
138 <field name="model">hr.salary.rule</field>
139 <field name="type">tree</field>
140 <field name="inherit_id" ref="hr_payroll.hr_salary_rule_list"/>
141 <field name="arch" type="xml">
142 <xpath expr="//field[@name='sequence']" position="replace">
143 <field name="sequence" groups="base.group_extended"/>
144 </xpath>
145 </field>
146 </record>
147
148 </data>
149</openerp>
0150
=== added directory 'l10n_ca_on_hr_payroll/static'
=== added directory 'l10n_ca_on_hr_payroll/static/src'
=== added directory 'l10n_ca_on_hr_payroll/static/src/img'
=== added file 'l10n_ca_on_hr_payroll/static/src/img/icon.png'
1Binary files l10n_ca_on_hr_payroll/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_on_hr_payroll/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ151Binary files l10n_ca_on_hr_payroll/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_on_hr_payroll/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ
=== added directory 'l10n_ca_qc_hr_payroll'
=== added file 'l10n_ca_qc_hr_payroll/__init__.py'
--- l10n_ca_qc_hr_payroll/__init__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_qc_hr_payroll/__init__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,24 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 OpenERP Canada. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published
8# by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22import l10n_ca_qc_hr_payroll
23
24# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
025
=== added file 'l10n_ca_qc_hr_payroll/__openerp__.py'
--- l10n_ca_qc_hr_payroll/__openerp__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_qc_hr_payroll/__openerp__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,46 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 Savoir-faire Linux. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU Affero General Public License for more details.
15#
16# You should have received a copy of the GNU Affero General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
19##############################################################################
20{
21 'name': 'Canada - Quebec - Payroll',
22 'category': 'Localization',
23 'version': '0.1',
24 'license': 'AGPL-3',
25 'category': 'Generic Modules/Human Resources',
26 'description': """
27Quebec Payroll Rules
28==============================
29 * Adds all Quebec Salary Rules
30 """,
31 'author':'Savoir-faire Linux',
32 'website':'http://www.savoirfairelinux.com',
33 'depends': [
34 'l10n_ca_hr_payroll',
35 ],
36 'data': [
37 'l10n_ca_qc_hr_payroll_view.xml',
38 'l10n_ca_qc_hr_payroll_data.xml',
39 ],
40 'test': [],
41 'demo': [],
42 'installable': True,
43 'active': False,
44}
45
46# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
047
=== added file 'l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll.py'
--- l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,38 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 Savoir-faire Linux. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published
8# by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from osv import fields, osv
23
24class hr_employee(osv.osv):
25 _name = 'hr.employee'
26 _inherit = 'hr.employee'
27
28 _columns = {
29 'tp10153': fields.float('Source Deductions Return (TP-1015.3)', digits=(16,2), required=True, help="Source Deductions Return"),
30 }
31
32 _defaults = {
33 'tp10153': 10925.00,
34 }
35
36hr_employee()
37
38# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
039
=== added file 'l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll_data.xml'
--- l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll_data.xml 1970-01-01 00:00:00 +0000
+++ l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll_data.xml 2012-12-21 16:45:28 +0000
@@ -0,0 +1,534 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="1">
4
5 <!-- Quebec Parental Insurance Plan - 120 -->
6
7 <record id="rule_qc_qpip_maxie" model="hr.salary.rule">
8 <field name="name">QPIP - Employee and Employer Maximum Insurable Earnings (QPIPMAXIE)</field>
9 <field name="sequence" eval="120"/>
10 <field name="code">QPIPMAXIE</field>
11 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
12 <field name="appears_on_payslip" eval="0"/>
13 <field name="active" eval="1"/>
14 <field name="condition_select">none</field>
15 <field name="amount_select">code</field>
16 <field name="amount_python_compute">result = min(GROSS,66000)</field>
17 </record>
18
19 <!-- Quebec Parental Insurance Plan - Employee - 121 -->
20
21 <record id="rule_qc_qpip_ee_rate" model="hr.salary.rule">
22 <field name="name">QPIP - Employee Rate - 0.559 % (QPIPRATE)</field>
23 <field name="sequence" eval="121"/>
24 <field name="code">QPIPEERATE</field>
25 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
26 <field name="appears_on_payslip" eval="0"/>
27 <field name="active" eval="1"/>
28 <field name="condition_select">none</field>
29 <field name="amount_select">fix</field>
30 <field name="quantity">1.0</field>
31 <field name="amount_fix">0.559</field>
32 </record>
33
34 <record id="rule_qc_qpip_ee_maxc" model="hr.salary.rule">
35 <field name="name">QPIP - Employee Maximum Contribution (QPIPEEMAXC)</field>
36 <field name="sequence" eval="122"/>
37 <field name="code">QPIPEEMAXC</field>
38 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
39 <field name="appears_on_payslip" eval="0"/>
40 <field name="active" eval="1"/>
41 <field name="condition_select">none</field>
42 <field name="amount_select">code</field>
43 <field name="amount_python_compute">result = QPIPMAXIE * QPIPEERATE * 0.01</field>
44 </record>
45
46 <record id="rule_qc_qpip_ee_pytdc" model="hr.salary.rule">
47 <field name="name">QPIP - Employee - Previous Year To Date Contribution (QPIPEEPYTDC)</field>
48 <field name="sequence" eval="122"/>
49 <field name="code">QPIPEEPYTDC</field>
50 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
51 <field name="appears_on_payslip" eval="0"/>
52 <field name="active" eval="1"/>
53 <field name="condition_select">none</field>
54 <field name="amount_select">code</field>
55 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
56date_to = payslip.date_to
57result = payslip.sum('QPIPEEYTDC',date_from,date_to)
58 </field>
59 </record>
60
61 <record id="rule_qc_qpip_ee_c" model="hr.salary.rule">
62 <field name="name">QPIP - Employee Contribution (QPIPEEC)</field>
63 <field name="sequence" eval="123"/>
64 <field name="code">QPIPEEC</field>
65 <field name="category_id" ref="hr_payroll.DED"/>
66 <field name="appears_on_payslip" eval="1"/>
67 <field name="active" eval="1"/>
68 <field name="condition_select">none</field>
69 <field name="amount_select">code</field>
70 <field name="amount_python_compute">if (QPIPEEPYTDC > QPIPEEMAXC):
71 result = 0
72else:
73 if (QPIPEEMAXC - QPIPEEPYTDC - (GROSS * QPIPEERATE * 0.01 / P) &gt;= 0):
74 result = GROSS * QPIPEERATE * 0.01 / P
75 else:
76 result = QPIPEEMAXC - QPIPEEPYTDC
77 </field>
78 </record>
79
80 <record id="rule_qc_qpip_ee_ytdc" model="hr.salary.rule">
81 <field name="name">QPIP - Employee - Year To Date Contribution (QPIPEEYTDC)</field>
82 <field name="sequence" eval="124"/>
83 <field name="code">QPIPEEYTDC</field>
84 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
85 <field name="appears_on_payslip" eval="1"/>
86 <field name="active" eval="1"/>
87 <field name="condition_select">none</field>
88 <field name="amount_select">code</field>
89 <field name="amount_python_compute">result = QPIPEEPYTDC + QPIPEEC</field>
90 </record>
91
92 <!-- Quebec Parental Insurance Plan - Employer - 125 -->
93
94 <record id="rule_qc_qpip_er_rate" model="hr.salary.rule">
95 <field name="name">QPIP - Employer Rate - 0.782 % (QPIPERRATE)</field>
96 <field name="sequence" eval="125"/>
97 <field name="code">QPIPERRATE</field>
98 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
99 <field name="appears_on_payslip" eval="0"/>
100 <field name="active" eval="1"/>
101 <field name="condition_select">none</field>
102 <field name="amount_select">fix</field>
103 <field name="quantity">1.0</field>
104 <field name="amount_fix">0.782</field>
105 </record>
106
107 <record id="rule_qc_qpip_er_maxc" model="hr.salary.rule">
108 <field name="name">QPIP - Employer Maximum Contribution (QPIPERMAXC)</field>
109 <field name="sequence" eval="126"/>
110 <field name="code">QPIPERMAXC</field>
111 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
112 <field name="appears_on_payslip" eval="0"/>
113 <field name="active" eval="1"/>
114 <field name="condition_select">none</field>
115 <field name="amount_select">code</field>
116 <field name="amount_python_compute">result = QPIPMAXIE * QPIPERRATE * 0.01</field>
117 </record>
118
119 <record id="rule_qc_qpip_er_pytdc" model="hr.salary.rule">
120 <field name="name">QPIP - Employer - Previous Year To Date Contribution (QPIPERPYTDC)</field>
121 <field name="sequence" eval="126"/>
122 <field name="code">QPIPERPYTDC</field>
123 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
124 <field name="appears_on_payslip" eval="0"/>
125 <field name="active" eval="1"/>
126 <field name="condition_select">none</field>
127 <field name="amount_select">code</field>
128 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
129date_to = payslip.date_to
130result = payslip.sum('QPIPERYTDC',date_from,date_to)
131 </field>
132 </record>
133
134 <record id="rule_qc_qpip_er_c" model="hr.salary.rule">
135 <field name="name">QPIP - Employer Contribution (QPIPERC)</field>
136 <field name="sequence" eval="127"/>
137 <field name="code">QPIPERC</field>
138 <field name="category_id" ref="l10n_ca_hr_payroll.EMP"/>
139 <field name="appears_on_payslip" eval="0"/>
140 <field name="active" eval="1"/>
141 <field name="condition_select">none</field>
142 <field name="amount_select">code</field>
143 <field name="amount_python_compute">if (QPIPERPYTDC > QPIPERMAXC):
144 result = 0
145else:
146 if (QPIPERMAXC - QPIPERPYTDC - (GROSS * QPIPERRATE * 0.01 / P) &gt;= 0):
147 result = GROSS * QPIPERRATE * 0.01 / P
148 else:
149 result = QPIPERMAXC - QPIPERPYTDC
150 </field>
151 </record>
152
153 <record id="rule_qc_qpip_er_ytdc" model="hr.salary.rule">
154 <field name="name">QPIP - Employer - Year To Date Contribution (QPIPERYTDC)</field>
155 <field name="sequence" eval="128"/>
156 <field name="code">QPIPERYTDC</field>
157 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
158 <field name="appears_on_payslip" eval="0"/>
159 <field name="active" eval="1"/>
160 <field name="condition_select">none</field>
161 <field name="amount_select">code</field>
162 <field name="amount_python_compute">result = QPIPERPYTDC + QPIPERC</field>
163 </record>
164
165 <!-- Quebec Pension Plan - 130 -->
166
167 <record id="rule_qc_qpp_maxie" model="hr.salary.rule">
168 <field name="name">QPP - Employee and Employer Maximum Insurable Earnings (QPPMAXIE)</field>
169 <field name="sequence" eval="130"/>
170 <field name="code">QPPMAXIE</field>
171 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
172 <field name="appears_on_payslip" eval="0"/>
173 <field name="active" eval="1"/>
174 <field name="condition_select">none</field>
175 <field name="amount_select">code</field>
176 <field name="amount_python_compute">result = min(GROSS,55100)</field>
177 </record>
178
179 <!-- Quebec Pension Plan - Employee - 130 -->
180
181 <record id="rule_qc_qpp_ee_rate" model="hr.salary.rule">
182 <field name="name">QPP - Employee - Rate 5.025% (QPPEERATE)</field>
183 <field name="sequence" eval="130"/>
184 <field name="code">QPPEERATE</field>
185 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
186 <field name="appears_on_payslip" eval="0"/>
187 <field name="active" eval="1"/>
188 <field name="condition_select">none</field>
189 <field name="amount_select">fix</field>
190 <field name="quantity">1.0</field>
191 <field name="amount_fix">5.025</field>
192 </record>
193
194 <record id="rule_qc_qpp_ee_maxc" model="hr.salary.rule">
195 <field name="name">QPP - Employee - Maximum Contribution (QPPEEMAXC)</field>
196 <field name="sequence" eval="131"/>
197 <field name="code">QPPEEMAXC</field>
198 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
199 <field name="appears_on_payslip" eval="0"/>
200 <field name="active" eval="1"/>
201 <field name="condition_select">none</field>
202 <field name="amount_select">code</field>
203 <field name="amount_python_compute">result = QPPMAXIE * QPPEERATE * 0.01</field>
204 </record>
205
206 <record id="rule_qc_qpp_ee_pytdc" model="hr.salary.rule">
207 <field name="name">QPP - Employee - Previous Year To Date Contribution (QPPEEPYTDC)</field>
208 <field name="sequence" eval="132"/>
209 <field name="code">QPPEEPYTDC</field>
210 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
211 <field name="appears_on_payslip" eval="0"/>
212 <field name="active" eval="1"/>
213 <field name="condition_select">none</field>
214 <field name="amount_select">code</field>
215 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
216date_to = payslip.date_to
217result = payslip.sum('QPPEEYTDC',date_from,date_to)
218 </field>
219 </record>
220
221 <record id="rule_qc_qpp_ee_c" model="hr.salary.rule">
222 <field name="name">QPP - Employee Contribution (QPPEEC)</field>
223 <field name="sequence" eval="133"/>
224 <field name="code">QPPEEC</field>
225 <field name="category_id" ref="hr_payroll.DED"/>
226 <field name="appears_on_payslip" eval="1"/>
227 <field name="active" eval="1"/>
228 <field name="condition_select">none</field>
229 <field name="amount_select">code</field>
230 <field name="amount_python_compute">if (QPPEEPYTDC > QPPEEMAXC):
231 result = 0
232else:
233 if (QPPEEMAXC - QPPEEPYTDC - (GROSS * QPPEERATE * 0.01 / P) &gt;= 0):
234 result = GROSS * QPPEERATE * 0.01 / P
235 else:
236 result = QPPEEMAXC - QPPEEPYTDC
237 </field>
238 </record>
239
240 <record id="rule_qc_qpp_ee_ytdc" model="hr.salary.rule">
241 <field name="name">QPP - Employee - Year To Date Contribution (QPPEEYTDC)</field>
242 <field name="sequence" eval="134"/>
243 <field name="code">QPPEEYTDC</field>
244 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
245 <field name="appears_on_payslip" eval="1"/>
246 <field name="active" eval="1"/>
247 <field name="condition_select">none</field>
248 <field name="amount_select">code</field>
249 <field name="amount_python_compute">result = QPPEEPYTDC + QPPEEC</field>
250 </record>
251
252 <!-- Quebec Pension Plan - Employer - 135 -->
253
254 <record id="rule_qc_qpp_er_rate" model="hr.salary.rule">
255 <field name="name">QPP - Employer - Rate 5.025% (QPPERRATE)</field>
256 <field name="sequence" eval="135"/>
257 <field name="code">QPPERRATE</field>
258 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
259 <field name="appears_on_payslip" eval="0"/>
260 <field name="active" eval="1"/>
261 <field name="condition_select">none</field>
262 <field name="amount_select">fix</field>
263 <field name="quantity">1.0</field>
264 <field name="amount_fix">5.025</field>
265 </record>
266
267 <record id="rule_qc_qpp_er_maxc" model="hr.salary.rule">
268 <field name="name">QPP - Employer - Maximum Contribution (QPPERMAXC)</field>
269 <field name="sequence" eval="136"/>
270 <field name="code">QPPERMAXC</field>
271 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
272 <field name="appears_on_payslip" eval="0"/>
273 <field name="active" eval="1"/>
274 <field name="condition_select">none</field>
275 <field name="amount_select">code</field>
276 <field name="amount_python_compute">result = QPPMAXIE * QPPERRATE * 0.01</field>
277 </record>
278
279 <record id="rule_qc_qpp_er_pytdc" model="hr.salary.rule">
280 <field name="name">QPP - Employer - Previous Year To Date Contribution (QPPERPYTDC)</field>
281 <field name="sequence" eval="137"/>
282 <field name="code">QPPERPYTDC</field>
283 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
284 <field name="appears_on_payslip" eval="0"/>
285 <field name="active" eval="1"/>
286 <field name="condition_select">none</field>
287 <field name="amount_select">code</field>
288 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
289date_to = payslip.date_to
290result = payslip.sum('QPPERYTDC',date_from,date_to)
291 </field>
292 </record>
293
294 <record id="rule_qc_qpp_er_c" model="hr.salary.rule">
295 <field name="name">QPP - Employer Contribution (QPPERC)</field>
296 <field name="sequence" eval="138"/>
297 <field name="code">QPPERC</field>
298 <field name="category_id" ref="hr_payroll.DED"/>
299 <field name="appears_on_payslip" eval="0"/>
300 <field name="active" eval="1"/>
301 <field name="condition_select">none</field>
302 <field name="amount_select">code</field>
303 <field name="amount_python_compute">if (QPPERPYTDC > QPPERMAXC):
304 result = 0
305else:
306 if (QPPERMAXC - QPPERPYTDC - (GROSS * QPPERRATE * 0.01 / P) &gt;= 0):
307 result = GROSS * QPPERRATE * 0.01 / P
308 else:
309 result = QPPERMAXC - QPPERPYTDC
310 </field>
311 </record>
312
313 <record id="rule_qc_qpp_er_ytdc" model="hr.salary.rule">
314 <field name="name">QPP - Employer - Year To Date Contribution (QPPERYTDC)</field>
315 <field name="sequence" eval="139"/>
316 <field name="code">QPPERYTDC</field>
317 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
318 <field name="appears_on_payslip" eval="0"/>
319 <field name="active" eval="1"/>
320 <field name="condition_select">none</field>
321 <field name="amount_select">code</field>
322 <field name="amount_python_compute">result = QPPERPYTDC + QPPERC</field>
323 </record>
324
325 <!-- Employment insurance - Employee - 140 -->
326
327 <record id="rule_qc_ei_ee_rate" model="hr.salary.rule">
328 <field name="name">EI - Employee - Rate 1.47% (EIEERATE)</field>
329 <field name="sequence" eval="140"/>
330 <field name="code">EIEERATE</field>
331 <field name="category_id" ref="l10n_ca_hr_payroll.FCALC"/>
332 <field name="appears_on_payslip" eval="0"/>
333 <field name="active" eval="1"/>
334 <field name="condition_select">none</field>
335 <field name="amount_select">fix</field>
336 <field name="quantity">1.0</field>
337 <field name="amount_fix">1.47</field>
338 </record>
339
340 <record id="rule_qc_ei_ee_maxc" model="hr.salary.rule">
341 <field name="name">EI - Employee - Maximum Contribution (EIEEMAXC)</field>
342 <field name="sequence" eval="141"/>
343 <field name="code">EIEEMAXC</field>
344 <field name="category_id" ref="l10n_ca_hr_payroll.FCALC"/>
345 <field name="appears_on_payslip" eval="0"/>
346 <field name="active" eval="1"/>
347 <field name="condition_select">none</field>
348 <field name="amount_select">code</field>
349 <field name="amount_python_compute">result = EIMAXIE * EIEERATE * 0.01</field>
350 </record>
351
352 <record id="rule_qc_ei_ee_pytdc" model="hr.salary.rule">
353 <field name="name">EI - Employee - Previous Year To Date Contribution (EIEEPYTDC)</field>
354 <field name="sequence" eval="141"/>
355 <field name="code">EIEEPYTDC</field>
356 <field name="category_id" ref="l10n_ca_hr_payroll.FCALC"/>
357 <field name="appears_on_payslip" eval="0"/>
358 <field name="active" eval="1"/>
359 <field name="condition_select">none</field>
360 <field name="amount_select">code</field>
361 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
362date_to = payslip.date_to
363result = payslip.sum('EIEEYTDC',date_from,date_to)
364 </field>
365 </record>
366
367 <record id="rule_qc_ei_ee_c" model="hr.salary.rule">
368 <field name="name">EI - Employee Contribution (EIEEC)</field>
369 <field name="sequence" eval="142"/>
370 <field name="code">EIEEC</field>
371 <field name="category_id" ref="hr_payroll.DED"/>
372 <field name="appears_on_payslip" eval="1"/>
373 <field name="active" eval="1"/>
374 <field name="condition_select">none</field>
375 <field name="amount_select">code</field>
376 <field name="amount_python_compute">if (EIEEPYTDC > EIEEMAXC):
377 result = 0
378else:
379 if (EIEEMAXC - EIEEPYTDC - (GROSS * EIEERATE * 0.01 / P) &gt;= 0):
380 result = GROSS * EIEERATE * 0.01 / P
381 else:
382 result = EIEEMAXC - EIEEPYTDC
383</field>
384 </record>
385
386 <record id="rule_qc_ei_ee_ytdc" model="hr.salary.rule">
387 <field name="name">EI - Employee - Year To Date Contribution (EIEEYTDC)</field>
388 <field name="sequence" eval="143"/>
389 <field name="code">EIEEYTDC</field>
390 <field name="category_id" ref="l10n_ca_hr_payroll.FCALC"/>
391 <field name="appears_on_payslip" eval="1"/>
392 <field name="active" eval="1"/>
393 <field name="condition_select">none</field>
394 <field name="amount_select">code</field>
395 <field name="amount_python_compute">result = EIEEPYTDC + EIEEC</field>
396 </record>
397
398 <!-- Insurance - Employee - 150 -->
399
400 <record id="rule_qc_ins_eec" model="hr.salary.rule">
401 <field name="name">Insurance - Employee Contribution (INSEEC)</field>
402 <field name="sequence" eval="150"/>
403 <field name="code">INSEEC</field>
404 <field name="category_id" ref="l10n_ca_hr_payroll.SDED"/>
405 <field name="appears_on_payslip" eval="1"/>
406 <field name="active" eval="1"/>
407 <field name="condition_select">none</field>
408 <field name="amount_select">code</field>
409 <field name="amount_python_compute">result = employee.eeins</field>
410 </record>
411
412 <record id="rule_qc_ins_ee_ytdc" model="hr.salary.rule">
413 <field name="name">Insurance - Employee - Year To Date Contribution (INSEEYTDC)</field>
414 <field name="sequence" eval="151"/>
415 <field name="code">INSEEYTDC</field>
416 <field name="category_id" ref="l10n_ca_hr_payroll.CALC"/>
417 <field name="appears_on_payslip" eval="1"/>
418 <field name="active" eval="1"/>
419 <field name="condition_select">none</field>
420 <field name="amount_select">code</field>
421 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
422date_to = payslip.date_to
423result = payslip.sum('INSEEYTDC',date_from,date_to) + INSEEC
424 </field>
425 </record>
426
427 <!-- Insurance - Employer - 155 -->
428
429 <record id="rule_qc_ins_erc" model="hr.salary.rule">
430 <field name="name">Insurance - Employer Contribution (INSERC)</field>
431 <field name="sequence" eval="150"/>
432 <field name="code">INSERC</field>
433 <field name="category_id" ref="l10n_ca_hr_payroll.EMP"/>
434 <field name="appears_on_payslip" eval="0"/>
435 <field name="active" eval="1"/>
436 <field name="condition_select">none</field>
437 <field name="amount_select">code</field>
438 <field name="amount_python_compute">result = employee.erins</field>
439 </record>
440
441 <!-- Quebec Income Tax - 180 -->
442
443 <record id="rule_qc_qit_ti" model="hr.salary.rule">
444 <field name="name">QIT - Taxable Income (QITTI)</field>
445 <field name="sequence" eval="181"/>
446 <field name="code">QITTI</field>
447 <field name="appears_on_payslip" eval="0"/>
448 <field name="active" eval="1"/>
449 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
450 <field name="condition_select">none</field>
451 <field name="amount_select">code</field>
452 <field name="amount_python_compute">result = GROSS - employee.tp10153</field>
453 </record>
454
455 <record id="rule_qc_qit" model="hr.salary.rule">
456 <field name="name">QIT - Quebec Income Tax (QIT)</field>
457 <field name="sequence" eval="182"/>
458 <field name="code">QIT</field>
459 <field name="appears_on_payslip" eval="1"/>
460 <field name="active" eval="1"/>
461 <field name="category_id" ref="hr_payroll.DED"/>
462 <field name="condition_select">none</field>
463 <field name="amount_select">code</field>
464 <field name="amount_python_compute">
465if QITTI &gt;= 80200:
466 res = (QITTI - 80200) * 0.24 + 40100 * 0.24 + 40100 * 0.16
467if QITTI &gt;= 40100 and QITTI &lt; 80200:
468 res = (QITTI - 40100) * 0.2 + 40100 * 0.16
469if QITTI &lt; 40100:
470 res = QITTI * 0.16
471result = res / P
472 </field>
473 </record>
474
475 <record id="rule_qc_qit_ytd" model="hr.salary.rule">
476 <field name="name">QIT - Year To Date (QITYTD)</field>
477 <field name="sequence" eval="183"/>
478 <field name="code">QITYTD</field>
479 <field name="category_id" ref="l10n_ca_hr_payroll.PCALC"/>
480 <field name="appears_on_payslip" eval="1"/>
481 <field name="active" eval="1"/>
482 <field name="condition_select">none</field>
483 <field name="amount_select">code</field>
484 <field name="amount_python_compute">date_from = payslip.date_to.split('-')[0] + '-01-01'
485date_to = payslip.date_to
486result = payslip.sum('QITYTD',date_from,date_to) + QIT
487 </field>
488 </record>
489
490 <!-- Salary Structure -->
491
492 <record id="hr_structure_qc" model="hr.payroll.structure">
493 <field name="code">QC</field>
494 <field name="name">Quebec Base</field>
495 <field name="rule_ids"
496 eval="[(6, 0, [
497 ref('rule_qc_qpip_maxie'),
498 ref('rule_qc_qpip_ee_rate'),
499 ref('rule_qc_qpip_ee_maxc'),
500 ref('rule_qc_qpip_ee_pytdc'),
501 ref('rule_qc_qpip_ee_c'),
502 ref('rule_qc_qpip_ee_ytdc'),
503 ref('rule_qc_qpip_er_rate'),
504 ref('rule_qc_qpip_er_maxc'),
505 ref('rule_qc_qpip_er_pytdc'),
506 ref('rule_qc_qpip_er_c'),
507 ref('rule_qc_qpip_er_ytdc'),
508 ref('rule_qc_qpp_maxie'),
509 ref('rule_qc_qpp_ee_rate'),
510 ref('rule_qc_qpp_ee_maxc'),
511 ref('rule_qc_qpp_ee_pytdc'),
512 ref('rule_qc_qpp_ee_c'),
513 ref('rule_qc_qpp_ee_ytdc'),
514 ref('rule_qc_qpp_er_rate'),
515 ref('rule_qc_qpp_er_maxc'),
516 ref('rule_qc_qpp_er_pytdc'),
517 ref('rule_qc_qpp_er_c'),
518 ref('rule_qc_qpp_er_ytdc'),
519 ref('rule_qc_ins_eec'),
520 ref('rule_qc_ins_erc'),
521 ref('rule_qc_ei_ee_rate'),
522 ref('rule_qc_ei_ee_maxc'),
523 ref('rule_qc_ei_ee_pytdc'),
524 ref('rule_qc_ei_ee_c'),
525 ref('rule_qc_ei_ee_ytdc'),
526 ref('rule_qc_qit_ti'),
527 ref('rule_qc_qit'),
528 ref('rule_qc_qit_ytd')
529 ])]"/>
530 <field name="parent_id" ref="l10n_ca_hr_payroll.hr_structure_ca_base"/>
531 </record>
532
533 </data>
534</openerp>
0535
=== added file 'l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll_view.xml'
--- l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll_view.xml 1970-01-01 00:00:00 +0000
+++ l10n_ca_qc_hr_payroll/l10n_ca_qc_hr_payroll_view.xml 2012-12-21 16:45:28 +0000
@@ -0,0 +1,18 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <record id="hr_employee_view_form_inherit" model="ir.ui.view">
6 <field name="name">hr.employee.view.form.inherit</field>
7 <field name="model">hr.employee</field>
8 <field name="type">form</field>
9 <field name="inherit_id" ref="l10n_ca_hr_payroll.hr_employee_view_form_inherit"/>
10 <field name="arch" type="xml">
11 <field name="td1" position="after">
12 <field name="tp10153"/>
13 </field>
14 </field>
15 </record>
16
17 </data>
18</openerp>
019
=== added directory 'l10n_ca_qc_hr_payroll/static'
=== added directory 'l10n_ca_qc_hr_payroll/static/src'
=== added directory 'l10n_ca_qc_hr_payroll/static/src/img'
=== added file 'l10n_ca_qc_hr_payroll/static/src/img/icon.png'
1Binary files l10n_ca_qc_hr_payroll/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_qc_hr_payroll/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ20Binary files l10n_ca_qc_hr_payroll/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_qc_hr_payroll/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ
=== added directory 'l10n_ca_qc_hr_payroll_account'
=== added file 'l10n_ca_qc_hr_payroll_account/__init__.py'
--- l10n_ca_qc_hr_payroll_account/__init__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_qc_hr_payroll_account/__init__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,22 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 OpenERP Canada. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published
8# by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
023
=== added file 'l10n_ca_qc_hr_payroll_account/__openerp__.py'
--- l10n_ca_qc_hr_payroll_account/__openerp__.py 1970-01-01 00:00:00 +0000
+++ l10n_ca_qc_hr_payroll_account/__openerp__.py 2012-12-21 16:45:28 +0000
@@ -0,0 +1,56 @@
1#-*- coding:utf-8 -*-
2##############################################################################
3#
4# Copyright (C) 2012 Savoir-faire Linux. All Rights Reserved.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU Affero General Public License for more details.
15#
16# You should have received a copy of the GNU Affero General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
19##############################################################################
20{
21 'name': 'Canada - Quebec - Payroll Accounting',
22 'category': 'Localization',
23 'version': '0.1',
24 'license': 'AGPL-3',
25 'category': 'Generic Modules/Human Resources',
26 'description': """
27Quebec Payroll Accounting
28=========================
29
30This module:
31 * creates financial accounts for payroll
32 * updates salary rules with accounting information
33
34 !!! Warning !!!
35
36Make sure to install AND CONFIGURE the canadian chart of accounts module (l10n_ca)
37before installing this module. Chart template needs to be selected to populate
38the account.account table and allow you to link salary rules with the financial
39account.
40 """,
41 'author':'Savoir-faire Linux',
42 'website':'http:/www.savoirfairelinux.com',
43 'depends': [
44 'l10n_ca_qc_hr_payroll',
45 'l10n_ca_hr_payroll_account',
46 ],
47 'data': [
48 'l10n_ca_qc_hr_payroll_account_data.xml',
49 ],
50 'test': [],
51 'demo': [],
52 'installable': True,
53 'active': False,
54}
55
56# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
057
=== added file 'l10n_ca_qc_hr_payroll_account/l10n_ca_qc_hr_payroll_account_data.xml'
--- l10n_ca_qc_hr_payroll_account/l10n_ca_qc_hr_payroll_account_data.xml 1970-01-01 00:00:00 +0000
+++ l10n_ca_qc_hr_payroll_account/l10n_ca_qc_hr_payroll_account_data.xml 2012-12-21 16:45:28 +0000
@@ -0,0 +1,44 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="1">
4
5 <!-- Quebec Parental Insurance Plan -->
6
7 <record id="l10n_ca_qc_hr_payroll.rule_qc_qpip_ee_c" model="hr.salary.rule">
8 <field name="account_debit" model='account.account' search="[('code','like','51206')]"/>
9 <field name="account_credit" model='account.account' search="[('code','like','214231')]"/>
10 </record>
11
12 <record id="l10n_ca_qc_hr_payroll.rule_qc_qpip_er_c" model="hr.salary.rule">
13 <field name="account_debit" model='account.account' search="[('code','like','51206')]"/>
14 <field name="account_credit" model='account.account' search="[('code','like','214232')]"/>
15 </record>
16
17 <!-- Quebec Pension Plan -->
18
19 <record id="l10n_ca_qc_hr_payroll.rule_qc_qpp_ee_c" model="hr.salary.rule">
20 <field name="account_debit" model='account.account' search="[('code','like','51205')]"/>
21 <field name="account_credit" model='account.account' search="[('code','like','214221')]"/>
22 </record>
23
24 <record id="l10n_ca_qc_hr_payroll.rule_qc_qpp_er_c" model="hr.salary.rule">
25 <field name="account_debit" model='account.account' search="[('code','like','51205')]"/>
26 <field name="account_credit" model='account.account' search="[('code','like','214222')]"/>
27 </record>
28
29 <!-- Employment Insurance -->
30
31 <record id="l10n_ca_qc_hr_payroll.rule_qc_ei_ee_c" model="hr.salary.rule">
32 <field name="account_debit" model='account.account' search="[('code','like','51203')]"/>
33 <field name="account_credit" model='account.account' search="[('code','like','214111')]"/>
34 </record>
35
36 <!-- Quebec Tax Income -->
37
38 <record id="l10n_ca_qc_hr_payroll.rule_qc_qit" model="hr.salary.rule">
39 <field name="account_debit" model='account.account' search="[('code','like','51210')]"/>
40 <field name="account_credit" model='account.account' search="[('code','like','21426')]"/>
41 </record>
42
43 </data>
44</openerp>
045
=== added directory 'l10n_ca_qc_hr_payroll_account/static'
=== added directory 'l10n_ca_qc_hr_payroll_account/static/src'
=== added directory 'l10n_ca_qc_hr_payroll_account/static/src/img'
=== added file 'l10n_ca_qc_hr_payroll_account/static/src/img/icon.png'
1Binary files l10n_ca_qc_hr_payroll_account/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_qc_hr_payroll_account/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ46Binary files l10n_ca_qc_hr_payroll_account/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_qc_hr_payroll_account/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ
=== added directory 'l10n_ca_toponyms/static'
=== added directory 'l10n_ca_toponyms/static/src'
=== added directory 'l10n_ca_toponyms/static/src/img'
=== added file 'l10n_ca_toponyms/static/src/img/icon.png'
2Binary files l10n_ca_toponyms/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_toponyms/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ47Binary files l10n_ca_toponyms/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and l10n_ca_toponyms/static/src/img/icon.png 2012-12-21 16:45:28 +0000 differ

Subscribers

People subscribed via source and target branches