123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- # -*- coding: utf-8 -*-
- from openerp import models, fields, tools, api
- import openerp.addons.decimal_precision as dp
- from datetime import datetime
- class ResBankPaymentsUtility(models.Model):
- _inherit = 'res.bank.payments'
- '''
- [Cambio de Diario la operación bancarias].
- Efectivizar/Depositar.
- '''
- @api.model
- def get_bank_payments_account_journal(self):
- journalUtility = []
- for journal in self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash'])]):
- statementJournal = []
- for statementOpen in self.env['account.bank.statement'].search([('journal_id','in',[journal.id]),('state','!=','confirm')]):
- if (statementOpen.journal_id.type == 'cash' and statementOpen.state =='draft'):
- continue
- statementJournal.append({
- 'id': statementOpen.id,
- 'name': statementOpen.name,
- 'date': statementOpen.date,
- 'state': statementOpen.state,
- 'statementName': statementOpen.name+" / "+statementOpen.user_id.name,
- 'typeStatement':{
- 'id': statementOpen.type_statement.id,
- 'name':statementOpen.type_statement.name,
- },
- 'user':{
- 'id': statementOpen.user_id.id,
- 'name': statementOpen.user_id.name,
- },
- })
- journalUtility.append({
- 'id': journal.id,
- 'name': journal.name,
- 'code': journal.code,
- 'type': journal.type,
- 'currencyID': journal.currency.id if (journal.currency) else journal.company_id.currency_id.id,
- 'statementJournal': statementJournal
- })
- return journalUtility
- @api.model
- def get_bank_payments_charge(self, id):
- decimal_precision = self.env['decimal.precision'].precision_get('Account')
- bankPaymnets = []
- for bank in self.env['res.bank.payments'].search([('id', '=', id)]):
- amountReceipt = 0
- amountPayment = 0
- amountBalance = 0
- amountCashed = 0
- amountRenegotiated = 0
- currency = None
- currencyBank = []
- for line in self.env['res.bank.payments.line'].search([('bank_payments_id.id', '=', bank.id)]):
- if (line.type_operation == 'receipt'):
- amountReceipt += line.amount
- if (line.type_operation == 'payment'):
- amountPayment += line.amount
- if (line.type_operation == 'balance'):
- amountBalance += line.amount
- if (line.type_operation =='cashed'):
- amountCashed += line.amount
- if (line.type_operation =='renegotiated'):
- amountRenegotiated += line.amount
- if (bank.currency_id):
- currency = bank.currency_id.id
- else:
- currency = self.env.user.company_id.currency_id.id
- currencyBank =self.env['res.currency'].browse(currency)
- bankPaymnets.append({
- 'id': bank.id,
- 'state': bank.state,
- 'amountTotal': bank.amount_total,
- 'amountReceipt': amountReceipt,
- 'amountPayment': amountPayment,
- 'amountBalance': amountBalance,
- 'amountCashed': amountCashed,
- 'amountRenegotiated': amountRenegotiated,
- 'changePaymentMethod': bank.change_payment_method,
- 'currencyId': currencyBank.id,
- 'chequeType': [{
- 'id': chequeType.id,
- 'name': chequeType.name,
- 'code': chequeType.code,
- 'isCash': chequeType.is_cash,
- 'isBank': chequeType.is_bank
- }for chequeType in self.env['res.bank.cheque.type'].search([('id', '=', bank.cheque_type_id.id)])],
- 'bankPaymentsType': [{
- 'name': pyamentsType.name,
- 'isReceipt': pyamentsType.is_receipt,
- 'isPayment': pyamentsType.is_payment,
- 'code': pyamentsType.code,
- }for pyamentsType in self.env['res.bank.payments.type'].search([('id', '=', bank.bank_payments_type_id.id)])],
- 'currencyAmount': [{
- 'id': currency.id,
- 'symbol': currency.symbol,
- 'rateSilent': currency.rate_silent,
- 'rate': currency.rate,
- 'thousandsSeparator': currency.thousands_separator,
- 'decimalSeparator': currency.decimal_separator,
- 'decimalPlaces': currency.decimal_places,
- 'position': currency.position,
- 'accuracy': currency.accuracy,
- 'rounding': currency.rounding,
- 'amountCurrency': round((bank.amount_total * (currency.rate / currencyBank.rate)), decimal_precision)
- } for currency in self.env['res.currency'].search([('active', '=', True)])]
- })
- return bankPaymnets
- '''
- _____ __ _ _ _
- | ____|/ _| ___ ___| |_(_)_ _(_)______ _ _ __
- | _| | |_ / _ \/ __| __| \ \ / / |_ / _` | '__|
- | |___| _| __/ (__| |_| |\ V /| |/ / (_| | |
- |_____|_| \___|\___|\__|_| \_/ |_/___\__,_|_|
- '''
- @api.model
- def balance_bank_payments_charge(self, values):
- dateServer = datetime.now().strftime('%Y-%m-%d')
- resUser = self.env.user.id
- ## res.bank.payments
- bankPayments = self.env['res.bank.payments'].browse(values['id'])
- if (not bankPayments):
- return False
- # account.journal
- accountJournal = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash']),('id', '=', values['selectJournal'])])
- if (not accountJournal):
- return False
- journalBankLine = bankPayments.payments_line[len(bankPayments.payments_line) -1]
- if (journalBankLine):
- journalBank = journalBankLine.statement_id.journal_id
- StatamenteBank = journalBankLine.statement_id.id
- amount = bankPayments.amount_total
- ## Create Bank statement
- bankStatement = self.eiru_bank_create_bank_statement(dateServer,resUser, accountJournal, values['statementId'])
- # Create Bank statement Line
- statementLine = self.create_bank_statement_line(bankStatement.id, abs(amount), bankPayments.id, 'Balance/cobro', values['details'], 'cashed')
- # Create Payments Line
- paymnetsLine = self.create_bank_paymnets_line(abs(amount), bankPayments.id, bankStatement.id, statementLine.id, dateServer, accountJournal.id, 'cashed')
- amount = -amount
- # StatamenteBank
- bankStatement = self.eiru_bank_create_bank_statement(dateServer,resUser, journalBank, StatamenteBank)
- # Create Bank statement Line
- statementLine = self.create_bank_statement_line(bankStatement.id, amount, bankPayments.id, 'Balance/cobro', values['details'], 'cashed')
- # Create Payments Line
- paymnetsLine = self.create_bank_paymnets_line(amount, bankPayments.id, bankStatement.id, statementLine.id, dateServer, journalBank.id, 'cashed')
- return True if (paymnetsLine) else False
- '''
- Create/write bank_statement.
- '''
- def eiru_bank_create_bank_statement(self, dateServer, userId, journal, statementId):
- accountPeriod = self.env['account.period'].search([('date_start', '<=', dateServer),('date_stop', '>=', dateServer)])
- domain = [('journal_id', '=', journal.id),('state', '!=', 'confirm')]
- if (statementId):
- domain.append(('id', '=', statementId))
- else:
- domain.append(('date', '=', dateServer))
- bankStatement = self.env['account.bank.statement'].search(domain)
- if (not bankStatement):
- bank = {
- 'journal_id': journal.id,
- 'period_id': accountPeriod.id,
- 'date': dateServer,
- 'user_id': userId,
- }
- bankStatement = self.env['account.bank.statement'].create(bank)
- if (bankStatement.state != 'open'):
- bankStatement.button_open()
- return bankStatement
|