|
@@ -0,0 +1,575 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+from openerp import models, fields, tools, api
|
|
|
+import openerp.addons.decimal_precision as dp
|
|
|
+from datetime import datetime
|
|
|
+
|
|
|
+class ResBankPayments(models.Model):
|
|
|
+ _name = 'res.bank.payments'
|
|
|
+
|
|
|
+ name = fields.Char(compute='_compute_name')
|
|
|
+ date = fields.Date('Date', help="Fecha de operación")
|
|
|
+ date_maturity = fields.Date('Due date',help="Fecha de vencimiento")
|
|
|
+ number = fields.Char('Number', help="Numero de la transacción")
|
|
|
+ number_cta = fields.Char('Number CTA.', help="Numero de cuenta")
|
|
|
+ number_cta_origin = fields.Char('Number CTA. Origin', help="Numero de cuenta origen")
|
|
|
+ comment = fields.Text('Comment', help="Información adicional")
|
|
|
+ name_holder = fields.Char('Nombre del titular', help="Nombre del titular")
|
|
|
+ ## amoutn (total- receipt- paymnet)
|
|
|
+ amount_total = fields.Float('amount Total',digits_compute=dp.get_precision('Account'), help="Valor de la transacción")
|
|
|
+ amount_receipt = fields.Float(string="Residual receipt", digits_compute=dp.get_precision('Account'), store=True, compute="_compute_amount_residual_receipt" ,help="Monto disponible a cobra")
|
|
|
+ amount_payment = fields.Float(string="Residual payment", digits_compute=dp.get_precision('Account'), store=True, compute="_compute_amount_residual_payment" ,help="Monto disponible a pagar")
|
|
|
+ ## ??
|
|
|
+ change_payment_method = fields.Boolean()
|
|
|
+ ## state
|
|
|
+ state = fields.Selection([('available', 'Disponible'), ('cashed', 'Cobrado'),('deposit','Deposito'), ('negotiated', 'Negociado'), ('renegotiated', 'Renegociado'), ('rejected', 'Rechazado')],'Estado del pago', default="available", help="Estado del pago")
|
|
|
+ ### Bank
|
|
|
+ bank_id = fields.Many2one('res.bank', string='Bank', ondelete='restrict', index=True, required=True, help="Banco")
|
|
|
+ ## Currency
|
|
|
+ currency_id = fields.Many2one('res.currency', string="Currency", help="Moneda de la operación")
|
|
|
+ ## partner (customer - supplier)
|
|
|
+ customer_id = fields.Many2one('res.partner', string="customer", help="Nombre del Cliente")
|
|
|
+ supplier_id = fields.Many2one('res.partner', string="supplier", help="Nombre del Proveedor")
|
|
|
+
|
|
|
+ def _compute_name(self):
|
|
|
+ self.name = "Trans. Bank / "+str(self.id)
|
|
|
+
|
|
|
+ @api.one
|
|
|
+ @api.depends('amount_total','payments_line.amount')
|
|
|
+ def _compute_amount_residual_receipt(self):
|
|
|
+ amount = 0.0
|
|
|
+ for line in self.payments_line:
|
|
|
+ if (line.type_operation == 'receipt'):
|
|
|
+ amount += line.amount
|
|
|
+
|
|
|
+ if (self.bank_payments_type_id.code == 'TJ'):
|
|
|
+ amount = self.amount_total
|
|
|
+
|
|
|
+ self.amount_receipt = (self.amount_total - amount)
|
|
|
+
|
|
|
+ @api.one
|
|
|
+ @api.depends('amount_total','payments_line.amount')
|
|
|
+ def _compute_amount_residual_payment(self):
|
|
|
+ amount = 0.0
|
|
|
+ for line in self.payments_line:
|
|
|
+ if (line.type_operation == 'payment'):
|
|
|
+ amount += line.amount
|
|
|
+
|
|
|
+ if (self.bank_payments_type_id.code == 'TJ'):
|
|
|
+ amount = self.amount_total
|
|
|
+
|
|
|
+ self.amount_payment = (self.amount_total - amount)
|
|
|
+
|
|
|
+
|
|
|
+ '''
|
|
|
+ Actualizar el monto pagado y monto Recibido
|
|
|
+ '''
|
|
|
+ def update_bank_payments_amount(self, ids):
|
|
|
+ '''
|
|
|
+ Actualizar los monto Disponible a Pagar/Cobrar
|
|
|
+ :param ids : id de operacion bancarias ('res.bank.payments')
|
|
|
+ :return : True si actualizo, False si no
|
|
|
+ '''
|
|
|
+ amountReceipt = 0
|
|
|
+ amountPayments = 0
|
|
|
+ bankPaymnets = self.env['res.bank.payments'].browse(ids)
|
|
|
+ if (not bankPaymnets):
|
|
|
+ return False
|
|
|
+
|
|
|
+ bankPaymentsLine = self.env['res.bank.payments.line'].search([('bank_payments_id', '=', bankPaymnets.id)])
|
|
|
+ for line in bankPaymentsLine:
|
|
|
+ if (line.type_operation == 'receipt'):
|
|
|
+ amountReceipt += line.amount
|
|
|
+
|
|
|
+ if (line.type_operation == 'payment'):
|
|
|
+ amountPayments += line.amount
|
|
|
+
|
|
|
+ bank = {
|
|
|
+ 'amount_receipt': (bankPaymnets.amount_total - amountReceipt) if (bankPaymnets.amount_total - amountReceipt) >= 0 else 0,
|
|
|
+ 'amount_payment': (bankPaymnets.amount_total - amountPayments) if (bankPaymnets.amount_total - amountPayments) >= 0 else 0
|
|
|
+ }
|
|
|
+ bankPaymnetsUpdate = bankPaymnets.write(bank)
|
|
|
+
|
|
|
+ return bankPaymnetsUpdate
|
|
|
+
|
|
|
+ # return True if (bankPaymnets) else False
|
|
|
+
|
|
|
+ '''
|
|
|
+ status update
|
|
|
+ '''
|
|
|
+ @api.model
|
|
|
+ def update_state_bank_payments(self, ids):
|
|
|
+ '''
|
|
|
+ Actualiza automáticamente el estado de operación bancarias(res.bank.payments).
|
|
|
+ :param ids : id de la operación bancarias(res.bank.payments)
|
|
|
+ :return : True si actualizo correctamente, False si no actualizo
|
|
|
+ '''
|
|
|
+ state = None
|
|
|
+ updateBankPayments = None
|
|
|
+ amountPayments = 0
|
|
|
+ amountCashed = 0
|
|
|
+ amountReject = 0
|
|
|
+ ## Update Amount
|
|
|
+ updateAmount = self.update_bank_payments_amount(ids)
|
|
|
+ ## res.bank.payments
|
|
|
+ bankPayments = self.env['res.bank.payments'].browse(ids)
|
|
|
+ if (not bankPayments):
|
|
|
+ return
|
|
|
+ ## res.bank.payments.line
|
|
|
+ bankPaymentsLine = self.env['res.bank.payments.line'].search([('bank_payments_id', '=', bankPayments.id),('type_operation','in', ['payment','cashed', 'renegotiated'])])
|
|
|
+ for line in bankPaymentsLine:
|
|
|
+ if (line.type_operation == 'payment'):
|
|
|
+ amountPayments += line.amount
|
|
|
+
|
|
|
+ if (line.type_operation == 'cashed'):
|
|
|
+ amountCashed +=line.amount
|
|
|
+
|
|
|
+ if (line.type_operation == 'renegotiated'):
|
|
|
+ amountReject +=line.amount
|
|
|
+
|
|
|
+ if (bankPayments.amount_total <= amountPayments and bankPayments.state == 'available'):
|
|
|
+ state= 'negotiated'
|
|
|
+ if (bankPayments.change_payment_method):
|
|
|
+ bank = {
|
|
|
+ 'change_payment_method': False
|
|
|
+ }
|
|
|
+ bakPaymentsUpdate = self.bank_payments_update(bankPayments.id,bank)
|
|
|
+
|
|
|
+ if (bankPayments.amount_total > amountPayments and bankPayments.state == 'negotiated'):
|
|
|
+ state= 'available'
|
|
|
+
|
|
|
+ if (bankPayments.amount_total <= amountCashed and bankPayments.state == 'available'):
|
|
|
+ state= 'cashed'
|
|
|
+
|
|
|
+ if (bankPayments.amount_total > amountCashed and bankPayments.state == 'cashed' and bankPayments.bank_payments_type_id.code != 'TJ'):
|
|
|
+ state= 'available'
|
|
|
+
|
|
|
+ if (bankPayments.amount_total <= amountReject and bankPayments.state == 'rejected'):
|
|
|
+ state= 'renegotiated'
|
|
|
+
|
|
|
+ if (bankPayments.amount_total > amountReject and bankPayments.state == 'renegotiated'):
|
|
|
+ state= 'rejected'
|
|
|
+
|
|
|
+ if (state):
|
|
|
+ updateBankPayments = bankPayments.write({'state': state})
|
|
|
+ return True if (updateBankPayments) else False
|
|
|
+
|
|
|
+
|
|
|
+ '''
|
|
|
+ Reject Bank type Cheque
|
|
|
+ '''
|
|
|
+ @api.model
|
|
|
+ def bank_payments_reject(self, values):
|
|
|
+ dateServer = datetime.now().strftime('%Y-%m-%d')
|
|
|
+ bankPayments = self.env['res.bank.payments'].browse(values['id'])
|
|
|
+ if (not bankPayments):
|
|
|
+ return
|
|
|
+
|
|
|
+ banktype = self.env['res.bank.payments.type'].search([('id', '=', bankPayments.bank_payments_type_id.id)])
|
|
|
+ if (banktype.code != 'CH'):
|
|
|
+ return
|
|
|
+
|
|
|
+ ## Rechazar
|
|
|
+ if (values['waitPayments']):
|
|
|
+ state = "rejected"
|
|
|
+ reference = dateServer+" Rechazado ref/ "+values['details']
|
|
|
+ bank = {
|
|
|
+ 'state': state,
|
|
|
+ 'comment': bankPayments.comment+" \n("+reference+")" if (bankPayments.comment) else "("+reference+")"
|
|
|
+ }
|
|
|
+ bakPaymentsUpdate = self.bank_payments_update(values['id'],bank)
|
|
|
+ return True if (bakPaymentsUpdate) else False
|
|
|
+
|
|
|
+ ## Pagar con otro metodo de pago
|
|
|
+ if (values['otherPayments']):
|
|
|
+ amountPaymentsTotal = 0.00
|
|
|
+ ## account.journal
|
|
|
+ accountJournal = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash']),('code', '=', values['selectJournal'])])
|
|
|
+ if (not accountJournal):
|
|
|
+ return False
|
|
|
+
|
|
|
+ operation = 'retention'
|
|
|
+ typeOperation = 'payment'
|
|
|
+
|
|
|
+ ## Create Bank statement
|
|
|
+ bankStatement = self.create_bank_statement(dateServer, accountJournal.id, values['amountPayments'], operation, bankPayments.id)
|
|
|
+
|
|
|
+ ## Create Bank statement Line
|
|
|
+ refPayments = 'Balance/Retención de cheque/'
|
|
|
+ statementLine = self.create_bank_statement_line(bankStatement.id, values['amountPayments'], bankPayments.id, refPayments, 'Retención de cheque', typeOperation)
|
|
|
+
|
|
|
+ ## Create Payments Line
|
|
|
+ paymnetsLine = self.create_bank_paymnets_line(values['amountPayments'], bankPayments.id, bankStatement.id, statementLine.id, dateServer, accountJournal.id, typeOperation)
|
|
|
+
|
|
|
+ amount = -1 * values['amountPayments']
|
|
|
+
|
|
|
+ ## Create Bank statement
|
|
|
+ bankStatement = self.create_bank_statement(dateServer, accountJournal.id, amount, operation, bankPayments.id)
|
|
|
+
|
|
|
+ ## Create Bank statement Line
|
|
|
+ refPayments = 'Balance/Pago a proveedor/'
|
|
|
+ statementLine = self.create_bank_statement_line(bankStatement.id, amount, bankPayments.id, refPayments, 'Pago a proveedor', typeOperation)
|
|
|
+
|
|
|
+ ## Create Payments Line
|
|
|
+ paymnetsLine = self.create_bank_paymnets_line(amount, bankPayments.id, bankStatement.id, statementLine.id, dateServer, accountJournal.id, typeOperation)
|
|
|
+
|
|
|
+ ## Update res.bank.payments
|
|
|
+ state = "available"
|
|
|
+ reference = dateServer+" Rechazado ref/ "+values['details']
|
|
|
+ bank = {
|
|
|
+ 'state': state,
|
|
|
+ 'comment': bankPayments.comment+" \n("+reference+")" if (bankPayments.comment) else "("+reference+")",
|
|
|
+ 'change_payment_method': True
|
|
|
+ }
|
|
|
+ bakPaymentsUpdate = self.bank_payments_update(values['id'],bank)
|
|
|
+ return True if (bakPaymentsUpdate) else False
|
|
|
+
|
|
|
+ return False
|
|
|
+
|
|
|
+ '''
|
|
|
+ Generar balance en los registro de caja
|
|
|
+ '''
|
|
|
+ @api.model
|
|
|
+ def balance_bank_payments(self, values):
|
|
|
+ amountReceipt = 0
|
|
|
+ dateServer = datetime.now().strftime('%Y-%m-%d')
|
|
|
+
|
|
|
+ ## res.bank.payments
|
|
|
+ bankPayments = self.env['res.bank.payments'].browse(values['id'])
|
|
|
+ if (not bankPayments):
|
|
|
+ return False
|
|
|
+ ## res.bank.payments.line
|
|
|
+ bankPaymentsLine = self.env['res.bank.payments.line'].search([('bank_payments_id', '=', bankPayments.id),('type_operation','=', values['typeOperation'])])
|
|
|
+
|
|
|
+ for line in bankPaymentsLine:
|
|
|
+ amountReceipt += line.amount
|
|
|
+
|
|
|
+ ## account.journal
|
|
|
+ accountJournal = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash']),('code', '=', values['selectJournal'])])
|
|
|
+ if (not accountJournal):
|
|
|
+ return False
|
|
|
+ ## Create Bank statement
|
|
|
+ bankStatement = self.create_bank_statement(dateServer, accountJournal.id, values['amountReceipt'], values['typeOperation'], bankPayments.id)
|
|
|
+ ## Create Bank statement Line
|
|
|
+ statementLine = self.create_bank_statement_line(bankStatement.id, values['amountReceipt'], bankPayments.id, values['refPayments'], values['details'], values['typeOperation'])
|
|
|
+ ## Create Payments Line
|
|
|
+ paymnetsLine = self.create_bank_paymnets_line(values['amountReceipt'], bankPayments.id, bankStatement.id, statementLine.id, dateServer, accountJournal.id, values['typeOperation'])
|
|
|
+
|
|
|
+ amount = -1 * values['amountReceipt']
|
|
|
+
|
|
|
+ ## Create Bank statement
|
|
|
+ bankStatement = self.create_bank_statement(dateServer, accountJournal.id, amount, values['typeOperation'], bankPayments.id)
|
|
|
+ ## Create Bank statement Line negativo
|
|
|
+ statementLine = self.create_bank_statement_line(bankStatement.id, amount, bankPayments.id, values['refPayments'], values['details'], values['typeOperation'])
|
|
|
+ ## create bank Payments Line
|
|
|
+ paymnetsLine = self.create_bank_paymnets_line(values['amountReceipt'], bankPayments.id, bankStatement.id, statementLine.id, dateServer, accountJournal.id, values['typeOperation'])
|
|
|
+
|
|
|
+ return True if (paymnetsLine) else False
|
|
|
+
|
|
|
+ '''
|
|
|
+ Crear – actualizar Registro de caja
|
|
|
+ '''
|
|
|
+ def create_bank_statement(self, dateServer, journalId, amount, typeOperation, paymentsID):
|
|
|
+ '''
|
|
|
+ Crear/actualizar Registro de Caja (account.bank.statement).
|
|
|
+ :param dateServer : Fecha actual del servidor.
|
|
|
+ :param journalId : id de metodo de pago (account.journal).
|
|
|
+ :param amount : Valor total de la operación.
|
|
|
+ :param typeOperation: tipo de la operacion si es ['receipt', 'payment', 'cashed', 'renegotiated']
|
|
|
+ :return : bankStatement (Objeto creado o actualizado).
|
|
|
+ '''
|
|
|
+ journalBalance = []
|
|
|
+ ## Vuelto a clientes
|
|
|
+ if (typeOperation == 'receipt' and amount > 0):
|
|
|
+ paymentsLine = self.env['res.bank.payments.line'].search([('bank_payments_id', '=', paymentsID),('type_operation','=', typeOperation)])
|
|
|
+ if paymentsLine:
|
|
|
+ if len(paymentsLine) != 1:
|
|
|
+ paymentsLine = paymentsLine[len(paymentsLine) -1]
|
|
|
+
|
|
|
+ idJournal = paymentsLine.statement_id.journal_id.id
|
|
|
+ journalBalance = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash']),('id', '=', idJournal)])
|
|
|
+
|
|
|
+ ### Negociacion de cheque con proveedor
|
|
|
+ if (typeOperation == 'retention' and amount > 0):
|
|
|
+ paymentsLine = self.env['res.bank.payments.line'].search([('bank_payments_id', '=', paymentsID),('type_operation','=', 'payment')])
|
|
|
+ if paymentsLine:
|
|
|
+ if len(paymentsLine) != 1:
|
|
|
+ paymentsLine = paymentsLine[len(paymentsLine) -1]
|
|
|
+
|
|
|
+ idJournal = paymentsLine.statement_id.journal_id.id
|
|
|
+ journalBalance = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank']),('id', '=', idJournal)])
|
|
|
+
|
|
|
+ ## Recibir Vuelto de proveedor
|
|
|
+ if (typeOperation == 'payment' and amount < 0):
|
|
|
+ paymentsLine = self.env['res.bank.payments.line'].search([('bank_payments_id', '=', paymentsID),('type_operation','=', typeOperation)])
|
|
|
+ if paymentsLine:
|
|
|
+ if len(paymentsLine) != 1:
|
|
|
+ paymentsLine = paymentsLine[len(paymentsLine) -1]
|
|
|
+
|
|
|
+ idJournal = paymentsLine.statement_id.journal_id.id
|
|
|
+ journalBalance = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash']),('id', '=', idJournal)])
|
|
|
+
|
|
|
+ ## Efectifi
|
|
|
+ if (typeOperation == 'cashed' and amount < 0):
|
|
|
+ paymentsLine = self.env['res.bank.payments.line'].search([('bank_payments_id', '=', paymentsID),('type_operation','in', ['receipt','payment'])])
|
|
|
+ if paymentsLine:
|
|
|
+ if len(paymentsLine) != 1:
|
|
|
+ paymentsLine = paymentsLine[len(paymentsLine) -1]
|
|
|
+
|
|
|
+ idJournal = paymentsLine.statement_id.journal_id.id
|
|
|
+ journalBalance = self.env['account.journal'].search([('active', '=', True), ('type', '=', 'bank'),('id', '=', idJournal)])
|
|
|
+ if (not journalBalance):
|
|
|
+ journalBalance = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank'])])
|
|
|
+ if journalBalance:
|
|
|
+ if len(journalBalance) != 1:
|
|
|
+ journalBalance = journalBalance[len(journalBalance) -1]
|
|
|
+ else:
|
|
|
+ journalBalance = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank'])])
|
|
|
+ if journalBalance:
|
|
|
+ if len(journalBalance) != 1:
|
|
|
+ journalBalance = journalBalance[len(journalBalance) -1]
|
|
|
+
|
|
|
+ ## Renegociado
|
|
|
+ if (typeOperation == 'renegotiated' and amount < 0):
|
|
|
+ paymentsLine = self.env['res.bank.payments.line'].search([('bank_payments_id', '=', paymentsID),('type_operation','in', ['receipt','payment'])])
|
|
|
+ if paymentsLine:
|
|
|
+ if len(paymentsLine) != 1:
|
|
|
+ paymentsLine = paymentsLine[len(paymentsLine) -1]
|
|
|
+
|
|
|
+ idJournal = paymentsLine.statement_id.journal_id.id
|
|
|
+ journalBalance = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash']),('id', '=', idJournal)])
|
|
|
+ else:
|
|
|
+ journalBalance = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank'])])
|
|
|
+ if journalBalance:
|
|
|
+ if len(journalBalance) != 1:
|
|
|
+ journalBalance = journalBalance[len(journalBalance) -1]
|
|
|
+
|
|
|
+ if (journalBalance):
|
|
|
+ journalId = journalBalance.id
|
|
|
+
|
|
|
+ ## Consultar Journal
|
|
|
+ accountJournal = self.env['account.journal'].browse(journalId)
|
|
|
+ ## Periodo
|
|
|
+ accountPeriod = self.env['account.period'].search([('date_start', '<=', dateServer),('date_stop', '>=', dateServer)])
|
|
|
+ ##Consultar bankStatemente
|
|
|
+ bankStatement = self.env['account.bank.statement'].search([('journal_id', 'in', [accountJournal.id]), ('date', '=', dateServer)])
|
|
|
+
|
|
|
+
|
|
|
+ bank = {
|
|
|
+ 'journal_id': accountJournal.id,
|
|
|
+ 'period_id': accountPeriod.id,
|
|
|
+ 'date': dateServer,
|
|
|
+ 'user_id': self.env.user.id,
|
|
|
+ 'state': 'open' if accountJournal.type == 'cash' else 'draft',
|
|
|
+ }
|
|
|
+ newBankStatement = bankStatement
|
|
|
+
|
|
|
+ if bankStatement:
|
|
|
+ if len(bankStatement) != 1:
|
|
|
+ newBankStatement = bankStatement[len(bankStatement) -1]
|
|
|
+ newBankStatement.write(bank)
|
|
|
+ else:
|
|
|
+ newBankStatement = self.env['account.bank.statement'].create(bank)
|
|
|
+
|
|
|
+ return newBankStatement
|
|
|
+
|
|
|
+ '''
|
|
|
+ Crear movimiento de registro de caja
|
|
|
+ '''
|
|
|
+ def create_bank_statement_line(self, statementId, ammount, bankpaymentsID, refPayments, details, typeOperation):
|
|
|
+ '''
|
|
|
+ Crear Linea del registro de caja (account.bank.statement.line).
|
|
|
+ :param statementId : id de Registro de caja(account.bank.statement).
|
|
|
+ :param bankpaymentsID : id de operación bancarias (res.bank.payments).
|
|
|
+ :param ammount : Monto para registra en la linea del registro de caja.
|
|
|
+ :param refPayments : Breve referencia nombre de la operación.
|
|
|
+ :param details : Descripción del movimiento.
|
|
|
+ :return : line (objeto creado de 'account.bank.statement.line').
|
|
|
+ '''
|
|
|
+ ## account.bank.statement
|
|
|
+ bankStatement = self.env['account.bank.statement'].browse(statementId)
|
|
|
+ ## res.bank.payments
|
|
|
+ bankPayments = self.env['res.bank.payments'].browse(bankpaymentsID)
|
|
|
+ statementLine = {
|
|
|
+ 'statement_id': bankStatement.id,
|
|
|
+ 'name': refPayments+"ref/"+str(bankPayments.name),
|
|
|
+ 'partner_id': bankPayments.customer_id.id if (typeOperation != 'payment') else bankPayments.supplier_id.id,
|
|
|
+ 'amount': ammount ,
|
|
|
+ 'ref': details,
|
|
|
+ 'account_id': bankStatement.journal_id.internal_account_id.id,
|
|
|
+ 'journal_id': bankStatement.journal_id.id
|
|
|
+ }
|
|
|
+
|
|
|
+ line = self.env['account.bank.statement.line'].create(statementLine)
|
|
|
+
|
|
|
+ return line
|
|
|
+
|
|
|
+ '''
|
|
|
+ Crear movimiento de operación bancarias
|
|
|
+ '''
|
|
|
+ def create_bank_paymnets_line(self, amount, bankPaymentsId, bankStatementId, statementLineId, dateServer, accountJournalId, typeOperation):
|
|
|
+ '''
|
|
|
+ Crear lineas de operación bancarias (res.bank.payments.line)
|
|
|
+ :param bankPaymentsId : id de operación bancaria (res.bank.payments)
|
|
|
+ :param bankStatementId : id de registro de caja (account.bank.statement)
|
|
|
+ :param statementLineId : id de linea del registro de caja (account.bank.statement.line)
|
|
|
+ :param accountJournalId : id del método de pago (account.journal)
|
|
|
+ :param amount : Monto de la operación
|
|
|
+ :param dateServer : fecha de la operación
|
|
|
+ :param typeOperation : tipo de operación (Recibo, Pago, Balance, Cobrado, Renegociado)
|
|
|
+ :return : paymnets_line (objeto creado de la operación)
|
|
|
+
|
|
|
+ '''
|
|
|
+ ## res.bank.payments
|
|
|
+ bankPayments = self.env['res.bank.payments'].browse(bankPaymentsId)
|
|
|
+ ## account.bank.statement
|
|
|
+ bankStatement = self.env['account.bank.statement'].browse(bankStatementId)
|
|
|
+ ## account.bank.statement.line
|
|
|
+ bankStatementLine = self.env['account.bank.statement.line'].browse(statementLineId)
|
|
|
+ ## account.journal
|
|
|
+ accountJournal = self.env['account.journal'].browse(accountJournalId)
|
|
|
+ # res.company
|
|
|
+ resCompany = self.env['res.company'].search([('id', '=', 1)])
|
|
|
+
|
|
|
+ ammountTotal = 0.0
|
|
|
+ ammountCurrency = 0.0
|
|
|
+ if (accountJournal.currency):
|
|
|
+ if (accountJournal.currency.id != bankPayments.currency_id.id):
|
|
|
+ ammountTotal = amount * (bankPayments.currency_id.rate / accountJournal.currency.rate)
|
|
|
+ ammountCurrency = amount
|
|
|
+ else:
|
|
|
+ ammountTotal = amount
|
|
|
+ else:
|
|
|
+ if (resCompany.currency_id.id != bankPayments.currency_id.id):
|
|
|
+ ammountTotal = amount * (bankPayments.currency_id.rate / resCompany.currency_id.rate)
|
|
|
+ ammountCurrency = amount
|
|
|
+ else:
|
|
|
+ ammountTotal = amount
|
|
|
+
|
|
|
+ operation = typeOperation
|
|
|
+ ## receipt
|
|
|
+ if (typeOperation == 'receipt' and bankStatementLine.amount < 0):
|
|
|
+ operation = 'balance'
|
|
|
+
|
|
|
+ ## paymnet
|
|
|
+ if (typeOperation == 'payment' and bankStatementLine.amount > 0):
|
|
|
+ operation = 'balance'
|
|
|
+
|
|
|
+ # cashed
|
|
|
+ if (typeOperation == 'cashed' and bankStatementLine.amount < 0):
|
|
|
+ operation = 'balance'
|
|
|
+
|
|
|
+ # renegotiated
|
|
|
+ if (typeOperation == 'renegotiated' and bankStatementLine.amount > 0):
|
|
|
+ operation = 'balance'
|
|
|
+
|
|
|
+
|
|
|
+ bankLine = {
|
|
|
+ 'amount': ammountTotal,
|
|
|
+ 'amount_currency': ammountCurrency,
|
|
|
+ 'currency_id': accountJournal.currency.id if accountJournal.currency else bankPayments.currency_id.id,
|
|
|
+ 'date': dateServer,
|
|
|
+ 'bank_payments_id': bankPayments.id,
|
|
|
+ 'statement_line_id': bankStatementLine.id,
|
|
|
+ 'statement_id': bankStatement.id,
|
|
|
+ 'type_operation': operation
|
|
|
+ }
|
|
|
+ paymnets_line = []
|
|
|
+ paymnets_line = self.env['res.bank.payments.line'].create(bankLine)
|
|
|
+
|
|
|
+ return paymnets_line
|
|
|
+
|
|
|
+ '''
|
|
|
+ Renegotiate
|
|
|
+ '''
|
|
|
+ @api.model
|
|
|
+ def bank_payments_renegotiate(self, values):
|
|
|
+ dateServer = datetime.now().strftime('%Y-%m-%d')
|
|
|
+ reference = ''
|
|
|
+ state = ""
|
|
|
+ # Verificar res.bank.payments
|
|
|
+ bankPayments = self.env['res.bank.payments'].browse(values['id'])
|
|
|
+ if (not bankPayments):
|
|
|
+ return False
|
|
|
+
|
|
|
+ # Verificar account.journal
|
|
|
+ accountJournal = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash']),('code', '=', values['selectInput'])])
|
|
|
+ if (not accountJournal):
|
|
|
+ return False
|
|
|
+
|
|
|
+ if (values['checkRadio']):
|
|
|
+ reference =dateServer+" Renegociacion ref/ "+values['detailsRenegotiate']
|
|
|
+ bank = {
|
|
|
+ 'state': 'available',
|
|
|
+ 'comment': bankPayments.comment+" \n("+reference+")" if (bankPayments.comment) else "("+reference+")"
|
|
|
+ }
|
|
|
+ bakPaymentsUpdate = self.bank_payments_update(values['id'],bank)
|
|
|
+
|
|
|
+ return True if(bakPaymentsUpdate) else False
|
|
|
+
|
|
|
+ if (values['otherRadio']):
|
|
|
+ ## Create Bank statement
|
|
|
+ bankStatement = self.create_bank_statement(dateServer, accountJournal.id, values['amountPayments'], values['typeOperation'], bankPayments.id)
|
|
|
+ ## Create Bank statement Line
|
|
|
+ statementLine = self.create_bank_statement_line(bankStatement.id, values['amountPayments'], bankPayments.id, values['refPayments'], values['details'], values['typeOperation'])
|
|
|
+ ## Create Payments Line
|
|
|
+ paymnetsLine = self.create_bank_paymnets_line(values['amountPayments'], bankPayments.id, bankStatement.id, statementLine.id, dateServer, accountJournal.id, values['typeOperation'])
|
|
|
+
|
|
|
+ amount = -1 * values['amountPayments']
|
|
|
+ ## Create Bank statement
|
|
|
+ bankStatement = self.create_bank_statement(dateServer, accountJournal.id, amount, values['typeOperation'], bankPayments.id)
|
|
|
+ ## Create Bank statement Line negativo
|
|
|
+ statementLine = self.create_bank_statement_line(bankStatement.id, amount, bankPayments.id, values['refPayments'], values['details'], values['typeOperation'])
|
|
|
+ ## create bank Payments Line
|
|
|
+ paymnetsLine = self.create_bank_paymnets_line(values['amountPayments'], bankPayments.id, bankStatement.id, statementLine.id, dateServer, accountJournal.id, values['typeOperation'])
|
|
|
+
|
|
|
+ # Update State And Coment
|
|
|
+ reference =dateServer+" Renegociacion ref/ "+values['detailsRenegotiate']
|
|
|
+ state = "rejected"
|
|
|
+
|
|
|
+ bank = {
|
|
|
+ 'state': 'renegotiated',
|
|
|
+ 'comment': bankPayments.comment+" \n("+reference+")" if (bankPayments.comment) else "("+reference+")"
|
|
|
+ }
|
|
|
+ bakPaymentsUpdate = self.bank_payments_update(values['id'],bank)
|
|
|
+
|
|
|
+ return True if(bakPaymentsUpdate) else False
|
|
|
+
|
|
|
+ if (values['CheckCashingRadio']):
|
|
|
+ ## Actualizar Datos del cheque
|
|
|
+ reference = dateServer+" Renegociacion ref/ "+values['detailsRenegotiate']
|
|
|
+
|
|
|
+ bank = {
|
|
|
+ 'number': values['number'],
|
|
|
+ 'amount_total': values['amountTotal'],
|
|
|
+ 'date_maturity': values['dateMaturity'],
|
|
|
+ 'number_cta': values['numberCta'],
|
|
|
+ 'name_holder': values['nameHolder'],
|
|
|
+ 'state': 'available',
|
|
|
+ 'comment': bankPayments.comment+" \n("+reference+")" if (bankPayments.comment) else "("+reference+")"
|
|
|
+ }
|
|
|
+
|
|
|
+ bakPaymentsUpdate = self.bank_payments_update(values['id'],bank)
|
|
|
+
|
|
|
+ return True if(bakPaymentsUpdate) else False
|
|
|
+
|
|
|
+ return False
|
|
|
+
|
|
|
+ '''
|
|
|
+ Actualizar res.bank.payments
|
|
|
+ '''
|
|
|
+ def bank_payments_update(self, id, bank):
|
|
|
+ '''
|
|
|
+ Actualizar información de operación bancaria.
|
|
|
+ :param id : id de operación bancarias('res.bank.payments').
|
|
|
+ :param bank : Campos a actualizar.
|
|
|
+ :return : True si actualizo , false no actualizo
|
|
|
+ '''
|
|
|
+ bankPayments = self.env['res.bank.payments'].browse(id)
|
|
|
+ if (not bankPayments):
|
|
|
+ return False
|
|
|
+
|
|
|
+ if (not bank):
|
|
|
+ return False
|
|
|
+ bankPayments.write(bank)
|
|
|
+
|
|
|
+ return True if (bankPayments) else False
|