123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- # -*- 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:
- if (values['salary_rule'] == 'ADL'):
- ValueStatement = {
- 'id_imput': input_payslip.id,
- 'journal_id': values['journal'],
- 'journal_ref': values['journal_ref']
- }
- self.bank_statement_import(ValueStatement)
- 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 salariRule
- salary_rule = self.env['hr.salary.rule'].search([('code', '=', payslip_input.code)])
- ### 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 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
|