Browse Source

[ADD] Initial Commit

pull/78/head
Sreejith 7 years ago
parent
commit
95b7c9c089
  1. 35
      hr_salary_advance/README.md
  2. 4
      hr_salary_advance/__init__.py
  3. 51
      hr_salary_advance/__manifest__.py
  4. 5
      hr_salary_advance/models/__init__.py
  5. 29
      hr_salary_advance/models/hr_advance_payslip.py
  6. 186
      hr_salary_advance/models/salary_advance.py
  7. 11
      hr_salary_advance/models/salary_structure.py
  8. 5
      hr_salary_advance/security/ir.model.access.csv
  9. 35
      hr_salary_advance/security/security.xml
  10. BIN
      hr_salary_advance/static/description/HRMS-BUTTON.png
  11. BIN
      hr_salary_advance/static/description/advance_request_approval.png
  12. BIN
      hr_salary_advance/static/description/banner.jpg
  13. BIN
      hr_salary_advance/static/description/cybro-service.png
  14. BIN
      hr_salary_advance/static/description/icon.png
  15. 133
      hr_salary_advance/static/description/index.html
  16. BIN
      hr_salary_advance/static/description/salary_advance_deduction.png
  17. BIN
      hr_salary_advance/static/description/salary_advance_rule.png
  18. BIN
      hr_salary_advance/static/description/salary_request.png
  19. 146
      hr_salary_advance/views/salary_advance.xml
  20. 33
      hr_salary_advance/views/salary_structure.xml

35
hr_salary_advance/README.md

