Skip to content

Commit

Permalink
[ADD] Add new module accout_payment_ux Fix the behavior of pending tr…
Browse files Browse the repository at this point in the history
…ansacition realated with a account.payment

	What is happening now:
		- when i'm create a electronic payment from backend and the transaction remains in pending status the payment status is changed to canceled
	what happens after installing this module
		- When the transaction is pending the payment remains in draft status. After done this transaction the payment change its state ans reconcilie with the invoices
  • Loading branch information
maq-adhoc committed Aug 1, 2023
1 parent 507f9a6 commit ffffef0
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 2 deletions.
8 changes: 6 additions & 2 deletions account_payment_group/models/account_payment_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -489,8 +489,12 @@ def post(self):
rec.payment_ids.mapped('name')) and ', '.join(
rec.payment_ids.mapped('name')) or False

if not created_automatically:
counterpart_aml = rec.payment_ids.mapped('line_ids').filtered(
# Filtro porque los pagos electronicos solo pueden estar en pending si la transaccion esta en pending
# y no los puedo conciliar esto no es un comportamiento del core
# sino que esta implementado en account_payment_ux
posted_payments = rec.payment_ids.filtered(lambda x: x.state == 'posted')
if not created_automatically and posted_payments:
counterpart_aml = posted_payments.mapped('line_ids').filtered(
lambda r: not r.reconciled and r.account_id.account_type in ('liability_payable', 'asset_receivable'))
if counterpart_aml and rec.to_pay_move_line_ids:
(counterpart_aml + (rec.to_pay_move_line_ids)).reconcile()
Expand Down
1 change: 1 addition & 0 deletions account_payment_ux/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
24 changes: 24 additions & 0 deletions account_payment_ux/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# © 2023 ADHOC SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Account Payment UX",
"version": "16.0.1.0.0",
"category": "Payment",
"website": "www.adhoc.com.ar",
"author": "ADHOC SA",
"license": "AGPL-3",
"application": False,
'installable': True,
'auto_install': True,
"external_dependencies": {
"python": [],
"bin": [],
},
"depends": [
"account_payment",
],
"data": [
],
"demo": [
],
}
2 changes: 2 additions & 0 deletions account_payment_ux/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import account_payment
from . import payment_transaction
15 changes: 15 additions & 0 deletions account_payment_ux/models/account_payment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from odoo import models


class AccountPayment(models.Model):
_inherit = 'account.payment'

def action_post(self):
""" Odoo a partir de 16, cuando se valida un pago con token, si la transaccion no queda en done cancela el pago
por ahora nosotros revertimos este cambio para el caso de tu cuota"""
return super(AccountPayment, self.with_context(from_action_post=True)).action_post()

def action_cancel(self):
if self._context.get('from_action_post'):
self = self - self.filtered(lambda x: x.payment_transaction_id.state in ['draft', 'pending', 'authorized'])
return super(AccountPayment, self).action_cancel()
23 changes: 23 additions & 0 deletions account_payment_ux/models/payment_transaction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from odoo import models


class PaymentTransaction(models.Model):
_inherit = 'payment.transaction'

def _reconcile_after_done(self):
super()._reconcile_after_done()

# Si el pago relacionado a la trasaccion esta en draft y coinciden los datos
# lo publico y concilio
if self.payment_id and self.payment_id.state == 'draft' and \
self.payment_id.currency_id == self.currency_id and \
self.payment_id.amount == abs(self.amount):

self.payment_id.action_post()
if self.invoice_ids:
self.invoice_ids.filtered(lambda inv: inv.state == 'draft').action_post()

(self.payment_id.line_ids + self.invoice_ids.line_ids).filtered(
lambda line: line.account_id == self.payment_id.destination_account_id
and not line.reconciled
).reconcile()

0 comments on commit ffffef0

Please sign in to comment.