@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2015-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Sreejith P(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
import models |
@ -0,0 +1,45 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2015-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Sreejith P(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
{ |
|||
'name': "Advance Salary", |
|||
'version': "8.0.1.0.0", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'summary': 'Advance salary payment option to the Employee.', |
|||
'website': 'https://www.cybrosys.com', |
|||
'license': "AGPL-3", |
|||
'category': "Human resources", |
|||
'depends': ['hr', 'hr_payroll', 'hr_contract'], |
|||
'data': [ |
|||
"security/ir.model.access.csv", |
|||
"views/salary_structure_view.xml", |
|||
"views/salary_advance_menu.xml", |
|||
"views/advance_rule_menu.xml", |
|||
"views/journal_entry.xml", |
|||
], |
|||
'installable': True, |
|||
'active': False, |
|||
'images': ['static/description/banner.jpg'], |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,26 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2015-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Sreejith P(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
import salary_structure |
|||
import hr_advance_payslip |
|||
import salary_advance |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from datetime import datetime |
|||
from openerp import models |
|||
|
|||
|
|||
class SalaryRuleInput(models.Model): |
|||
_inherit = 'hr.payslip' |
|||
|
|||
def get_inputs(self, cr, uid, contract_ids, date_from, date_to, context=None): |
|||
res = super(SalaryRuleInput, self).get_inputs(cr, uid, contract_ids, date_from, date_to, context=None) |
|||
contract_obj = self.pool.get('hr.contract') |
|||
emp_id = contract_obj.browse(cr, uid, contract_ids[0], context=context).employee_id.name |
|||
adv_salary = self.pool.get('salary.advance').search(cr, uid, [('employee_id', '=', emp_id)]) |
|||
for each_employee in adv_salary: |
|||
current_date = datetime.strptime(date_from, '%Y-%m-%d').date().month |
|||
date = self.pool.get('salary.advance').browse(cr, uid, each_employee, context).date |
|||
existing_date = datetime.strptime(date, '%Y-%m-%d').date().month |
|||
if current_date == existing_date: |
|||
adv_browse = self.pool.get('salary.advance').browse(cr, uid, each_employee, context) |
|||
state = adv_browse.state |
|||
amount = adv_browse.advance |
|||
for result in res: |
|||
if state == 'approved' and amount != 0 and result.get('code') == 'SAR': |
|||
result['amount'] = amount |
|||
return res |
@ -0,0 +1,234 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from datetime import datetime |
|||
from openerp import models, fields, api, _ |
|||
from openerp.osv import osv |
|||
from openerp.exceptions import Warning |
|||
|
|||
|
|||
def _employee_get(obj, cr, uid, context=None): |
|||
if context is None: |
|||
context = {} |
|||
ids = obj.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)], context=context) |
|||
if ids: |
|||
return ids[0] |
|||
return False |
|||
|
|||
|
|||
def _get_currency(self, cr, uid, context=None): |
|||
user = self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0] |
|||
return user.company_id.currency_id.id |
|||
|
|||
|
|||
class SalaryAdvancePayment(models.Model): |
|||
_name = "salary.advance" |
|||
name = fields.Char(string='Name', readonly=True, select=True, default=lambda self: 'Adv/') |
|||
employee_id = fields.Many2one('hr.employee', string='Employee', required=True, default='_employee_get') |
|||
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='_get_currency') |
|||
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', required=True) |
|||
exceed_condition = fields.Boolean(string='Exceed than maximum') |
|||
department = fields.Many2one('hr.department', string='Department') |
|||
state = fields.Selection([('draft', 'Draft'), |
|||
('approved', 'Approved'), |
|||
('cancel', 'Cancel')], string='Status') |
|||
|
|||
@api.onchange('currency_id') |
|||
def onchange_currency_id(self, currency_id=False, company_id=False): |
|||
res = {'value': {'journal_id': False}} |
|||
journal_ids = self.pool.get('account.journal').search(self._cr, self._uid, [('type', '=', 'purchase'), |
|||
('currency', '=', currency_id), |
|||
('company_id', '=', company_id)]) |
|||
if journal_ids: |
|||
res['value']['journal_id'] = journal_ids[0] |
|||
return res |
|||
|
|||
@api.onchange('company_id') |
|||
def onchange_company_id(self): |
|||
company = self.company_id |
|||
domain = [('company_id.id', '=', company.id), ] |
|||
result = { |
|||
'domain': { |
|||
'payment_method': domain, |
|||
}, |
|||
|
|||
} |
|||
return result |
|||
|
|||
def onchange_employee_id(self, cr, uid, ids, employee_id, context=None): |
|||
emp_obj = self.pool.get('hr.employee') |
|||
department_id = False |
|||
if employee_id: |
|||
employee = emp_obj.browse(cr, uid, employee_id, context=context) |
|||
department_id = employee.department_id.id |
|||
return {'value': {'department': department_id}} |
|||
|
|||
@api.model |
|||
def create(self, vals): |
|||
vals['name'] = self.env['ir.sequence'].get('adv') |
|||
emp_id = vals.get('employee_id') |
|||
contract_obj = self.env['hr.contract'] |
|||
emp_obj = self.env['hr.employee'] |
|||
search_contract = contract_obj.search([('employee_id', '=', emp_id)]) |
|||
address = emp_obj.browse([emp_id]).address_home_id |
|||
if not address.id: |
|||
raise osv.except_osv('Error!', 'Define home address for employee') |
|||
salary_advance_search = self.search([('employee_id', '=', emp_id)]) |
|||
for each_advance in salary_advance_search: |
|||
current_month = datetime.strptime(vals.get('date'), '%Y-%m-%d').date().month |
|||
existing_month = datetime.strptime(each_advance.date, '%Y-%m-%d').date().month |
|||
if current_month == existing_month or current_month < existing_month: |
|||
raise osv.except_osv('Error!', 'Advance can be requested once in a month') |
|||
if not search_contract: |
|||
raise osv.except_osv('Error!', 'Define a contract for the employee') |
|||
for each_contract in search_contract: |
|||
struct_id = each_contract.struct_id |
|||
if not struct_id.max_percent or not struct_id.advance_date: |
|||
raise osv.except_osv('Error!', 'Max percentage or advance days are not provided') |
|||
adv = vals.get('advance') |
|||
amt = (each_contract.struct_id.max_percent * each_contract.wage) / 100 |
|||
if adv > each_contract.wage: |
|||
raise osv.except_osv('Error!', 'Advance amount is greater than Wage') |
|||
if adv > amt and vals.get('exceed_condition') == False: |
|||
raise osv.except_osv('Error!', 'Advance amount is greater than allotted') |
|||
vals.update({'state': 'draft'}) |
|||
res_id = super(SalaryAdvancePayment, self).create(vals) |
|||
return res_id |
|||
|
|||
@api.multi |
|||
def write(self, vals): |
|||
emp_id = self.employee_id.id |
|||
date = self.date |
|||
advance = self.advance |
|||
if 'employee_id' in vals: |
|||
emp_id = vals.get('employee_id') |
|||
if 'date' in vals: |
|||
date = vals.get('date') |
|||
if 'advance' in vals: |
|||
advance = vals.get('advance') |
|||
contract = self.env['hr.contract'] |
|||
search_contract = contract.search([('employee_id', '=', emp_id)]) |
|||
emp_obj = self.env['hr.employee'] |
|||
address = emp_obj.browse([emp_id]).address_home_id |
|||
if not address.id: |
|||
raise osv.except_osv('Error!', 'Define home address for employee') |
|||
salary_advance_search = self.search([('employee_id', '=', emp_id)]) |
|||
for each_advance in salary_advance_search: |
|||
current_month = datetime.strptime(date, '%Y-%m-%d').date().month |
|||
existing_month = datetime.strptime(each_advance.date, '%Y-%m-%d').date().month |
|||
if each_advance.id != self.id and (current_month == existing_month or current_month < existing_month): |
|||
raise osv.except_osv('Error!', 'Advance can be requested once in a month') |
|||
if not search_contract: |
|||
raise osv.except_osv('Error!', 'Define a contract for the employee') |
|||
for each_contract in search_contract: |
|||
if not each_contract.struct_id.max_percent or not each_contract.struct_id.advance_date: |
|||
raise osv.except_osv('Error!', 'Max percentage or advance days are not provided') |
|||
amt = (each_contract.struct_id.max_percent * each_contract.wage) / 100 |
|||
if advance > each_contract.wage: |
|||
raise osv.except_osv('Error!', 'Advance amount is greater than Wage') |
|||
if advance > amt and vals.get('exceed_condition') == False: |
|||
raise osv.except_osv('Error!', 'Advance amount is greater than allotted') |
|||
super(SalaryAdvancePayment, self).write(vals) |
|||
return True |
|||
|
|||
def compute_advance_totals(self, account_move_lines): |
|||
total = 0.0 |
|||
for i in account_move_lines: |
|||
total -= i['price'] |
|||
return total, account_move_lines |
|||
|
|||
def line_get_convert(self, x, part, date): |
|||
partner_id = self.env['res.partner']._find_accounting_partner(part).id |
|||
res = { |
|||
'date_maturity': x.get('date_maturity', False), |
|||
'partner_id': partner_id, |
|||
'name': x.get('name'), |
|||
'date': date, |
|||
'debit': x['price'] > 0 and x['price'], |
|||
'credit': x['price'] < 0 and -x['price'], |
|||
'account_id': x['account_id'], |
|||
'analytic_lines': x.get('analytic_lines', False), |
|||
'amount_currency': x['price'] > 0 and abs(x.get('amount_currency', False)) or -abs( |
|||
x.get('amount_currency', False)), |
|||
'currency_id': x.get('currency_id', False), |
|||
'ref': x.get('ref', False), |
|||
'product_id': x.get('product_id', False), |
|||
'product_uom_id': x.get('uos_id', False), |
|||
'analytic_account_id': x.get('account_analytic_id', False), |
|||
} |
|||
return res |
|||
|
|||
def account_adv_get(self, salary_adv_obj): |
|||
return self.env['account.move'].account_move_prepare(salary_adv_obj.journal.id, date=False, |
|||
ref=self.employee_id.name, company_id=False) |
|||
|
|||
@api.one |
|||
def approve(self): |
|||
self.employee_id.write({'advance_amount': self.advance}) |
|||
move_obj = self.env['account.move'] |
|||
company_id = self.env['res.users'].browse(self._uid).company_id |
|||
salary_adv_obj = self.env['advance.rules'].search([('company_id', '=', company_id.id)]) |
|||
if not salary_adv_obj: |
|||
raise Warning( |
|||
_("No Salary Advance Rule Defined For the Login User Company.")) |
|||
|
|||
else: |
|||
move_id = move_obj.create(self.account_adv_get(salary_adv_obj)) |
|||
acc_debit = salary_adv_obj.debit.id |
|||
adv_line = { |
|||
'type': 'src', |
|||
'name': 'Salary Advance', |
|||
'price_unit': self.advance, |
|||
'price': self.advance, |
|||
'account_id': acc_debit, |
|||
'currency_id': self.currency_id.id, |
|||
} |
|||
total, adv_line = self.compute_advance_totals([adv_line]) |
|||
credit_acc = self.payment_method.default_credit_account_id.id |
|||
adv_line.append({ |
|||
'type': 'dest', |
|||
'name': 'Salary Advance', |
|||
'price': total, |
|||
'account_id': credit_acc, |
|||
'ref': self.ids[0] |
|||
}) |
|||
journal = move_id.journal_id |
|||
company_currency = self.env.user.company_id.currency_id.id |
|||
total, total_currency, adv_line = self.compute_expense_totals(self, company_currency, self.name, adv_line) |
|||
lines = map(lambda x: (0, 0, self.line_get_convert(x, self.employee_id.address_home_id, self.date)), |
|||
adv_line) |
|||
if journal.entry_posted: |
|||
move_obj.button_validate(move_id.id) |
|||
move_id.write({'line_id': lines}) |
|||
self.write({'state': 'approved'}) |
|||
|
|||
def compute_expense_totals(self, cr, uid, adv, company_currency, ref, account_move_lines, context=None): |
|||
cur_obj = self.pool.get('res.currency') |
|||
total = 0.0 |
|||
total_currency = 0.0 |
|||
for i in account_move_lines: |
|||
if adv.currency_id.id != company_currency: |
|||
i['currency_id'] = adv.currency_id.id |
|||
i['amount_currency'] = i['price'] |
|||
i['price'] = cur_obj.compute(cr, uid, adv.currency_id.id, |
|||
company_currency, i['price'], |
|||
context=context) |
|||
else: |
|||
i['amount_currency'] = False |
|||
i['currency_id'] = False |
|||
total -= i['price'] |
|||
total_currency -= i['amount_currency'] or i['price'] |
|||
return total, total_currency, account_move_lines |
|||
|
|||
@api.one |
|||
def cancel(self): |
|||
self.write({'state': 'cancel'}) |
|||
|
|||
|
|||
class EmployeeAdvance(models.Model): |
|||
_inherit = 'hr.employee' |
|||
advance_amount = fields.Float("Advance Amount") |
@ -0,0 +1,39 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from openerp import models, fields, api |
|||
from openerp.osv import osv |
|||
|
|||
|
|||
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') |
|||
|
|||
|
|||
class AdvanceRule(models.Model): |
|||
_name = "advance.rules" |
|||
name = fields.Char(string='Name', required=True) |
|||
debit = fields.Many2one('account.account', string='Debit Account', domain="[('type','=','other')]", required=True) |
|||
credit = fields.Many2one('account.account', string='Credit Account', domain="[('type','=','other')]", required=True) |
|||
journal = fields.Many2one('account.journal', string='Journal', required=True) |
|||
company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.user.company_id) |
|||
analytic_journal = fields.Many2one('account.analytic.journal', string='Analytic Journal') |
|||
|
|||
@api.model |
|||
def create(self, vals): |
|||
company_id = vals.get('company_id') |
|||
advance_rule_search = self.search([('company_id', '=', company_id)]) |
|||
if advance_rule_search: |
|||
raise osv.except_osv('Error!', 'Advance rule for this Company already exist') |
|||
res_id = super(AdvanceRule, self).create(vals) |
|||
return res_id |
|||
|
|||
@api.multi |
|||
def write(self, vals): |
|||
company_id = self.company_id |
|||
if 'company_id' in vals: |
|||
company_id = vals.get('company_id') |
|||
advance_rule_search = self.search([('company_id', '=', company_id)]) |
|||
if advance_rule_search and advance_rule_search.id != self.id: |
|||
raise osv.except_osv('Error!', 'Advance rule for this Company already exist') |
|||
super(AdvanceRule, self).write(vals) |
|||
return True |
|
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 127 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 109 KiB |
After Width: | Height: | Size: 19 KiB |
@ -0,0 +1,113 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_spaced"> |
|||
<h2 class="oe_slogan">Advance salary</h2> |
|||
<h3 class="oe_slogan">This module will help you to provide advanced salary for the employee.</h3> |
|||
|
|||
<h4 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h4> |
|||
<div style="padding-left:66px;"> |
|||
<h4>Features:</h4> |
|||
<ul> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Adds a salary rule</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Menu for advance salary configuration.</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_spaced"> |
|||
<div class="oe_picture"> |
|||
<h3 class="oe_slogan">Overview</h3> |
|||
<p class="oe_mt32"> |
|||
A module that provides provision to pay advance salary to the employee. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h4 class="oe_slogan">Salary structure</h4> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
☛ Add "salary advance rule" to the salary structure.<br> |
|||
☛ Provide limit of advance salary.<br> |
|||
☛ Provide the minimum days to give advance salary<br> |
|||
</p> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="salary_structure.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h4 class="oe_slogan">Advance salary configuration</h4> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
☛ Define a Advance salary rule. In case of multi company keep separate config for each company<br> |
|||
|
|||
</p> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="salary_config.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h4 class="oe_slogan">Advance salary</h4> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
☛ Select Employee.<br> |
|||
☛ Select Payment method.<br> |
|||
☛ Give the amount on Advance field.<br> |
|||
</p> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="adv_salary.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h4 class="oe_slogan">Employee Form</h4> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
☛ Select Home address.<br> |
|||
</p> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="employee_form.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<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="http://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="http://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="http://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> |
|||
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
|||
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 78 KiB |
@ -0,0 +1,32 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<openerp> |
|||
<data> |
|||
<record id="action_advance_rule" model="ir.actions.act_window"> |
|||
<field name="name">Advance rule</field> |
|||
<field name="res_model">advance.rules</field> |
|||
<field name="view_type">form</field> |
|||
</record> |
|||
<record id="view_advance_rule_form" model="ir.ui.view"> |
|||
<field name="name">advance.rule.form</field> |
|||
<field name="model">advance.rules</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Advance Rules"> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="name"/> |
|||
<field name="debit"/> |
|||
<field name="journal"/> |
|||
</group> |
|||
<group> |
|||
<field name="credit"/> |
|||
<field name="company_id" groups="base.group_multi_company"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
<menuitem id="menu_advance_rule" action="action_advance_rule" parent="hr.menu_hr_configuration" name="Salary Advances" sequence="17" groups="base.group_hr_manager"/> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,18 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<openerp> |
|||
<data> |
|||
<record id="jourmal_entries_inherited_view" model="ir.ui.view"> |
|||
<field name="name">account_move_voucher_inherit_view</field> |
|||
<field name="model">account.move</field> |
|||
<field name="inherit_id" ref="account.view_move_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='line_id']/tree/field[@name='invoice']" position="attributes"> |
|||
<attribute name="string">Invoice No</attribute> |
|||
</xpath> |
|||
<xpath expr="//field[@name='line_id']/tree/field[@name='partner_id']" position="attributes"> |
|||
<attribute name="string">Customer/Supplier</attribute> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,69 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<openerp> |
|||
<data> |
|||
<record id="adv_no" model="ir.sequence.type"> |
|||
<field name="name">Advance</field> |
|||
<field name="code">adv</field> |
|||
</record> |
|||
<record id="adv_no1" model="ir.sequence"> |
|||
<field name="name">Advance_Num</field> |
|||
<field name="code">adv</field> |
|||
<field name="prefix">Adv</field> |
|||
<field name="padding">3</field> |
|||
</record> |
|||
<record id="action_salary_advance" model="ir.actions.act_window"> |
|||
<field name="name">Salary Advance</field> |
|||
<field name="res_model">salary.advance</field> |
|||
<field name="view_type">form</field> |
|||
</record> |
|||
<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="approve" string="Approve" type="object" states="draft" class="oe_highlight" groups="base.group_hr_manager"/> |
|||
<button name="cancel" string="Cancel" type="object" states="draft" class="oe_highlight" groups="base.group_hr_manager"/> |
|||
<field name="state" widget="statusbar" statusbar_visible="draft,approved"/> |
|||
</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"/> |
|||
</group> |
|||
<group> |
|||
<field name="advance"/> |
|||
<field name="payment_method"/> |
|||
<field name="currency_id" groups="base.group_multi_currency"/> |
|||
<field name="company_id" groups="base.group_multi_company"/> |
|||
</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> |
|||
<menuitem id="parent_menu_salary_advance" name="Advance" parent="hr.menu_hr_root" sequence="7"/> |
|||
<menuitem id="menu_salary_advance" action="action_salary_advance" parent="parent_menu_salary_advance" name="Salary Advance" sequence="1" /> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,32 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<openerp> |
|||
<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.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> |
|||
</openerp> |