bank_payments_utility.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. # -*- coding: utf-8 -*-
  2. from openerp import models, fields, tools, api
  3. import openerp.addons.decimal_precision as dp
  4. from datetime import datetime
  5. class ResBankPaymentsUtility(models.Model):
  6. _inherit = 'res.bank.payments'
  7. '''
  8. [Cambio de Diario la operación bancarias].
  9. Efectivizar/Depositar.
  10. '''
  11. @api.model
  12. def get_bank_payments_account_journal(self):
  13. journalUtility = []
  14. for journal in self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash'])]):
  15. statementJournal = []
  16. for statementOpen in self.env['account.bank.statement'].search([('journal_id','in',[journal.id]),('state','!=','confirm')]):
  17. if (statementOpen.journal_id.type == 'cash' and statementOpen.state =='draft'):
  18. continue
  19. statementJournal.append({
  20. 'id': statementOpen.id,
  21. 'name': statementOpen.name,
  22. 'date': statementOpen.date,
  23. 'state': statementOpen.state,
  24. 'statementName': statementOpen.name+" / "+statementOpen.user_id.name,
  25. 'typeStatement':{
  26. 'id': statementOpen.type_statement.id,
  27. 'name':statementOpen.type_statement.name,
  28. },
  29. 'user':{
  30. 'id': statementOpen.user_id.id,
  31. 'name': statementOpen.user_id.name,
  32. },
  33. })
  34. journalUtility.append({
  35. 'id': journal.id,
  36. 'name': journal.name,
  37. 'code': journal.code,
  38. 'type': journal.type,
  39. 'currencyID': journal.currency.id if (journal.currency) else journal.company_id.currency_id.id,
  40. 'statementJournal': statementJournal
  41. })
  42. return journalUtility
  43. @api.model
  44. def get_bank_payments_charge(self, id):
  45. decimal_precision = self.env['decimal.precision'].precision_get('Account')
  46. bankPaymnets = []
  47. for bank in self.env['res.bank.payments'].search([('id', '=', id)]):
  48. amountReceipt = 0
  49. amountPayment = 0
  50. amountBalance = 0
  51. amountCashed = 0
  52. amountRenegotiated = 0
  53. currency = None
  54. currencyBank = []
  55. for line in self.env['res.bank.payments.line'].search([('bank_payments_id.id', '=', bank.id)]):
  56. if (line.type_operation == 'receipt'):
  57. amountReceipt += line.amount
  58. if (line.type_operation == 'payment'):
  59. amountPayment += line.amount
  60. if (line.type_operation == 'balance'):
  61. amountBalance += line.amount
  62. if (line.type_operation =='cashed'):
  63. amountCashed += line.amount
  64. if (line.type_operation =='renegotiated'):
  65. amountRenegotiated += line.amount
  66. if (bank.currency_id):
  67. currency = bank.currency_id.id
  68. else:
  69. currency = self.env.user.company_id.currency_id.id
  70. currencyBank =self.env['res.currency'].browse(currency)
  71. bankPaymnets.append({
  72. 'id': bank.id,
  73. 'state': bank.state,
  74. 'amountTotal': bank.amount_total,
  75. 'amountReceipt': amountReceipt,
  76. 'amountPayment': amountPayment,
  77. 'amountBalance': amountBalance,
  78. 'amountCashed': amountCashed,
  79. 'amountRenegotiated': amountRenegotiated,
  80. 'changePaymentMethod': bank.change_payment_method,
  81. 'currencyId': currencyBank.id,
  82. 'chequeType': [{
  83. 'id': chequeType.id,
  84. 'name': chequeType.name,
  85. 'code': chequeType.code,
  86. 'isCash': chequeType.is_cash,
  87. 'isBank': chequeType.is_bank
  88. }for chequeType in self.env['res.bank.cheque.type'].search([('id', '=', bank.cheque_type_id.id)])],
  89. 'bankPaymentsType': [{
  90. 'name': pyamentsType.name,
  91. 'isReceipt': pyamentsType.is_receipt,
  92. 'isPayment': pyamentsType.is_payment,
  93. 'code': pyamentsType.code,
  94. }for pyamentsType in self.env['res.bank.payments.type'].search([('id', '=', bank.bank_payments_type_id.id)])],
  95. 'currencyAmount': [{
  96. 'id': currency.id,
  97. 'symbol': currency.symbol,
  98. 'rateSilent': currency.rate_silent,
  99. 'rate': currency.rate,
  100. 'thousandsSeparator': currency.thousands_separator,
  101. 'decimalSeparator': currency.decimal_separator,
  102. 'decimalPlaces': currency.decimal_places,
  103. 'position': currency.position,
  104. 'accuracy': currency.accuracy,
  105. 'rounding': currency.rounding,
  106. 'amountCurrency': round((bank.amount_total * (currency.rate / currencyBank.rate)), decimal_precision)
  107. } for currency in self.env['res.currency'].search([('active', '=', True)])]
  108. })
  109. return bankPaymnets
  110. '''
  111. _____ __ _ _ _
  112. | ____|/ _| ___ ___| |_(_)_ _(_)______ _ _ __
  113. | _| | |_ / _ \/ __| __| \ \ / / |_ / _` | '__|
  114. | |___| _| __/ (__| |_| |\ V /| |/ / (_| | |
  115. |_____|_| \___|\___|\__|_| \_/ |_/___\__,_|_|
  116. '''
  117. @api.model
  118. def balance_bank_payments_charge(self, values):
  119. dateServer = datetime.now().strftime('%Y-%m-%d')
  120. resUser = self.env.user.id
  121. ## res.bank.payments
  122. bankPayments = self.env['res.bank.payments'].browse(values['id'])
  123. if (not bankPayments):
  124. return False
  125. # account.journal
  126. accountJournal = self.env['account.journal'].search([('active', '=', True), ('type', 'in', ['bank', 'cash']),('id', '=', values['selectJournal'])])
  127. if (not accountJournal):
  128. return False
  129. journalBankLine = bankPayments.payments_line[len(bankPayments.payments_line) -1]
  130. if (journalBankLine):
  131. journalBank = journalBankLine.statement_id.journal_id
  132. StatamenteBank = journalBankLine.statement_id.id
  133. amount = bankPayments.amount_total
  134. ## Create Bank statement
  135. bankStatement = self.eiru_bank_create_bank_statement(dateServer,resUser, accountJournal, values['statementId'])
  136. # Create Bank statement Line
  137. statementLine = self.create_bank_statement_line(bankStatement.id, abs(amount), bankPayments.id, 'Balance/cobro', values['details'], 'cashed')
  138. # Create Payments Line
  139. paymnetsLine = self.create_bank_paymnets_line(abs(amount), bankPayments.id, bankStatement.id, statementLine.id, dateServer, accountJournal.id, 'cashed')
  140. amount = -amount
  141. # StatamenteBank
  142. bankStatement = self.eiru_bank_create_bank_statement(dateServer,resUser, journalBank, StatamenteBank)
  143. # Create Bank statement Line
  144. statementLine = self.create_bank_statement_line(bankStatement.id, amount, bankPayments.id, 'Balance/cobro', values['details'], 'cashed')
  145. # Create Payments Line
  146. paymnetsLine = self.create_bank_paymnets_line(amount, bankPayments.id, bankStatement.id, statementLine.id, dateServer, journalBank.id, 'cashed')
  147. return True if (paymnetsLine) else False
  148. '''
  149. Create/write bank_statement.
  150. '''
  151. def eiru_bank_create_bank_statement(self, dateServer, userId, journal, statementId):
  152. accountPeriod = self.env['account.period'].search([('date_start', '<=', dateServer),('date_stop', '>=', dateServer)])
  153. domain = [('journal_id', '=', journal.id),('state', '!=', 'confirm')]
  154. if (statementId):
  155. domain.append(('id', '=', statementId))
  156. else:
  157. domain.append(('date', '=', dateServer))
  158. bankStatement = self.env['account.bank.statement'].search(domain)
  159. if (not bankStatement):
  160. bank = {
  161. 'journal_id': journal.id,
  162. 'period_id': accountPeriod.id,
  163. 'date': dateServer,
  164. 'user_id': userId,
  165. }
  166. bankStatement = self.env['account.bank.statement'].create(bank)
  167. if (bankStatement.state != 'open'):
  168. bankStatement.button_open()
  169. return bankStatement