|
@@ -7,27 +7,18 @@ from pytz import timezone
|
|
class HrPayslip(models.Model):
|
|
class HrPayslip(models.Model):
|
|
_inherit = 'hr.payslip'
|
|
_inherit = 'hr.payslip'
|
|
|
|
|
|
- '''
|
|
|
|
- Get timezone
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' Get timezone '''
|
|
def get_timezone(self):
|
|
def get_timezone(self):
|
|
tz_name = self._context.get('tz') or self.env.user.tz
|
|
tz_name = self._context.get('tz') or self.env.user.tz
|
|
return timezone(tz_name)
|
|
return timezone(tz_name)
|
|
|
|
|
|
- '''
|
|
|
|
- Get server date
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' Get server date'''
|
|
def get_server_datetime(self):
|
|
def get_server_datetime(self):
|
|
return datetime.now(self.get_timezone()).strftime(DATE_FORMAT)
|
|
return datetime.now(self.get_timezone()).strftime(DATE_FORMAT)
|
|
|
|
|
|
- '''
|
|
|
|
- GET Statement
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' GET Statement - Obtener las caja abierta/nueva del usuario '''
|
|
@api.model
|
|
@api.model
|
|
def get_bank_statement_available(self):
|
|
def get_bank_statement_available(self):
|
|
- '''
|
|
|
|
- Obtener las caja abierta/nueva del usuario
|
|
|
|
- '''
|
|
|
|
BankStatement = []
|
|
BankStatement = []
|
|
for statement in self.env['account.bank.statement'].search([('state','!=','confirm'),('user_id','=',self.env.user.id)]):
|
|
for statement in self.env['account.bank.statement'].search([('state','!=','confirm'),('user_id','=',self.env.user.id)]):
|
|
|
|
|
|
@@ -56,53 +47,46 @@ class HrPayslip(models.Model):
|
|
|_| \__,_|\__, |_| |_| |_|\___|_| |_|\__|___/ |_| \__,_|\__, |___/_|_| .__/
|
|
|_| \__,_|\__, |_| |_| |_|\___|_| |_|\__|___/ |_| \__,_|\__, |___/_|_| .__/
|
|
|___/ |___/ |_|
|
|
|___/ |___/ |_|
|
|
'''
|
|
'''
|
|
- '''
|
|
|
|
- Verificar si la nomina ya esta en un registro de caja
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' Verificar si la nomina ya esta en un registro de caja '''
|
|
def verify_statement_line(self, payslip):
|
|
def verify_statement_line(self, payslip):
|
|
return self.env['account.bank.statement.line'].search([('ref', 'in', [payslip.number])])
|
|
return self.env['account.bank.statement.line'].search([('ref', 'in', [payslip.number])])
|
|
|
|
|
|
- '''
|
|
|
|
- Get Payslip
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' Get Payslip '''
|
|
def get_eiru_payslip_payments(self, id):
|
|
def get_eiru_payslip_payments(self, id):
|
|
return self.env['hr.payslip'].browse(id)
|
|
return self.env['hr.payslip'].browse(id)
|
|
|
|
|
|
- '''
|
|
|
|
- Get payslip line
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' Get payslip line '''
|
|
def get_eiru_payslip_line_payments(self, payslipId, code):
|
|
def get_eiru_payslip_line_payments(self, payslipId, code):
|
|
return self.env['hr.payslip.line'].search([('slip_id', '=', payslipId), ('code','=', code)])
|
|
return self.env['hr.payslip.line'].search([('slip_id', '=', payslipId), ('code','=', code)])
|
|
|
|
|
|
- '''
|
|
|
|
- Get Journal
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' Get Journal '''
|
|
def get_eiru_journal_payments(self, journalId):
|
|
def get_eiru_journal_payments(self, journalId):
|
|
return self.env['account.journal'].browse(journalId)
|
|
return self.env['account.journal'].browse(journalId)
|
|
|
|
|
|
- '''
|
|
|
|
- Get move line to payslip
|
|
|
|
- '''
|
|
|
|
- def get_eiru_move_line_payslip(self, payslip):
|
|
|
|
- moveline = self.env['account.move.line'].search([('move_id', 'in', [payslip.move_id.id]),('partner_id', 'in', [payslip.employee_id.address_home_id.id]),('account_id', '=', 75)])
|
|
|
|
-
|
|
|
|
|
|
+ ''' Get move line to payslip '''
|
|
|
|
+ def get_eiru_move_line_payslip(self, payslip, account):
|
|
|
|
+ ''' Account.Account
|
|
|
|
+ | id | Name |
|
|
|
|
+ | 75 ==> 241000 - Deudas Sociales / Sueldos a Pagar. |
|
|
|
|
+ | 25 ==> 134000 - Otros Créditos / Anticipo al Personal. |
|
|
|
|
+ | 167 ==> 245000 - Deudas Sociales / IPS a pagar. |
|
|
|
|
+ | 168 ==> 515.1 - IPS Aporte Patronal |
|
|
|
|
+ '''
|
|
|
|
+ domain = [('move_id', 'in', [payslip.move_id.id]),('partner_id', 'in', [payslip.employee_id.address_home_id.id]),('account_id', '=', account)]
|
|
line_move = []
|
|
line_move = []
|
|
- for line in moveline:
|
|
|
|
|
|
+ for line in self.env['account.move.line'].search(domain):
|
|
line_move.append({
|
|
line_move.append({
|
|
- 'name': ":/ "+str(line.name),
|
|
|
|
|
|
+ 'name': "/: %s" % (line.name),
|
|
'debit': line.credit if line.credit > 0 else 0.0 ,
|
|
'debit': line.credit if line.credit > 0 else 0.0 ,
|
|
'credit': line.debit if line.debit > 0 else 0.0 ,
|
|
'credit': line.debit if line.debit > 0 else 0.0 ,
|
|
'counterpart_move_line_id': line.id,
|
|
'counterpart_move_line_id': line.id,
|
|
})
|
|
})
|
|
-
|
|
|
|
return line_move
|
|
return line_move
|
|
|
|
|
|
- '''
|
|
|
|
- create bank Statement
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' create bank Statement '''
|
|
def create_eiru_payslip_bank_statement(self, accountJournal, statementId, date_server, resUser):
|
|
def create_eiru_payslip_bank_statement(self, accountJournal, statementId, date_server, resUser):
|
|
period = self.env['account.period'].search([('date_start', '<=', date_server),('date_stop', '>=', date_server)])
|
|
period = self.env['account.period'].search([('date_start', '<=', date_server),('date_stop', '>=', date_server)])
|
|
- ## Domian default
|
|
|
|
|
|
+ ''' Domian default '''
|
|
domain = [('journal_id', '=', accountJournal.id),('user_id', '=', resUser)]
|
|
domain = [('journal_id', '=', accountJournal.id),('user_id', '=', resUser)]
|
|
if (statementId):
|
|
if (statementId):
|
|
domain.append(('id', '=', statementId))
|
|
domain.append(('id', '=', statementId))
|
|
@@ -133,35 +117,21 @@ class HrPayslip(models.Model):
|
|
'''
|
|
'''
|
|
Create Account Bank Statement Line
|
|
Create Account Bank Statement Line
|
|
'''
|
|
'''
|
|
- def create_eiru_payslip_bank_statement_line(self, statement, payslip, payslipline):
|
|
|
|
- bank_statement_line = {
|
|
|
|
- 'statement_id': statement.id,
|
|
|
|
- 'name': payslip.name,
|
|
|
|
- 'partner_id': payslip.employee_id.address_home_id.id,
|
|
|
|
- 'amount': (-1* payslipline.amount) ,
|
|
|
|
- 'ref': payslip.number
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return self.env['account.bank.statement.line'].create(bank_statement_line)
|
|
|
|
|
|
+ def create_eiru_payslip_bank_statement_line(self, line):
|
|
|
|
+ return self.env['account.bank.statement.line'].create(line)
|
|
|
|
|
|
- '''
|
|
|
|
- Process Reconciliation Payslip
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' Process Reconciliation Payslip '''
|
|
def eiru_payslip_process_reconciliation(self, statementLine, moveLine):
|
|
def eiru_payslip_process_reconciliation(self, statementLine, moveLine):
|
|
return statementLine.process_reconciliation(moveLine)
|
|
return statementLine.process_reconciliation(moveLine)
|
|
|
|
|
|
- '''
|
|
|
|
- Paymnets Payslip
|
|
|
|
- '''
|
|
|
|
|
|
+ ''' Paymnets Payslip '''
|
|
@api.model
|
|
@api.model
|
|
def create_from_prayslip(self, values):
|
|
def create_from_prayslip(self, values):
|
|
- ### Date server
|
|
|
|
|
|
+ ''' Date server '''
|
|
dateServer = self.get_server_datetime()
|
|
dateServer = self.get_server_datetime()
|
|
-
|
|
|
|
- ### UserID
|
|
|
|
|
|
+ ''' UserID'''
|
|
resUserId = self.env.user.id
|
|
resUserId = self.env.user.id
|
|
-
|
|
|
|
- ### payslip
|
|
|
|
|
|
+ ''' payslip '''
|
|
payslip = self.get_eiru_payslip_payments(values['id'])
|
|
payslip = self.get_eiru_payslip_payments(values['id'])
|
|
if (not payslip):
|
|
if (not payslip):
|
|
return {
|
|
return {
|
|
@@ -169,7 +139,7 @@ class HrPayslip(models.Model):
|
|
'message': 'El registro de la nomina es errónea, por-favor actualice su pagina.'
|
|
'message': 'El registro de la nomina es errónea, por-favor actualice su pagina.'
|
|
}
|
|
}
|
|
|
|
|
|
- ### Payslip line
|
|
|
|
|
|
+ '''GET Payslip line (NET)'''
|
|
payslip_line = self.get_eiru_payslip_line_payments(payslip.id, 'NET')
|
|
payslip_line = self.get_eiru_payslip_line_payments(payslip.id, 'NET')
|
|
if (not payslip_line):
|
|
if (not payslip_line):
|
|
return {
|
|
return {
|
|
@@ -177,7 +147,7 @@ class HrPayslip(models.Model):
|
|
'message': 'No se pudo obtener el sueldo neto de la nomina'
|
|
'message': 'No se pudo obtener el sueldo neto de la nomina'
|
|
}
|
|
}
|
|
|
|
|
|
- ### Account Journal
|
|
|
|
|
|
+ ''' Get Account Journal'''
|
|
journal =self.get_eiru_journal_payments(values['journalId'])
|
|
journal =self.get_eiru_journal_payments(values['journalId'])
|
|
if (not journal):
|
|
if (not journal):
|
|
return {
|
|
return {
|
|
@@ -185,22 +155,22 @@ class HrPayslip(models.Model):
|
|
'message': 'El método de pago no es valido.'
|
|
'message': 'El método de pago no es valido.'
|
|
}
|
|
}
|
|
|
|
|
|
- ### verify statement line
|
|
|
|
|
|
+ ''' verify statement line '''
|
|
payslipVerify = self.verify_statement_line(payslip)
|
|
payslipVerify = self.verify_statement_line(payslip)
|
|
if (payslipVerify):
|
|
if (payslipVerify):
|
|
return {
|
|
return {
|
|
'state': False,
|
|
'state': False,
|
|
'message': 'No se pudo completar el pago de nomina, porque ya se encuentra en un registros de caja/extractos bancarios (Referencia: '+str(payslipVerify.statement_id.name)+')'
|
|
'message': 'No se pudo completar el pago de nomina, porque ya se encuentra en un registros de caja/extractos bancarios (Referencia: '+str(payslipVerify.statement_id.name)+')'
|
|
}
|
|
}
|
|
-
|
|
|
|
- moveLine = self.get_eiru_move_line_payslip(payslip)
|
|
|
|
|
|
+ ''' Get Move Line payslip '''
|
|
|
|
+ moveLine = self.get_eiru_move_line_payslip(payslip, 75)
|
|
if (not moveLine):
|
|
if (not moveLine):
|
|
return {
|
|
return {
|
|
'state': False,
|
|
'state': False,
|
|
'message': 'No se puedo obtener las lineas para reconciliar el pagos.'
|
|
'message': 'No se puedo obtener las lineas para reconciliar el pagos.'
|
|
}
|
|
}
|
|
|
|
|
|
- ### Create account bank Statement line
|
|
|
|
|
|
+ ''' Create account bank Statement line '''
|
|
statement = self.create_eiru_payslip_bank_statement(journal, values['statementId'], dateServer, resUserId)
|
|
statement = self.create_eiru_payslip_bank_statement(journal, values['statementId'], dateServer, resUserId)
|
|
if (not statement):
|
|
if (not statement):
|
|
return {
|
|
return {
|
|
@@ -208,23 +178,81 @@ class HrPayslip(models.Model):
|
|
'message': 'No se pudo crear la caja.'
|
|
'message': 'No se pudo crear la caja.'
|
|
}
|
|
}
|
|
|
|
|
|
- ### Create account bank Statement line
|
|
|
|
- statementLine = self.create_eiru_payslip_bank_statement_line(statement, payslip, payslip_line)
|
|
|
|
|
|
+ '''Create lineStatement '''
|
|
|
|
+ lineStatement = {
|
|
|
|
+ 'statement_id': statement.id,
|
|
|
|
+ 'name': payslip.name,
|
|
|
|
+ 'partner_id': payslip.employee_id.address_home_id.id,
|
|
|
|
+ 'amount': (-1* payslip_line.amount) ,
|
|
|
|
+ 'ref': payslip.number
|
|
|
|
+ }
|
|
|
|
+ ''' Create account bank Statement line '''
|
|
|
|
+ statementLine = self.create_eiru_payslip_bank_statement_line(lineStatement)
|
|
if (not statementLine):
|
|
if (not statementLine):
|
|
return {
|
|
return {
|
|
'state': False,
|
|
'state': False,
|
|
'message': 'No se pudo crear el detalle de la caja.'
|
|
'message': 'No se pudo crear el detalle de la caja.'
|
|
}
|
|
}
|
|
|
|
|
|
- ### process_reconciliation
|
|
|
|
|
|
+ ''' Process_reconciliation '''
|
|
reconciled = self.eiru_payslip_process_reconciliation(statementLine, moveLine)
|
|
reconciled = self.eiru_payslip_process_reconciliation(statementLine, moveLine)
|
|
-
|
|
|
|
if (not reconciled):
|
|
if (not reconciled):
|
|
return {
|
|
return {
|
|
'state': False,
|
|
'state': False,
|
|
- 'message': 'No se pudo reconciliar la nomina.'
|
|
|
|
|
|
+ 'message': 'Error, en la reconciliación de la nomina.'
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ ''' ADL '''
|
|
|
|
+ payslip_ADL = self.get_eiru_payslip_line_payments(payslip.id, 'ADPER')
|
|
|
|
+ if (payslip_ADL):
|
|
|
|
+ movelineADL = self.get_eiru_move_line_payslip(payslip, 25)
|
|
|
|
+ if (not movelineADL):
|
|
|
|
+ return {
|
|
|
|
+ 'state': False,
|
|
|
|
+ 'message': 'No se puedo obtener las lineas para reconciliar el adelanto.'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ''' Statement Line '''
|
|
|
|
+ lineStatementADL = {
|
|
|
|
+ 'statement_id': statement.id,
|
|
|
|
+ 'name': "%s / %s" % (payslip.name, "Adelanto Percibido"),
|
|
|
|
+ 'partner_id': payslip.employee_id.address_home_id.id,
|
|
|
|
+ 'amount': payslip_ADL.total ,
|
|
|
|
+ 'ref': 'ADL'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ''' Create account bank Statement line '''
|
|
|
|
+ statementLineADL = self.create_eiru_payslip_bank_statement_line(lineStatementADL)
|
|
|
|
+ if (not statementLineADL):
|
|
|
|
+ return {
|
|
|
|
+ 'state': False,
|
|
|
|
+ 'message': 'No se pudo crear el detalle de la caja para el adelanto.'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ reconciledADL = self.eiru_payslip_process_reconciliation(statementLineADL, movelineADL)
|
|
|
|
+ if (not reconciledADL):
|
|
|
|
+ return {
|
|
|
|
+ 'state': False,
|
|
|
|
+ 'message': 'Error, en la reconciliación de adelanto.'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ lineStatementADLBalance = {
|
|
|
|
+ 'statement_id': statement.id,
|
|
|
|
+ 'name': "%s / %s" % (payslip.name, "Adelanto Percibido"),
|
|
|
|
+ 'partner_id': payslip.employee_id.address_home_id.id,
|
|
|
|
+ 'amount': abs(payslip_ADL.total) ,
|
|
|
|
+ 'ref': 'Balance',
|
|
|
|
+ 'account_id': statement.journal_id.internal_account_id.id,
|
|
|
|
+ 'journal_id': statement.journal_id.id,
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ statementLineADLBalance = self.create_eiru_payslip_bank_statement_line(lineStatementADLBalance)
|
|
|
|
+ if (not statementLineADLBalance):
|
|
|
|
+ return {
|
|
|
|
+ 'state': False,
|
|
|
|
+ 'message': 'No se pudo crear el balance de la caja para el adelanto.'
|
|
|
|
+ }
|
|
|
|
+
|
|
payslip.write({'state': 'paid'})
|
|
payslip.write({'state': 'paid'})
|
|
|
|
|
|
return {
|
|
return {
|