158 lines
6.0 KiB
Python
158 lines
6.0 KiB
Python
|
# Copyright 2014-2016 Akretion - Mourad EL HADJ MIMOUNE
|
||
|
# Copyright 2018 Tecnativa - Pedro M. Baeza
|
||
|
# Copyright 2022 Tecnativa - Víctor Martínez
|
||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||
|
|
||
|
from odoo.tests import tagged
|
||
|
from odoo.tests.common import TransactionCase
|
||
|
|
||
|
|
||
|
@tagged("post_install", "-at_install")
|
||
|
class TestPayment(TransactionCase):
|
||
|
def setUp(self):
|
||
|
super().setUp()
|
||
|
self.account_model = self.env["account.account"]
|
||
|
self.partner = self.env["res.partner"].create({"name": "Test partner"})
|
||
|
self.main_company = self.env.company
|
||
|
self.currency = self.main_company.currency_id
|
||
|
self.product = self.env["product.product"].create({"name": "Test product"})
|
||
|
# check if those accounts exist otherwise create them
|
||
|
self.account_model.create(
|
||
|
{
|
||
|
"code": "411100",
|
||
|
"name": "Debtors - (test)",
|
||
|
"reconcile": True,
|
||
|
"user_type_id": self.ref("account.data_account_type_receivable"),
|
||
|
"company_id": self.main_company.id,
|
||
|
}
|
||
|
)
|
||
|
self.account_model.create(
|
||
|
{
|
||
|
"code": "707100",
|
||
|
"name": "Product Sales - (test)",
|
||
|
"user_type_id": self.ref("account.data_account_type_revenue"),
|
||
|
"company_id": self.main_company.id,
|
||
|
}
|
||
|
)
|
||
|
received_check_account = self.account_model.create(
|
||
|
{
|
||
|
"code": "511200",
|
||
|
"name": "Received check - (test)",
|
||
|
"reconcile": True,
|
||
|
"user_type_id": self.ref("account.data_account_type_current_assets"),
|
||
|
"company_id": self.main_company.id,
|
||
|
}
|
||
|
)
|
||
|
self.transfer_account = self.account_model.create(
|
||
|
{
|
||
|
"code": "511500",
|
||
|
"name": "Check deposis waiting for credit on bank account - (test)",
|
||
|
"reconcile": True,
|
||
|
"user_type_id": self.ref("account.data_account_type_current_assets"),
|
||
|
"company_id": self.main_company.id,
|
||
|
}
|
||
|
)
|
||
|
self.manual_method_in = self.env.ref("account.account_payment_method_manual_in")
|
||
|
self.check_journal = self._create_journal(
|
||
|
"received check", "bank", "CHK", received_check_account
|
||
|
)
|
||
|
self.bank_journal = self._create_journal(
|
||
|
"Bank Test Chq", "bank", "TEST@@", self.transfer_account
|
||
|
)
|
||
|
self.bank_journal.bank_account_id = self.env["res.partner.bank"].create(
|
||
|
{
|
||
|
"acc_number": "SI56 1910 0000 0123 438 584",
|
||
|
"partner_id": self.main_company.partner_id.id,
|
||
|
}
|
||
|
)
|
||
|
|
||
|
def _create_journal(self, name, journal_type, code, payment_account):
|
||
|
return self.env["account.journal"].create(
|
||
|
{
|
||
|
"name": name,
|
||
|
"type": journal_type,
|
||
|
"code": code,
|
||
|
"company_id": self.main_company.id,
|
||
|
"inbound_payment_method_line_ids": [
|
||
|
(
|
||
|
0,
|
||
|
0,
|
||
|
{
|
||
|
"payment_method_id": self.manual_method_in.id,
|
||
|
"payment_account_id": payment_account.id,
|
||
|
},
|
||
|
)
|
||
|
],
|
||
|
}
|
||
|
)
|
||
|
|
||
|
def create_invoice(self, amount=100):
|
||
|
"""Returns an open invoice"""
|
||
|
invoice = self.env["account.move"].create(
|
||
|
{
|
||
|
"company_id": self.main_company.id,
|
||
|
"move_type": "out_invoice",
|
||
|
"partner_id": self.partner.id,
|
||
|
"currency_id": self.currency.id,
|
||
|
"invoice_line_ids": [
|
||
|
(
|
||
|
0,
|
||
|
0,
|
||
|
{
|
||
|
"product_id": self.product.id,
|
||
|
"quantity": 1,
|
||
|
"price_unit": amount,
|
||
|
},
|
||
|
)
|
||
|
],
|
||
|
}
|
||
|
)
|
||
|
invoice.action_post()
|
||
|
return invoice
|
||
|
|
||
|
def create_check_deposit(self):
|
||
|
"""Returns an validated check deposit"""
|
||
|
check_deposit = self.env["account.check.deposit"].create(
|
||
|
{
|
||
|
"company_id": self.main_company.id,
|
||
|
"journal_id": self.check_journal.id,
|
||
|
"bank_journal_id": self.bank_journal.id,
|
||
|
"currency_id": self.currency.id,
|
||
|
}
|
||
|
)
|
||
|
check_deposit.get_all_checks()
|
||
|
check_deposit.validate_deposit()
|
||
|
return check_deposit
|
||
|
|
||
|
def test_full_payment_process(self):
|
||
|
"""Create a payment for on invoice by check,
|
||
|
post it and create check deposit"""
|
||
|
inv_1 = self.create_invoice(amount=100)
|
||
|
inv_2 = self.create_invoice(amount=200)
|
||
|
register_payments = (
|
||
|
self.env["account.payment.register"]
|
||
|
.with_context(
|
||
|
active_model="account.move",
|
||
|
active_ids=[inv_1.id, inv_2.id],
|
||
|
default_journal_id=self.check_journal.id,
|
||
|
)
|
||
|
.create({"group_payment": True})
|
||
|
)
|
||
|
payment = register_payments._create_payments()
|
||
|
self.assertAlmostEqual(payment.amount, 300)
|
||
|
self.assertEqual(payment.state, "posted")
|
||
|
check_deposit = self.create_check_deposit()
|
||
|
liquidity_aml = check_deposit.move_id.line_ids.filtered(
|
||
|
lambda r: r.account_id == self.transfer_account
|
||
|
)
|
||
|
self.assertAlmostEqual(check_deposit.total_amount, 300)
|
||
|
self.assertAlmostEqual(liquidity_aml.debit, 300)
|
||
|
self.assertEqual(check_deposit.move_id.state, "posted")
|
||
|
self.assertEqual(check_deposit.state, "done")
|
||
|
res = (
|
||
|
self.env["ir.actions.report"]
|
||
|
._get_report_from_name("account_check_deposit.report_checkdeposit")
|
||
|
._render_qweb_text(check_deposit.ids, False)
|
||
|
)
|
||
|
self.assertRegex(str(res[0]), "SI56 1910 0000 0123 438 584")
|