Skip to content

Commit

Permalink
Merge PR #3566 into 16.0
Browse files Browse the repository at this point in the history
Signed-off-by rvalyi
  • Loading branch information
OCA-git-bot committed Feb 13, 2025
2 parents 9c291e9 + 16057c3 commit 7543420
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 6 deletions.
17 changes: 11 additions & 6 deletions sale_advance_payment/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,20 @@
class AccountMove(models.Model):
_inherit = "account.move"

def action_post(self):
def _post(self, soft=True):
# Automatic reconciliation of payment when invoice confirmed.
res = super(AccountMove, self).action_post()
sale_order = self.mapped("line_ids.sale_line_ids.order_id")
if sale_order and self.invoice_outstanding_credits_debits_widget is not False:
res = super(AccountMove, self)._post(soft=soft)
for move in self:
sale_order = move.mapped("line_ids.sale_line_ids.order_id")
if (
not sale_order
or move.invoice_outstanding_credits_debits_widget is False
):
continue
json_invoice_outstanding_data = (
self.invoice_outstanding_credits_debits_widget.get("content", [])
move.invoice_outstanding_credits_debits_widget.get("content", [])
)
for data in json_invoice_outstanding_data:
if data.get("move_id") in sale_order.account_payment_ids.move_id.ids:
self.js_assign_outstanding_line(line_id=data.get("id"))
move.js_assign_outstanding_line(line_id=data.get("id"))
return res
107 changes: 107 additions & 0 deletions sale_advance_payment/tests/test_sale_advance_payment.py
Original file line number Diff line number Diff line change
Expand Up @@ -375,3 +375,110 @@ def test_03_residual_amount_big_pre_payment(self):
self.assertEqual(invoice.amount_residual, 0.0)
self.assertEqual(self.sale_order_1.amount_residual, 1600)
self.assertEqual(invoice.amount_residual, 0)

def test_04_sale_advance_payment_multi_inv_validate_wiz(self):
self.assertEqual(
self.sale_order_1.amount_residual,
3600,
)
self.assertEqual(
self.sale_order_1.amount_residual,
self.sale_order_1.amount_total,
"Amounts should match",
)

context_payment = {
"active_ids": [self.sale_order_1.id],
"active_id": self.sale_order_1.id,
}

# Create Advance Payment 1 - EUR - bank
advance_payment_1 = (
self.env["account.voucher.wizard"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_eur_bank.id,
"payment_type": "inbound",
"amount_advance": 100,
"order_id": self.sale_order_1.id,
}
)
)
advance_payment_1.make_advance_payment()

self.assertEqual(self.sale_order_1.amount_residual, 3480)

# Create Advance Payment 2 - USD - cash
advance_payment_2 = (
self.env["account.voucher.wizard"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_usd_cash.id,
"payment_type": "inbound",
"amount_advance": 200,
"order_id": self.sale_order_1.id,
}
)
)
advance_payment_2.make_advance_payment()

self.assertEqual(self.sale_order_1.amount_residual, 3280)

# Confirm Sale Order
self.sale_order_1.action_confirm()

# Create Advance Payment 3 - EUR - cash
advance_payment_3 = (
self.env["account.voucher.wizard"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_eur_cash.id,
"payment_type": "inbound",
"amount_advance": 250,
"order_id": self.sale_order_1.id,
}
)
)
advance_payment_3.make_advance_payment()
self.assertEqual(self.sale_order_1.amount_residual, 2980)

# Create Advance Payment 4 - USD - bank
advance_payment_4 = (
self.env["account.voucher.wizard"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_usd_bank.id,
"payment_type": "inbound",
"amount_advance": 400,
"order_id": self.sale_order_1.id,
}
)
)
advance_payment_4.make_advance_payment()
self.assertEqual(self.sale_order_1.amount_residual, 2580)

# Confirm Sale Order
self.sale_order_1.action_confirm()

# Create Invoice
invoice = self.sale_order_1._create_invoices()
self.assertEqual(invoice.state, "draft")
validate_wiz = (
self.env["validate.account.move"]
.with_context(active_model="account.move", active_ids=invoice.ids)
.create({})
)
validate_wiz.validate_move()
self.assertEqual(invoice.state, "posted")
self.assertEqual(invoice.payment_state, "partial")

# Compare payments
rate = self.currency_rate.rate
payment_list = [100 * rate, 200, 250 * rate, 400]
payments = invoice.invoice_outstanding_credits_debits_widget
result = [d["amount"] for d in payments["content"]]
self.assertEqual(set(payment_list), set(result))

0 comments on commit 7543420

Please sign in to comment.