diff --git a/account_reconcile_reconciliation_date/__manifest__.py b/account_reconcile_reconciliation_date/__manifest__.py
index 7a4fc4fe..1a9b7d3d 100644
--- a/account_reconcile_reconciliation_date/__manifest__.py
+++ b/account_reconcile_reconciliation_date/__manifest__.py
@@ -7,12 +7,9 @@
"version": "12.0.1.1.0",
"depends": ["account"],
"author": "Open Source Integrators, Odoo Community Association (OCA)",
- "website": "http://www.github.com/OCA/account-reconcile",
+ "website": "https://github.com/OCA/account-reconcile",
"category": "Finance",
- 'license': 'AGPL-3',
- "data": [
- 'views/account_invoice.xml',
- 'views/account_payment.xml'
- ],
- 'installable': True,
+ "license": "AGPL-3",
+ "data": ["views/account_invoice.xml", "views/account_payment.xml"],
+ "installable": True,
}
diff --git a/account_reconcile_reconciliation_date/models/account_full_reconcile.py b/account_reconcile_reconciliation_date/models/account_full_reconcile.py
index bdea9bdb..e8145039 100644
--- a/account_reconcile_reconciliation_date/models/account_full_reconcile.py
+++ b/account_reconcile_reconciliation_date/models/account_full_reconcile.py
@@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from datetime import date
+
from odoo import api, fields, models
@@ -9,8 +10,9 @@ class AccountFullReconcile(models.Model):
_inherit = "account.full.reconcile"
_description = "Full Reconcile"
- reconciliation_date = fields.Date(string="Reconciliation Date",
- default=date.today())
+ reconciliation_date = fields.Date(
+ string="Reconciliation Date", default=date.today()
+ )
@api.model
def create(self, vals):
@@ -18,9 +20,11 @@ class AccountFullReconcile(models.Model):
for reconcile_id in res:
for line_id in reconcile_id.reconciled_line_ids:
if line_id.payment_id:
- line_id.payment_id.reconciliation_date = reconcile_id.\
- reconciliation_date
+ line_id.payment_id.reconciliation_date = (
+ reconcile_id.reconciliation_date
+ )
if line_id.invoice_id:
- line_id.invoice_id.reconciliation_date = reconcile_id.\
- reconciliation_date
+ line_id.invoice_id.reconciliation_date = (
+ reconcile_id.reconciliation_date
+ )
return res
diff --git a/account_reconcile_reconciliation_date/tests/test_account_reconcile_reconciliation_date.py b/account_reconcile_reconciliation_date/tests/test_account_reconcile_reconciliation_date.py
index c67a3907..3ebea791 100644
--- a/account_reconcile_reconciliation_date/tests/test_account_reconcile_reconciliation_date.py
+++ b/account_reconcile_reconciliation_date/tests/test_account_reconcile_reconciliation_date.py
@@ -1,21 +1,22 @@
# Copyright (C) 2019, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo.addons.account.tests.account_test_classes import AccountingTestCase
import time
+from odoo.addons.account.tests.account_test_classes import AccountingTestCase
+
class TestAccountReconcileReconciliationDate(AccountingTestCase):
def setUp(self):
super(TestAccountReconcileReconciliationDate, self).setUp()
- self.register_payments_model = self.env['account.register.payments'].\
- with_context(active_model='account.invoice')
- self.payment_model = self.env['account.payment']
- self.invoice_model = self.env['account.invoice']
- self.invoice_line_model = self.env['account.invoice.line']
- self.acc_bank_stmt_model = self.env['account.bank.statement']
- self.acc_bank_stmt_line_model = self.\
- env['account.bank.statement.line']
+ self.register_payments_model = self.env[
+ "account.register.payments"
+ ].with_context(active_model="account.invoice")
+ self.payment_model = self.env["account.payment"]
+ self.invoice_model = self.env["account.invoice"]
+ self.invoice_line_model = self.env["account.invoice.line"]
+ self.acc_bank_stmt_model = self.env["account.bank.statement"]
+ self.acc_bank_stmt_line_model = self.env["account.bank.statement.line"]
self.partner_agrolait = self.env.ref("base.res_partner_2")
self.partner_china_exp = self.env.ref("base.res_partner_3")
@@ -23,87 +24,133 @@ class TestAccountReconcileReconciliationDate(AccountingTestCase):
self.currency_usd_id = self.env.ref("base.USD").id
self.currency_eur_id = self.env.ref("base.EUR").id
- company = self.env.ref('base.main_company')
- self.cr.\
- execute("UPDATE res_company SET currency_id = %s WHERE id = %s",
- [self.currency_eur_id, company.id])
+ company = self.env.ref("base.main_company")
+ self.cr.execute(
+ "UPDATE res_company SET currency_id = %s WHERE id = %s",
+ [self.currency_eur_id, company.id],
+ )
self.product = self.env.ref("product.product_product_4")
- self.payment_method_manual_in = self.env.\
- ref("account.account_payment_method_manual_in")
- self.payment_method_manual_out = self.env.\
- ref("account.account_payment_method_manual_out")
+ self.payment_method_manual_in = self.env.ref(
+ "account.account_payment_method_manual_in"
+ )
+ self.payment_method_manual_out = self.env.ref(
+ "account.account_payment_method_manual_out"
+ )
- self.account_receivable = self.env['account.account'].\
- search([('user_type_id', '=', self.
- env.ref('account.data_account_type_receivable').id)],
- limit=1)
- self.account_payable = self.env['account.account'].\
- search([('user_type_id', '=', self.env.
- ref('account.data_account_type_payable').id)], limit=1)
- self.account_revenue = self.env['account.account'].\
- search([('user_type_id', '=', self.env.
- ref('account.data_account_type_revenue').id)], limit=1)
+ self.account_receivable = self.env["account.account"].search(
+ [
+ (
+ "user_type_id",
+ "=",
+ self.env.ref("account.data_account_type_receivable").id,
+ )
+ ],
+ limit=1,
+ )
+ self.account_payable = self.env["account.account"].search(
+ [
+ (
+ "user_type_id",
+ "=",
+ self.env.ref("account.data_account_type_payable").id,
+ )
+ ],
+ limit=1,
+ )
+ self.account_revenue = self.env["account.account"].search(
+ [
+ (
+ "user_type_id",
+ "=",
+ self.env.ref("account.data_account_type_revenue").id,
+ )
+ ],
+ limit=1,
+ )
- self.bank_journal_euro = self.env['account.journal'].\
- create({'name': 'Bank', 'type': 'bank', 'code': 'BNK67'})
+ self.bank_journal_euro = self.env["account.journal"].create(
+ {"name": "Bank", "type": "bank", "code": "BNK67"}
+ )
self.account_eur = self.bank_journal_euro.default_debit_account_id
- self.bank_journal_usd = self.env['account.journal'].\
- create({'name': 'Bank US',
- 'type': 'bank',
- 'code': 'BNK68',
- 'currency_id': self.currency_usd_id})
+ self.bank_journal_usd = self.env["account.journal"].create(
+ {
+ "name": "Bank US",
+ "type": "bank",
+ "code": "BNK68",
+ "currency_id": self.currency_usd_id,
+ }
+ )
self.account_usd = self.bank_journal_usd.default_debit_account_id
- self.transfer_account = self.env['res.users'].\
- browse(self.env.uid).company_id.transfer_account_id
- self.diff_income_account = self.env['res.users'].\
- browse(self.env.uid).company_id.\
- income_currency_exchange_account_id
- self.diff_expense_account = self.env['res.users'].\
- browse(self.env.uid).company_id.\
- expense_currency_exchange_account_id
+ self.transfer_account = (
+ self.env["res.users"].browse(self.env.uid).company_id.transfer_account_id
+ )
+ self.diff_income_account = (
+ self.env["res.users"]
+ .browse(self.env.uid)
+ .company_id.income_currency_exchange_account_id
+ )
+ self.diff_expense_account = (
+ self.env["res.users"]
+ .browse(self.env.uid)
+ .company_id.expense_currency_exchange_account_id
+ )
- def create_invoice(self, amount=100,
- type='out_invoice', currency_id=None,
- partner=None, account_id=None):
+ def create_invoice(
+ self,
+ amount=100,
+ type="out_invoice",
+ currency_id=None,
+ partner=None,
+ account_id=None,
+ ):
""" Returns an open invoice """
- invoice = self.invoice_model.create({
- 'partner_id': partner or self.partner_agrolait.id,
- 'currency_id': currency_id or self.currency_eur_id,
- 'name': type,
- 'account_id': account_id or self.account_receivable.id,
- 'type': type,
- 'date_invoice': time.strftime('%Y') + '-06-26',
- })
- self.invoice_line_model.create({
- 'product_id': self.product.id,
- 'quantity': 1,
- 'price_unit': amount,
- 'invoice_id': invoice.id,
- 'name': 'something',
- 'account_id': self.account_revenue.id,
- })
+ invoice = self.invoice_model.create(
+ {
+ "partner_id": partner or self.partner_agrolait.id,
+ "currency_id": currency_id or self.currency_eur_id,
+ "name": type,
+ "account_id": account_id or self.account_receivable.id,
+ "type": type,
+ "date_invoice": time.strftime("%Y") + "-06-26",
+ }
+ )
+ self.invoice_line_model.create(
+ {
+ "product_id": self.product.id,
+ "quantity": 1,
+ "price_unit": amount,
+ "invoice_id": invoice.id,
+ "name": "something",
+ "account_id": self.account_revenue.id,
+ }
+ )
invoice.action_invoice_open()
return invoice
- def reconcile(self, liquidity_aml,
- amount=0.0, amount_currency=0.0, currency_id=None):
+ def reconcile(
+ self, liquidity_aml, amount=0.0, amount_currency=0.0, currency_id=None
+ ):
""" Reconcile a journal entry corresponding \
to a payment with its bank statement line """
- bank_stmt = self.acc_bank_stmt_model.create({
- 'journal_id': liquidity_aml.journal_id.id,
- 'date': time.strftime('%Y') + '-07-15',
- })
- bank_stmt_line = self.acc_bank_stmt_line_model.create({
- 'name': 'payment',
- 'statement_id': bank_stmt.id,
- 'partner_id': self.partner_agrolait.id,
- 'amount': amount,
- 'amount_currency': amount_currency,
- 'currency_id': currency_id,
- 'date': time.strftime('%Y') + '-07-15'
- })
+ bank_stmt = self.acc_bank_stmt_model.create(
+ {
+ "journal_id": liquidity_aml.journal_id.id,
+ "date": time.strftime("%Y") + "-07-15",
+ }
+ )
+ bank_stmt_line = self.acc_bank_stmt_line_model.create(
+ {
+ "name": "payment",
+ "statement_id": bank_stmt.id,
+ "partner_id": self.partner_agrolait.id,
+ "amount": amount,
+ "amount_currency": amount_currency,
+ "currency_id": currency_id,
+ "date": time.strftime("%Y") + "-07-15",
+ }
+ )
bank_stmt_line.process_reconciliation(payment_aml_rec=liquidity_aml)
return bank_stmt
@@ -111,56 +158,67 @@ class TestAccountReconcileReconciliationDate(AccountingTestCase):
def test_full_payment_process(self):
""" Create a payment for two invoices, \
post it and reconcile it with a bank statement """
- inv_1 = self.create_invoice(amount=100,
- currency_id=self.currency_eur_id,
- partner=self.partner_agrolait.id)
- inv_2 = self.create_invoice(amount=200,
- currency_id=self.currency_eur_id,
- partner=self.partner_agrolait.id)
+ inv_1 = self.create_invoice(
+ amount=100,
+ currency_id=self.currency_eur_id,
+ partner=self.partner_agrolait.id,
+ )
+ inv_2 = self.create_invoice(
+ amount=200,
+ currency_id=self.currency_eur_id,
+ partner=self.partner_agrolait.id,
+ )
- ctx = {'active_model': 'account.invoice',
- 'active_ids': [inv_1.id, inv_2.id]}
- register_payments = self.register_payments_model.\
- with_context(ctx).\
- create({
- 'payment_date': time.strftime('%Y') + '-07-15',
- 'journal_id': self.bank_journal_euro.id,
- 'payment_method_id': self.payment_method_manual_in.id,
- 'group_invoices': True,
- })
+ ctx = {"active_model": "account.invoice", "active_ids": [inv_1.id, inv_2.id]}
+ register_payments = self.register_payments_model.with_context(ctx).create(
+ {
+ "payment_date": time.strftime("%Y") + "-07-15",
+ "journal_id": self.bank_journal_euro.id,
+ "payment_method_id": self.payment_method_manual_in.id,
+ "group_invoices": True,
+ }
+ )
register_payments.create_payments()
payment = self.payment_model.search([], order="id desc", limit=1)
self.assertAlmostEquals(payment.amount, 300)
- self.assertEqual(payment.state, 'posted')
- self.assertEqual(payment.state, 'posted')
- self.assertEqual(inv_1.state, 'paid')
- self.assertEqual(inv_2.state, 'paid')
+ self.assertEqual(payment.state, "posted")
+ self.assertEqual(payment.state, "posted")
+ self.assertEqual(inv_1.state, "paid")
+ self.assertEqual(inv_2.state, "paid")
- self.assertRecordValues(payment.move_line_ids, [
- {'account_id': self.account_eur.id,
- 'debit': 300.0,
- 'credit': 0.0,
- 'amount_currency': 0,
- 'currency_id': False},
- {'account_id': inv_1.account_id.id,
- 'debit': 0.0,
- 'credit': 300.0,
- 'amount_currency': 0,
- 'currency_id': False},
- ])
- self.assertTrue(payment.move_line_ids.
- filtered(lambda l: l.account_id == inv_1.account_id)
- [0].full_reconcile_id)
+ self.assertRecordValues(
+ payment.move_line_ids,
+ [
+ {
+ "account_id": self.account_eur.id,
+ "debit": 300.0,
+ "credit": 0.0,
+ "amount_currency": 0,
+ "currency_id": False,
+ },
+ {
+ "account_id": inv_1.account_id.id,
+ "debit": 0.0,
+ "credit": 300.0,
+ "amount_currency": 0,
+ "currency_id": False,
+ },
+ ],
+ )
+ self.assertTrue(
+ payment.move_line_ids.filtered(lambda l: l.account_id == inv_1.account_id)[
+ 0
+ ].full_reconcile_id
+ )
- liquidity_aml = payment.move_line_ids.\
- filtered(lambda r: r.account_id == self.account_eur)
+ liquidity_aml = payment.move_line_ids.filtered(
+ lambda r: r.account_id == self.account_eur
+ )
bank_statement = self.reconcile(liquidity_aml, 200, 0, False)
self.assertEqual(liquidity_aml.statement_id, bank_statement)
- self.assertEqual(liquidity_aml.statement_line_id,
- bank_statement.line_ids[0])
+ self.assertEqual(liquidity_aml.statement_line_id, bank_statement.line_ids[0])
- self.assertEqual(payment.state, 'reconciled')
- self.assertEqual(payment.reconciliation_date,
- inv_1.reconciliation_date)
+ self.assertEqual(payment.state, "reconciled")
+ self.assertEqual(payment.reconciliation_date, inv_1.reconciliation_date)
diff --git a/account_reconcile_reconciliation_date/views/account_invoice.xml b/account_reconcile_reconciliation_date/views/account_invoice.xml
index 7a559ac5..b523261a 100644
--- a/account_reconcile_reconciliation_date/views/account_invoice.xml
+++ b/account_reconcile_reconciliation_date/views/account_invoice.xml
@@ -3,10 +3,13 @@
account.invoice.reconciliation.date
account.invoice
-
+
-
+
diff --git a/account_reconcile_reconciliation_date/views/account_payment.xml b/account_reconcile_reconciliation_date/views/account_payment.xml
index 10a65be1..1802aa16 100644
--- a/account_reconcile_reconciliation_date/views/account_payment.xml
+++ b/account_reconcile_reconciliation_date/views/account_payment.xml
@@ -3,10 +3,13 @@
account.payment.reconciliation.date
account.payment
-
+
-
+
diff --git a/setup/account_reconcile_reconciliation_date/odoo/addons/account_reconcile_reconciliation_date b/setup/account_reconcile_reconciliation_date/odoo/addons/account_reconcile_reconciliation_date
new file mode 120000
index 00000000..12e4abc0
--- /dev/null
+++ b/setup/account_reconcile_reconciliation_date/odoo/addons/account_reconcile_reconciliation_date
@@ -0,0 +1 @@
+../../../../account_reconcile_reconciliation_date
\ No newline at end of file
diff --git a/setup/account_reconcile_reconciliation_date/setup.py b/setup/account_reconcile_reconciliation_date/setup.py
new file mode 100644
index 00000000..28c57bb6
--- /dev/null
+++ b/setup/account_reconcile_reconciliation_date/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)