# -*- 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 } input_payslip = payslip_input.create(input_line) if (input_payslip) and (values['salary_rule'] == 'ADL'): value_statement = { 'id_imput': input_payslip.id, 'journal_id': values['journal'], 'journal_ref': values['journal_ref'] } self.bank_statement_import(value_statement) return True if input_payslip else False @api.model def bank_statement_import(self, values): #period Actual period = self.env['account.period'].search([('date_start', '<=', fields.Date.context_today(self) ),('date_stop', '>=', fields.Date.context_today(self))]) ### consultar payslip_input payslip_input = self.env['hr.payslip.input'].search([('id', '=', values['id_imput'])]) ### consultar payslip payslip = self.env['hr.payslip'].search([('id', '=', payslip_input.payslip_id.id)]) ### consultar accountJournal journal = self.env['account.journal'].search([('id', '=', values['journal_id'])]) ### Consultar Caja Abierta, Método de Pagos, Fecha de Hoy bank_statement = self.env['account.bank.statement'].search([('journal_id', 'in', [journal.id]), ('date', '=', fields.Date.context_today(self))]) ### Instanciar lineas de la caja statement_line = self.env['account.bank.statement.line'] ## Crear o Actualizar statement bank = { 'journal_id': journal.id, 'period_id': period.id, 'date': fields.Date.context_today(self), 'user_id': self.env.user.id, 'state': 'open' if journal.type == 'cash' else 'draft', } # # if bank_statement: if len(bank_statement) == 1: bank_statement.write(bank) else: bank_statement[len(bank_statement) -1].write(bank) else: bank_statement = bank_statement.create(bank) ### Crear statement_line bank_statement_line = { 'date' : bank_statement.date, 'statement_id' : bank_statement.id, 'journal_id': bank_statement.journal_id.id, 'amount': payslip_input.amount, 'account_id': bank_statement.journal_id.internal_account_id.id, 'ref': payslip_input.code, 'name': str(payslip_input.name)+"(Ref. pago: "+str(values['journal_ref'])+")" if values['journal_ref'] else payslip_input.name, 'partner_id': payslip.employee_id.address_home_id.id, 'note': payslip_input.id, } statement_line.create(bank_statement_line) return True if statement_line else False # Eliminar 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 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