Ir al contenido
Odoo Menú
  • Iniciar sesión
  • Pruébalo gratis
  • Aplicaciones
    Finanzas
    • Contabilidad
    • Facturación
    • Gastos
    • Hoja de cálculo (BI)
    • Documentos
    • Firma electrónica
    Ventas
    • CRM
    • Ventas
    • PdV para tiendas
    • PdV para restaurantes
    • Suscripciones
    • Alquiler
    Sitios web
    • Creador de sitios web
    • Comercio electrónico
    • Blog
    • Foro
    • Chat en vivo
    • eLearning
    Cadena de suministro
    • Inventario
    • Manufactura
    • PLM
    • Compras
    • Mantenimiento
    • Calidad
    Recursos humanos
    • Empleados
    • Reclutamiento
    • Vacaciones
    • Evaluaciones
    • Referencias
    • Flotilla
    Marketing
    • Redes sociales
    • Marketing por correo
    • Marketing por SMS
    • Eventos
    • Automatización de marketing
    • Encuestas
    Servicios
    • Proyectos
    • Registro de horas
    • Servicio externo
    • Soporte al cliente
    • Planeación
    • Citas
    Productividad
    • Conversaciones
    • Aprobaciones
    • IoT
    • VoIP
    • Artículos
    • WhatsApp
    Aplicaciones externas Studio de Odoo Plataforma de Odoo en la nube
  • Industrias
    Venta minorista
    • Librería
    • Tienda de ropa
    • Mueblería
    • Tienda de abarrotes
    • Ferretería
    • Juguetería
    Alimentos y hospitalidad
    • Bar y pub
    • Restaurante
    • Comida rápida
    • Casa de huéspedes
    • Distribuidora de bebidas
    • Hotel
    Bienes inmuebles
    • Agencia inmobiliaria
    • Estudio de arquitectura
    • Construcción
    • Gestión de bienes inmuebles
    • Jardinería
    • Asociación de propietarios
    Consultoría
    • Firma contable
    • Partner de Odoo
    • Agencia de marketing
    • Bufete de abogados
    • Adquisición de talentos
    • Auditorías y certificaciones
    Manufactura
    • Textil
    • Metal
    • Muebles
    • Comida
    • Cervecería
    • Regalos corporativos
    Salud y ejercicio
    • Club deportivo
    • Óptica
    • Gimnasio
    • Especialistas en bienestar
    • Farmacia
    • Peluquería
    Trades
    • Personal de mantenimiento
    • Hardware y soporte de TI
    • Sistemas de energía solar
    • Zapateros y fabricantes de calzado
    • Servicios de limpieza
    • Servicios de calefacción, ventilación y aire acondicionado
    Otros
    • Organización sin fines de lucro
    • Agencia para la protección del medio ambiente
    • Alquiler de anuncios publicitarios
    • Fotografía
    • Alquiler de bicicletas
    • Distribuidor de software
    Descubre todas las industrias
  • Odoo Community
    Aprende
    • Tutoriales
    • Documentación
    • Certificaciones
    • Capacitación
    • Blog
    • Podcast
    Fortalece la educación
    • Programa educativo
    • Scale Up! El juego empresarial
    • Visita Odoo
    Obtén el software
    • Descargar
    • Compara ediciones
    • Versiones
    Colabora
    • GitHub
    • Foro
    • Eventos
    • Traducciones
    • Conviértete en partner
    • Servicios para partners
    • Registra tu firma contable
    Obtén servicios
    • Encuentra un partner
    • Encuentra un contador
    • Contacta a un consultor
    • Servicios de implementación
    • Referencias de clientes
    • Soporte
    • Actualizaciones
    GitHub YouTube Twitter LinkedIn Instagram Facebook Spotify
    +1 (650) 691-3277
    Solicita una demostración
  • Precios
  • Ayuda

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Contabilidad
  • Inventario
  • PoS
  • Proyectos
  • MRP
All apps
Debe estar registrado para interactuar con la comunidad.
Todas las publicaciones Personas Insignias
Etiquetas (Ver todo)
odoo accounting v14 pos v15
Acerca de este foro
Debe estar registrado para interactuar con la comunidad.
Todas las publicaciones Personas Insignias
Etiquetas (Ver todo)
odoo accounting v14 pos v15
Acerca de este foro
Ayuda