@ -0,0 +1,35 @@
OHRMS Advance Salary'
=====================
Advance Salary In HR.
Installation
============
- www.odoo.com/documentation/10.0/setup/install.html
- Install our custom addon
License
=======
GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3)
(http://www.gnu.org/licenses/agpl.html)
Bug Tracker
===========
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Credits
=======
* Cybrosys Techno Solutions <https://www.cybrosys.com>
Author
------
Developers: Anusha P P <anusha@cybrosys.in>
Sreejith P <sreejith@cybrosys.in>
Maintainer
----------
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com.

4
hr_salary_advance/__init__.py

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
import models

51
hr_salary_advance/__manifest__.py

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Anusha P P (<https://www.cybrosys.com>)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
###################################################################################
{
'name': 'OHRMS Advance Salary',
'version': '10.0.1.0.0',
'summary': 'Advance Salary In HR',
'description': """
Helps you to manage Advance Salary Request of your company's staff.
""",
'category': 'Human Resources',
'author': "Cybrosys Techno Solutions",
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.openhrms.com",
'depends': [
'hr_payroll', 'hr', 'account_accountant', 'hr_contract', 'hr_loan',
],
'data': [
'security/ir.model.access.csv',
'security/security.xml',
'views/salary_structure.xml',
'views/salary_advance.xml',
],
'demo': [],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

5
hr_salary_advance/models/__init__.py

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
import salary_advance
import salary_structure
import hr_advance_payslip

29
hr_salary_advance/models/hr_advance_payslip.py

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
from datetime import datetime
from odoo import models
from odoo.exceptions import except_orm
class SalaryRuleInput(models.Model):
_inherit = 'hr.payslip'
def get_inputs(self, contract_ids, date_from, date_to):
"""This Compute the other inputs to employee payslip.
"""
res = super(SalaryRuleInput, self).get_inputs(contract_ids, date_from, date_to)
print self, contract_ids, date_from, date_to
contract_obj = self.env['hr.contract']
emp_id = contract_obj.browse(contract_ids[0]).employee_id
adv_salary = self.env['salary.advance'].search([('employee_id', '=', emp_id.id)])
print emp_id, adv_salary
for adv_obj in adv_salary:
current_date = datetime.strptime(date_from, '%Y-%m-%d').date().month
date = adv_obj.date
existing_date = datetime.strptime(date, '%Y-%m-%d').date().month
if current_date == existing_date:
state = adv_obj.state
amount = adv_obj.advance
for result in res:
if state == 'approve' and amount != 0 and result.get('code') == 'SAR':
result['amount'] = amount
return res

186
hr_salary_advance/models/salary_advance.py

@ -0,0 +1,186 @@
# -*- coding: utf-8 -*-
import time
from datetime import datetime
from odoo import fields, models, api, _
from odoo.exceptions import except_orm
from odoo import exceptions
class SalaryAdvancePayment(models.Model):
_name = "salary.advance"
_inherit = ['mail.thread', 'ir.needaction_mixin']
name = fields.Char(string='Name', readonly=True, select=True, default=lambda self: 'Adv/')
employee_id = fields.Many2one('hr.employee', string='Employee', required=True)
date = fields.Date(string='Date', required=True, default=lambda self: fields.Date.today())
reason = fields.Text(string='Reason')
currency_id = fields.Many2one('res.currency', string='Currency', required=True,
default=lambda self: self.env.user.company_id.currency_id)
company_id = fields.Many2one('res.company', string='Company', required=True,
default=lambda self: self.env.user.company_id)
advance = fields.Float(string='Advance', required=True)
payment_method = fields.Many2one('account.journal', string='Payment Method')
exceed_condition = fields.Boolean(string='Exceed than maximum',
help="The Advance is greater than the maximum percentage in salary structure")
department = fields.Many2one('hr.department', string='Department')
state = fields.Selection([('draft', 'Draft'),
('submit', 'Submitted'),
('waiting_approval', 'Waiting Approval From Accounts'),
('approve', 'Approved'),
('cancel', 'Cancelled'),
('reject', 'Rejected')], string='Status', default='draft', track_visibility='onchange')
debit = fields.Many2one('account.account', string='Debit Account')
credit = fields.Many2one('account.account', string='Credit Account')
journal = fields.Many2one('account.journal', string='Journal')
employee_contract_id = fields.Many2one('hr.contract', string='Contract')
def onchange_employee_id(self, employee_id):
if employee_id:
employee_obj = self.env['hr.employee'].browse(employee_id)
department_id = employee_obj.department_id.id
domain = [('employee_id', '=', employee_id)]
return {'value': {'department': department_id}, 'domain': {
'employee_contract_id': domain,
}}
@api.onchange('company_id')
def onchange_company_id(self):
company = self.company_id
domain = [('company_id.id', '=', company.id)]
result = {
'domain': {
'journal': domain,
},
}
return result
@api.one
def submit_to_manager(self):
self.state = 'submit'
@api.one
def cancel(self):
self.state = 'cancel'
@api.one
def reject(self):
self.state = 'reject'
@api.model
def create(self, vals):
vals['name'] = self.env['ir.sequence'].get('salary.advance.seq') or ' '
res_id = super(SalaryAdvancePayment, self).create(vals)
return res_id
@api.one
def approve_request(self):
"""This Approve the employee salary advance request.
"""
emp_obj = self.env['hr.employee']
address = emp_obj.browse([self.employee_id.id]).address_home_id
if not address.id:
raise except_orm('Error!', 'Define home address for employee')
salary_advance_search = self.search([('employee_id', '=', self.employee_id.id), ('id', '!=', self.id),
('state', '=', 'approve')])
current_month = datetime.strptime(self.date, '%Y-%m-%d').date().month
for each_advance in salary_advance_search:
existing_month = datetime.strptime(each_advance.date, '%Y-%m-%d').date().month
if current_month == existing_month:
raise except_orm('Error!', 'Advance can be requested once in a month')
if not self.employee_contract_id:
raise except_orm('Error!', 'Define a contract for the employee')
struct_id = self.employee_contract_id.struct_id
if not struct_id.max_percent or not struct_id.advance_date:
raise except_orm('Error!', 'Max percentage or advance days are not provided in Contract')
adv = self.advance
amt = (self.employee_contract_id.struct_id.max_percent * self.employee_contract_id.wage) / 100
if adv > amt and not self.exceed_condition:
raise except_orm('Error!', 'Advance amount is greater than allotted')
if not self.advance:
raise except_orm('Warning', 'You must Enter the Salary Advance amount')
payslip_obj = self.env['hr.payslip'].search([('employee_id', '=', self.employee_id.id),
('state', '=', 'done'), ('date_from', '<=', self.date),
('date_to', '>=', self.date)])
if payslip_obj:
raise except_orm('Warning', "This month salary already calculated")
for slip in self.env['hr.payslip'].search([('employee_id', '=', self.employee_id.id)]):
slip_moth = datetime.strptime(slip.date_from, '%Y-%m-%d').date().month
if current_month == slip_moth + 1:
slip_day = datetime.strptime(slip.date_from, '%Y-%m-%d').date().day
current_day = datetime.strptime(self.date, '%Y-%m-%d').date().day
if current_day - slip_day < struct_id.advance_date:
raise exceptions.Warning(
_('Request can be done after "%s" Days From prevoius month salary') % struct_id.advance_date)
self.state = 'waiting_approval'
@api.one
def approve_request_acc_dept(self):
"""This Approve the employee salary advance request from accounting department.
"""
salary_advance_search = self.search([('employee_id', '=', self.employee_id.id), ('id', '!=', self.id),
('state', '=', 'approve')])
current_month = datetime.strptime(self.date, '%Y-%m-%d').date().month
for each_advance in salary_advance_search:
existing_month = datetime.strptime(each_advance.date, '%Y-%m-%d').date().month
print current_month, existing_month
if current_month == existing_month:
raise except_orm('Error!', 'Advance can be requested once in a month')
if not self.debit or not self.credit or not self.journal:
raise except_orm('Warning', "You must enter Debit & Credit account and journal to approve ")
if not self.advance:
raise except_orm('Warning', 'You must Enter the Salary Advance amount')
move_obj = self.env['account.move']
timenow = time.strftime('%Y-%m-%d')
line_ids = []
debit_sum = 0.0
credit_sum = 0.0
for request in self:
amount = request.advance
request_name = request.employee_id.name
reference = request.name
journal_id = request.journal.id
move = {
'narration': 'Salary Advance Of ' + request_name,
'ref': reference,
'journal_id': journal_id,
'date': timenow,
'state': 'posted',
}
debit_account_id = request.debit.id
credit_account_id = request.credit.id
if debit_account_id:
debit_line = (0, 0, {
'name': request_name,
'account_id': debit_account_id,
'journal_id': journal_id,
'date': timenow,
'debit': amount > 0.0 and amount or 0.0,
'credit': amount < 0.0 and -amount or 0.0,
'currency_id': self.currency_id.id,
})
line_ids.append(debit_line)
debit_sum += debit_line[2]['debit'] - debit_line[2]['credit']
if credit_account_id:
credit_line = (0, 0, {
'name': request_name,
'account_id': credit_account_id,
'journal_id': journal_id,
'date': timenow,
'debit': amount < 0.0 and -amount or 0.0,
'credit': amount > 0.0 and amount or 0.0,
'currency_id': self.currency_id.id,
})
line_ids.append(credit_line)
credit_sum += credit_line[2]['credit'] - credit_line[2]['debit']
move.update({'line_ids': line_ids})
move_id = move_obj.create(move)
self.state = 'approve'
return True

11
hr_salary_advance/models/salary_structure.py

@ -0,0 +1,11 @@
# -*- coding: utf-8 -*-
from odoo import fields, models
class SalaryStructure(models.Model):
_inherit = 'hr.payroll.structure'
max_percent = fields.Integer(string='Max.Salary Advance Percentage')
advance_date = fields.Integer(string='Salary Advance-After days')

5
hr_salary_advance/security/ir.model.access.csv

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_salary_advance_user,salary.advance,model_salary_advance,base.group_user,1,1,1,0
access_salary_advance_officer,salary.advance,model_salary_advance,hr.group_hr_user,1,1,1,1
access_salary_advance_manager,salary.advance,model_salary_advance,hr.group_hr_manager,1,1,1,1
access_account_manager,salary.advance,model_salary_advance,account.group_account_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_salary_advance_user salary.advance model_salary_advance base.group_user 1 1 1 0
3 access_salary_advance_officer salary.advance model_salary_advance hr.group_hr_user 1 1 1 1
4 access_salary_advance_manager salary.advance model_salary_advance hr.group_hr_manager 1 1 1 1
5 access_account_manager salary.advance model_salary_advance account.group_account_manager 1 1 1 1

35
hr_salary_advance/security/security.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="rule_advance_salary_multi_company" model="ir.rule">
<field name="name">Advance Request Multi Company</field>
<field name="model_id" ref="model_salary_advance"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
<record id="hr_salary_advance_manager_rule" model="ir.rule">
<field name="name">Salary Advance</field>
<field name="model_id" ref="model_salary_advance"/>
<field name="groups" eval="[(4, ref('hr.group_hr_user')),(4, ref('account.group_account_user'))]"/>
<field name="perm_write" eval="True"/>
<field name="perm_read" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
</record>
<record id="hr_salary_advance_employee_rule" model="ir.rule">
<field name="name">Salary Advance Rule For Employee</field>
<field name="domain_force">[('employee_id.user_id','=',user.id)]</field>
<field name="global" eval="True"/>
<field name="model_id" ref="model_salary_advance"/>
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
<field name="perm_write" eval="True"/>
<field name="perm_read" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
</record>
</data>
</odoo>

BIN
hr_salary_advance/static/description/HRMS-BUTTON.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
hr_salary_advance/static/description/advance_request_approval.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
hr_salary_advance/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
hr_salary_advance/static/description/cybro-service.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
hr_salary_advance/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

133
hr_salary_advance/static/description/index.html

@ -0,0 +1,133 @@
<section class="oe_container ">
<div class="oe_row">
<h2 class="oe_slogan">OpenHRMS</h2>
<h3 class="oe_slogan">Most advanced open source HR management software</h3>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced oe_mt32">
<div class="oe_span">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openhrms.com/#request-demo">
<img src="HRMS-BUTTON.png">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">HR Salary Advance</h2>
<h3 class="oe_slogan">Manage salary advance request of employees</h3>
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a></h4>
</div>
<div class="oe_row oe_spaced" style="padding-left:65px;">
<h4>Features:</h4>
<div>
<span style="color:green;"> &#9745; </span>Employee can request for advance salary.<br/>
<span style="color:green;"> &#9745; </span>Set advance salary percentage limit in salary structure.<br/>
<span style="color:green;"> &#9745; </span>Set salary advance days in salary structure.<br/>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="" style="text-align: center;">
<div class="oe_picture">
<h3 class="oe_slogan">Overview</h3>
<p class="oe_mt32">
HR Salary Advance is a component of Open HRMS suit. HR Salary Advance
module helps the user to manage salary advance requests from employees. You can configure advance salary rules,
set advance salary limit, minimum number of days, and provide advance salary to employees
</p>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="" style="text-align: center;">
<h3 class="oe_slogan">Configuration</h3>
<p>Add salary advance Rules in Salary Structure and provide the max.advance percentage and advance days</p>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="salary_advance_rule.png">
</div>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="" style="text-align: center;">
<h3 class="oe_slogan">Advance Request</h3>
<p>Employee can create Advance request</p>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="salary_request.png">
</div>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="" style="text-align: center;">
<h3 class="oe_slogan">Salary Advance request approval From Hr & Accounts Department</h3>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="advance_request_approval.png">
</div>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="" style="text-align: center;">
<h3 class="oe_slogan">Employee Payslip</h3>
<p>When we create payslip salary advance will be deducted from the salary</p>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="salary_advance_deduction.png">
</div>
</div>
</div>
</div>
</section>
<div class="row section-content">
<div class="col-md-6 img-content">
<h3>Our Odoo Services</h3>
</div> <div class="bc-span col-md-12"><div class="inner-span"><a target="_blank" href="https://www.openhrms.com"><img class="img-border img-responsive thumbnail" src="cybro-service.png"></a></div></div>
</div>
</div>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<div>
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="https://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="https://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</div>
</section>

BIN
hr_salary_advance/static/description/salary_advance_deduction.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
hr_salary_advance/static/description/salary_advance_rule.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
hr_salary_advance/static/description/salary_request.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

146
hr_salary_advance/views/salary_advance.xml

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="view_salary_advance_form" model="ir.ui.view">
<field name="name">salary.advance.form</field>
<field name="model">salary.advance</field>
<field name="arch" type="xml">
<form string="Salary Advance">
<header>
<button name="submit_to_manager" string="Submit" type="object" states="draft" class="oe_highlight"/>
<button name="approve_request" string="Approve" type="object" states="submit" class="oe_highlight" groups="hr.group_hr_manager,hr.group_hr_user"/>
<button name="approve_request_acc_dept" string="Approve" type="object" states="waiting_approval" class="oe_highlight" groups="account.group_account_manager,account.group_account_user"/>
<button name="cancel" string="Cancel" type="object" states="draft,submit"/>
<button name="reject" string="Reject" type="object" states="waiting_approval"/>
<field name="state" widget="statusbar" statusbar_visible="draft,submit,waiting_approval,approve,cancel,reject"/>
</header>
<sheet>
<div class="oe_title oe_left">
<h2>
<field name="name" class="oe_inline" readonly="1"/>
</h2>
</div>
<group>
<group>
<field name="employee_id" on_change="onchange_employee_id(employee_id)"/>
<field name="department"/>
<field name="date"/>
<field name="reason"/>
<field name="exceed_condition" groups="hr.group_hr_manager,hr.group_hr_user"/>
</group>
<group>
<field name="advance"/>
<field name="currency_id" groups="base.group_multi_currency"/>
<field name="company_id" groups="base.group_multi_currency"/>
<field name="credit" attrs="{'invisible':[('state', '=', 'draft'), ('state', '=', 'submit')]}" groups="account.group_account_manager"/>
<field name="debit" attrs="{'invisible':[('state', '=', 'draft'), ('state', '=', 'submit')]}" groups="account.group_account_manager"/>
<field name="journal" attrs="{'invisible': [('state', '=', 'draft'), ('state', '=', 'submit')]}" groups="account.group_account_manager"/>
<field name="employee_contract_id" attrs="{'invisible': ['|', ('state', '=', 'draft'), ('state', '=', 'approve')]}" groups="hr.group_hr_manager,hr.group_hr_user"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_salary_advance_tree">
<field name="name">salary.advance.tree</field>
<field name="model">salary.advance</field>
<field name="arch" type="xml">
<tree string="Salary Advance">
<field name="employee_id"/>
<field name="date"/>
<field name="advance"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="view_salary_advance_filter" model="ir.ui.view">
<field name="name">salary.advance.select</field>
<field name="model">salary.advance</field>
<field name="arch" type="xml">
<search string="Search">
<field name="name" string="Salary Advance" filter_domain="['|',('name','ilike',self)]"/>
<field name="employee_id"/>
<field name="state"/>
<filter string="My Requests" domain="[('employee_id.user_id.id','=',uid)]" name="my_requests_filter"/>
<filter domain="[('state', '=', 'draft')]" string="To Submit" name="to_report" help="New Requests"/>
<filter domain="[('state','in',('submit','waiting_approval'))]" string="To Approve" name="submitted" help="Submitted Requests"/>
<filter domain="[('state', '=', 'approve')]" string="Approved" name="approved" help="Approved Requests"/>
<separator/>
<group expand="0" string="Group By">
<filter string="Employee" domain="[]" context="{'group_by':'employee_id'}"/>
<filter name="State" string="State" domain="[]" context="{'group_by':'state'}"/>
<filter string="Date" domain="[]" context="{'group_by':'date'}"/>
</group>
</search>
</field>
</record>
<record id="action_my_salary_advance" model="ir.actions.act_window">
<field name="name">Salary Advance</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">salary.advance</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_salary_advance_filter"/>
<field name="context">{'search_default_my_requests_filter':1}</field>
<field name="domain">[('employee_id.user_id', '=', uid)]</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Create Requests.
</p>
</field>
</record>
<record id="action_my_salary_advance_request_approved" model="ir.actions.act_window">
<field name="name">Salary Advance</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">salary.advance</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_salary_advance_filter"/>
<field name="context">{'search_default_approved':1}</field>
<field name="domain">[('employee_id.user_id', '=', uid)]</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Create Requests.
</p>
</field>
</record>
<record id="action_salary_advance_to_approve" model="ir.actions.act_window">
<field name="name">Salary Advance</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">salary.advance</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_salary_advance_filter"/>
<field name="context">{'search_default_submitted': 1}</field>
<field name="domain"></field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Create Requests.
</p>
</field>
</record>
<record id="ir_seq_hr_advance" model="ir.sequence">
<field name="name">Salary Advance Request</field>
<field name="code">salary.advance.seq</field>
<field name="prefix">SAR </field>
<field name="padding">4</field>
<field name="number_increment">1</field>
<field name="number_next_actual">1</field>
<field name="implementation">standard</field>
<field name="company_id" eval="False"/>
</record>
<menuitem id="parent_menu_salary_advance" name="Advance" parent="hr_loan.menu_hr_loans_and_advances" sequence="7"/>
<menuitem id="menu_my_salary_advance" action="action_my_salary_advance" parent="parent_menu_salary_advance" name="Request Salary Advance" sequence="1" />
<menuitem id="menu_salary_advance" action="action_salary_advance_to_approve" parent="parent_menu_salary_advance" name="Salary Advance To Approve" sequence="3" groups="hr.group_hr_manager,hr.group_hr_user,account.group_account_manager"/>
<menuitem id="menu_my_salary_advance_approved" action="action_my_salary_advance_request_approved" parent="parent_menu_salary_advance" name="My Approved Salary Advance" sequence="2" />
</data>
</odoo>

33
hr_salary_advance/views/salary_structure.xml

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!-- advance salary rule -->
<record id="hr_payslip_rule_advance" model="hr.salary.rule">
<field name="code">SAR</field>
<field name="name">Advance Salary</field>
<field name="category_id" ref="hr_payroll.DED"/>
<field name="amount_select">code</field>
<field name="amount_python_compute">result = inputs.SAR and - (inputs.SAR.amount)</field>
<field name="appears_on_payslip" eval="True"/>
<field name="sequence" eval="190"/>
</record>
<record id="hr_rule_input_advance" model="hr.rule.input">
<field name="code">SAR</field>
<field name="name">Salary Advance</field>
<field name="input_id" ref="hr_payslip_rule_advance"/>
</record>
<!-- salary structure -->
<record model="ir.ui.view" id="model_salary_structure">
<field name="name">salary.structure.form</field>
<field name="model">hr.payroll.structure</field>
<field name="inherit_id" ref="hr_payroll.view_hr_employee_grade_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='parent_id']" position="after">
<field name="max_percent"/>
<field name="advance_date"/>
</xpath>
</field>
</record>
</data>
</odoo>
Loading…
Cancel
Save