# -*- coding: utf-8 -*- from openerp import api, fields, models from openerp.exceptions import except_orm class HrPayslip(models.Model): _inherit = 'hr.payslip' #Recalcular las lineas de la nomina @api.model def recompute_sheet(self, values): payslip = self.env['hr.payslip'].browse(values) # Faltas de Funcionario payslip_worked = self.env['hr.payslip.worked_days'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'FALTAS')]) # Adelanto payslip_advancement = self.env['hr.payslip.input'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'ADL')]) # Comision payslip_commission = self.env['hr.payslip.input'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'CMS')]) line_worked = None line_advancent = None line_commission = None if payslip_worked: days = 0 for worked in payslip_worked: days = days + worked.number_of_days worked_days = { 'name': 'Total Faltas', 'code': 'FALTAS', 'number_of_days': days, 'number_of_hours': 0, 'payslip_id': payslip.id, 'contract_id': payslip.contract_id.id, 'sequence': 15 } line_worked = self.env['hr.payslip.worked_days'].create(worked_days) if payslip_advancement: amount = 0 for advancement in payslip_advancement: amount = amount + advancement.amount advancement_line = { 'name': "Total Adelantos", 'code': 'ADL', 'amount': amount, 'payslip_id': payslip.id, 'contract_id': payslip.contract_id.id, 'sequence': 15 } line_advancent = self.env['hr.payslip.input'].create(advancement_line) if payslip_commission: amount = 0 for commission in payslip_commission: amount = amount + commission.amount commission_line = { 'name': "Total Adelantos", 'code': 'CMS', 'amount': amount, 'payslip_id': payslip.id, 'contract_id': payslip.contract_id.id, 'sequence': 15 } line_commission = self.env['hr.payslip.input'].create(commission_line) payslip.hr_verify_sheet() payslip.process_sheet() if line_worked: line_worked.unlink() if line_advancent: line_advancent.unlink() if line_commission: line_commission.unlink() return True if payslip else False # Crear nueva falta @api.model def join_payslip_faults(self, values): payslip = self.env['hr.payslip'].browse(values['id']) new_line = self.env['hr.payslip.worked_days'] if values['faultsDays'] > 0: payslip_worked_days = { 'name': values['faultsDescri'] if values['faultsDescri'] else "Falta", 'code': 'FALTAS', 'number_of_days': values['faultsDays'], 'number_of_hours': 0, 'payslip_id': payslip.id, 'contract_id': payslip.contract_id.id, 'sequence': 10 } new_line.create(payslip_worked_days) recompute_sheet = self.recompute_sheet(values['id']) return True if recompute_sheet else False # Eliminar falta @api.model def unlink_payslip_worked(self, values): worked_days = self.env['hr.payslip.worked_days'].search([('payslip_id', '=', values['id']),('id', '=', values['worked_id'])]) unlink_work = worked_days.unlink() return True if unlink_work else False # Modificar Falta @api.model def write_payslip_worked(self, values): worked_days = self.env['hr.payslip.worked_days'].search([('payslip_id', '=', values['id']),('id', '=', values['worked_id'])]) worked_update = { 'name': values['name'], 'number_of_days': values['days'] } worked_days.write(worked_update) return True if worked_days else False # Crear Adelanto/comision @api.model def create_payslip_input(self,values): payslip = self.env['hr.payslip'].browse(values['id']) payslip_input = self.env['hr.payslip.input'] input_line = { 'name': values['details'], 'code': values['salary_rule'], 'amount': values['ammount_input'], 'contract_id': payslip.contract_id.id, 'sequence': 10, 'payslip_id': payslip.id } payslip_input.create(input_line) return True if payslip_input else False # Eliminar Adelanto/Comision @api.model def unlink_payslip_input(self,values): payslip_input =self.env['hr.payslip.input'].search([('id', '=', values['input_id']),('payslip_id', '=', values['id'])]) payslip_input.unlink() return True if payslip_input else False # Actualizar Aelanto Comision @api.model def write_payslip_input(self, values): paylip_input = self.env['hr.payslip.input'].search([('payslip_id', '=', values['id']),('id', '=', values['input_id'])]) input_update = { 'name': values['descript_input'], 'amount': values['amount_input'] } paylip_input.write(input_update) return True if paylip_input else False