how to set salary advance in HR in openerp 7.0

Suscribirse

Reciba una notificación cuando haya actividad en esta publicación

Se marcó esta pregunta
16 Respuestas
10222 Vistas
Avatar
Rakhi sudevan

Hi, I have installed hr and hr_paroll module in my Database

1 )Is there any option in payroll for giving advance salary to employees ?

2) How to deduct the Given Advance salary from the Monthly payment slip ?

Thanks
2
Avatar
Descartar
omar bajunaid

the modules fails at this line *seq_id = employee.company_id.hr_loan_seq.id* where can i find hr_loan_seq.id?

Mohamed

Hi, why did u commen #store = {'hr.expense.line': (_get_loan_reimbursement_from_expense_lines, None, 50)}), if i remove the # i recieve an eror "SyntaxError: invalid syntax" under "="sign. moreover there is an extra bracket ")" before the comma. from what i understood in ur code it creats a line in expense, i want the loan to be shown in the expense but it doesnt show. and if i removed the # plus the ) which is before this line, i recieve error duplicated functions..

Avatar
Med Said BARA
Mejor respuesta

Hi;

Actually, in my knowledge, there is no such option nor modules giving this functionality in OpenERP addons and extra-addons.

But there is a work from Argilsoft, included in a vertical solution module, which fulfill your needs.

Let me few hours, i will post the code after some modifications.

Best regards.

Sorry for the delay.

on reflection, it's better to inherit from hr_expense_line.

The .py file

code for hr_expense_loan.py:

from openerp.osv import osv, fields

import time

from datetime import datetime, date

from openerp.tools.translate import _

from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, float_compare

import decimal_precision as dp

import netsvc

class hr_expense_line(osv.osv):

_inherit = 'hr.expense.line' _columns = { 'loan_id' : fields.many2one('hr.expense.loan', 'Loan', required=False), }

class hr_expense_loan(osv.osv):

