[MERGE] merge with main branch
bzr revid: psi@tinyerp.co.in-20110511101733-8a0tbbmuwvo5bix5
This commit is contained in:
commit
03fb4577c4
|
@ -142,8 +142,8 @@ class hr_employee(osv.osv):
|
|||
'work_email': fields.char('Work E-mail', size=240),
|
||||
'work_location': fields.char('Office Location', size=32),
|
||||
'notes': fields.text('Notes'),
|
||||
'parent_id': fields.many2one('hr.employee', 'Manager'),
|
||||
'category_ids': fields.many2many('hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id', 'Category'),
|
||||
'parent_id': fields.many2one('hr.employee', 'Manager'),
|
||||
'category_ids': fields.many2many('hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id', 'Categories'),
|
||||
'child_ids': fields.one2many('hr.employee', 'parent_id', 'Subordinates'),
|
||||
'resource_id': fields.many2one('resource.resource', 'Resource', ondelete='cascade', required=True),
|
||||
'coach_id': fields.many2one('hr.employee', 'Coach'),
|
||||
|
@ -231,7 +231,7 @@ class res_users(osv.osv):
|
|||
except:
|
||||
# Tolerate a missing shortcut. See product/product.py for similar code.
|
||||
logging.getLogger('orm').debug('Skipped meetings shortcut for user "%s"', data.get('name','<new'))
|
||||
|
||||
|
||||
return user_id
|
||||
|
||||
res_users()
|
||||
|
|
|
@ -110,6 +110,7 @@
|
|||
<filter icon="terp-personal+" domain="[('department_id','=',context.get('department_id',False))]" string="My Departments Employee"/>
|
||||
</field>
|
||||
<field name="job_id" widget="selection"/>
|
||||
<field name="category_ids" select="1" groups="base.group_extended"/>
|
||||
<field name="parent_id"/>
|
||||
<newline />
|
||||
<group expand="0" string="Group By...">
|
||||
|
@ -157,12 +158,12 @@
|
|||
|
||||
<menuitem action="open_view_employee_list_my" id="menu_open_view_employee_list_my" sequence="3" parent="menu_hr_main"/>
|
||||
|
||||
<record id="ir_ui_view_sc_employee" model="ir.ui.view_sc">
|
||||
<field name="name">Employees</field>
|
||||
<field name="resource">ir.ui.menu</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="res_id" ref="hr.menu_open_view_employee_list_my"/>
|
||||
</record>
|
||||
<record id="ir_ui_view_sc_employee" model="ir.ui.view_sc">
|
||||
<field name="name">Employees</field>
|
||||
<field name="resource">ir.ui.menu</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="res_id" ref="hr.menu_open_view_employee_list_my"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
=======================
|
||||
|
@ -280,7 +281,7 @@
|
|||
<field eval="True" name="object"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="open_view_categ_tree"
|
||||
<menuitem action="open_view_categ_tree"
|
||||
id="menu_view_employee_category_tree" parent="hr.menu_view_employee_category_form"/>
|
||||
|
||||
<record id="view_hr_job_form" model="ir.ui.view">
|
||||
|
|
|
@ -164,30 +164,28 @@ class contrib_register(osv.osv):
|
|||
|
||||
contrib_register()
|
||||
|
||||
class hr_salary_head(osv.osv):
|
||||
class hr_salary_category(osv.osv):
|
||||
"""
|
||||
HR Salary Head
|
||||
HR Salary Category
|
||||
"""
|
||||
|
||||
_name = 'hr.salary.head'
|
||||
_description = 'Salary Head'
|
||||
_name = 'hr.salary.category'
|
||||
_description = 'Salary Category'
|
||||
_columns = {
|
||||
'name':fields.char('Name', size=64, required=True, readonly=False),
|
||||
'code':fields.char('Code', size=64, required=True, readonly=False),
|
||||
'parent_id':fields.many2one('hr.salary.head', 'Parent', help="Linking a salary head to its parent is used only for the reporting purpose."),
|
||||
'parent_id':fields.many2one('hr.salary.category', 'Parent', help="Linking a salary category to its parent is used only for the reporting purpose."),
|
||||
'note': fields.text('Description'),
|
||||
'company_id':fields.many2one('res.company', 'Company', required=False),
|
||||
'sequence': fields.integer('Sequence', required=True, help='Display sequence order'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'company_id': lambda self, cr, uid, context: \
|
||||
self.pool.get('res.users').browse(cr, uid, uid,
|
||||
context=context).company_id.id,
|
||||
'sequence': 5
|
||||
}
|
||||
|
||||
hr_salary_head()
|
||||
hr_salary_category()
|
||||
|
||||
class one2many_mod2(fields.one2many):
|
||||
|
||||
|
@ -212,13 +210,13 @@ class hr_payslip(osv.osv):
|
|||
_name = 'hr.payslip'
|
||||
_description = 'Pay Slip'
|
||||
|
||||
def _get_lines_salary_head(self, cr, uid, ids, field_names, arg=None, context=None):
|
||||
def _get_lines_salary_category(self, cr, uid, ids, field_names, arg=None, context=None):
|
||||
result = {}
|
||||
if not ids: return result
|
||||
cr.execute('''SELECT pl.slip_id, pl.id FROM hr_payslip_line AS pl \
|
||||
LEFT JOIN hr_salary_head AS sh on (pl.category_id = sh.id) \
|
||||
LEFT JOIN hr_salary_category AS sh on (pl.category_id = sh.id) \
|
||||
WHERE pl.slip_id in %s \
|
||||
GROUP BY pl.slip_id, sh.sequence, pl.sequence, pl.id ORDER BY sh.sequence, pl.sequence''',(tuple(ids),))
|
||||
GROUP BY pl.slip_id, pl.sequence, pl.id ORDER BY pl.sequence''',(tuple(ids),))
|
||||
res = cr.fetchall()
|
||||
for r in res:
|
||||
result.setdefault(r[0], [])
|
||||
|
@ -247,14 +245,14 @@ class hr_payslip(osv.osv):
|
|||
\n* If the salary is paid then state is set to \'Paid Salary\'.\
|
||||
\n* The \'Reject\' state is used when user cancel payslip.'),
|
||||
# 'line_ids': fields.one2many('hr.payslip.line', 'slip_id', 'Payslip Line', required=False, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'line_ids': one2many_mod2('hr.payslip.line', 'slip_id', 'Payslip Line',readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'line_ids': one2many_mod2('hr.payslip.line', 'slip_id', 'Payslip Line',readonly=True),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=False, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'worked_days_line_ids': fields.one2many('hr.payslip.worked_days', 'payslip_id', 'Payslip Worked Days', required=False, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'input_line_ids': fields.one2many('hr.payslip.input', 'payslip_id', 'Payslip Inputs', required=False, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'paid': fields.boolean('Made Payment Order ? ', required=False, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'note': fields.text('Description'),
|
||||
'contract_id': fields.many2one('hr.contract', 'Contract', required=False, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'details_by_salary_head': fields.function(_get_lines_salary_head, method=True, type='one2many', relation='hr.payslip.line', string='Details by Salary Head'),
|
||||
'details_by_salary_category': fields.function(_get_lines_salary_category, method=True, type='one2many', relation='hr.payslip.line', string='Details by Salary Head'),
|
||||
'credit_note': fields.boolean('Credit Note', help="Indicates this payslip has a refund of another"),
|
||||
}
|
||||
_defaults = {
|
||||
|
@ -495,10 +493,10 @@ class hr_payslip(osv.osv):
|
|||
return res
|
||||
|
||||
def get_payslip_lines(self, cr, uid, contract_ids, payslip_id, context):
|
||||
def _sum_salary_head(localdict, head, amount):
|
||||
if head.parent_id:
|
||||
localdict = _sum_salary_head(localdict, head.parent_id, amount)
|
||||
localdict['heads'][head.code] = head.code in localdict['heads'] and localdict['heads'][head.code] + amount or amount
|
||||
def _sum_salary_category(localdict, category, amount):
|
||||
if category.parent_id:
|
||||
localdict = _sum_salary_category(localdict, category.parent_id, amount)
|
||||
localdict['categories'][category.code] = category.code in localdict['categories'] and localdict['categories'][category.code] + amount or amount
|
||||
return localdict
|
||||
|
||||
#we keep a dict with the result because a value can be overwritten by another rule with the same code
|
||||
|
@ -534,8 +532,8 @@ class hr_payslip(osv.osv):
|
|||
previous_amount = rule.code in localdict and localdict[rule.code] or 0.0
|
||||
#set/overwrite the amount computed for this rule in the localdict
|
||||
localdict[rule.code] = amount
|
||||
#sum the amount for its salary head
|
||||
localdict = _sum_salary_head(localdict, rule.category_id, amount - previous_amount)
|
||||
#sum the amount for its salary category
|
||||
localdict = _sum_salary_category(localdict, rule.category_id, amount - previous_amount)
|
||||
#create/overwrite the rule in the temporary results
|
||||
result_dict[key] = {
|
||||
'salary_rule_id': rule.id,
|
||||
|
@ -589,7 +587,6 @@ class hr_payslip(osv.osv):
|
|||
#defaults
|
||||
res = {'value':{
|
||||
'line_ids':[],
|
||||
#'details_by_salary_head':[], TODO put me back
|
||||
'name':'',
|
||||
'contract_id': False,
|
||||
'struct_id': False,
|
||||
|
@ -697,16 +694,16 @@ class hr_salary_rule(osv.osv):
|
|||
_name = 'hr.salary.rule'
|
||||
_columns = {
|
||||
'name':fields.char('Name', size=256, required=True, readonly=False),
|
||||
'code':fields.char('Code', size=64, required=True),
|
||||
'code':fields.char('Code', size=64, required=True, help="The code of salary rules can be used as reference in computation of other rules. In that case, it is case sensitive."),
|
||||
'sequence': fields.integer('Sequence', required=True, help='Use to arrange calculation sequence'),
|
||||
'quantity': fields.char('Quantity', size=256, help="It is used in computation for percentage and fixed amount.For e.g. A rule for Meal Voucher having fixed amount of 1€ per worked day can have its quantity defined in expression like worked_days['WORK100']['number_of_days']."),
|
||||
'category_id':fields.many2one('hr.salary.head', 'Salary Head', required=True),
|
||||
'category_id':fields.many2one('hr.salary.category', 'Category', required=True),
|
||||
'active':fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the salary rule without removing it."),
|
||||
'appears_on_payslip': fields.boolean('Appears on Payslip', help="Used for the display of rule on payslip"),
|
||||
'parent_rule_id':fields.many2one('hr.salary.rule', 'Parent Salary Rule', select=True),
|
||||
'company_id':fields.many2one('res.company', 'Company', required=False),
|
||||
'condition_select': fields.selection([('none', 'Always True'),('range', 'Range'), ('python', 'Python Expression')], "Condition Based on", required=True),
|
||||
'condition_range':fields.char('Range Based on',size=1024, readonly=False, help='This will use to computer the % fields values, in general its on basic, but You can use all heads code field in small letter as a variable name i.e. hra, ma, lta, etc...., also you can use, static varible basic'),#old name = conputional expression
|
||||
'condition_range':fields.char('Range Based on',size=1024, readonly=False, help='This will use to computer the % fields values, in general its on basic, but You can use all categories code field in small letter as a variable name i.e. hra, ma, lta, etc...., also you can use, static varible basic'),
|
||||
'condition_python':fields.text('Python Condition', required=True, readonly=False, help='Applied this rule for calculation if condition is true. You can specify condition like basic > 1000.'),#old name = conditions
|
||||
'condition_range_min': fields.float('Minimum Range', required=False, help="The minimum amount, applied for this rule."),
|
||||
'condition_range_max': fields.float('Maximum Range', required=False, help="The maximum amount, applied for this rule."),
|
||||
|
@ -718,7 +715,7 @@ class hr_salary_rule(osv.osv):
|
|||
'amount_fix': fields.float('Fixed Amount', digits_compute=dp.get_precision('Account'),),
|
||||
'amount_percentage': fields.float('Percentage (%)', digits_compute=dp.get_precision('Account'), help='For example, enter 50.0 to apply a percentage of 50%'),
|
||||
'amount_python_compute':fields.text('Python Code'),
|
||||
'amount_percentage_base':fields.char('Percentage based on',size=1024, required=False, readonly=False, help='result will be affected to a variable'), #old name = expressiont
|
||||
'amount_percentage_base':fields.char('Percentage based on',size=1024, required=False, readonly=False, help='result will be affected to a variable'),
|
||||
'child_ids':fields.one2many('hr.salary.rule', 'parent_rule_id', 'Child Salary Rule'),
|
||||
'register_id':fields.property(
|
||||
'hr.contribution.register',
|
||||
|
@ -741,7 +738,7 @@ class hr_salary_rule(osv.osv):
|
|||
# employee: hr.employee object
|
||||
# contract: hr.contract object
|
||||
# rules: rules code (previously computed)
|
||||
# heads: dictionary containing the computed heads (sum of amount of all rules belonging to that head). Keys are the head codes.
|
||||
# categories: dictionary containing the computed categories (sum of amount of all rules belonging to that category). Keys are the category codes.
|
||||
# worked_days: dictionary containing the computed worked days. Keys are the worked days codes.
|
||||
# inputs: dictionary containing the computed inputs. Keys are the inputs codes.
|
||||
|
||||
|
@ -756,13 +753,13 @@ result = contract.wage * 0.10''',
|
|||
# employee: hr.employee object
|
||||
# contract: hr.contract object
|
||||
# rules: rules code (previously computed)
|
||||
# heads: dictionary containing the computed heads (sum of amount of all rules belonging to that head). Keys are the head codes.
|
||||
# categories: dictionary containing the computed categories (sum of amount of all rules belonging to that category). Keys are the category codes.
|
||||
# worked_days: dictionary containing the computed worked days. Keys are the worked days codes.
|
||||
# inputs: dictionary containing the computed inputs. Keys are the inputs codes.
|
||||
|
||||
# Note: returned value have to be set in the variable 'result'
|
||||
|
||||
result = rules['NET'] > heads['NET'] * 0.10''',
|
||||
result = rules['NET'] > categories['NET'] * 0.10''',
|
||||
'condition_range': 'contract.wage',
|
||||
'sequence': 5,
|
||||
'appears_on_payslip': True,
|
||||
|
|
|
@ -2,164 +2,36 @@
|
|||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="BASIC" model="hr.salary.head">
|
||||
<record id="BASIC" model="hr.salary.category">
|
||||
<field name="name">Basic</field>
|
||||
<field name="code">BASIC</field>
|
||||
</record>
|
||||
|
||||
<record id="ALW" model="hr.salary.head">
|
||||
<record id="ALW" model="hr.salary.category">
|
||||
<field name="name">Allowance</field>
|
||||
<field name="code">ALW</field>
|
||||
</record>
|
||||
|
||||
<record id="DED" model="hr.salary.head">
|
||||
<record id="DED" model="hr.salary.category">
|
||||
<field name="name">Deduction</field>
|
||||
<field name="code">DED</field>
|
||||
</record>
|
||||
|
||||
<record id="GROSS" model="hr.salary.head">
|
||||
<record id="GROSS" model="hr.salary.category">
|
||||
<field name="name">Gross</field>
|
||||
<field name="code">GROSS</field>
|
||||
</record>
|
||||
|
||||
<record id="NET" model="hr.salary.head">
|
||||
<record id="NET" model="hr.salary.category">
|
||||
<field name="name">Net</field>
|
||||
<field name="code">NET</field>
|
||||
</record>
|
||||
|
||||
<record id="COMP" model="hr.salary.head">
|
||||
<record id="COMP" model="hr.salary.category">
|
||||
<field name="name">Company Contribution</field>
|
||||
<field name="code">COMP</field>
|
||||
</record>
|
||||
|
||||
<!-- <record id="HRA" model="hr.salary.head">
|
||||
<field name="code">HRA</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.salary.head">
|
||||
<field name="code">CA</field>
|
||||
<field name="parent_id" ref="AL"/>
|
||||
<field name="name">Conveyance Allowance</field>
|
||||
<field name="sequence" eval="10"/>
|
||||
</record>
|
||||
|
||||
<record id="MA" model="hr.salary.head">
|
||||
<field name="code">MA</field>
|
||||
<field name="parent_id" ref="AL"/>
|
||||
<field name="name">Medical Allowance</field>
|
||||
<field name="sequence" eval="15"/>
|
||||
</record>
|
||||
|
||||
<record id="TELA" model="hr.salary.head">
|
||||
<field name="code">TELA</field>
|
||||
<field name="parent_id" ref="AL"/>
|
||||
<field name="name">Telephone Allowance</field>
|
||||
<field name="sequence" eval="20"/>
|
||||
</record>
|
||||
|
||||
<record id="LTA" model="hr.salary.head">
|
||||
<field name="code">LTA</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.salary.head">
|
||||
<field name="code">NA</field>
|
||||
<field name="parent_id" ref="AL"/>
|
||||
<field name="name">Newspaper Allowance</field>
|
||||
<field name="sequence" eval="30"/>
|
||||
</record>
|
||||
|
||||
<record id="TA" model="hr.salary.head">
|
||||
<field name="code">TA</field>
|
||||
<field name="parent_id" ref="AL"/>
|
||||
<field name="name">Traveling Allowance</field>
|
||||
<field name="sequence" eval="35"/>
|
||||
</record>
|
||||
|
||||
<record id="FA" model="hr.salary.head">
|
||||
<field name="code">FA</field>
|
||||
<field name="parent_id" ref="AL"/>
|
||||
<field name="name">Food Allowance</field>
|
||||
<field name="sequence" eval="40"/>
|
||||
</record>
|
||||
|
||||
<record id="DA" model="hr.salary.head">
|
||||
<field name="code">DA</field>
|
||||
<field name="parent_id" ref="AL"/>
|
||||
<field name="name">Dearness Allowance</field>
|
||||
<field name="sequence" eval="45"/>
|
||||
</record>
|
||||
|
||||
<record id="PF" model="hr.salary.head">
|
||||
<field name="code">PF</field>
|
||||
<field name="parent_id" ref="DED"/>
|
||||
<field name="name">Provident Fund</field>
|
||||
<field name="sequence" eval="50"/>
|
||||
</record>
|
||||
|
||||
<record id="PT" model="hr.salary.head">
|
||||
<field name="code">PT</field>
|
||||
<field name="parent_id" ref="DED"/>
|
||||
<field name="name">Professional Tax</field>
|
||||
<field name="sequence" eval="55"/>
|
||||
</record>
|
||||
|
||||
<record id="WF" model="hr.salary.head">
|
||||
<field name="code">WF</field>
|
||||
<field name="parent_id" ref="DED"/>
|
||||
<field name="name">Welfare</field>
|
||||
<field name="sequence" eval="60"/>
|
||||
</record>
|
||||
|
||||
<record id="TDS" model="hr.salary.head">
|
||||
<field name="code">TDS</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.salary.head">
|
||||
<field name="code">LWP</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.salary.head">
|
||||
<field name="code">FC</field>
|
||||
<field name="parent_id" ref="DED"/>
|
||||
<field name="name">Food Coupons</field>
|
||||
<field name="sequence" eval="75"/>
|
||||
</record>
|
||||
|
||||
<record id="ESI" model="hr.salary.head">
|
||||
<field name="code">ESI</field>
|
||||
<field name="parent_id" ref="DED"/>
|
||||
<field name="name">Employee's State Insurance</field>
|
||||
<field name="sequence" eval="80"/>
|
||||
</record>
|
||||
|
||||
<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="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>
|
||||
-->
|
||||
<record id="hr_rule_basic" model="hr.salary.rule">
|
||||
<field name="name">Basic</field>
|
||||
<field name="sequence" eval="1"/>
|
||||
|
@ -177,7 +49,7 @@
|
|||
<field name="category_id" ref="hr_payroll.GROSS"/>
|
||||
<field name="condition_select">none</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result = heads['BASIC'] + ('ALW' in heads and heads['ALW'] or 0.0)</field>
|
||||
<field name="amount_python_compute">result = categories['BASIC'] + ('ALW' in categories and categories['ALW'] or 0.0)</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_rule_net" model="hr.salary.rule">
|
||||
|
@ -187,7 +59,7 @@
|
|||
<field name="category_id" ref="hr_payroll.NET"/>
|
||||
<field name="condition_select">none</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute">result = heads['BASIC'] + ('ALW' in heads and heads['ALW'] or 0.0) + ('DED' in heads and heads['DED'] or 0.0)</field>
|
||||
<field name="amount_python_compute">result = categories['BASIC'] + ('ALW' in categories and categories['ALW'] or 0.0) + ('DED' in categories and categories['DED'] or 0.0)</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
|
|
@ -193,7 +193,7 @@
|
|||
</group>
|
||||
<newline/>
|
||||
<group col="8" colspan="4" expand="0" string="Group By...">
|
||||
<filter string="Salary Head" icon="terp-camera_test" name="category_id" context="{'group_by':'category_id'}"/>
|
||||
<filter string="Salary Rule Category" icon="terp-camera_test" name="category_id" context="{'group_by':'category_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Amount Type" name="amount_select" icon="terp-stock_symbol-selection" context="{'group_by':'amount_select'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
|
@ -260,8 +260,8 @@
|
|||
</field>
|
||||
</page>
|
||||
<!-- TODO: put me back -->
|
||||
<page string="Details By Salary Head">
|
||||
<field name="details_by_salary_head" context="{'group_by':'category_id'}" domain="[('appears_on_payslip', '=', True)]" nolabel="1">
|
||||
<page string="Details By Salary Category">
|
||||
<field name="details_by_salary_category" context="{'group_by':'category_id'}" domain="[('appears_on_payslip', '=', True)]" nolabel="1">
|
||||
<tree string="Payslip Lines" colors="blue:total == 0">
|
||||
<field name="category_id"/>
|
||||
<field name="name"/>
|
||||
|
@ -376,18 +376,17 @@
|
|||
</record>
|
||||
<menuitem action="action_view_hr_payslip_form" id="menu_department_tree" parent="menu_hr_root_payroll"/>
|
||||
|
||||
<!-- Payment Heads -->
|
||||
<record id="hr_salary_head_form" model="ir.ui.view">
|
||||
<field name="name">hr.salary.head.form</field>
|
||||
<field name="model">hr.salary.head</field>
|
||||
<!-- Salary Category-->
|
||||
<record id="hr_salary_category_form" model="ir.ui.view">
|
||||
<field name="name">hr.salary.category.form</field>
|
||||
<field name="model">hr.salary.category</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Salary Heads">
|
||||
<form string="Salary Categories">
|
||||
<group col="3" colspan="6">
|
||||
<field name="name" select="1"/>
|
||||
<field name="code" select="1"/>
|
||||
<field name="parent_id" select="1"/>
|
||||
<field name="sequence" select="1"/>
|
||||
</group>
|
||||
<separator colspan="4" string="Notes"/>
|
||||
<field name="note" colspan="4" nolabel="1"/>
|
||||
|
@ -395,46 +394,44 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_salary_head_tree" model="ir.ui.view">
|
||||
<field name="name">hr.salary.head.tree</field>
|
||||
<field name="model">hr.salary.head</field>
|
||||
<record id="hr_salary_category_tree" model="ir.ui.view">
|
||||
<field name="name">hr.salary.category.tree</field>
|
||||
<field name="model">hr.salary.category</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Salary Heads">
|
||||
<tree string="Salary Rule Categories">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="sequence"/>
|
||||
<field name="parent_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_salary_head_filter" model="ir.ui.view">
|
||||
<field name="name">hr.salary.head.select</field>
|
||||
<field name="model">hr.salary.head</field>
|
||||
<record id="view_hr_salary_category_filter" model="ir.ui.view">
|
||||
<field name="name">hr.salary.category.select</field>
|
||||
<field name="model">hr.salary.category</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Salary Heads">
|
||||
<search string="Salary Rule Categories">
|
||||
<field name="name" select="1"/>
|
||||
<field name="code" select="1"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_salary_head" model="ir.actions.act_window">
|
||||
<field name="name">Salary Heads</field>
|
||||
<field name="res_model">hr.salary.head</field>
|
||||
<record id="action_hr_salary_category" model="ir.actions.act_window">
|
||||
<field name="name">Salary Categories</field>
|
||||
<field name="res_model">hr.salary.category</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="hr_salary_head_tree"/>
|
||||
<field name="search_view_id" ref="view_hr_salary_head_filter"/>
|
||||
<field name="view_id" ref="hr_salary_category_tree"/>
|
||||
<field name="search_view_id" ref="view_hr_salary_category_filter"/>
|
||||
</record>
|
||||
<menuitem
|
||||
id="menu_hr_salary_head"
|
||||
action="action_hr_salary_head"
|
||||
id="menu_hr_salary_category"
|
||||
action="action_hr_salary_category"
|
||||
parent="payroll_configure"
|
||||
sequence="11"
|
||||
/>
|
||||
<!-- End Payment Heads -->
|
||||
|
||||
<!--
|
||||
Contribution Register
|
||||
|
@ -591,23 +588,23 @@
|
|||
</record>
|
||||
|
||||
<record id="view_hr_rule_filter" model="ir.ui.view">
|
||||
<field name="name">hr.salary.rule.select</field>
|
||||
<field name="model">hr.salary.rule</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Salary Rule">
|
||||
<group col="8" colspan="4">
|
||||
<field name="name"/>
|
||||
<field name="code" select="1"/>
|
||||
<field name="category_id"/>
|
||||
<field name="condition_range_min"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group col="8" colspan="4" expand="0" string="Group By...">
|
||||
<filter string="Head" icon="terp-folder-yellow" name="head" context="{'group_by':'category_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
<field name="name">hr.salary.rule.select</field>
|
||||
<field name="model">hr.salary.rule</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Salary Rule">
|
||||
<group col="8" colspan="4">
|
||||
<field name="name"/>
|
||||
<field name="code" select="1"/>
|
||||
<field name="category_id"/>
|
||||
<field name="condition_range_min"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group col="8" colspan="4" expand="0" string="Group By...">
|
||||
<filter string="Head" icon="terp-folder-yellow" name="head" context="{'group_by':'category_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_salary_rule_form" model="ir.actions.act_window">
|
||||
|
@ -623,24 +620,6 @@
|
|||
|
||||
<act_window domain="[('slip_id', '=', active_id)]" id="act_payslip_lines" name="Payslip Lines" res_model="hr.payslip.line" src_model="hr.payslip"/>
|
||||
|
||||
<record id="hr_contribution_register_form" model="ir.ui.view">
|
||||
<field name="name">hr.contribution.register.form</field>
|
||||
<field name="model">hr.contribution.register</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Contribution">
|
||||
<field name="name" select="1"/>
|
||||
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Description">
|
||||
<separator colspan="4" string="Description"/>
|
||||
<field name="note" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
|
|
|
@ -6,5 +6,12 @@
|
|||
<!-- <field name="name">Human Resources / Payroll</field>-->
|
||||
<!-- </record>-->
|
||||
|
||||
<record id="property_rule_employee_payslip" model="ir.rule">
|
||||
<field name="name">Employee Payslip</field>
|
||||
<field model="ir.model" name="model_id" ref="model_hr_payslip"/>
|
||||
<field name="domain_force">['|', ('employee_id.user_id', '=', user.id), ('employee_id.department_id.manager_id.user_id', '=', user.id)]</field>
|
||||
<field name="groups" eval="[(4,ref('base.group_hr_user'))]"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -1,10 +1,10 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_hr_payroll_structure","hr.payroll.structure","model_hr_payroll_structure","base.group_hr_user",1,1,1,1
|
||||
"access_hr_contribution_register","hr.contribution.register","model_hr_contribution_register","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_salary_category","hr.salary.category","model_hr_salary_category","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_res_partner_payroll","res.partner.payroll","base.model_res_partner","base.group_hr_user",1,1,1,1
|
||||
"access_hr_payslip_input_user","hr.payslip.input.user","model_hr_payslip_input","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
|
||||
|
|
|
Loading…
Reference in New Issue