[MERGE] merged the dev branch of payroll with clean code as work basis

bzr revid: qdp-launchpad@openerp.com-20110406151429-z3sgsbe9mugb58qt
This commit is contained in:
Quentin (OpenERP)
2011-04-06 17:14:29 +02:00
18 changed files with 1082 additions and 2225 deletions
+1
View File
@@ -139,6 +139,7 @@ class hr_employee(osv.osv):
'ssnid': fields.char('SSN No', size=32, help='Social Security Number'),
'sinid': fields.char('SIN No', size=32, help="Social Insurance Number"),
'identification_id': fields.char('Identification No', size=32),
'otherid': fields.char('Other Id', size=64),
'gender': fields.selection([('male', 'Male'),('female', 'Female')], 'Gender'),
'marital': fields.many2one('hr.employee.marital.status', 'Marital Status'),
'department_id':fields.many2one('hr.department', 'Department'),
+1
View File
@@ -43,6 +43,7 @@
<field name="sinid" groups="base.group_extended"/>
<field name="identification_id" groups="base.group_extended"/>
<field name="passport_id"/>
<field name="otherid"/>
</group>
<group col="2" colspan="2" groups="base.group_hr_user">
<separator string="Status" colspan="2"/>
+3 -1
View File
@@ -44,7 +44,9 @@ You can assign several contracts per employee.
'hr_contract_view.xml'
],
'demo_xml': [],
'test': ['test/test_hr_contract.yml'],
'test': [
'test/test_hr_contract.yml'
],
'installable': True,
'active': False,
'certificate': '0046298028637',
+30 -33
View File
@@ -51,35 +51,28 @@ class hr_employee(osv.osv):
hr_employee()
#Contract wage type period name
class hr_contract_wage_type_period(osv.osv):
_name='hr.contract.wage.type.period'
_description='Wage Period'
_columns = {
'name': fields.char('Period Name', size=50, required=True, select=True),
'factor_days': fields.float('Hours in the period', digits=(12,4), required=True, help='This field is used by the timesheet system to compute the price of an hour of work wased on the contract of the employee')
}
_defaults = {
'factor_days': 168.0
}
hr_contract_wage_type_period()
class hr_passport(osv.osv):
"""
Employee Passport
Passport based Contracts for Employees
"""
#Contract wage type (hourly, daily, monthly, ...)
class hr_contract_wage_type(osv.osv):
_name = 'hr.contract.wage.type'
_description = 'Wage Type'
_name = 'hr.passport'
_description = 'Passport Detail'
_columns = {
'name': fields.char('Wage Type Name', size=50, required=True, select=True),
'period_id': fields.many2one('hr.contract.wage.type.period', 'Wage Period', required=True),
'type': fields.selection([('gross','Gross'), ('net','Net')], 'Type', required=True),
'factor_type': fields.float('Factor for hour cost', digits=(12,4), required=True, help='This field is used by the timesheet system to compute the price of an hour of work wased on the contract of the employee')
'employee_id': fields.many2one('hr.employee', 'Employee', required=True),
'name': fields.char('Passport No', size=64, required=True, readonly=False),
'country_id': fields.many2one('res.country', 'Country of Issue', required=True),
'address_id': fields.many2one('res.partner.address', 'Address', required=False),
'date_issue': fields.date('Passport Issue Date', required=True),
'date_expire': fields.date('Passport Expire Date', required=True),
'note': fields.text('Description'),
'contracts_ids': fields.one2many('hr.contract', 'passport_id', 'Contracts', required=False, readonly=True),
}
_defaults = {
'type': 'gross',
'factor_type': 1.8
}
hr_contract_wage_type()
_sql_constraints = [
('passport_no_uniq', 'unique (employee_id, name)', 'The Passport No must be unique !'),
]
hr_passport()
class hr_contract_type(osv.osv):
_name = 'hr.contract.type'
@@ -103,15 +96,22 @@ class hr_contract(osv.osv):
'trial_date_start': fields.date('Trial Start Date'),
'trial_date_end': fields.date('Trial End Date'),
'working_hours': fields.many2one('resource.calendar','Working Schedule'),
'wage_type_id': fields.many2one('hr.contract.wage.type', 'Wage Type', required=True),
'wage': fields.float('Wage', digits=(16,2), required=True),
'wage': fields.float('Wage', digits=(16,2), required=True, help="Basic Salary of the employee"),
'advantages': fields.text('Advantages'),
'advantages_net': fields.float('Net Advantages Value', digits=(16,2)),
'advantages_gross': fields.float('Gross Advantages Value', digits=(16,2)),
'notes': fields.text('Notes'),
'permit_no': fields.char('Work Permit No', size=256, required=False, readonly=False),
'passport_id': fields.many2one('hr.passport', 'Passport', required=False),
'visa_no': fields.char('Visa No', size=64, required=False, readonly=False),
'visa_expire': fields.date('Visa Expire Date'),
}
def _get_type(self, cr, uid, context=None):
type_ids = self.pool.get('hr.contract.type').search(cr, uid, [('name', '=', 'Employee')])
return type_ids and type_ids[0] or False
_defaults = {
'date_start': lambda *a: time.strftime("%Y-%m-%d"),
'type_id': _get_type
}
def _check_dates(self, cr, uid, ids, context=None):
@@ -123,9 +123,6 @@ class hr_contract(osv.osv):
_constraints = [
(_check_dates, 'Error! contract start-date must be lower then contract end-date.', ['date_start', 'date_end'])
]
hr_contract()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+7 -31
View File
@@ -1,43 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<!-- Contract Period Names -->
<record id="hr_contract_wage_type_period_daily" model="hr.contract.wage.type.period">
<field name="name">daily</field>
</record>
<record id="hr_contract_wage_type_period_weekly" model="hr.contract.wage.type.period">
<field name="name">weekly</field>
</record>
<record id="hr_contract_wage_type_period_monthly" model="hr.contract.wage.type.period">
<field name="name">monthly</field>
</record>
<!-- Contract Wage Types -->
<record id="hr_contract_monthly_gross" model="hr.contract.wage.type">
<field name="name">Monthly Gross Wage</field>
<field name="type">gross</field>
<field name="period_id" ref="hr_contract_wage_type_period_monthly"/>
</record>
<record id="hr_contract_monthly_net" model="hr.contract.wage.type">
<field name="name">Monthly Net Wage</field>
<field name="type">net</field>
<field name="period_id" ref="hr_contract_wage_type_period_monthly"/>
</record>
<!-- Contract Types -->
<!-- Contract Types -->
<record id="hr_contract_type_emp" model="hr.contract.type">
<field name="name">Employee</field>
</record>
</record>
<record id="hr_contract_type_wrkr" model="hr.contract.type">
<field name="name">Worker</field>
</record>
</record>
<record id="hr_contract_type_sub" model="hr.contract.type">
<field name="name">Subcontractor</field>
</record>
</record>
</data>
</openerp>
+99 -107
View File
@@ -2,99 +2,83 @@
<openerp>
<data>
<record id="hr_contract_wage_type_view_form" model="ir.ui.view">
<field name="name">hr.contract.wage.type.view.form</field>
<field name="model">hr.contract.wage.type</field>
<!-- Passport Views -->
<record id="hr_passport_form" model="ir.ui.view">
<field name="name">hr.passport.form</field>
<field name="model">hr.passport</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Wage Type">
<field colspan="4" name="name"/>
<field name="period_id" widget="selection"/>
<field name="type"/>
<separator colspan="4" string="Hourly cost computation"/>
<field name="factor_type"/>
<form string="Passport">
<group col="6" colspan="4">
<field name="name" select="1" colspan="4"/>
<field name="employee_id" />
</group>
<group col="2" colspan="2">
<separator string="Country &amp; Address" colspan="4"/>
<field name="country_id" select="1"/>
<field name="address_id" select="1"/>
</group>
<group col="2" colspan="2">
<separator string="Valid From" colspan="2"/>
<field name="date_issue" select="1"/>
<field name="date_expire" select="1"/>
</group>
<notebook colspan="4">
<page string="Description">
<separator string="Description" colspan="2"/>
<field name="note" colspan="4" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<record id="hr_contract_wage_type_view_tree" model="ir.ui.view">
<field name="name">hr.contract.wage.type.view.tree</field>
<field name="model">hr.contract.wage.type</field>
<record id="hr_passport_tree" model="ir.ui.view">
<field name="name">hr.passport.tree</field>
<field name="model">hr.passport</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Wage Types">
<field name="name"/>
<field name="type"/>
<field name="period_id" invisible="1"/>
<tree string="Passport">
<field name="name" />
<field name="employee_id" />
<field name="address_id"/>
<field name="country_id" />
<field name="date_expire"/>
<field name="date_issue" />
</tree>
</field>
</record>
<record id="hr_contract_wage_type_view_search" model="ir.ui.view">
<field name="name">hr.contract.wage.type.view.search</field>
<field name="model">hr.contract.wage.type</field>
<record id="view_hr_passport_filter" model="ir.ui.view">
<field name="name">hr.passport.select</field>
<field name="model">hr.passport</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Wage Type">
<group col='15' colspan='4'>
<field name="name"/>
<field name="type"/>
</group>
<newline/>
<group expand="0" string="Group By..." colspan="4" col="20">
<filter string="Period" icon="terp-go-month" domain="[]" context="{'group_by':'period_id'}"/>
</group>
</search>
<search string="Search Passport">
<group col="8" colspan="4">
<field name="name"/>
<field name="employee_id"/>
<field name="country_id"/>
<field name="address_id"/>
</group>
<newline/>
<group col="8" colspan="4" expand="0" string="Group By...">
<filter string="Employees" icon="terp-partner" name="employee_id" context="{'group_by':'employee_id'}"/>
<filter string="Country" name="country_id" icon="terp-go-home" context="{'group_by':'country_id'}"/>
<filter string="Expire" name="date_expire" icon="terp-go-month" context="{'group_by':'date_expire'}"/>
<filter string="Issue" name="date_issue" icon="terp-go-month" context="{'group_by':'date_issue'}"/>
</group>
</search>
</field>
</record>
<record id="action_hr_contract_wage_type" model="ir.actions.act_window">
<field name="name">Wage Type</field>
<field name="res_model">hr.contract.wage.type</field>
<record id="action_hr_passport_tree" model="ir.actions.act_window">
<field name="name">All Passports</field>
<field name="res_model">hr.passport</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
<field name="search_view_id" ref="hr_contract_wage_type_view_search"/>
<field name="view_id" ref="hr_passport_tree"/>
<field name="search_view_id" ref="view_hr_passport_filter"/>
</record>
<!-- End Passport Views -->
<menuitem id="next_id_56" name="Contract" parent="hr.menu_hr_management" sequence="5"/>
<menuitem action="action_hr_contract_wage_type" id="hr_menu_contract_wage_type" parent="next_id_56" sequence="7"/>
<record id="hr_contract_wage_type_period_view_form" model="ir.ui.view">
<field name="name">hr.contract.wage.type.period.view.form</field>
<field name="model">hr.contract.wage.type.period</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Wage Period">
<field colspan="4" name="name"/>
<field name="factor_days"/>
</form>
</field>
</record>
<record id="hr_contract_wage_type_period_view_search" model="ir.ui.view">
<field name="name">hr.contract.wage.type.period.view.search</field>
<field name="model">hr.contract.wage.type.period</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Wage Period">
<group col='15' colspan='4'>
<field name="name"/>
</group>
</search>
</field>
</record>
<record id="action_hr_contract_wage_type_period" model="ir.actions.act_window">
<field name="name">Wage period</field>
<field name="res_model">hr.contract.wage.type.period</field>
<field name="view_type">form</field>
<field name="domain">[]</field>
<field name="search_view_id" ref="hr_contract_wage_type_period_view_search"/>
</record>
<menuitem action="action_hr_contract_wage_type_period" id="hr_menu_contract_wage_type_period"
parent="hr_contract.next_id_56"/>
<record id="hr_hr_employee_view_form2" model="ir.ui.view">
<field name="name">hr.hr.employee.view.form2</field>
@@ -132,9 +116,9 @@
<field name="arch" type="xml">
<search string="Search Contract">
<group col='15' colspan='4'>
<filter string="Current" icon="terp-check" name="current" domain="['|',('date_end','&gt;=', time.strftime('%%Y-%%m-%%d')),('date_end','=',False)]" help="Contracts in progress"/>
<filter string="Overpassed" icon="terp-emblem-important" domain="[('date_end','&lt;', time.strftime('%%Y-%%m-%%d'))]" help="Contracts whose end date already passed"/>
<separator orientation="vertical"/>
<filter string="Current" icon="terp-check" name="current" domain="['|',('date_end','&gt;=', time.strftime('%%Y-%%m-%%d')),('date_end','=',False)]" help="Contracts in progress"/>
<filter string="Overpassed" icon="terp-emblem-important" domain="[('date_end','&lt;', time.strftime('%%Y-%%m-%%d'))]" help="Contracts whose end date already passed"/>
<separator orientation="vertical"/>
<field name="name"/>
<field name="employee_id"/>
<field name="working_hours"/>
@@ -143,11 +127,11 @@
</group>
<newline/>
<group expand="0" string="Group By..." colspan="4" col="20">
<filter string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
<separator orientation="vertical"/>
<filter string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
<separator orientation="vertical"/>
<filter string="Working Schedule" icon="terp-go-week" domain="[]" context="{'group_by':'working_hours'}"/>
<filter string="Job" icon="terp-gtk-select-all" domain="[]" context="{'group_by':'job_id'}"/>
<separator orientation="vertical"/>
<separator orientation="vertical"/>
<filter string="Contract Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type_id'}"/>
</group>
</search>
@@ -161,33 +145,42 @@
<field name="arch" type="xml">
<form string="Contract">
<group colspan="3" col="6">
<field name="name" />
<field name="employee_id" />
<field name="job_id"/>
<field name="wage"/>
<field name="wage_type_id" widget="selection"/>
<field name="type_id" widget="selection"/>
<field name="name" />
<field name="employee_id" />
<field name="job_id"/>
<field name="wage"/>
<field name="type_id" widget="selection"/>
</group>
<notebook>
<page string="Information">
<group col="2" colspan="2">
<separator colspan="2" string="Duration"/>
<field name="date_start" />
<field name="date_end" />
<field name="working_hours"/>
<separator colspan="2" string="Trial Period"/>
<field name="trial_date_start" />
<field name="trial_date_end" />
</group>
<group col="2" colspan="2">
<separator colspan="2" string="Advantages"/>
<field name="advantages_net"/>
<field name="advantages_gross"/>
<field name="advantages" nolabel="1" colspan="2"/>
<separator colspan="2" string="Duration"/>
<field name="date_start" />
<field name="date_end" />
<field name="working_hours"/>
<separator colspan="2" string="Trial Period"/>
<field name="trial_date_start" />
<field name="trial_date_end" />
</group>
<group col="2" colspan="2">
<separator colspan="2" string="Advantages"/>
<field name="advantages" nolabel="1" colspan="2"/>
</group>
<separator colspan="4" string="Notes"/>
<field colspan="4" name="notes" nolabel="1"/>
</page>
<page string="Work Permit">
<group col="2" colspan="2">
<separator colspan="2" string="Passport"/>
<field name="passport_id" domain="[('employee_id','=',employee_id)]"/>
</group>
<group col="2" colspan="2">
<separator colspan="2" string="Valid for"/>
<field name="visa_no"/>
<field name="permit_no"/>
<field name="visa_expire"/>
</group>
</page>
</notebook>
</form>
</field>
@@ -203,11 +196,9 @@
<field name="employee_id"/>
<field name="type_id"/>
<field name="job_id"/>
<!--field name="department_id"/-->
<field name="working_hours"/>
<field name="working_hours"/>
<field name="date_start"/>
<field name="date_end"/>
<field name="wage_type_id" invisible="1"/>
<field name="wage" invisible="1"/>
</tree>
</field>
@@ -270,11 +261,12 @@
<menuitem action="action_hr_contract" id="hr_menu_contract" parent="hr.menu_hr_main" name="Contracts" sequence="4" groups="base.group_hr_manager"/>
<!-- Contracts Button on Employee Form -->
<act_window
<act_window
context="{'search_default_employee_id': [active_id], 'default_employee_id': active_id}"
id="act_hr_employee_2_hr_contract"
name="Contracts"
res_model="hr.contract"
id="act_hr_employee_2_hr_contract"
name="Contracts"
res_model="hr.contract"
src_model="hr.employee"
groups="base.group_hr_manager"/>
@@ -1,7 +1,7 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_contract_wage_type_period_user","hr.contract.wage.type.period.user","model_hr_contract_wage_type_period","base.group_hr_user",1,1,1,1
"access_hr_contract_wage_type_user","hr.contract.wage.type.user","model_hr_contract_wage_type","base.group_hr_user",1,1,1,1
"access_hr_resource_manager","hr.employee.resource.manager","resource.model_resource_resource","base.group_hr_manager",1,1,1,1
"access_hr_resource_calendar_user","hr.employee.resource.calendar.user","resource.model_resource_calendar","base.group_hr_user",1,1,1,1
"access_hr_contract_type_manager","hr.contract.type.manager","model_hr_contract_type","base.group_hr_manager",1,1,1,1
"access_hr_contract_manager","hr.contract.manager","model_hr_contract","base.group_hr_manager",1,1,1,1
"access_hr_passport_manager","hr.passport.manager","model_hr_passport","base.group_hr_manager",1,1,1,1
"access_hr_passport","hr.passport","model_hr_passport","base.group_hr_user",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
access_hr_contract_wage_type_period_user hr.contract.wage.type.period.user model_hr_contract_wage_type_period base.group_hr_user 1 1 1 1
access_hr_contract_wage_type_user hr.contract.wage.type.user model_hr_contract_wage_type base.group_hr_user 1 1 1 1
2 access_hr_resource_manager hr.employee.resource.manager resource.model_resource_resource base.group_hr_manager 1 1 1 1
3 access_hr_resource_calendar_user hr.employee.resource.calendar.user resource.model_resource_calendar base.group_hr_user 1 1 1 1
4 access_hr_contract_type_manager hr.contract.type.manager model_hr_contract_type base.group_hr_manager 1 1 1 1
5 access_hr_contract_manager hr.contract.manager model_hr_contract base.group_hr_manager 1 1 1 1
6 access_hr_passport_manager hr.passport.manager model_hr_passport base.group_hr_manager 1 1 1 1
7 access_hr_passport hr.passport model_hr_passport base.group_hr_user 1 1 1 1
+4 -4
View File
@@ -52,16 +52,16 @@ Generic Payroll system.
'hr_payroll_view.xml',
'hr_payroll_workflow.xml',
'hr_payroll_sequence.xml',
'hr_paroll_report.xml',
'hr_payroll_report.xml',
'hr_payroll_data.xml',
'security/ir.model.access.csv',
'wizard/hr_payroll_employees_detail.xml',
'wizard/hr_payroll_year_salary.xml',
],
'test': [
'test/payslip.yml',
'test/payment_advice.yml',
'test/payroll_register.yml',
# 'test/payslip.yml',
# 'test/payment_advice.yml',
# 'test/payroll_register.yml',
# 'test/hr_payroll_report.yml',
],
'demo_xml': [
File diff suppressed because it is too large Load Diff
+54 -47
View File
@@ -1,137 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="HRA" model="hr.allounce.deduction.categoty">
<record id="AL" model="hr.salary.head">
<field name="name">Allowance</field>
<field name="code">ALW</field>
</record>
<record id="DED" model="hr.salary.head">
<field name="name">Deduction</field>
<field name="code">DED</field>
</record>
<record id="HRA" model="hr.salary.head">
<field name="code">HRA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">House Rent Allowance</field>
<field name="sequence" eval="5"/>
</record>
<record id="CA" model="hr.allounce.deduction.categoty">
<record id="CA" model="hr.salary.head">
<field name="code">CA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">Conveyance Allowance</field>
<field name="sequence" eval="10"/>
</record>
<record id="MA" model="hr.allounce.deduction.categoty">
<record id="MA" model="hr.salary.head">
<field name="code">MA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">Medical Allowance</field>
<field name="sequence" eval="15"/>
</record>
<record id="TELA" model="hr.allounce.deduction.categoty">
<record id="TELA" model="hr.salary.head">
<field name="code">TELA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">Telephone Allowance</field>
<field name="sequence" eval="20"/>
</record>
<record id="LTA" model="hr.allounce.deduction.categoty">
<record id="LTA" model="hr.salary.head">
<field name="code">LTA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">Leave Travel Allowance</field>
<field name="sequence" eval="25"/>
</record>
<record id="NA" model="hr.allounce.deduction.categoty">
<record id="NA" model="hr.salary.head">
<field name="code">NA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">Newspaper Allowance</field>
<field name="sequence" eval="30"/>
</record>
<record id="TA" model="hr.allounce.deduction.categoty">
<record id="TA" model="hr.salary.head">
<field name="code">TA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">Traveling Allowance</field>
<field name="sequence" eval="35"/>
</record>
<record id="FA" model="hr.allounce.deduction.categoty">
<record id="FA" model="hr.salary.head">
<field name="code">FA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">Food Allowance</field>
<field name="sequence" eval="40"/>
</record>
<record id="DA" model="hr.allounce.deduction.categoty">
<record id="DA" model="hr.salary.head">
<field name="code">DA</field>
<field name="type">allowance</field>
<field name="parent_id" ref="AL"/>
<field name="name">Dearness Allowance</field>
<field name="sequence" eval="45"/>
</record>
<record id="PF" model="hr.allounce.deduction.categoty">
<record id="PF" model="hr.salary.head">
<field name="code">PF</field>
<field name="type">deduction</field>
<field name="parent_id" ref="DED"/>
<field name="name">Provident Fund</field>
<field name="sequence" eval="50"/>
</record>
<record id="PT" model="hr.allounce.deduction.categoty">
<record id="PT" model="hr.salary.head">
<field name="code">PT</field>
<field name="type">deduction</field>
<field name="parent_id" ref="DED"/>
<field name="name">Professional Tax</field>
<field name="sequence" eval="55"/>
</record>
<record id="WF" model="hr.allounce.deduction.categoty">
<record id="WF" model="hr.salary.head">
<field name="code">WF</field>
<field name="type">deduction</field>
<field name="parent_id" ref="DED"/>
<field name="name">Welfare</field>
<field name="sequence" eval="60"/>
</record>
<record id="TDS" model="hr.allounce.deduction.categoty">
<record id="TDS" model="hr.salary.head">
<field name="code">TDS</field>
<field name="type">deduction</field>
<field name="parent_id" ref="DED"/>
<field name="name">Tax Deduct at Source</field>
<field name="sequence" eval="65"/>
</record>
<record id="LWP" model="hr.allounce.deduction.categoty">
<record id="LWP" model="hr.salary.head">
<field name="code">LWP</field>
<field name="type">deduction</field>
<field name="parent_id" ref="DED"/>
<field name="name">Leave without pay</field>
<field name="sequence" eval="70"/>
</record>
<record id="FC" model="hr.allounce.deduction.categoty">
<record id="FC" model="hr.salary.head">
<field name="code">FC</field>
<field name="type">deduction</field>
<field name="parent_id" ref="DED"/>
<field name="name">Food Coupons</field>
<field name="sequence" eval="75"/>
</record>
<record id="ESI" model="hr.allounce.deduction.categoty">
<record id="ESI" model="hr.salary.head">
<field name="code">ESI</field>
<field name="type">deduction</field>
<field name="parent_id" ref="DED"/>
<field name="name">Employee's State Insurance</field>
<field name="sequence" eval="80"/>
</record>
<record id="OTHERD" model="hr.allounce.deduction.categoty">
<field name="code">OTHERD</field>
<field name="type">otherdeduct</field>
<field name="name">Other Deduction</field>
<record id="NET" model="hr.salary.head">
<field name="code">TP</field>
<field name="parent_id" ref="AL"/>
<field name="name">Total Payment</field>
<field name="sequence" eval="85"/>
</record>
<record id="OTHERA" model="hr.allounce.deduction.categoty">
<field name="code">OTHERA</field>
<field name="type">otherpay</field>
<field name="name">Other Taxable Allowance</field>
<field name="sequence" eval="90"/>
<record id="hr_salary_rule_net" model="hr.salary.rule">
<field name="amount_type">code</field>
<field name="code">NET</field>
<field name="category_id" ref="NET"/>
<field name="name">NET</field>
<field name="sequence" eval="500"/>
<field name="python_compute">total = basic+allowance+deduction</field>
</record>
<!-- Contract Wage Types -->
<record id="hr_contract_monthly_basic" model="hr.contract.wage.type">
<field name="name">Monthly Basic Wage</field>
<field name="type">basic</field>
<field name="period_id" ref="hr_contract.hr_contract_wage_type_period_monthly"/>
</record>
</data>
</openerp>
+30 -39
View File
@@ -2,57 +2,59 @@
<openerp>
<data>
<!-- Payroll Structure -->
<record id="structure_001" model="hr.payroll.structure">
<field name="code">ME</field>
<field name="name">Marketing Executive</field>
<field name="company_id" ref="base.main_company"/>
</record>
<!-- Salary Rules -->
<record id="hr_payslip_line_houserantallowance1" model="hr.payslip.line">
<field name="amount_type">per</field>
<field eval="5" name="sequence"/>
<field eval="0.4" name="amount"/>
<record id="hr_payslip_line_houserantallowance1" model="hr.salary.rule">
<field name="amount_select">percentage</field>
<field eval="40.0" name="amount_percentage"/>
<field name="amount_percentage_base">contract.wage</field>
<field name="code">HRA</field>
<field name="type">allowance</field>
<field name="type" ref="AL"/>
<field name="category_id" ref="hr_payroll.HRA"/>
<field name="function_id" ref="hr_payroll.structure_001"/>
<field name="name">House Rent Allowance</field>
<field name="sequence" eval="5"/>
</record>
<record id="hr_payslip_line_convanceallowance1" model="hr.payslip.line">
<field name="amount_type">fix</field>
<field eval="10" name="sequence"/>
<field eval="800.0" name="amount"/>
<record id="hr_payslip_line_convanceallowance1" model="hr.salary.rule">
<field name="amount_select">fix</field>
<field eval="800.0" name="amount_fix"/>
<field name="code">CA</field>
<field name="type">allowance</field>
<field name="type" ref="AL"/>
<field name="category_id" ref="hr_payroll.CA"/>
<field name="function_id" ref="hr_payroll.structure_001"/>
<field name="name">Conveyance Allowance</field>
<field name="sequence" eval="10"/>
</record>
<record id="hr_payslip_line_professionaltax1" model="hr.payslip.line">
<field name="amount_type">fix</field>
<record id="hr_payslip_line_professionaltax1" model="hr.salary.rule">
<field name="amount_select">fix</field>
<field eval="15" name="sequence"/>
<field eval="200.0" name="amount"/>
<field eval="-200.0" name="amount_fix"/>
<field name="code">PT</field>
<field name="type">deduction</field>
<field name="type" ref="DED"/>
<field name="category_id" ref="hr_payroll.PT"/>
<field name="function_id" ref="hr_payroll.structure_001"/>
<field name="name">Professional Tax</field>
</record>
<record id="hr_payslip_line_providentfund1" model="hr.payslip.line">
<field name="amount_type">per</field>
<record id="hr_payslip_line_providentfund1" model="hr.salary.rule">
<field name="amount_select">percentage</field>
<field eval="20" name="sequence"/>
<field eval="0.125" name="amount"/>
<field eval="-12.5" name="amount_percentage"/>
<field name="amount_percentage_base">contract.wage</field>
<field name="code">PF</field>
<field name="type">deduction</field>
<field name="type" ref="DED"/>
<field name="category_id" ref="hr_payroll.PF"/>
<field name="function_id" ref="hr_payroll.structure_001"/>
<field name="name">Provident Fund</field>
</record>
<!-- Salary Structure -->
<record id="structure_001" model="hr.payroll.structure">
<field name="code">ME</field>
<field name="name">Marketing Executive</field>
<field eval="[(6, 0, [ref('hr_payslip_line_houserantallowance1'), ref('hr_payslip_line_convanceallowance1'),ref('hr_payslip_line_professionaltax1'),ref('hr_payslip_line_providentfund1')])]" name="rule_ids"/>
<field name="company_id" ref="base.main_company"/>
</record>
<!-- Employee -->
<record id="hr_employee_bonamy0" model="hr.employee">
<field eval="0" name="manager"/>
@@ -65,7 +67,6 @@
<!-- Employee Contract -->
<record id="hr_contract_firstcontract1" model="hr.contract">
<field name="wage_type_id" ref="hr_contract.hr_contract_monthly_gross"/>
<field name="name">First Contract</field>
<field name="type_id" ref="hr_contract.hr_contract_type_emp"/>
<field name="date_start" eval="time.strftime('%Y-%m')+'-1'"/>
@@ -77,15 +78,5 @@
<field eval="5" name="working_days_per_week"/>
</record>
<!-- Payslip -->
<record id="hr_payslip_salaryslipofbonamyforjune0" model="hr.payslip">
<field name="number">SLIP/001</field>
<field name="deg_id" ref="hr_payroll.structure_001"/>
<field name="employee_id" ref="hr_employee_bonamy0"/>
<field name="contract_id" ref="hr_contract_firstcontract1"/>
<field name="company_id" ref="base.main_company"/>
<field name="date" eval="time.strftime('%Y-%m')+'-5'"/>
<field name="name" eval="'Salary Slip of Bonamy for June-'+time.strftime('%Y')"/>
</record>
</data>
</openerp>
File diff suppressed because it is too large Load Diff
+15 -27
View File
@@ -6,42 +6,36 @@
<field name="osv">hr.payslip</field>
<field name="on_create">True</field>
</record>
<record id="act_new" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="flow_start">True</field>
<field name="name">new</field>
</record>
<record id="act_draft" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">draft</field>
<field name="action">compute_sheet()</field>
<field name="flow_start">True</field>
<field name="split_mode">OR</field>
<field name="kind">function</field>
<field name="kind">dummy</field>
</record>
<record id="act_hr_check" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">hr_check</field>
<field name="action">hr_check_sheet()</field>
<field name="kind">function</field>
</record>
<record id="act_confirm" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">confirm</field>
<field name="action">verify_sheet()</field>
<field name="kind">function</field>
</record>
<record id="act_cancel" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">cancel</field>
<field name="action">cancel_sheet()</field>
<field name="kind">function</field>
</record>
<record id="act_done" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">done</field>
@@ -49,55 +43,49 @@
<field name="kind">function</field>
<field name="flow_stop">True</field>
</record>
<record id="t1" model="workflow.transition">
<field name="act_from" ref="act_new"/>
<field name="act_to" ref="act_draft"/>
<field name="signal">compute_sheet</field>
</record>
<record id="t2" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_hr_check"/>
<field name="signal">verify_sheet</field>
</record>
<record id="t3" model="workflow.transition">
<field name="act_from" ref="act_hr_check"/>
<field name="act_to" ref="act_confirm"/>
<field name="signal">final_verify_sheet</field>
</record>
<record id="t4" model="workflow.transition">
<field name="act_from" ref="act_confirm"/>
<field name="act_to" ref="act_done"/>
<field name="signal">process_sheet</field>
</record>
<record id="t7" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">cancel_sheet</field>
</record>
<record id="t8" model="workflow.transition">
<field name="act_from" ref="act_hr_check"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">cancel_sheet</field>
</record>
<record id="t9" model="workflow.transition">
<field name="act_from" ref="act_confirm"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">cancel_sheet</field>
</record>
<record id="t11" model="workflow.transition">
<field name="act_from" ref="act_done"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">cancel_sheet</field>
</record>
<record id="t12" model="workflow.transition">
<field name="act_from" ref="act_cancel"/>
<field name="act_to" ref="act_draft"/>
+2 -30
View File
@@ -392,7 +392,7 @@
<para style="terp_default_Bold_9">Basic Salary</para>
</td>
<td>
<para style="terp_default_9">[[ formatLang(o.basic_before_leaves, dp='Account') ]] [[ o.company_id.currency_id.symbol ]] </para>
<para style="terp_default_9">[[ formatLang(o.contract_id.wage, dp='Account') ]] [[ o.company_id.currency_id.symbol ]] </para>
</td>
<td>
<para style="terp_default_Bold_9">Leaved Deduction</para>
@@ -521,35 +521,7 @@
<para style="terp_default_space">
<font color="white"> </font>
</para>
<blockTable colWidths="269.0,134.0,135.0" style="Table21">
<tr>
<td>
<para style="terp_tblheader_Details">Other Lines</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Payments - [[ get_month(o) ]]</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Deduction -[[ get_month(o) ]]</para>
</td>
</tr>
</blockTable>
<section>
<para style="terp_default_9">[[repeatIn(get_others(o.line_ids),'ol') ]]</para>
<blockTable colWidths="269.0,134.0,135.0" style="Table22">
<tr>
<td>
<para style="terp_default_9">[[ ol.code or '' ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ ol.type in ['advance','loan','otherpay'] and formatLang(ol.total, dp='Account') or '' ]] [[ ol.type in ['advance','loan','otherpay'] and o.company_id and o.company_id.currency_id.symbol or '' ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ ol.type in ['otherdeduct','installment'] and formatLang(ol.total, dp='Account') or '' ]] [[ ol.type in ['otherdeduct','installment'] and o.company_id and o.company_id.currency_id.symbol or '' ]]</para>
</td>
</tr>
</blockTable>
</section>
<blockTable colWidths="269.0,177.0,93.0" style="Table5">
<tr>
<td>
+8 -20
View File
@@ -36,33 +36,21 @@ class payslip_report(report_sxw.rml_parse):
'get_earnings': self.get_earnings,
'get_deductions':self.get_deductions,
'get_leave':self.get_leave,
'get_others':self.get_others,
})
def convert(self, amount, cur):
amt_en = amount_to_text_en.amount_to_text(amount, 'en', cur)
return amt_en
def get_others(self, obj):
payslip_line = self.pool.get('hr.payslip.line')
res = []
ids = []
for id in range(len(obj)):
if obj[id].category_id.type in ('advance', 'loan', 'otherpay', 'otherdeduct', 'installment'):
ids.append(obj[id].id)
if ids:
res = payslip_line.browse(self.cr, self.uid, ids)
return res
def get_leave(self, obj):
payslip_line = self.pool.get('hr.payslip.line')
res = []
ids = []
for id in range(len(obj)):
if obj[id].type == 'leaves':
ids.append(obj[id].id)
if ids:
res = payslip_line.browse(self.cr, self.uid, ids)
# ids = []
# for id in range(len(obj)):
# if obj[id].type == 'leaves':
# ids.append(obj[id].id)
# if ids:
# res = payslip_line.browse(self.cr, self.uid, ids)
return res
def get_earnings(self, obj):
@@ -70,7 +58,7 @@ class payslip_report(report_sxw.rml_parse):
res = []
ids = []
for id in range(len(obj)):
if obj[id].category_id.type == 'allowance' and obj[id].type != 'leaves':
if obj[id].category_id.parent_id.name == 'Allowance':
ids.append(obj[id].id)
if ids:
res = payslip_line.browse(self.cr, self.uid, ids)
@@ -81,7 +69,7 @@ class payslip_report(report_sxw.rml_parse):
res = []
ids = []
for id in range(len(obj)):
if obj[id].category_id.type == 'deduction' and obj[id].type != 'leaves':
if obj[id].category_id.parent_id.name == 'Deduction':
ids.append(obj[id].id)
if ids:
res = payslip_line.browse(self.cr, self.uid, ids)
+1 -10
View File
@@ -1,20 +1,11 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_passport","hr.passport","model_hr_passport","base.group_hr_user",1,1,1,1
"access_hr_payroll_structure","hr.payroll.structure","model_hr_payroll_structure","base.group_hr_user",1,1,1,1
"access_hr_payroll_register","hr.payroll.register","model_hr_payroll_register","base.group_hr_user",1,1,1,1
"access_hr_payroll_advice","hr.payroll.advice","model_hr_payroll_advice","base.group_hr_user",1,1,1,1
"access_hr_payroll_advice_line","hr.payroll.advice.line","model_hr_payroll_advice_line","base.group_hr_user",1,1,1,1
"access_hr_contibution_register","hr.contibution.register","model_hr_contibution_register","base.group_hr_user",1,1,1,1
"access_hr_contibution_register_line","hr.contibution.register.line","model_hr_contibution_register_line","base.group_hr_user",1,1,1,1
"access_hr_allounce_deduction_category","hr.allounce.deduction.category","model_hr_allounce_deduction_categoty","base.group_hr_user",1,1,1,1
"access_company_contribution","company.contribution","model_company_contribution","base.group_hr_user",1,1,1,1
"access_company_contribution_line","company.contribution.line","model_company_contribution_line","base.group_hr_user",1,1,1,1
"access_hr_salary_head","hr.salary.head","model_hr_salary_head","base.group_hr_user",1,1,1,1
"access_hr_payslip","hr.payslip","model_hr_payslip","base.group_hr_user",1,1,1,1
"access_hr_payslip_line","hr.payslip.line","model_hr_payslip_line","base.group_hr_user",1,1,1,1
"access_hr_payslip_line_line","hr.payslip.line.line","model_hr_payslip_line_line","base.group_hr_user",1,1,1,1
"access_res_partner_payroll","res.partner.payroll","base.model_res_partner","base.group_hr_user",1,1,1,1
"access_hr_payslip_manager","hr.payslip.manager","model_hr_payslip","base.group_hr_manager",1,1,1,1
"access_hr_payslip_line_manager","hr.payslip.line.manager","model_hr_payslip_line","base.group_hr_manager",1,1,1,1
"access_hr_payroll_structure_manager","hr.payroll.structure.manager","model_hr_payroll_structure","base.group_hr_manager",1,1,1,1
"access_hr_passport_manager","hr.passport.manager","model_hr_passport","base.group_hr_manager",1,1,1,1
"access_hr_contract_wage_type","hr.contract.wage.type user","hr_contract.model_hr_contract_wage_type","base.group_hr_user",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
access_hr_passport hr.passport model_hr_passport base.group_hr_user 1 1 1 1
2 access_hr_payroll_structure hr.payroll.structure model_hr_payroll_structure base.group_hr_user 1 1 1 1
access_hr_payroll_register hr.payroll.register model_hr_payroll_register base.group_hr_user 1 1 1 1
access_hr_payroll_advice hr.payroll.advice model_hr_payroll_advice base.group_hr_user 1 1 1 1
access_hr_payroll_advice_line hr.payroll.advice.line model_hr_payroll_advice_line base.group_hr_user 1 1 1 1
3 access_hr_contibution_register hr.contibution.register model_hr_contibution_register base.group_hr_user 1 1 1 1
4 access_hr_contibution_register_line hr.contibution.register.line model_hr_contibution_register_line base.group_hr_user 1 1 1 1
5 access_hr_allounce_deduction_category access_hr_salary_head hr.allounce.deduction.category hr.salary.head model_hr_allounce_deduction_categoty model_hr_salary_head base.group_hr_user 1 1 1 1
access_company_contribution company.contribution model_company_contribution base.group_hr_user 1 1 1 1
access_company_contribution_line company.contribution.line model_company_contribution_line base.group_hr_user 1 1 1 1
6 access_hr_payslip hr.payslip model_hr_payslip base.group_hr_user 1 1 1 1
7 access_hr_payslip_line hr.payslip.line model_hr_payslip_line base.group_hr_user 1 1 1 1
access_hr_payslip_line_line hr.payslip.line.line model_hr_payslip_line_line base.group_hr_user 1 1 1 1
8 access_res_partner_payroll res.partner.payroll base.model_res_partner base.group_hr_user 1 1 1 1
9 access_hr_payslip_manager hr.payslip.manager model_hr_payslip base.group_hr_manager 1 1 1 1
10 access_hr_payslip_line_manager hr.payslip.line.manager model_hr_payslip_line base.group_hr_manager 1 1 1 1
11 access_hr_payroll_structure_manager hr.payroll.structure.manager model_hr_payroll_structure base.group_hr_manager 1 1 1 1
access_hr_passport_manager hr.passport.manager model_hr_passport base.group_hr_manager 1 1 1 1
access_hr_contract_wage_type hr.contract.wage.type user hr_contract.model_hr_contract_wage_type base.group_hr_user 1 1 1 1
+12
View File
@@ -43,6 +43,18 @@ class resource_calendar(osv.osv):
'company_id': lambda self, cr, uid, context: self.pool.get('res.company')._company_default_get(cr, uid, 'resource.calendar', context=context)
}
def working_hours_on_day(self, cr, uid, resource_calendar_id, day, context=None):
"""
@param resource_calendar_id: resource.calendar browse record
@param day: datetime object
@return: returns the working hours (as float) men should work on the given day if is in the attendance_ids of the resource_calendar_id (i.e if that day is a working day), returns 0.0 otherwise
"""
res = 0.0
for working_day in resource_calendar_id.attendance_ids:
if (int(working_day.dayofweek) + 1) == day.isoweekday():
res += working_day.hour_to - working_day.hour_from
return res
def _get_leaves(self, cr, uid, id, resource):
resource_cal_leaves = self.pool.get('resource.calendar.leaves')
dt_leave = []