_name = 'hr.expense.loan' _inherit = ['mail.thread', 'ir.needaction_mixin'] _description = 'HR Loan Management' def _balance(self, cr, uid, ids, field_name, args, context=None): res = {} for record in self.browse(cr, uid, ids, context=context): cr.execute('select sum(coalesce(price_total, 0.0))::float from hr_expense_line where loan_id = %s' % (record.id)) data = filter(None, map(lambda x:x[0], cr.fetchall())) or [0.0] res[record.id] = { 'balance' : record.amount + data[0], 'paid' : not (record.amount + data[0]) > 0, } return res def _get_loan_reimbursement_from_expense_lines(self, cr, uid, ids, context=None): expense_line = {} for line in self.pool.get('hr.expense.line').browse(cr, uid, ids, context=context): expense_line[line.loan_id.id] = True expense_line_ids = [] if expense_line: expense_line_ids = self.pool.get('hr.expense.loan').search(cr, uid, [('id','in',expense_line.keys())], context=context) return expense_line_ids _columns = { 'name' : fields.char('Name', size=64, select=True, readonly=True), 'description' : fields.char('Description', size=128, select=True, required=True, readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}), 'date' : fields.date('Date', required=True, select=True, readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}), 'employee_id' : fields.many2one('hr.employee', 'Employee', required=True, domain=[('hr_employee', '=', 'employee')] , readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}), 'expense_line_ids' : fields.one2many('hr.expense.line', 'loan_id', 'Expense Line', readonly=True), 'state' : fields.selection([ ('draft', 'Draft'), ('approved', 'Approved'), ('confirmed', 'Confirmed'), ('closed', 'Closed'), ('cancel', 'Cancelled') ], 'State', readonly=True, help="State of the Driver Loan. ", select=True), 'reimbursement_method' : fields.selection([ ('weekly', 'Weekly'), ('fortnightly', 'Fortnightly'), ('monthly', 'Monthly'), ], 'Reimbursement Method', readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}, help="""Select Loan Recovery Method:

- Weekly: Reimbursement will be applied every week, considering only 4 weeks in each month

  • Fortnightly: Reimbursement will be applied forthnightly, considering only 2 reimbursement in each month, applied the 14th and 28th day of the month.

  • Monthy: Reimbursement will be applied only once a month, applied the 28th day of the month. . """, select=True, required=True),

    'reimbursement_type' : fields.selection([ ('fixed', 'Fixed'), ('percent', 'Loan Percentage'), ], 'Reimbursement Type', readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}, required=True, help="""Select Loan Recovery Type:

  • Fixed: Reimbursement will a fixed amount

  • Percent: Reimbursement will be a percentage of total Loan Amount """, select=True),

    'notes' : fields.text('Notes'), 'origin' : fields.char('Source Document', size=64, help="Reference of the document that generated this Expense Record", readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}), 'amount' : fields.float('Amount', digits_compute=dp.get_precision('Sale Price'), required=True, readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}), 'percent_reimbursement' : fields.float('Percent (%)', digits_compute=dp.get_precision('Sale Price'), required=False, help="Please set percent as 10.00%", readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}), 'fixed_reimbursement' : fields.float('Fixed Reimbursement', digits_compute=dp.get_precision('Sale Price'), required=False, readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}), 'balance' : fields.function(_balance, method=True, digits_compute=dp.get_precision('Sale Price'), string='Balance', type='float', multi=True, store={ 'hr.expense.loan': (lambda self, cr, uid, ids, c={}: ids, ['notes', 'amount','state','expense_line_ids'], 10), 'hr.expense.line': (_get_loan_reimbursement_from_expense_lines, ['product_uom_qty', 'price_unit'], 10), }), #store = {'hr.expense.line': (_get_loan_reimbursement_from_expense_lines, None, 50)}), 'paid' : fields.function(_balance, method=True, string='Paid', type='boolean', multi=True, store={ 'hr.expense.loan': (lambda self, cr, uid, ids, c={}: ids, ['notes','amount','state','expense_line_ids'], 10), 'hr.expense.line': (_get_loan_reimbursement_from_expense_lines, ['product_uom_qty', 'price_unit'], 10), }), #store = {'hr.expense.line': (_get_loan_reimbursement_from_expense_lines, None, 50)}), 'product_id' : fields.many2one('product.product', 'Reimbursement Product', readonly=True, states={'draft':[('readonly',False)], 'approved':[('readonly',False)]}, required=True, domain=[('hr_employee_category', '=', ('salary_reimbursement'))], ondelete='restrict'), #'shop_id' : fields.related('employee_id', 'shop_id', type='many2one', relation='sale.shop', string='Shop', store=True, readonly=True), 'company_id' : fields.related('shop_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True), 'create_uid' : fields.many2one('res.users', 'Created by', readonly=True), 'create_date' : fields.datetime('Creation Date', readonly=True, select=True), 'cancelled_by' : fields.many2one('res.users', 'Cancelled by', readonly=True), 'date_cancelled': fields.datetime('Date Cancelled', readonly=True), 'approved_by' : fields.many2one('res.users', 'Approved by', readonly=True), 'date_approved' : fields.datetime('Date Approved', readonly=True), 'confirmed_by' : fields.many2one('res.users', 'Confirmed by', readonly=True), 'date_confirmed': fields.datetime('Date Confirmed', readonly=True), 'closed_by' : fields.many2one('res.users', 'Closed by', readonly=True), 'date_closed' : fields.datetime('Date Closed', readonly=True),

    }

    _defaults = {

    'date' : lambda *a: time.strftime(DEFAULT_SERVER_DATE_FORMAT), 'state' : lambda *a: 'draft',

    }

    _sql_constraints = [

    ('name_uniq', 'unique(name)', 'Loan record must be unique !'),

    ]

    def create(self, cr, uid, vals, context=None):

    values = vals if 'employee_id' in vals and vals['employee_id']: employee = self.pool.get('hr.employee').browse(cr, uid, [vals['employee_id']])[0] seq_id = employee.company_id.hr_loan_seq.id if seq_id: seq_number = self.pool.get('ir.sequence').get_id(cr, uid, seq_id) values['name'] = seq_number else: raise osv.except_osv(_('Loan Sequence Error !'), _('You have not defined Loan Sequence for company ' + employee.company_id.name)) return super(hr_expense_loan, self).create(cr, uid, values, context=context)

    def action_approve(self, cr, uid, ids, context=None):

    for rec in self.browse(cr, uid, ids, context=context): if rec.amount <= 0.0: raise osv.except_osv( _('Could not approve Loan !'), _('Amount must be greater than zero.')) self.write(cr, uid, ids, {'state':'approved', 'approved_by' : uid,'date_approved':time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}) for (id,name) in self.name_get(cr, uid, ids): message = _("Loan '%s' is set to Approved.") % name self.log(cr, uid, id, message) return True

    def action_confirm(self, cr, uid, ids, context=None):

    for rec in self.browse(cr, uid, ids, context=context): self.write(cr, uid, ids, {'state':'confirmed', 'confirmed_by' : uid,'date_confirmed':time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}) for (id,name) in self.name_get(cr, uid, ids): message = _("Loan '%s' is set to Confirmed.") % name self.log(cr, uid, id, message) return True

    def action_cancel(self, cr, uid, ids, context=None):

    for rec in self.browse(cr, uid, ids, context=context): self.write(cr, uid, ids, {'state':'cancel', 'cancelled_by' : uid,'date_cancelled':time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}) for (id,name) in self.name_get(cr, uid, ids): message = _("Loan '%s' is set to Cancel.") % name self.log(cr, uid, id, message) return True

    def action_close(self, cr, uid, ids, context=None):

    for rec in self.browse(cr, uid, ids, context=context): self.write(cr, uid, ids, {'state':'closed', 'closed_by' : uid,'date_closed':time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}) for (id,name) in self.name_get(cr, uid, ids): message = _("Loan '%s' is set to Closed even when it is not paid.") % name if rec.balance > 0.0 else _("Loan '%s' is set to Closed.") % name self.log(cr, uid, id, message) return True

    def get_loan_reimbursement(self, cr, uid, employee_id, expense_id, context=None):

    expense_line_obj = self.pool.get('hr.expense.line') expense_obj = self.pool.get('hr.expense') res = expense_line_obj.search(cr, uid, [('expense_id', '=', expense_id),('control','=', 1),('loan_id','!=',False)]) print "res: ", res if len(res): loan_ids = [] expense_line_ids = [] for x in expense_obj.browse(cr, uid, [expense_id])[0].expense_line: if x.loan_id.id: loan_ids.append(x.loan_id.id) expense_line_ids.append(x.id) if len(loan_ids): expense_line_obj.unlink(cr, uid, expense_line_ids) self.write(cr, uid,loan_ids, {'state':'confirmed', 'closed_by' : False, 'date_closed':False} ) prod_obj = self.pool.get('product.product') loan_ids = self.search(cr, uid, [('employee_id', '=', employee_id),('state','=','confirmed'),('balance', '>', 0.0)]) for rec in self.browse(cr, uid, loan_ids, context=context): cr.execute('select date from hr_expense_line where loan_id = %s order by date desc limit 1' % (rec.id)) data = filter(None, map(lambda x:x[0], cr.fetchall())) date = data[0] if data else rec.date date_liq = expense_obj.read(cr, uid, [expense_id], ['date'])[0]['date'] print "date_liq: ", date_liq dur = datetime.strptime(date_liq, '%Y-%m-%d') - datetime.strptime(date, '%Y-%m-%d') product = prod_obj.browse(cr, uid, [rec.product_id.id])[0] xfactor = 7 if rec.reimbursement_method == 'weekly' else 14.0 if rec.reimbursement_method == 'fortnightly' else 28.0 rango = 1 if not int(dur.days / xfactor) else int(dur.days / xfactor) + 1 balance = rec.balance while rango and balance: rango -= 1 reimbursement = rec.fixed_reimbursement if rec.reimbursement_type == 'fixed' else rec.amount *rec.percent_reimbursement / 100.0 reimbursement = balance if reimbursement > balance else reimbursement balance -= reimbursement xline = { 'expense_id' : expense_id, 'line_type' : product_category, 'name' : product.name + ' - ' + rec.name, 'sequence' : 100, 'product_id' : product.id, 'product_uom' : product.uom_id.id, 'product_uom_qty' : 1, 'price_unit' : reimbursement * -1.0, 'control' : True, 'loan_id' : rec.id, } res = expense_line_obj.create(cr, uid, xline) if reimbursement >= rec.balance: self.write(cr, uid, [rec.id], {'state':'closed', 'closed_by' :uid,'date_closed':time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}) for (id,name) in self.name_get(cr, uid, [rec.id]): message = _("Loan '%s' has been Closed.") % rec.name self.log(cr, uid, id, message) return

