123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- # -*- coding: utf-8 -*-
- from openerp import api, fields, models
- from openerp.exceptions import except_orm
- from datetime import datetime
- from pytz import timezone
- DATE_FORMAT = '%Y-%m-%d'
- class HrPayslip(models.Model):
- _inherit = 'hr.payslip'
- ''' GET Statement - Obtener las caja abierta/nueva del usuario '''
- @api.model
- def get_statement_available(self):
- BankStatement = []
- for statement in self.env['account.bank.statement'].search([('state','!=','confirm'),('user_id','=',self.env.user.id)]):
- if (statement.journal_id.type == 'cash' and statement.state =='draft'):
- continue
- BankStatement.append({
- 'id': statement.id,
- 'name': statement.name,
- 'journalID': statement.journal_id.id,
- 'userId': statement.user_id.id,
- 'date': statement.date,
- 'createDate': statement.create_date,
- 'periodId': statement.period_id.id,
- 'state': statement.state,
- 'journalType': statement.journal_id.type
- })
- return BankStatement
- ''' 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')])
- ''' HORA_EXTRA '''
- payslip_horaExtra = self.env['hr.payslip.input'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'HORA_EXTRA')])
- line_worked = None
- line_advancent = None
- line_commission = None
- lineHoraExtra = 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)
- ''' Hora EXtra '''
- if payslip_horaExtra:
- amount = 0
- for horaExtra in payslip_horaExtra:
- amount = amount + horaExtra.amount
- horaExtra_line = {
- 'name': "Total Hora Extras",
- 'code': 'HORA_EXTRA',
- 'amount': amount,
- 'payslip_id': payslip.id,
- 'contract_id': payslip.contract_id.id,
- 'sequence': 15
- }
- lineHoraExtra = self.env['hr.payslip.input'].create(horaExtra_line)
- ''' Reclaculate '''
- payslip.cancel_sheet()
- 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()
- if lineHoraExtra:
- lineHoraExtra.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
- ''' Get timezone '''
- def get_timezone(self):
- tz_name = self._context.get('tz') or self.env.user.tz
- return timezone(tz_name)
- ''' Get server date '''
- def get_server_datetime(self):
- return datetime.now(self.get_timezone()).strftime(DATE_FORMAT)
- ''' check_module Installed '''
- def check_module(self, module_name):
- '''
- Método para verificar si los modulo están instalado
- :param module_name : Nombre del moduloself.
- :return: True 'Modulo instalado', False 'no instalado'
- '''
- module = self.env['ir.module.module'].search([('name', '=', module_name), ('state', '=', 'installed')])
- return len(module) != 0
- ''' Create payslip input '''
- def cretae_eiru_payslip_input(self, values):
- return self.env['hr.payslip.input'].create(values)
- ''' Crear Adelanto/comision '''
- @api.model
- def create_payslip_input(self,values):
- date_server = self.get_server_datetime()
- resUser = self.env.user.id
- payslip = self.env['hr.payslip'].browse(values['id'])
- if (not payslip):
- return False
- input_line = {
- 'name': values['details'],
- 'code': values['salaryRule'],
- 'amount': values['amount'],
- 'contract_id': payslip.contract_id.id,
- 'sequence': 10,
- 'payslip_id': payslip.id
- }
- ''' Create line '''
- inputPayslip = self.cretae_eiru_payslip_input(input_line)
- if (inputPayslip) and (values['salaryRule'] == 'ADL'):
- statementId = None
- if (self.check_module('eiru_account_bank_statement_utility')):
- statementConfig = self.env['account.bank.statement.config'].browse(values['statementConfigId'])
- if (statementConfig):
- if (statementConfig.import_statement_payslip == 'manual_import'):
- statementId = values['statementId']
- statementBank = self.create_eiru_bank_statement(values['journal'], statementId, date_server, resUser)
- statementBankLine = self.create_eiru_bank_statement_line(date_server, statementBank, inputPayslip.id,payslip.id)
- return True
- ''' Create Statement '''
- def create_eiru_bank_statement(self, JournalId, statementId, date_server, resUser):
- accountJournal = self.env['account.journal'].browse(JournalId)
- period = self.env['account.period'].search([('date_start', '<=', date_server),('date_stop', '>=', date_server)])
- domain = [('journal_id', '=', JournalId),('user_id', '=', resUser)]
- if (statementId):
- domain.append(('id', '=', statementId))
- else:
- domain.append(('date', '=', date_server))
- bank_statement = self.env['account.bank.statement'].search(domain)
- bank = {
- 'journal_id': accountJournal.id,
- 'period_id': period.id,
- 'date': date_server,
- 'user_id': resUser,
- 'state': 'open' if accountJournal.type == 'cash' else 'draft',
- }
- bankStatement = bank_statement
- if bank_statement:
- if len(bank_statement) != 1:
- bankStatement = bank_statement[len(bank_statement) -1]
- bankStatement.write({'state': 'open' if accountJournal.type == 'cash' else 'draft'})
- else:
- bankStatement = bank_statement.create(bank)
- return bankStatement
- ''' Create statement Line '''
- def create_eiru_bank_statement_line(self, dateServer, statement, payslipInputID, payslipId):
- payslip_input = self.env['hr.payslip.input'].browse(payslipInputID)
- payslip = self.env['hr.payslip'].browse(payslipId)
- bank_statement_line = {
- 'date' : dateServer,
- 'statement_id' : statement.id,
- 'journal_id': statement.journal_id.id,
- 'amount': payslip_input.amount,
- 'account_id': statement.journal_id.internal_account_id.id,
- 'ref': payslip_input.code,
- 'name': payslip_input.name,
- 'partner_id': payslip.employee_id.address_home_id.id,
- 'note': payslip_input.id,
- }
- statementLine = self.env['account.bank.statement.line'].create(bank_statement_line)
- return statementLine
- ''' Export Statement '''
- @api.model
- def bank_statement_import(self, values):
- date_server = self.get_server_datetime()
- resUserId = self.env.user.id
- ''' consultar payslip'''
- payslip = self.env['hr.payslip'].browse(values['payslipId'])
- if (not payslip):
- return False
- ''' consultar payslip_input '''
- payslip_input = self.env['hr.payslip.input'].browse(values['imputId'])
- if (not payslip_input):
- return False
- ''' consultar accountJournal '''
- journal = self.env['account.journal'].browse(values['journalid'])
- if (not journal):
- return False
- statement = self.create_eiru_bank_statement(journal.id, values['statementId'], date_server, resUserId)
- statementLine = self.create_eiru_bank_statement_line(date_server, statement, payslip_input.id, payslip.id)
- ''' 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
|