The VIEW

hr_expense_loan_view.xml

<openerp> <data>

<record id="view_hr_expense_loan_tree" model="ir.ui.view"> <field name="name">hr.expense.loan.tree</field> <field name="model">hr.expense.loan</field> <field name="type">tree</field> <field name="priority">2</field> <field name="arch" type="xml"> <tree string="Drivers Loans" colors="red:state=='draft';gray:state=='cancel';green:state=='approve';blue:state=='confirm';"> <field name="name"/> <field name="date"/> <field name="employee_id"/> <field name="product_id"/> <field name="amount" sum="Amount"/> <field name="balance" sum="Balance"/>
<field name="paid"/> <field name="state"/> </tree> </field> </record>

<record id="view_hr_expense_loan_form" model="ir.ui.view"> <field name="name">hr.expense.loan.form</field> <field name="model">hr.expense.loan</field> <field name="type">form</field> <field name="arch" type="xml"> <form string="Employee Loans" version="7.0"> <header> <button name="action_approve" states="draft" string="Approve" type="object" icon="gtk-go-forward" groups="hr_loan.group_expense_loan_approve" class="oe_highlight"/> <button name="action_confirm" states="approved" string="Confirm" type="object" icon="gtk-goto-last" groups="hr_loan.group_expense_loan_confirm" class="oe_highlight"/> <button name="action_close" states="confirmed" string="Close" type="object" icon="gtk-ok" groups="hr_loan.group_expense_loan_close" /> <button name="action_cancel" states="draft,approved" string="Cancel" type="object" icon="gtk-cancel" groups="hr_loan.group_expense_loan_cancel"/> <field name="state" widget="statusbar" statusbar_visible="draft,approved,confirmed,closed"/> </header> <sheet> <h1> <label string="Loan"/> <field name="name" class="oe_inline" readonly="1"/> </h1> <group col="4"> <field name="date"/> <field name="origin"/> </group> <field name="company_id" invisible="1"/> <!--<field name="shop_id" invisible="1"/>--> <notebook> <page string="Loan Details"> <group colspan="4" col="4"> <field name="employee_id" colspan="4" context="{'hr_employee_category': 'employee','hr_employee_category': False}" domain="[('hr_employee','=', False),('hr_employee_category','=','employee')]" /> <field name="product_id" colspan="4"/> <field name="amount" /> <newline /> <field name="reimbursement_method"/> <newline /> <field name="reimbursement_type"/> <newline /> <field name="percent_reimbursement" attrs="{'required':[('reimbursement_type','=','percent')],'invisible':[('reimbursement_type','!=','percent')]}"/> <newline /> <field name="fixed_reimbursement" attrs="{'required':[('reimbursement_type','=','fixed')],'invisible':[('reimbursement_type','!=','fixed')]}"/> <newline /> <field name="description" colspan="4" /> <separator string="Balance" colspan="4"/> <field name="balance" /> <field name="paid" /> </group> </page> <page string="Notes"> <field colspan="4" name="notes" nolabel="1"/> </page> <page string="Loan Expense Lines"> <group col="4"> <field name="expense_line_ids" colspan="4" nolabel="1"> <tree> <field name="expense_id" /> <!--<field name="date" />--> <field name="product_id" /> <field name="name" /> <!--<field name="price_total" />--> </tree> </field> </group> </page> <page string="Log"> <group colspan="4" col="4"> <field name="create_uid" readonly="1" /> <field name="create_date" readonly="1" /> <field name="approved_by" readonly="1" /> <field name="date_approved" readonly="1" /> <field name="confirmed_by" readonly="1" /> <field name="date_confirmed" readonly="1" /> <field name="closed_by" readonly="1" /> <field name="date_closed" readonly="1" /> <field name="cancelled_by" readonly="1" /> <field name="date_cancelled" readonly="1" /> </group> </page> </notebook> </sheet> <div class="oe_chatter"> <field name="message_follower_ids" widget="mail_followers"/> <field name="message_ids" widget="mail_thread" placeholder="Share a message..."/> </div> </form> </field> </record> <record id="view_hr_expense_loan_filter" model="ir.ui.view"> <field name="name">tms.expense.loan.filter</field> <field name="model">tms.expense.loan</field> <field name="type">search</field> <field name="arch" type="xml"> <search string="Search Loans"> <filter icon="terp-gtk-media-pause" string="Draft" domain="[('state','=','draft')]"/> <filter icon="terp-gtk-jump-to-ltr" string="Approved" domain="[('state','=','approved')]"/> <filter icon="terp-check" string="Confirmed" domain="[('state','=','confirmed')]"/> <filter icon="terp-check" string="Not Paid" domain="[('paid','=',0)]"/> <filter icon="terp-check" string="Paid" domain="[('paid','=',1)]"/> <newline/> <field name="name" select="1"/> <field name="employee_id" /> <field name="product_id" /> <field name="date" string="Expense date" /> <newline/> <group expand="0" string="Group By..." > <filter string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/> <filter string="Product" icon="terp-personal" domain="[]" context="{'group_by':'product_id'}"/> <filter string="Paid" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'paid'}"/> <separator orientation="vertical"/> <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> <filter string="Expense Date" icon="terp-go-month" domain="[]" context="{'group_by':'date'}"/> </group> </search> </field> </record> <record model="ir.ui.view" id="view_hr_expense_loan_graph"> <field name="name">hr.expense.loan.graph</field> <field name="model">hr.expense.loan</field> <field name="type">graph</field> <field name="arch" type="xml"> <graph string="Expense" type="bar"> <field name="product_id"/> <field name="amount" operator="+"/> </graph> </field> </record> <record id="action_hr_expense_loan_form" model="ir.actions.act_window"> <field name="name">Employees Loans</field> <field name="type">ir.actions.act_window</field> <field name="res_model">hr.expense.loan</field> <field name="view_type">form</field> <field name="view_mode">tree,form,graph</field> <field name="search_view_id" ref="view_tms_expense_loan_filter"/> <field name="help">Employee Loans</field> </record> <!--<menuitem action="action_hr_expense_loan_form" id="menu_hr_expense_loan" parent="menu_hr_config_employeess" sequence="40" />--> <menuitem action="action_hr_expense_loan_form" id="hr_menu_hr_expense_loan" parent="hr.menu_hr_main" sequence="90" /> </data>

</openerp>

The Secutity

hr_loan_security.xml

<openerp> <data noupdate="0">

<record model="ir.module.category" id="hr_loan.module_category_hr_loan_management"> <field name="name">HR LOAN</field> <field name="description">Helps you manage HR loans.</field> <field name="sequence">2</field> </record>

<record id="hr_loan.group_expense_loan_approve" model="res.groups"> <field name="name">Can Approve Driver Loans</field> <field name="category_id" ref="hr_loan.module_category_hr_loan_management"/> <field name="comment">The user will be able to Approve Employees Loans Records.</field> </record> <record id="hr_loan.group_expense_loan_confirm" model="res.groups"> <field name="name">Can Confirm Employees Loans</field> <field name="category_id" ref="hr_loan.module_category_hr_loan_management"/> <field name="comment">The user will be able to Confirm Employees Loans Records.</field> </record> <record id="hr_loan.group_expense_loan_cancel" model="res.groups"> <field name="name">Can Cancel Employees Loans</field> <field name="category_id" ref="hr_loan.module_category_hr_loan_management"/> <field name="comment">The user will be able to Cancel Employees Loans Records.</field> </record> <record id="hr_loan.group_expense_loan_close" model="res.groups"> <field name="name">Can Close Employees Loans</field> <field name="category_id" ref="hr_loan.module_category_hr_loan_management"/> <field name="comment">The user will be able to Set to Draft Employees Loans Records.</field> </record>

</data>

</openerp>

If you can test.

Waiting for your feedback.

The last thing to do is the salary computation::

For this you can create a rule, let' call it "Salary after Reimbursement", by substracting the value of the field "balance" from the salary received.

CREDIT

All credit goes to Argilsoft.

The __openerp__.py file

{
"name" : "Loan Management",

"version" : "1.0", "category" : "HR", 'complexity' : "normal", "author" : "", "website" : "", "depends" : ["base", "hr", "hr_contract"], "summary" : "Management for Employee Loans", "description" : """

Management for Employee Loans

""",

"data" : [ 'security/hr_loan_security.xml', 'hr_expense_loan_view.xml', ], "application": False, "installable": True

And last the __init__.py file

import hr_expense_loan

1
Avatar
Descartar
Avatar
Mustufa Rangwala
Mejor respuesta

Hello,

You can use https://www.odoo.com/apps/modules/10.0/employee_advance_salary/.

Regards,

Probuse Consulting Service Pvt Ltd

www.probuse.com


0
Avatar
Descartar
Avatar
sweety
Mejor respuesta

@Med Said BARA, do you have the cleaned files for this module, when i copy your code its all in one line and doesnt execute.

0
Avatar
Descartar
Avatar
Zura Tsiklauri
Mejor respuesta

Here might be a trick: You can charge zero salary. Then by supplier payment click reconcile this liability and for the difference amount(full salary advance) choose reconcile payment balance. choose the salary advance account and confirm. The result is: The payment goes to salary advance account.

As for the deduction: When you open the supplier payment doducment you will see the advance given. Click to reconcile this advance by zero payment and choose the account you want.

0
Avatar
Descartar
Avatar
Kazim Mirza
Mejor respuesta

you have to make a new module and inherit the hr_payroll module .

have to make a new advance salary field

and at monthly payment you have to make a calculation to subtract the advance salary amount.

0
Avatar
Descartar
Rakhi sudevan
Autor

If you don't mind post the code .Please help me to correct my requirements.

Rakhi sudevan
Autor

I want the requirement.pls rply

Rakhi sudevan
Autor

Is any dependency module for this hr_expense_loan.py

Med Said BARA

I've posted the __openerp__ and the __init__ files. There is no other requirements. I just have to clean the views.

Kazim Mirza

make a new module and inherit hr_payroll

Kazim Mirza

make field advance salary and in a hr_payroll

Kazim Mirza

i will check it and replay you

Med Said BARA

You have to create a folder hr_loan for the module , and then put the files in this folder, create a subfolder "security" under it and put the hr_loan_security.xml in this subfolder. I've tested on my side and it works. I have to clean the files from unneeded data.

Avatar
hengky
Mejor respuesta

tell me how to do the payment of the loan?

0
Avatar
Descartar
¿Le interesa esta conversación? ¡Participe en ella!

Cree una cuenta para poder utilizar funciones exclusivas e interactuar con la comunidad.

Registrarse
Comunidad
  • Tutoriales
  • Documentación
  • Foro
Código abierto
  • Descargar
  • GitHub
  • Runbot
  • Traducciones
Servicios
  • Alojamiento en Odoo.sh
  • Soporte
  • Actualizaciones del software
  • Desarrollos personalizados
  • Educación
  • Encuentra un contador
  • Encuentra un partner
  • Conviértete en partner
Sobre nosotros
  • Nuestra empresa
  • Activos de marca
  • Contáctanos
  • Empleos
  • Eventos
  • Podcast
  • Blog
  • Clientes
  • Legal • Privacidad
  • Seguridad
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo es un conjunto de aplicaciones de código abierto que cubren todas las necesidades de tu empresa: CRM, comercio electrónico, contabilidad, inventario, punto de venta, gestión de proyectos, etc.

La propuesta única de valor de Odoo es ser muy fácil de usar y estar totalmente integrado.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now