From 9910266b0f02ddb2cedb75c6b5ce0174f4ec3da3 Mon Sep 17 00:00:00 2001
From: Holger Brunn
Date: Tue, 4 Aug 2015 17:50:21 +0200
Subject: [PATCH 01/20] [ADD] account_reconcile_payment_order
---
account_reconcile_payment_order/README.rst | 51 ++++++++++++
account_reconcile_payment_order/__init__.py | 20 +++++
.../__openerp__.py | 33 ++++++++
.../models/__init__.py | 20 +++++
.../models/account_bank_statement_line.py | 73 ++++++++++++++++++
.../static/description/icon.png | Bin 0 -> 9455 bytes
6 files changed, 197 insertions(+)
create mode 100644 account_reconcile_payment_order/README.rst
create mode 100644 account_reconcile_payment_order/__init__.py
create mode 100644 account_reconcile_payment_order/__openerp__.py
create mode 100644 account_reconcile_payment_order/models/__init__.py
create mode 100644 account_reconcile_payment_order/models/account_bank_statement_line.py
create mode 100644 account_reconcile_payment_order/static/description/icon.png
diff --git a/account_reconcile_payment_order/README.rst b/account_reconcile_payment_order/README.rst
new file mode 100644
index 00000000..9ce5ae5f
--- /dev/null
+++ b/account_reconcile_payment_order/README.rst
@@ -0,0 +1,51 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :alt: License: AGPL-3
+Reconcile payment orders
+========================
+
+Payment orders that show up as as one big transaction can be difficult for the accounting to handle if a transfer acount is used. In this case, we need to reconcile this transaction with possibly hunderds of move lines, which can be a bit tiresome. This module tries to recognize transactions deriving from payment orders and propose the unreconciled move lines from this payment order.
+
+Usage
+=====
+
+It should just work. What the module does is to search for a payment order in state 'sent' that has the same amount as the statement line, and the same bank account than the statement.
+
+For further information, please visit:
+
+* https://www.odoo.com/forum/help-1
+
+Known issues / Roadmap
+======================
+
+* it would be good to check references too, but at least the bank in use here changes some characters, so this doesn't seem to be a general solution.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed feedback
+`here `_.
+
+Credits
+=======
+
+Contributors
+------------
+
+* Holger Brunn
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+This module is maintained by the OCA.
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+To contribute to this module, please visit http://odoo-community.org.
diff --git a/account_reconcile_payment_order/__init__.py b/account_reconcile_payment_order/__init__.py
new file mode 100644
index 00000000..cdb7d736
--- /dev/null
+++ b/account_reconcile_payment_order/__init__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# This module copyright (C) 2015 Therp BV .
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+from . import models
diff --git a/account_reconcile_payment_order/__openerp__.py b/account_reconcile_payment_order/__openerp__.py
new file mode 100644
index 00000000..3b45c14e
--- /dev/null
+++ b/account_reconcile_payment_order/__openerp__.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# This module copyright (C) 2015 Therp BV .
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+{
+ "name": "Reconcile payment orders",
+ "version": "1.0",
+ "author": "Therp BV,Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "category": "Accounting & Finance",
+ "summary": "Automatically reconcile all lines from sent payment orders",
+ "depends": [
+ 'account_banking_payment_transfer',
+ ],
+ "auto_install": False,
+ "installable": True,
+ "application": False,
+}
diff --git a/account_reconcile_payment_order/models/__init__.py b/account_reconcile_payment_order/models/__init__.py
new file mode 100644
index 00000000..33afdc17
--- /dev/null
+++ b/account_reconcile_payment_order/models/__init__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# This module copyright (C) 2015 Therp BV .
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+from . import account_bank_statement_line
diff --git a/account_reconcile_payment_order/models/account_bank_statement_line.py b/account_reconcile_payment_order/models/account_bank_statement_line.py
new file mode 100644
index 00000000..759f3aee
--- /dev/null
+++ b/account_reconcile_payment_order/models/account_bank_statement_line.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# This module copyright (C) 2015 Therp BV ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+from decimal import Decimal
+from openerp import models, api
+from openerp.tools.float_utils import float_repr
+
+
+class AccountBankStatementLine(models.Model):
+ _inherit = 'account.bank.statement.line'
+
+ @api.model
+ def get_possible_payment_orders_for_statement_line(self, this):
+ """find orders that might be candidates for matching a statement
+ line"""
+ digits = self.env['decimal.precision'].precision_get('Account')
+ self.env.cr.execute(
+ '''with order_sums as (
+ select order_id, sum(amount_currency) as amount
+ from payment_line
+ join payment_order o on o.id=order_id
+ where o.state = 'sent'
+ group by order_id)
+ select order_id from order_sums where amount = %s''',
+ (Decimal(float_repr(abs(this.amount), digits)),))
+ order_ids = [i for i, in self.env.cr.fetchall()]
+ # verify that this ids are accessible to the user and from the
+ # right bank account if applicable
+ domain = [
+ ('id', 'in', order_ids),
+ ]
+ if this.bank_account_id.acc_number:
+ domain.append(
+ ('mode.bank_id.acc_number', '=',
+ this.bank_account_id.acc_number))
+ return self.env['payment.order'].search(domain)
+
+ @api.model
+ def get_reconcile_lines_from_order(self, this, orders, excluded_ids=None):
+ """return lines to reconcile our statement line with"""
+ order = orders[0]
+ return self.env['account.move.line']\
+ .prepare_move_lines_for_reconciliation_widget(
+ list(set(order._get_transfer_move_lines())))
+
+ @api.model
+ def get_reconciliation_proposition(self, this, excluded_ids=None):
+ """See if we find a set payment order that matches our line. If yes,
+ return all unreconciled lines from there"""
+ orders = self.get_possible_payment_orders_for_statement_line(this)
+ if orders:
+ reconcile_lines = self.get_reconcile_lines_from_order(
+ this, orders, excluded_ids=None)
+ if reconcile_lines:
+ return reconcile_lines
+ return super(AccountBankStatementLine, self)\
+ .get_reconciliation_proposition(this, excluded_ids=excluded_ids)
diff --git a/account_reconcile_payment_order/static/description/icon.png b/account_reconcile_payment_order/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
From bcd5e691e609c876dc20572317c9ecfa34cb6155 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Wed, 19 Aug 2015 02:26:12 +0200
Subject: [PATCH 02/20] [FIX+IMP] account_reconcile_payment_order: Take into
account payment orders "non transferred" + Improvements in README+manifest
---
account_reconcile_payment_order/README.rst | 33 +++++++++++++++----
.../__openerp__.py | 8 +++--
.../i18n/account_reconcile_payment_order.pot | 20 +++++++++++
account_reconcile_payment_order/i18n/de.po | 24 ++++++++++++++
account_reconcile_payment_order/i18n/fr.po | 24 ++++++++++++++
account_reconcile_payment_order/i18n/it.po | 24 ++++++++++++++
account_reconcile_payment_order/i18n/nl_NL.po | 24 ++++++++++++++
account_reconcile_payment_order/i18n/sl.po | 25 ++++++++++++++
.../models/account_bank_statement_line.py | 11 +++++--
9 files changed, 180 insertions(+), 13 deletions(-)
create mode 100644 account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
create mode 100644 account_reconcile_payment_order/i18n/de.po
create mode 100644 account_reconcile_payment_order/i18n/fr.po
create mode 100644 account_reconcile_payment_order/i18n/it.po
create mode 100644 account_reconcile_payment_order/i18n/nl_NL.po
create mode 100644 account_reconcile_payment_order/i18n/sl.po
diff --git a/account_reconcile_payment_order/README.rst b/account_reconcile_payment_order/README.rst
index 9ce5ae5f..d16c8eae 100644
--- a/account_reconcile_payment_order/README.rst
+++ b/account_reconcile_payment_order/README.rst
@@ -1,23 +1,41 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
- :alt: License: AGPL-3
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+========================
Reconcile payment orders
========================
-Payment orders that show up as as one big transaction can be difficult for the accounting to handle if a transfer acount is used. In this case, we need to reconcile this transaction with possibly hunderds of move lines, which can be a bit tiresome. This module tries to recognize transactions deriving from payment orders and propose the unreconciled move lines from this payment order.
+Payment orders that show up as one big transaction can be difficult for the
+accounting to handle if a transfer account is used. In this case, we need to
+reconcile this transaction with possibly hundreds of move lines, which can be a
+bit tiresome. This module tries to recognize transactions deriving from payment
+orders and propose the unreconciled move lines from this payment order.
+
+Installation
+============
+
+This module requires the module **account_banking_payment_transfer**, available
+in https://github.com/OCA/bank-payment.
Usage
=====
-It should just work. What the module does is to search for a payment order in state 'sent' that has the same amount as the statement line, and the same bank account than the statement.
+It should just work. What the module does is to search for a payment order in
+state 'sent' (for orders transferred to an intermediate account) or done (for
+orders non transferred) that has the same amount as the statement line, and the
+same bank account than the statement. If any, all move lines are automatically
+proposed for the reconcile.
-For further information, please visit:
-
-* https://www.odoo.com/forum/help-1
+.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
+ :alt: Try me on Runbot
+ :target: https://runbot.odoo-community.org/runbot/98/8.0
Known issues / Roadmap
======================
-* it would be good to check references too, but at least the bank in use here changes some characters, so this doesn't seem to be a general solution.
+* it would be good to check references too, but at least the bank in use here
+ changes some characters, so this doesn't seem to be a general solution.
Bug Tracker
===========
@@ -34,6 +52,7 @@ Contributors
------------
* Holger Brunn
+* Pedro M. Baeza
Maintainer
----------
diff --git a/account_reconcile_payment_order/__openerp__.py b/account_reconcile_payment_order/__openerp__.py
index 3b45c14e..84e2a80d 100644
--- a/account_reconcile_payment_order/__openerp__.py
+++ b/account_reconcile_payment_order/__openerp__.py
@@ -19,11 +19,13 @@
##############################################################################
{
"name": "Reconcile payment orders",
- "version": "1.0",
- "author": "Therp BV,Odoo Community Association (OCA)",
+ "version": "8.0.1.0.0",
+ "author": "Therp BV,"
+ "Serv. Tecnol. Avanzados - Pedro M. Baeza,"
+ "Odoo Community Association (OCA)",
"license": "AGPL-3",
"category": "Accounting & Finance",
- "summary": "Automatically reconcile all lines from sent payment orders",
+ "summary": "Automatically reconcile all lines from payment orders",
"depends": [
'account_banking_payment_transfer',
],
diff --git a/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot b/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
new file mode 100644
index 00000000..1eb8ac1c
--- /dev/null
+++ b/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
@@ -0,0 +1,20 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_reconcile_payment_order
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 8.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: account_reconcile_payment_order
+#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr ""
+
diff --git a/account_reconcile_payment_order/i18n/de.po b/account_reconcile_payment_order/i18n/de.po
new file mode 100644
index 00000000..525c694d
--- /dev/null
+++ b/account_reconcile_payment_order/i18n/de.po
@@ -0,0 +1,24 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_reconcile_payment_order
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: bank-statement-reconcile (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-10-14 09:25+0000\n"
+"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: German (http://www.transifex.com/oca/OCA-bank-statement-"
+"reconcile-8-0/language/de/)\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: account_reconcile_payment_order
+#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr "Kontoauszugzeile"
diff --git a/account_reconcile_payment_order/i18n/fr.po b/account_reconcile_payment_order/i18n/fr.po
new file mode 100644
index 00000000..a0f73c7c
--- /dev/null
+++ b/account_reconcile_payment_order/i18n/fr.po
@@ -0,0 +1,24 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_reconcile_payment_order
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: bank-statement-reconcile (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-04-20 02:39+0000\n"
+"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: French (http://www.transifex.com/oca/OCA-bank-statement-"
+"reconcile-8-0/language/fr/)\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: account_reconcile_payment_order
+#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr "Ligne de relevé bancaire"
diff --git a/account_reconcile_payment_order/i18n/it.po b/account_reconcile_payment_order/i18n/it.po
new file mode 100644
index 00000000..b34c2286
--- /dev/null
+++ b/account_reconcile_payment_order/i18n/it.po
@@ -0,0 +1,24 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_reconcile_payment_order
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: bank-statement-reconcile (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-10-14 09:25+0000\n"
+"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: Italian (http://www.transifex.com/oca/OCA-bank-statement-"
+"reconcile-8-0/language/it/)\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: account_reconcile_payment_order
+#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr "Linea estratto conto"
diff --git a/account_reconcile_payment_order/i18n/nl_NL.po b/account_reconcile_payment_order/i18n/nl_NL.po
new file mode 100644
index 00000000..1485a844
--- /dev/null
+++ b/account_reconcile_payment_order/i18n/nl_NL.po
@@ -0,0 +1,24 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_reconcile_payment_order
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: bank-statement-reconcile (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-06-24 00:30+0000\n"
+"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: Dutch (Netherlands) (http://www.transifex.com/oca/OCA-bank-"
+"statement-reconcile-8-0/language/nl_NL/)\n"
+"Language: nl_NL\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: account_reconcile_payment_order
+#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr "Bankafschriftregel"
diff --git a/account_reconcile_payment_order/i18n/sl.po b/account_reconcile_payment_order/i18n/sl.po
new file mode 100644
index 00000000..86e86e8b
--- /dev/null
+++ b/account_reconcile_payment_order/i18n/sl.po
@@ -0,0 +1,25 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_reconcile_payment_order
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: bank-statement-reconcile (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-08-19 00:32+0000\n"
+"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-bank-statement-"
+"reconcile-8-0/language/sl/)\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
+"%100==4 ? 2 : 3);\n"
+
+#. module: account_reconcile_payment_order
+#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr "Postavka bančnega izpiska"
diff --git a/account_reconcile_payment_order/models/account_bank_statement_line.py b/account_reconcile_payment_order/models/account_bank_statement_line.py
index 759f3aee..ece9f634 100644
--- a/account_reconcile_payment_order/models/account_bank_statement_line.py
+++ b/account_reconcile_payment_order/models/account_bank_statement_line.py
@@ -35,7 +35,7 @@ class AccountBankStatementLine(models.Model):
select order_id, sum(amount_currency) as amount
from payment_line
join payment_order o on o.id=order_id
- where o.state = 'sent'
+ where o.state in ('sent', 'done')
group by order_id)
select order_id from order_sums where amount = %s''',
(Decimal(float_repr(abs(this.amount), digits)),))
@@ -55,9 +55,14 @@ class AccountBankStatementLine(models.Model):
def get_reconcile_lines_from_order(self, this, orders, excluded_ids=None):
"""return lines to reconcile our statement line with"""
order = orders[0]
+ if order.state == 'sent':
+ move_lines_list = list(set(order._get_transfer_move_lines()))
+ else:
+ move_lines = order.line_ids.mapped('move_line_id').filtered(
+ lambda x: not x.reconcile_id)
+ move_lines_list = [x for x in move_lines]
return self.env['account.move.line']\
- .prepare_move_lines_for_reconciliation_widget(
- list(set(order._get_transfer_move_lines())))
+ .prepare_move_lines_for_reconciliation_widget(move_lines_list)
@api.model
def get_reconciliation_proposition(self, this, excluded_ids=None):
From e291cbba31ac23fea81895832ff805acea0bb1aa Mon Sep 17 00:00:00 2001
From: Holger Brunn
Date: Wed, 3 Feb 2016 18:10:38 +0100
Subject: [PATCH 03/20] [FIX] the line's bank account is the other party's
bank account, not ours
---
.../models/account_bank_statement_line.py | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/account_reconcile_payment_order/models/account_bank_statement_line.py b/account_reconcile_payment_order/models/account_bank_statement_line.py
index ece9f634..5bc3cadc 100644
--- a/account_reconcile_payment_order/models/account_bank_statement_line.py
+++ b/account_reconcile_payment_order/models/account_bank_statement_line.py
@@ -40,15 +40,10 @@ class AccountBankStatementLine(models.Model):
select order_id from order_sums where amount = %s''',
(Decimal(float_repr(abs(this.amount), digits)),))
order_ids = [i for i, in self.env.cr.fetchall()]
- # verify that this ids are accessible to the user and from the
- # right bank account if applicable
+ # verify that this ids are accessible to the user
domain = [
('id', 'in', order_ids),
]
- if this.bank_account_id.acc_number:
- domain.append(
- ('mode.bank_id.acc_number', '=',
- this.bank_account_id.acc_number))
return self.env['payment.order'].search(domain)
@api.model
From 3a88446ae35203009b098cf70e2b18263bde8307 Mon Sep 17 00:00:00 2001
From: eLBati
Date: Mon, 10 Oct 2016 18:11:11 +0200
Subject: [PATCH 04/20] FIX move lines preparation for bank statement
reconciliation Without this, in multi currency environment, the amount shown
in reconciliation widget would be incoherent: base currency and foreign
currency would be mixed
---
account_reconcile_payment_order/__openerp__.py | 2 +-
.../models/account_bank_statement_line.py | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/account_reconcile_payment_order/__openerp__.py b/account_reconcile_payment_order/__openerp__.py
index 84e2a80d..a9e3046d 100644
--- a/account_reconcile_payment_order/__openerp__.py
+++ b/account_reconcile_payment_order/__openerp__.py
@@ -19,7 +19,7 @@
##############################################################################
{
"name": "Reconcile payment orders",
- "version": "8.0.1.0.0",
+ "version": "8.0.1.0.1",
"author": "Therp BV,"
"Serv. Tecnol. Avanzados - Pedro M. Baeza,"
"Odoo Community Association (OCA)",
diff --git a/account_reconcile_payment_order/models/account_bank_statement_line.py b/account_reconcile_payment_order/models/account_bank_statement_line.py
index 5bc3cadc..1b2c7271 100644
--- a/account_reconcile_payment_order/models/account_bank_statement_line.py
+++ b/account_reconcile_payment_order/models/account_bank_statement_line.py
@@ -50,6 +50,9 @@ class AccountBankStatementLine(models.Model):
def get_reconcile_lines_from_order(self, this, orders, excluded_ids=None):
"""return lines to reconcile our statement line with"""
order = orders[0]
+ target_currency = (
+ this.currency_id or this.journal_id.currency or
+ this.journal_id.company_id.currency_id)
if order.state == 'sent':
move_lines_list = list(set(order._get_transfer_move_lines()))
else:
@@ -57,7 +60,9 @@ class AccountBankStatementLine(models.Model):
lambda x: not x.reconcile_id)
move_lines_list = [x for x in move_lines]
return self.env['account.move.line']\
- .prepare_move_lines_for_reconciliation_widget(move_lines_list)
+ .prepare_move_lines_for_reconciliation_widget(
+ move_lines_list, target_currency=target_currency,
+ target_date=this.date)
@api.model
def get_reconciliation_proposition(self, this, excluded_ids=None):
From 7dd4408b449939a0e7ba19bc1a056ccfc7244f44 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Thu, 22 Aug 2019 17:00:47 +0200
Subject: [PATCH 05/20] [MIG] account_reconcile_payment_order: Migration to
12.0
* Standard procedure.
* README by fragments.
* Adapt logic to new reconciliation widget model.
* Add tests.
---
account_reconcile_payment_order/README.rst | 108 +++-
account_reconcile_payment_order/__init__.py | 21 +-
.../__manifest__.py | 20 +
.../__openerp__.py | 35 --
.../i18n/account_reconcile_payment_order.pot | 6 +-
account_reconcile_payment_order/i18n/de.po | 9 +-
account_reconcile_payment_order/i18n/fr.po | 9 +-
account_reconcile_payment_order/i18n/it.po | 9 +-
account_reconcile_payment_order/i18n/nl_NL.po | 9 +-
account_reconcile_payment_order/i18n/sl.po | 9 +-
.../models/__init__.py | 23 +-
.../models/account_bank_statement_line.py | 78 ---
.../models/account_reconciliation_widget.py | 67 +++
.../readme/CONFIGURE.rst | 2 +
.../readme/CONTRIBUTORS.rst | 4 +
.../readme/DESCRIPTION.rst | 5 +
.../readme/INSTALL.rst | 2 +
.../readme/ROADMAP.rst | 9 +
.../readme/USAGE.rst | 6 +
.../static/description/index.html | 471 ++++++++++++++++++
.../tests/__init__.py | 3 +
.../test_account_reconcile_payment_order.py | 104 ++++
22 files changed, 812 insertions(+), 197 deletions(-)
create mode 100644 account_reconcile_payment_order/__manifest__.py
delete mode 100644 account_reconcile_payment_order/__openerp__.py
delete mode 100644 account_reconcile_payment_order/models/account_bank_statement_line.py
create mode 100644 account_reconcile_payment_order/models/account_reconciliation_widget.py
create mode 100644 account_reconcile_payment_order/readme/CONFIGURE.rst
create mode 100644 account_reconcile_payment_order/readme/CONTRIBUTORS.rst
create mode 100644 account_reconcile_payment_order/readme/DESCRIPTION.rst
create mode 100644 account_reconcile_payment_order/readme/INSTALL.rst
create mode 100644 account_reconcile_payment_order/readme/ROADMAP.rst
create mode 100644 account_reconcile_payment_order/readme/USAGE.rst
create mode 100644 account_reconcile_payment_order/static/description/index.html
create mode 100644 account_reconcile_payment_order/tests/__init__.py
create mode 100644 account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
diff --git a/account_reconcile_payment_order/README.rst b/account_reconcile_payment_order/README.rst
index d16c8eae..b1c621de 100644
--- a/account_reconcile_payment_order/README.rst
+++ b/account_reconcile_payment_order/README.rst
@@ -1,70 +1,124 @@
-.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
- :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
- :alt: License: AGPL-3
-
========================
Reconcile payment orders
========================
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github
+ :target: https://github.com/OCA/account-reconcile/tree/12.0/account_reconcile_payment_order
+ :alt: OCA/account-reconcile
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/account-reconcile-12-0/account-reconcile-12-0-account_reconcile_payment_order
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/98/12.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
Payment orders that show up as one big transaction can be difficult for the
accounting to handle if a transfer account is used. In this case, we need to
reconcile this transaction with possibly hundreds of move lines, which can be a
bit tiresome. This module tries to recognize transactions deriving from payment
orders and propose the unreconciled move lines from this payment order.
+**Table of contents**
+
+.. contents::
+ :local:
+
Installation
============
-This module requires the module **account_banking_payment_transfer**, available
+This module requires the module **account_payment_order**, available
in https://github.com/OCA/bank-payment.
+Configuration
+=============
+
+#. Go to *Settings > Users & Companies > Users*.
+#. Give to your user the permission "Show Full Accounting Features".
+
Usage
=====
-It should just work. What the module does is to search for a payment order in
-state 'sent' (for orders transferred to an intermediate account) or done (for
-orders non transferred) that has the same amount as the statement line, and the
-same bank account than the statement. If any, all move lines are automatically
-proposed for the reconcile.
-
-.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
- :alt: Try me on Runbot
- :target: https://runbot.odoo-community.org/runbot/98/8.0
+#. Go to *Invoicing > Overview*.
+#. Locate the bank kanban card and import or create a new statement on it.
+#. When reconciling, it should just work. What the module does is to search for
+ a finished payment order that has the same amount as the statement line. If
+ any, generated move lines (bank or AR/AP ones) are automatically proposed
+ for the reconciliation.
Known issues / Roadmap
======================
-* it would be good to check references too, but at least the bank in use here
- changes some characters, so this doesn't seem to be a general solution.
+* It would be good to check references too, but bank usually change some
+ characters, so this doesn't seem to be a general solution.
+* Take into account different currencies (in payment order or in bank
+ statement).
+* Try to match payment orders resulting entries grouped by due date, instead of
+ a whole, but this will affect performance for sure.
+* When the reconcile models end with more inheritable code, implement this
+ as a new type of reconciliation in this model.
+* Develop real UI tests, instead of mimicking the call to the involved method.
Bug Tracker
===========
-Bugs are tracked on `GitHub Issues `_.
+Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed feedback
-`here `_.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
Credits
=======
+Authors
+~~~~~~~
+
+* Therp BV
+* Tecnativa
+
Contributors
-------------
+~~~~~~~~~~~~
-* Holger Brunn
-* Pedro M. Baeza
+* Holger Brunn
+* `Tecnativa `__:
-Maintainer
-----------
+ * Pedro M. Baeza
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
-This module is maintained by the OCA.
-
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-To contribute to this module, please visit http://odoo-community.org.
+.. |maintainer-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px
+ :target: https://github.com/pedrobaeza
+ :alt: pedrobaeza
+
+Current `maintainer `__:
+
+|maintainer-pedrobaeza|
+
+This module is part of the `OCA/account-reconcile `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_reconcile_payment_order/__init__.py b/account_reconcile_payment_order/__init__.py
index cdb7d736..e87e85c4 100644
--- a/account_reconcile_payment_order/__init__.py
+++ b/account_reconcile_payment_order/__init__.py
@@ -1,20 +1,3 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# This module copyright (C) 2015 Therp BV .
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
from . import models
diff --git a/account_reconcile_payment_order/__manifest__.py b/account_reconcile_payment_order/__manifest__.py
new file mode 100644
index 00000000..a423b783
--- /dev/null
+++ b/account_reconcile_payment_order/__manifest__.py
@@ -0,0 +1,20 @@
+# Copyright 2015 Therp BV ().
+# Copyright 2019 Tecnativa - Pedro M. Baeza
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+{
+ "name": "Reconcile payment orders",
+ "version": "12.0.1.0.0",
+ "author": "Therp BV,"
+ "Tecnativa,"
+ "Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "website": "https://github.com/OCA/account-reconcile",
+ "category": "Invoicing Management",
+ "summary": "Automatically propose all lines generated from payment orders",
+ "depends": [
+ 'account_payment_order',
+ ],
+ "installable": True,
+ "maintainers": ['pedrobaeza'],
+}
diff --git a/account_reconcile_payment_order/__openerp__.py b/account_reconcile_payment_order/__openerp__.py
deleted file mode 100644
index a9e3046d..00000000
--- a/account_reconcile_payment_order/__openerp__.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# This module copyright (C) 2015 Therp BV .
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-{
- "name": "Reconcile payment orders",
- "version": "8.0.1.0.1",
- "author": "Therp BV,"
- "Serv. Tecnol. Avanzados - Pedro M. Baeza,"
- "Odoo Community Association (OCA)",
- "license": "AGPL-3",
- "category": "Accounting & Finance",
- "summary": "Automatically reconcile all lines from payment orders",
- "depends": [
- 'account_banking_payment_transfer',
- ],
- "auto_install": False,
- "installable": True,
- "application": False,
-}
diff --git a/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot b/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
index 1eb8ac1c..69c2c350 100644
--- a/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
+++ b/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 8.0\n"
+"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: \n"
#. module: account_reconcile_payment_order
-#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
-msgid "Bank Statement Line"
+#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
+msgid "Account Reconciliation widget"
msgstr ""
diff --git a/account_reconcile_payment_order/i18n/de.po b/account_reconcile_payment_order/i18n/de.po
index 525c694d..9af0851e 100644
--- a/account_reconcile_payment_order/i18n/de.po
+++ b/account_reconcile_payment_order/i18n/de.po
@@ -19,6 +19,9 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_reconcile_payment_order
-#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
-msgid "Bank Statement Line"
-msgstr "Kontoauszugzeile"
+#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
+msgid "Account Reconciliation widget"
+msgstr ""
+
+#~ msgid "Bank Statement Line"
+#~ msgstr "Kontoauszugzeile"
diff --git a/account_reconcile_payment_order/i18n/fr.po b/account_reconcile_payment_order/i18n/fr.po
index a0f73c7c..62d212ae 100644
--- a/account_reconcile_payment_order/i18n/fr.po
+++ b/account_reconcile_payment_order/i18n/fr.po
@@ -19,6 +19,9 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: account_reconcile_payment_order
-#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
-msgid "Bank Statement Line"
-msgstr "Ligne de relevé bancaire"
+#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
+msgid "Account Reconciliation widget"
+msgstr ""
+
+#~ msgid "Bank Statement Line"
+#~ msgstr "Ligne de relevé bancaire"
diff --git a/account_reconcile_payment_order/i18n/it.po b/account_reconcile_payment_order/i18n/it.po
index b34c2286..5706243d 100644
--- a/account_reconcile_payment_order/i18n/it.po
+++ b/account_reconcile_payment_order/i18n/it.po
@@ -19,6 +19,9 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_reconcile_payment_order
-#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
-msgid "Bank Statement Line"
-msgstr "Linea estratto conto"
+#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
+msgid "Account Reconciliation widget"
+msgstr ""
+
+#~ msgid "Bank Statement Line"
+#~ msgstr "Linea estratto conto"
diff --git a/account_reconcile_payment_order/i18n/nl_NL.po b/account_reconcile_payment_order/i18n/nl_NL.po
index 1485a844..ed1f3293 100644
--- a/account_reconcile_payment_order/i18n/nl_NL.po
+++ b/account_reconcile_payment_order/i18n/nl_NL.po
@@ -19,6 +19,9 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_reconcile_payment_order
-#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
-msgid "Bank Statement Line"
-msgstr "Bankafschriftregel"
+#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
+msgid "Account Reconciliation widget"
+msgstr ""
+
+#~ msgid "Bank Statement Line"
+#~ msgstr "Bankafschriftregel"
diff --git a/account_reconcile_payment_order/i18n/sl.po b/account_reconcile_payment_order/i18n/sl.po
index 86e86e8b..cfe2776b 100644
--- a/account_reconcile_payment_order/i18n/sl.po
+++ b/account_reconcile_payment_order/i18n/sl.po
@@ -20,6 +20,9 @@ msgstr ""
"%100==4 ? 2 : 3);\n"
#. module: account_reconcile_payment_order
-#: model:ir.model,name:account_reconcile_payment_order.model_account_bank_statement_line
-msgid "Bank Statement Line"
-msgstr "Postavka bančnega izpiska"
+#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
+msgid "Account Reconciliation widget"
+msgstr ""
+
+#~ msgid "Bank Statement Line"
+#~ msgstr "Postavka bančnega izpiska"
diff --git a/account_reconcile_payment_order/models/__init__.py b/account_reconcile_payment_order/models/__init__.py
index 33afdc17..7cf4dea8 100644
--- a/account_reconcile_payment_order/models/__init__.py
+++ b/account_reconcile_payment_order/models/__init__.py
@@ -1,20 +1,3 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# This module copyright (C) 2015 Therp BV .
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-from . import account_bank_statement_line
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+from . import account_reconciliation_widget
diff --git a/account_reconcile_payment_order/models/account_bank_statement_line.py b/account_reconcile_payment_order/models/account_bank_statement_line.py
deleted file mode 100644
index 1b2c7271..00000000
--- a/account_reconcile_payment_order/models/account_bank_statement_line.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# This module copyright (C) 2015 Therp BV ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-from decimal import Decimal
-from openerp import models, api
-from openerp.tools.float_utils import float_repr
-
-
-class AccountBankStatementLine(models.Model):
- _inherit = 'account.bank.statement.line'
-
- @api.model
- def get_possible_payment_orders_for_statement_line(self, this):
- """find orders that might be candidates for matching a statement
- line"""
- digits = self.env['decimal.precision'].precision_get('Account')
- self.env.cr.execute(
- '''with order_sums as (
- select order_id, sum(amount_currency) as amount
- from payment_line
- join payment_order o on o.id=order_id
- where o.state in ('sent', 'done')
- group by order_id)
- select order_id from order_sums where amount = %s''',
- (Decimal(float_repr(abs(this.amount), digits)),))
- order_ids = [i for i, in self.env.cr.fetchall()]
- # verify that this ids are accessible to the user
- domain = [
- ('id', 'in', order_ids),
- ]
- return self.env['payment.order'].search(domain)
-
- @api.model
- def get_reconcile_lines_from_order(self, this, orders, excluded_ids=None):
- """return lines to reconcile our statement line with"""
- order = orders[0]
- target_currency = (
- this.currency_id or this.journal_id.currency or
- this.journal_id.company_id.currency_id)
- if order.state == 'sent':
- move_lines_list = list(set(order._get_transfer_move_lines()))
- else:
- move_lines = order.line_ids.mapped('move_line_id').filtered(
- lambda x: not x.reconcile_id)
- move_lines_list = [x for x in move_lines]
- return self.env['account.move.line']\
- .prepare_move_lines_for_reconciliation_widget(
- move_lines_list, target_currency=target_currency,
- target_date=this.date)
-
- @api.model
- def get_reconciliation_proposition(self, this, excluded_ids=None):
- """See if we find a set payment order that matches our line. If yes,
- return all unreconciled lines from there"""
- orders = self.get_possible_payment_orders_for_statement_line(this)
- if orders:
- reconcile_lines = self.get_reconcile_lines_from_order(
- this, orders, excluded_ids=None)
- if reconcile_lines:
- return reconcile_lines
- return super(AccountBankStatementLine, self)\
- .get_reconciliation_proposition(this, excluded_ids=excluded_ids)
diff --git a/account_reconcile_payment_order/models/account_reconciliation_widget.py b/account_reconcile_payment_order/models/account_reconciliation_widget.py
new file mode 100644
index 00000000..c3697694
--- /dev/null
+++ b/account_reconcile_payment_order/models/account_reconciliation_widget.py
@@ -0,0 +1,67 @@
+# Copyright 2019 Tecnativa - Pedro M. Baeza
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+from odoo import models, api
+
+
+class AccountReconciliationWidget(models.AbstractModel):
+ _inherit = 'account.reconciliation.widget'
+
+ @api.model
+ def _get_possible_payment_orders_for_statement_line(self, st_line):
+ """Find orders that might be candidates for matching a statement
+ line.
+ """
+ return self.env['account.payment.order'].search([
+ ('total_company_currency', '=', st_line.amount),
+ ('state', 'in', ['done', 'uploaded']),
+ ])
+
+ @api.model
+ def _get_reconcile_lines_from_order(self, st_line, order,
+ excluded_ids=None):
+ """Return lines to reconcile our statement line with."""
+ aml_obj = self.env['account.move.line']
+ reconciled_lines = aml_obj.search([
+ ('bank_payment_line_id', 'in', order.bank_line_ids.ids)
+ ])
+ return (
+ reconciled_lines.mapped('move_id.line_ids') - reconciled_lines -
+ aml_obj.browse(excluded_ids)
+ ).filtered(lambda x: not x.reconciled)
+
+ def _prepare_proposition_from_orders(self, st_line, orders,
+ excluded_ids=None):
+ """Fill with the expected format the reconciliation proposition
+ for the given statement line and possible payment orders.
+ """
+ target_currency = (
+ st_line.currency_id or st_line.journal_id.currency_id or
+ st_line.journal_id.company_id.currency_id
+ )
+ for order in orders:
+ elegible_lines = self._get_reconcile_lines_from_order(
+ st_line, order, excluded_ids=excluded_ids,
+ )
+ if elegible_lines:
+ return self._prepare_move_lines(
+ elegible_lines, target_currency=target_currency,
+ target_date=st_line.date,
+ )
+ return []
+
+ def get_bank_statement_line_data(self, st_line_ids, excluded_ids=None):
+ res = super().get_bank_statement_line_data(
+ st_line_ids, excluded_ids=excluded_ids,
+ )
+ st_line_obj = self.env['account.bank.statement.line']
+ for line_vals in res.get('lines', []):
+ st_line = st_line_obj.browse(line_vals['st_line']['id'])
+ orders = self._get_possible_payment_orders_for_statement_line(
+ st_line)
+ proposition_vals = self._prepare_proposition_from_orders(
+ st_line, orders, excluded_ids=excluded_ids,
+ )
+ if proposition_vals:
+ line_vals['reconciliation_proposition'] = proposition_vals
+ return res
diff --git a/account_reconcile_payment_order/readme/CONFIGURE.rst b/account_reconcile_payment_order/readme/CONFIGURE.rst
new file mode 100644
index 00000000..1f9dff4f
--- /dev/null
+++ b/account_reconcile_payment_order/readme/CONFIGURE.rst
@@ -0,0 +1,2 @@
+#. Go to *Settings > Users & Companies > Users*.
+#. Give to your user the permission "Show Full Accounting Features".
diff --git a/account_reconcile_payment_order/readme/CONTRIBUTORS.rst b/account_reconcile_payment_order/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000..dfa767e3
--- /dev/null
+++ b/account_reconcile_payment_order/readme/CONTRIBUTORS.rst
@@ -0,0 +1,4 @@
+* Holger Brunn
+* `Tecnativa `__:
+
+ * Pedro M. Baeza
diff --git a/account_reconcile_payment_order/readme/DESCRIPTION.rst b/account_reconcile_payment_order/readme/DESCRIPTION.rst
new file mode 100644
index 00000000..03833623
--- /dev/null
+++ b/account_reconcile_payment_order/readme/DESCRIPTION.rst
@@ -0,0 +1,5 @@
+Payment orders that show up as one big transaction can be difficult for the
+accounting to handle if a transfer account is used. In this case, we need to
+reconcile this transaction with possibly hundreds of move lines, which can be a
+bit tiresome. This module tries to recognize transactions deriving from payment
+orders and propose the unreconciled move lines from this payment order.
diff --git a/account_reconcile_payment_order/readme/INSTALL.rst b/account_reconcile_payment_order/readme/INSTALL.rst
new file mode 100644
index 00000000..41a9bc34
--- /dev/null
+++ b/account_reconcile_payment_order/readme/INSTALL.rst
@@ -0,0 +1,2 @@
+This module requires the module **account_payment_order**, available
+in https://github.com/OCA/bank-payment.
diff --git a/account_reconcile_payment_order/readme/ROADMAP.rst b/account_reconcile_payment_order/readme/ROADMAP.rst
new file mode 100644
index 00000000..074f3d7a
--- /dev/null
+++ b/account_reconcile_payment_order/readme/ROADMAP.rst
@@ -0,0 +1,9 @@
+* It would be good to check references too, but bank usually change some
+ characters, so this doesn't seem to be a general solution.
+* Take into account different currencies (in payment order or in bank
+ statement).
+* Try to match payment orders resulting entries grouped by due date, instead of
+ a whole, but this will affect performance for sure.
+* When the reconcile models end with more inheritable code, implement this
+ as a new type of reconciliation in this model.
+* Develop real UI tests, instead of mimicking the call to the involved method.
diff --git a/account_reconcile_payment_order/readme/USAGE.rst b/account_reconcile_payment_order/readme/USAGE.rst
new file mode 100644
index 00000000..67a1eb95
--- /dev/null
+++ b/account_reconcile_payment_order/readme/USAGE.rst
@@ -0,0 +1,6 @@
+#. Go to *Invoicing > Overview*.
+#. Locate the bank kanban card and import or create a new statement on it.
+#. When reconciling, it should just work. What the module does is to search for
+ a finished payment order that has the same amount as the statement line. If
+ any, generated move lines (bank or AR/AP ones) are automatically proposed
+ for the reconciliation.
diff --git a/account_reconcile_payment_order/static/description/index.html b/account_reconcile_payment_order/static/description/index.html
new file mode 100644
index 00000000..7f514072
--- /dev/null
+++ b/account_reconcile_payment_order/static/description/index.html
@@ -0,0 +1,471 @@
+
+
+
+
+
+
+Reconcile payment orders
+
+
+
+
+
Reconcile payment orders
+
+
+

+
Payment orders that show up as one big transaction can be difficult for the
+accounting to handle if a transfer account is used. In this case, we need to
+reconcile this transaction with possibly hundreds of move lines, which can be a
+bit tiresome. This module tries to recognize transactions deriving from payment
+orders and propose the unreconciled move lines from this payment order.
+
Table of contents
+
+
+
+
+
+- Go to Settings > Users & Companies > Users.
+- Give to your user the permission “Show Full Accounting Features”.
+
+
+
+
+
+- Go to Invoicing > Overview.
+- Locate the bank kanban card and import or create a new statement on it.
+- When reconciling, it should just work. What the module does is to search for
+a finished payment order that has the same amount as the statement line. If
+any, generated move lines (bank or AR/AP ones) are automatically proposed
+for the reconciliation.
+
+
+
+
+
+- It would be good to check references too, but bank usually change some
+characters, so this doesn’t seem to be a general solution.
+- Take into account different currencies (in payment order or in bank
+statement).
+- Try to match payment orders resulting entries grouped by due date, instead of
+a whole, but this will affect performance for sure.
+- When the reconcile models end with more inheritable code, implement this
+as a new type of reconciliation in this model.
+- Develop real UI tests, instead of mimicking the call to the involved method.
+
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+

+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
Current maintainer:
+

+
This module is part of the OCA/account-reconcile project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/account_reconcile_payment_order/tests/__init__.py b/account_reconcile_payment_order/tests/__init__.py
new file mode 100644
index 00000000..90ea9363
--- /dev/null
+++ b/account_reconcile_payment_order/tests/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+from . import test_account_reconcile_payment_order
diff --git a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
new file mode 100644
index 00000000..87591585
--- /dev/null
+++ b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
@@ -0,0 +1,104 @@
+# Copyright 2019 Tecnativa - Pedro M. Baeza
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+from odoo.addons.account_payment_order.tests.test_payment_order_inbound \
+ import TestPaymentOrderInboundBase
+
+
+class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.widget_obj = cls.env['account.reconciliation.widget']
+ cls.bank_journal = cls.env['account.journal'].search(
+ [('type', '=', 'bank')], limit=1)
+ # Create second invoice for being sure it handles the payment order
+ cls.invoice2 = cls._create_customer_invoice(cls)
+ cls.partner2 = cls.env['res.partner'].create({
+ 'name': 'Test partner 2',
+ })
+ cls.invoice2.partner_id = cls.partner2.id
+ cls.invoice2.action_invoice_open()
+ # Add to payment order using the wizard
+ cls.env['account.invoice.payment.line.multi'].with_context(
+ active_model='account.invoice',
+ active_ids=cls.invoice2.ids,
+ ).create({}).run()
+ # Prepare statement
+ cls.statement = cls.env['account.bank.statement'].create({
+ 'name': 'Test statement',
+ 'date': '2019-01-01',
+ 'journal_id': cls.bank_journal.id,
+ 'line_ids': [
+ (0, 0, {
+ 'date': '2019-01-01',
+ 'name': 'Test line',
+ 'amount': 200,
+ }),
+ ],
+ })
+
+ def test_reconcile_payment_order_bank(self):
+ self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
+ self.inbound_mode.write({
+ 'offsetting_account': 'bank_account',
+ 'move_option': 'line',
+ })
+ # Prepare payment order
+ self.inbound_order.draft2open()
+ self.inbound_order.open2generated()
+ self.inbound_order.generated2uploaded()
+ # Check widget result
+ res = self.widget_obj.get_bank_statement_line_data(
+ self.statement.line_ids.ids,
+ )
+ self.assertEqual(len(res['lines'][0]['reconciliation_proposition']), 2)
+
+ def test_reconcile_payment_order_transfer_account(self):
+ self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
+ receivable_account = self.env['account.account'].create({
+ 'name': 'Extra receivable account',
+ 'code': 'TEST_ERA',
+ 'reconcile': True,
+ 'user_type_id': (
+ self.env.ref('account.data_account_type_receivable').id),
+ })
+ self.inbound_mode.write({
+ 'offsetting_account': 'transfer_account',
+ 'transfer_account_id': receivable_account.id,
+ 'transfer_journal_id': self.bank_journal.id,
+ 'move_option': 'line',
+ })
+ self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
+ # Prepare payment order
+ self.inbound_order.draft2open()
+ self.inbound_order.open2generated()
+ self.inbound_order.generated2uploaded()
+ # Check widget result
+ res = self.widget_obj.get_bank_statement_line_data(
+ self.statement.line_ids.ids,
+ )
+ proposition = res['lines'][0]['reconciliation_proposition']
+ self.assertEqual(len(proposition), 2)
+ # Reconcile that entries and check again
+ st_line_vals = res['lines'][0]['st_line']
+ self.widget_obj.process_move_lines(
+ data=[{
+ 'type': '',
+ 'mv_line_ids': [
+ proposition[0]['id'],
+ proposition[1]['id'],
+ ],
+ 'new_mv_line_dicts': [{
+ 'name': st_line_vals['name'],
+ 'credit': st_line_vals['amount'],
+ 'debit': 0,
+ 'account_id': st_line_vals['account_id'][0],
+ 'journal_id': st_line_vals['journal_id'],
+ }],
+ }],
+ )
+ res2 = self.widget_obj.get_bank_statement_line_data(
+ self.statement.line_ids.ids,
+ )
+ self.assertNotEqual(res, res2)
From c99dca22ca75d50b640ffc04b1dbe56b6fb8b40e Mon Sep 17 00:00:00 2001
From: Bole
Date: Thu, 5 Mar 2020 14:45:35 +0000
Subject: [PATCH 06/20] Added translation using Weblate (Croatian)
---
account_reconcile_payment_order/i18n/hr.po | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 account_reconcile_payment_order/i18n/hr.po
diff --git a/account_reconcile_payment_order/i18n/hr.po b/account_reconcile_payment_order/i18n/hr.po
new file mode 100644
index 00000000..33910409
--- /dev/null
+++ b/account_reconcile_payment_order/i18n/hr.po
@@ -0,0 +1,21 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_reconcile_payment_order
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
+"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#. module: account_reconcile_payment_order
+#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
+msgid "Account Reconciliation widget"
+msgstr ""
From 4bf7a9962c7c323d09c5f14cd978830636f10353 Mon Sep 17 00:00:00 2001
From: Bole
Date: Thu, 5 Mar 2020 14:45:51 +0000
Subject: [PATCH 07/20] Translated using Weblate (Croatian)
Currently translated at 100.0% (1 of 1 strings)
Translation: account-reconcile-12.0/account-reconcile-12.0-account_reconcile_payment_order
Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-12-0/account-reconcile-12-0-account_reconcile_payment_order/hr/
---
account_reconcile_payment_order/i18n/hr.po | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/account_reconcile_payment_order/i18n/hr.po b/account_reconcile_payment_order/i18n/hr.po
index 33910409..80df72c1 100644
--- a/account_reconcile_payment_order/i18n/hr.po
+++ b/account_reconcile_payment_order/i18n/hr.po
@@ -6,7 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2020-03-05 17:13+0000\n"
+"Last-Translator: Bole \n"
"Language-Team: none\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
@@ -14,8 +15,9 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 3.10\n"
#. module: account_reconcile_payment_order
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
-msgstr ""
+msgstr "Widget zatvaranja"
From 0d471e18e280d4582c1c1d39c3668063894c007c Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Thu, 23 Apr 2020 18:44:45 +0200
Subject: [PATCH 08/20] [FIX] account_reconcile_payment_order: Adapt tests to
upstream changes
Due to OCA/bank-payment@7ffe049ad3095f61835e30fb369c975c24341413
---
.../tests/test_account_reconcile_payment_order.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
index 87591585..220190ff 100644
--- a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
+++ b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
@@ -11,9 +11,11 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
super().setUpClass()
cls.widget_obj = cls.env['account.reconciliation.widget']
cls.bank_journal = cls.env['account.journal'].search(
- [('type', '=', 'bank')], limit=1)
+ [('type', '=', 'bank'),
+ '|', ('company_id', '=', cls.env.user.company_id.id),
+ ('company_id', '=', False)], limit=1)
# Create second invoice for being sure it handles the payment order
- cls.invoice2 = cls._create_customer_invoice(cls)
+ cls.invoice2 = cls._create_customer_invoice()
cls.partner2 = cls.env['res.partner'].create({
'name': 'Test partner 2',
})
From eb8a453c499e670ca3f6fc02b07f0eb289f432f5 Mon Sep 17 00:00:00 2001
From: Abraham Anes
Date: Wed, 11 Nov 2020 16:17:46 +0100
Subject: [PATCH 09/20] [IMP] account_reconcile_payment_order: black, isort,
prettier
---
.../__manifest__.py | 10 +-
.../models/account_reconciliation_widget.py | 52 +++----
.../test_account_reconcile_payment_order.py | 132 +++++++++---------
3 files changed, 97 insertions(+), 97 deletions(-)
diff --git a/account_reconcile_payment_order/__manifest__.py b/account_reconcile_payment_order/__manifest__.py
index a423b783..b7f539a8 100644
--- a/account_reconcile_payment_order/__manifest__.py
+++ b/account_reconcile_payment_order/__manifest__.py
@@ -5,16 +5,12 @@
{
"name": "Reconcile payment orders",
"version": "12.0.1.0.0",
- "author": "Therp BV,"
- "Tecnativa,"
- "Odoo Community Association (OCA)",
+ "author": "Therp BV," "Tecnativa," "Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/account-reconcile",
"category": "Invoicing Management",
"summary": "Automatically propose all lines generated from payment orders",
- "depends": [
- 'account_payment_order',
- ],
+ "depends": ["account_payment_order",],
"installable": True,
- "maintainers": ['pedrobaeza'],
+ "maintainers": ["pedrobaeza"],
}
diff --git a/account_reconcile_payment_order/models/account_reconciliation_widget.py b/account_reconcile_payment_order/models/account_reconciliation_widget.py
index c3697694..87ffb0cd 100644
--- a/account_reconcile_payment_order/models/account_reconciliation_widget.py
+++ b/account_reconcile_payment_order/models/account_reconciliation_widget.py
@@ -1,43 +1,45 @@
# Copyright 2019 Tecnativa - Pedro M. Baeza
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
-from odoo import models, api
+from odoo import api, models
class AccountReconciliationWidget(models.AbstractModel):
- _inherit = 'account.reconciliation.widget'
+ _inherit = "account.reconciliation.widget"
@api.model
def _get_possible_payment_orders_for_statement_line(self, st_line):
"""Find orders that might be candidates for matching a statement
line.
"""
- return self.env['account.payment.order'].search([
- ('total_company_currency', '=', st_line.amount),
- ('state', 'in', ['done', 'uploaded']),
- ])
+ return self.env["account.payment.order"].search(
+ [
+ ("total_company_currency", "=", st_line.amount),
+ ("state", "in", ["done", "uploaded"]),
+ ]
+ )
@api.model
- def _get_reconcile_lines_from_order(self, st_line, order,
- excluded_ids=None):
+ def _get_reconcile_lines_from_order(self, st_line, order, excluded_ids=None):
"""Return lines to reconcile our statement line with."""
- aml_obj = self.env['account.move.line']
- reconciled_lines = aml_obj.search([
- ('bank_payment_line_id', 'in', order.bank_line_ids.ids)
- ])
+ aml_obj = self.env["account.move.line"]
+ reconciled_lines = aml_obj.search(
+ [("bank_payment_line_id", "in", order.bank_line_ids.ids)]
+ )
return (
- reconciled_lines.mapped('move_id.line_ids') - reconciled_lines -
- aml_obj.browse(excluded_ids)
+ reconciled_lines.mapped("move_id.line_ids")
+ - reconciled_lines
+ - aml_obj.browse(excluded_ids)
).filtered(lambda x: not x.reconciled)
- def _prepare_proposition_from_orders(self, st_line, orders,
- excluded_ids=None):
+ def _prepare_proposition_from_orders(self, st_line, orders, excluded_ids=None):
"""Fill with the expected format the reconciliation proposition
for the given statement line and possible payment orders.
"""
target_currency = (
- st_line.currency_id or st_line.journal_id.currency_id or
- st_line.journal_id.company_id.currency_id
+ st_line.currency_id
+ or st_line.journal_id.currency_id
+ or st_line.journal_id.company_id.currency_id
)
for order in orders:
elegible_lines = self._get_reconcile_lines_from_order(
@@ -45,7 +47,8 @@ class AccountReconciliationWidget(models.AbstractModel):
)
if elegible_lines:
return self._prepare_move_lines(
- elegible_lines, target_currency=target_currency,
+ elegible_lines,
+ target_currency=target_currency,
target_date=st_line.date,
)
return []
@@ -54,14 +57,13 @@ class AccountReconciliationWidget(models.AbstractModel):
res = super().get_bank_statement_line_data(
st_line_ids, excluded_ids=excluded_ids,
)
- st_line_obj = self.env['account.bank.statement.line']
- for line_vals in res.get('lines', []):
- st_line = st_line_obj.browse(line_vals['st_line']['id'])
- orders = self._get_possible_payment_orders_for_statement_line(
- st_line)
+ st_line_obj = self.env["account.bank.statement.line"]
+ for line_vals in res.get("lines", []):
+ st_line = st_line_obj.browse(line_vals["st_line"]["id"])
+ orders = self._get_possible_payment_orders_for_statement_line(st_line)
proposition_vals = self._prepare_proposition_from_orders(
st_line, orders, excluded_ids=excluded_ids,
)
if proposition_vals:
- line_vals['reconciliation_proposition'] = proposition_vals
+ line_vals["reconciliation_proposition"] = proposition_vals
return res
diff --git a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
index 220190ff..6bf9a30b 100644
--- a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
+++ b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
@@ -1,104 +1,106 @@
# Copyright 2019 Tecnativa - Pedro M. Baeza
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
-from odoo.addons.account_payment_order.tests.test_payment_order_inbound \
- import TestPaymentOrderInboundBase
+from odoo.addons.account_payment_order.tests.test_payment_order_inbound import (
+ TestPaymentOrderInboundBase,
+)
class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
@classmethod
def setUpClass(cls):
super().setUpClass()
- cls.widget_obj = cls.env['account.reconciliation.widget']
- cls.bank_journal = cls.env['account.journal'].search(
- [('type', '=', 'bank'),
- '|', ('company_id', '=', cls.env.user.company_id.id),
- ('company_id', '=', False)], limit=1)
+ cls.widget_obj = cls.env["account.reconciliation.widget"]
+ cls.bank_journal = cls.env["account.journal"].search(
+ [
+ ("type", "=", "bank"),
+ "|",
+ ("company_id", "=", cls.env.user.company_id.id),
+ ("company_id", "=", False),
+ ],
+ limit=1,
+ )
# Create second invoice for being sure it handles the payment order
cls.invoice2 = cls._create_customer_invoice()
- cls.partner2 = cls.env['res.partner'].create({
- 'name': 'Test partner 2',
- })
+ cls.partner2 = cls.env["res.partner"].create({"name": "Test partner 2",})
cls.invoice2.partner_id = cls.partner2.id
cls.invoice2.action_invoice_open()
# Add to payment order using the wizard
- cls.env['account.invoice.payment.line.multi'].with_context(
- active_model='account.invoice',
- active_ids=cls.invoice2.ids,
+ cls.env["account.invoice.payment.line.multi"].with_context(
+ active_model="account.invoice", active_ids=cls.invoice2.ids,
).create({}).run()
# Prepare statement
- cls.statement = cls.env['account.bank.statement'].create({
- 'name': 'Test statement',
- 'date': '2019-01-01',
- 'journal_id': cls.bank_journal.id,
- 'line_ids': [
- (0, 0, {
- 'date': '2019-01-01',
- 'name': 'Test line',
- 'amount': 200,
- }),
- ],
- })
+ cls.statement = cls.env["account.bank.statement"].create(
+ {
+ "name": "Test statement",
+ "date": "2019-01-01",
+ "journal_id": cls.bank_journal.id,
+ "line_ids": [
+ (0, 0, {"date": "2019-01-01", "name": "Test line", "amount": 200,}),
+ ],
+ }
+ )
def test_reconcile_payment_order_bank(self):
self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
- self.inbound_mode.write({
- 'offsetting_account': 'bank_account',
- 'move_option': 'line',
- })
+ self.inbound_mode.write(
+ {"offsetting_account": "bank_account", "move_option": "line",}
+ )
# Prepare payment order
self.inbound_order.draft2open()
self.inbound_order.open2generated()
self.inbound_order.generated2uploaded()
# Check widget result
- res = self.widget_obj.get_bank_statement_line_data(
- self.statement.line_ids.ids,
- )
- self.assertEqual(len(res['lines'][0]['reconciliation_proposition']), 2)
+ res = self.widget_obj.get_bank_statement_line_data(self.statement.line_ids.ids,)
+ self.assertEqual(len(res["lines"][0]["reconciliation_proposition"]), 2)
def test_reconcile_payment_order_transfer_account(self):
self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
- receivable_account = self.env['account.account'].create({
- 'name': 'Extra receivable account',
- 'code': 'TEST_ERA',
- 'reconcile': True,
- 'user_type_id': (
- self.env.ref('account.data_account_type_receivable').id),
- })
- self.inbound_mode.write({
- 'offsetting_account': 'transfer_account',
- 'transfer_account_id': receivable_account.id,
- 'transfer_journal_id': self.bank_journal.id,
- 'move_option': 'line',
- })
+ receivable_account = self.env["account.account"].create(
+ {
+ "name": "Extra receivable account",
+ "code": "TEST_ERA",
+ "reconcile": True,
+ "user_type_id": (
+ self.env.ref("account.data_account_type_receivable").id
+ ),
+ }
+ )
+ self.inbound_mode.write(
+ {
+ "offsetting_account": "transfer_account",
+ "transfer_account_id": receivable_account.id,
+ "transfer_journal_id": self.bank_journal.id,
+ "move_option": "line",
+ }
+ )
self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
# Prepare payment order
self.inbound_order.draft2open()
self.inbound_order.open2generated()
self.inbound_order.generated2uploaded()
# Check widget result
- res = self.widget_obj.get_bank_statement_line_data(
- self.statement.line_ids.ids,
- )
- proposition = res['lines'][0]['reconciliation_proposition']
+ res = self.widget_obj.get_bank_statement_line_data(self.statement.line_ids.ids,)
+ proposition = res["lines"][0]["reconciliation_proposition"]
self.assertEqual(len(proposition), 2)
# Reconcile that entries and check again
- st_line_vals = res['lines'][0]['st_line']
+ st_line_vals = res["lines"][0]["st_line"]
self.widget_obj.process_move_lines(
- data=[{
- 'type': '',
- 'mv_line_ids': [
- proposition[0]['id'],
- proposition[1]['id'],
- ],
- 'new_mv_line_dicts': [{
- 'name': st_line_vals['name'],
- 'credit': st_line_vals['amount'],
- 'debit': 0,
- 'account_id': st_line_vals['account_id'][0],
- 'journal_id': st_line_vals['journal_id'],
- }],
- }],
+ data=[
+ {
+ "type": "",
+ "mv_line_ids": [proposition[0]["id"], proposition[1]["id"],],
+ "new_mv_line_dicts": [
+ {
+ "name": st_line_vals["name"],
+ "credit": st_line_vals["amount"],
+ "debit": 0,
+ "account_id": st_line_vals["account_id"][0],
+ "journal_id": st_line_vals["journal_id"],
+ }
+ ],
+ }
+ ],
)
res2 = self.widget_obj.get_bank_statement_line_data(
self.statement.line_ids.ids,
From 203c2c6c424cd89197802da1770039963d03a09d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Marques?=
Date: Tue, 16 Feb 2021 07:26:08 +0000
Subject: [PATCH 10/20] [MIG] account_reconcile_payment_order: Migration to
13.0
Co-Authored-By: Abraham Anes
---
account_reconcile_payment_order/README.rst | 11 +++++----
.../__manifest__.py | 4 ++--
.../i18n/account_reconcile_payment_order.pot | 7 +++---
account_reconcile_payment_order/i18n/de.po | 8 +++----
account_reconcile_payment_order/i18n/fr.po | 8 +++----
account_reconcile_payment_order/i18n/hr.po | 6 ++---
account_reconcile_payment_order/i18n/it.po | 8 +++----
account_reconcile_payment_order/i18n/nl_NL.po | 8 +++----
account_reconcile_payment_order/i18n/sl.po | 8 +++----
.../readme/CONTRIBUTORS.rst | 1 +
.../static/description/index.html | 7 +++---
.../test_account_reconcile_payment_order.py | 23 +++++++++++--------
12 files changed, 48 insertions(+), 51 deletions(-)
diff --git a/account_reconcile_payment_order/README.rst b/account_reconcile_payment_order/README.rst
index b1c621de..efedfe50 100644
--- a/account_reconcile_payment_order/README.rst
+++ b/account_reconcile_payment_order/README.rst
@@ -14,13 +14,13 @@ Reconcile payment orders
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github
- :target: https://github.com/OCA/account-reconcile/tree/12.0/account_reconcile_payment_order
+ :target: https://github.com/OCA/account-reconcile/tree/13.0/account_reconcile_payment_order
:alt: OCA/account-reconcile
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/account-reconcile-12-0/account-reconcile-12-0-account_reconcile_payment_order
+ :target: https://translation.odoo-community.org/projects/account-reconcile-13-0/account-reconcile-13-0-account_reconcile_payment_order
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/98/12.0
+ :target: https://runbot.odoo-community.org/runbot/98/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -77,7 +77,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -97,6 +97,7 @@ Contributors
* `Tecnativa `__:
* Pedro M. Baeza
+ * João Marques
Maintainers
~~~~~~~~~~~
@@ -119,6 +120,6 @@ Current `maintainer `__:
|maintainer-pedrobaeza|
-This module is part of the `OCA/account-reconcile `_ project on GitHub.
+This module is part of the `OCA/account-reconcile `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_reconcile_payment_order/__manifest__.py b/account_reconcile_payment_order/__manifest__.py
index b7f539a8..5ac2d647 100644
--- a/account_reconcile_payment_order/__manifest__.py
+++ b/account_reconcile_payment_order/__manifest__.py
@@ -4,13 +4,13 @@
{
"name": "Reconcile payment orders",
- "version": "12.0.1.0.0",
+ "version": "13.0.1.0.0",
"author": "Therp BV," "Tecnativa," "Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/account-reconcile",
"category": "Invoicing Management",
"summary": "Automatically propose all lines generated from payment orders",
- "depends": ["account_payment_order",],
+ "depends": ["account_payment_order"],
"installable": True,
"maintainers": ["pedrobaeza"],
}
diff --git a/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot b/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
index 69c2c350..7ed0bfaa 100644
--- a/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
+++ b/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
@@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * account_reconcile_payment_order
+# * account_reconcile_payment_order
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,4 +17,3 @@ msgstr ""
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
-
diff --git a/account_reconcile_payment_order/i18n/de.po b/account_reconcile_payment_order/i18n/de.po
index 9af0851e..5af52a94 100644
--- a/account_reconcile_payment_order/i18n/de.po
+++ b/account_reconcile_payment_order/i18n/de.po
@@ -8,20 +8,18 @@ msgstr ""
"Project-Id-Version: bank-statement-reconcile (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-14 09:25+0000\n"
-"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"PO-Revision-Date: 2021-02-16 07:24+0000\n"
"Last-Translator: <>\n"
"Language-Team: German (http://www.transifex.com/oca/OCA-bank-statement-"
"reconcile-8-0/language/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.2\n"
#. module: account_reconcile_payment_order
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
-
-#~ msgid "Bank Statement Line"
-#~ msgstr "Kontoauszugzeile"
diff --git a/account_reconcile_payment_order/i18n/fr.po b/account_reconcile_payment_order/i18n/fr.po
index 62d212ae..02f642b1 100644
--- a/account_reconcile_payment_order/i18n/fr.po
+++ b/account_reconcile_payment_order/i18n/fr.po
@@ -8,20 +8,18 @@ msgstr ""
"Project-Id-Version: bank-statement-reconcile (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-04-20 02:39+0000\n"
-"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"PO-Revision-Date: 2021-02-16 07:24+0000\n"
"Last-Translator: <>\n"
"Language-Team: French (http://www.transifex.com/oca/OCA-bank-statement-"
"reconcile-8-0/language/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 2.4.2\n"
#. module: account_reconcile_payment_order
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
-
-#~ msgid "Bank Statement Line"
-#~ msgstr "Ligne de relevé bancaire"
diff --git a/account_reconcile_payment_order/i18n/hr.po b/account_reconcile_payment_order/i18n/hr.po
index 80df72c1..6ffea32f 100644
--- a/account_reconcile_payment_order/i18n/hr.po
+++ b/account_reconcile_payment_order/i18n/hr.po
@@ -1,6 +1,6 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * account_reconcile_payment_order
+# * account_reconcile_payment_order
#
msgid ""
msgstr ""
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
-"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.10\n"
#. module: account_reconcile_payment_order
diff --git a/account_reconcile_payment_order/i18n/it.po b/account_reconcile_payment_order/i18n/it.po
index 5706243d..4fd73011 100644
--- a/account_reconcile_payment_order/i18n/it.po
+++ b/account_reconcile_payment_order/i18n/it.po
@@ -8,20 +8,18 @@ msgstr ""
"Project-Id-Version: bank-statement-reconcile (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-14 09:25+0000\n"
-"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"PO-Revision-Date: 2021-02-16 07:24+0000\n"
"Last-Translator: <>\n"
"Language-Team: Italian (http://www.transifex.com/oca/OCA-bank-statement-"
"reconcile-8-0/language/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.2\n"
#. module: account_reconcile_payment_order
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
-
-#~ msgid "Bank Statement Line"
-#~ msgstr "Linea estratto conto"
diff --git a/account_reconcile_payment_order/i18n/nl_NL.po b/account_reconcile_payment_order/i18n/nl_NL.po
index ed1f3293..c58d0437 100644
--- a/account_reconcile_payment_order/i18n/nl_NL.po
+++ b/account_reconcile_payment_order/i18n/nl_NL.po
@@ -8,20 +8,18 @@ msgstr ""
"Project-Id-Version: bank-statement-reconcile (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-24 00:30+0000\n"
-"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"PO-Revision-Date: 2021-02-16 07:25+0000\n"
"Last-Translator: <>\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/oca/OCA-bank-"
"statement-reconcile-8-0/language/nl_NL/)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.2\n"
#. module: account_reconcile_payment_order
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
-
-#~ msgid "Bank Statement Line"
-#~ msgstr "Bankafschriftregel"
diff --git a/account_reconcile_payment_order/i18n/sl.po b/account_reconcile_payment_order/i18n/sl.po
index cfe2776b..3cef9c7e 100644
--- a/account_reconcile_payment_order/i18n/sl.po
+++ b/account_reconcile_payment_order/i18n/sl.po
@@ -8,21 +8,19 @@ msgstr ""
"Project-Id-Version: bank-statement-reconcile (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-19 00:32+0000\n"
-"PO-Revision-Date: 2015-08-19 00:32+0000\n"
+"PO-Revision-Date: 2021-02-16 07:25+0000\n"
"Last-Translator: <>\n"
"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-bank-statement-"
"reconcile-8-0/language/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
+"X-Generator: Poedit 2.4.2\n"
#. module: account_reconcile_payment_order
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
-
-#~ msgid "Bank Statement Line"
-#~ msgstr "Postavka bančnega izpiska"
diff --git a/account_reconcile_payment_order/readme/CONTRIBUTORS.rst b/account_reconcile_payment_order/readme/CONTRIBUTORS.rst
index dfa767e3..dab82860 100644
--- a/account_reconcile_payment_order/readme/CONTRIBUTORS.rst
+++ b/account_reconcile_payment_order/readme/CONTRIBUTORS.rst
@@ -2,3 +2,4 @@
* `Tecnativa `__:
* Pedro M. Baeza
+ * João Marques
diff --git a/account_reconcile_payment_order/static/description/index.html b/account_reconcile_payment_order/static/description/index.html
index 7f514072..4bb87d52 100644
--- a/account_reconcile_payment_order/static/description/index.html
+++ b/account_reconcile_payment_order/static/description/index.html
@@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

Payment orders that show up as one big transaction can be difficult for the
accounting to handle if a transfer account is used. In this case, we need to
reconcile this transaction with possibly hundreds of move lines, which can be a
@@ -431,7 +431,7 @@ as a new type of reconciliation in this model.
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -449,6 +449,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
Holger Brunn
Tecnativa:
- Pedro M. Baeza
+- João Marques
@@ -462,7 +463,7 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.
Current maintainer:

-
This module is part of the OCA/account-reconcile project on GitHub.
+
This module is part of the OCA/account-reconcile project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
index 6bf9a30b..a4a8e4bc 100644
--- a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
+++ b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
@@ -1,4 +1,5 @@
# Copyright 2019 Tecnativa - Pedro M. Baeza
+# Copyright 2021 Tecnativa - João Marques
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from odoo.addons.account_payment_order.tests.test_payment_order_inbound import (
@@ -15,19 +16,23 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
[
("type", "=", "bank"),
"|",
- ("company_id", "=", cls.env.user.company_id.id),
+ ("company_id", "=", cls.env.company.id),
("company_id", "=", False),
],
limit=1,
)
# Create second invoice for being sure it handles the payment order
- cls.invoice2 = cls._create_customer_invoice()
- cls.partner2 = cls.env["res.partner"].create({"name": "Test partner 2",})
+ cls.invoice2 = cls._create_customer_invoice(cls)
+ cls.partner2 = cls.env["res.partner"].create({"name": "Test partner 2"})
+ # Set correct partner in invoice
cls.invoice2.partner_id = cls.partner2.id
- cls.invoice2.action_invoice_open()
+ for line in cls.invoice2.line_ids:
+ line.partner_id = cls.partner2.id
+ cls.invoice2.payment_mode_id = cls.inbound_mode
+ cls.invoice2.action_post()
# Add to payment order using the wizard
cls.env["account.invoice.payment.line.multi"].with_context(
- active_model="account.invoice", active_ids=cls.invoice2.ids,
+ active_model="account.move", active_ids=cls.invoice2.ids,
).create({}).run()
# Prepare statement
cls.statement = cls.env["account.bank.statement"].create(
@@ -36,7 +41,7 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
"date": "2019-01-01",
"journal_id": cls.bank_journal.id,
"line_ids": [
- (0, 0, {"date": "2019-01-01", "name": "Test line", "amount": 200,}),
+ (0, 0, {"date": "2019-01-01", "name": "Test line", "amount": 230}),
],
}
)
@@ -44,7 +49,7 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
def test_reconcile_payment_order_bank(self):
self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
self.inbound_mode.write(
- {"offsetting_account": "bank_account", "move_option": "line",}
+ {"offsetting_account": "bank_account", "move_option": "line"}
)
# Prepare payment order
self.inbound_order.draft2open()
@@ -80,7 +85,7 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
self.inbound_order.open2generated()
self.inbound_order.generated2uploaded()
# Check widget result
- res = self.widget_obj.get_bank_statement_line_data(self.statement.line_ids.ids,)
+ res = self.widget_obj.get_bank_statement_line_data(self.statement.line_ids.ids)
proposition = res["lines"][0]["reconciliation_proposition"]
self.assertEqual(len(proposition), 2)
# Reconcile that entries and check again
@@ -89,7 +94,7 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
data=[
{
"type": "",
- "mv_line_ids": [proposition[0]["id"], proposition[1]["id"],],
+ "mv_line_ids": [proposition[0]["id"], proposition[1]["id"]],
"new_mv_line_dicts": [
{
"name": st_line_vals["name"],
From 27e0c86c9e3bec93b950f33e38970d9f64e25007 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Marques?=
Date: Tue, 30 Mar 2021 11:25:33 +0100
Subject: [PATCH 11/20] [FIX] account_reconcile_payment_order: Fix tests
Create journal instead of searching
Change hardcoded value for amount of payment statements, after we cleared the taxes of the invoice lines in https://github.com/OCA/bank-payment/pull/798
TT28962
---
.../__manifest__.py | 2 +-
.../test_account_reconcile_payment_order.py | 24 ++++++++++---------
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/account_reconcile_payment_order/__manifest__.py b/account_reconcile_payment_order/__manifest__.py
index 5ac2d647..274f3e63 100644
--- a/account_reconcile_payment_order/__manifest__.py
+++ b/account_reconcile_payment_order/__manifest__.py
@@ -4,7 +4,7 @@
{
"name": "Reconcile payment orders",
- "version": "13.0.1.0.0",
+ "version": "13.0.1.0.1",
"author": "Therp BV," "Tecnativa," "Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/account-reconcile",
diff --git a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
index a4a8e4bc..e335c3e7 100644
--- a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
+++ b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
@@ -12,14 +12,8 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
def setUpClass(cls):
super().setUpClass()
cls.widget_obj = cls.env["account.reconciliation.widget"]
- cls.bank_journal = cls.env["account.journal"].search(
- [
- ("type", "=", "bank"),
- "|",
- ("company_id", "=", cls.env.company.id),
- ("company_id", "=", False),
- ],
- limit=1,
+ cls.bank_journal = cls.env["account.journal"].create(
+ {"name": "Test bank journal", "type": "bank"}
)
# Create second invoice for being sure it handles the payment order
cls.invoice2 = cls._create_customer_invoice(cls)
@@ -32,7 +26,7 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
cls.invoice2.action_post()
# Add to payment order using the wizard
cls.env["account.invoice.payment.line.multi"].with_context(
- active_model="account.move", active_ids=cls.invoice2.ids,
+ active_model="account.move", active_ids=cls.invoice2.ids
).create({}).run()
# Prepare statement
cls.statement = cls.env["account.bank.statement"].create(
@@ -41,7 +35,15 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
"date": "2019-01-01",
"journal_id": cls.bank_journal.id,
"line_ids": [
- (0, 0, {"date": "2019-01-01", "name": "Test line", "amount": 230}),
+ (
+ 0,
+ 0,
+ {
+ "date": "2019-01-01",
+ "name": "Test line",
+ "amount": 200, # 100 * 2
+ },
+ ),
],
}
)
@@ -56,7 +58,7 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
self.inbound_order.open2generated()
self.inbound_order.generated2uploaded()
# Check widget result
- res = self.widget_obj.get_bank_statement_line_data(self.statement.line_ids.ids,)
+ res = self.widget_obj.get_bank_statement_line_data(self.statement.line_ids.ids)
self.assertEqual(len(res["lines"][0]["reconciliation_proposition"]), 2)
def test_reconcile_payment_order_transfer_account(self):
From 1ab1a0c39d7edce4f15065f519c0f78264cfffbe Mon Sep 17 00:00:00 2001
From: CarlosRoca13
Date: Tue, 29 Mar 2022 10:47:26 +0200
Subject: [PATCH 12/20] [IMP] account_reconcile_payment_order: black, isort,
prettier
---
.../models/account_reconciliation_widget.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/account_reconcile_payment_order/models/account_reconciliation_widget.py b/account_reconcile_payment_order/models/account_reconciliation_widget.py
index 87ffb0cd..57539d0e 100644
--- a/account_reconcile_payment_order/models/account_reconciliation_widget.py
+++ b/account_reconcile_payment_order/models/account_reconciliation_widget.py
@@ -43,7 +43,9 @@ class AccountReconciliationWidget(models.AbstractModel):
)
for order in orders:
elegible_lines = self._get_reconcile_lines_from_order(
- st_line, order, excluded_ids=excluded_ids,
+ st_line,
+ order,
+ excluded_ids=excluded_ids,
)
if elegible_lines:
return self._prepare_move_lines(
@@ -55,14 +57,17 @@ class AccountReconciliationWidget(models.AbstractModel):
def get_bank_statement_line_data(self, st_line_ids, excluded_ids=None):
res = super().get_bank_statement_line_data(
- st_line_ids, excluded_ids=excluded_ids,
+ st_line_ids,
+ excluded_ids=excluded_ids,
)
st_line_obj = self.env["account.bank.statement.line"]
for line_vals in res.get("lines", []):
st_line = st_line_obj.browse(line_vals["st_line"]["id"])
orders = self._get_possible_payment_orders_for_statement_line(st_line)
proposition_vals = self._prepare_proposition_from_orders(
- st_line, orders, excluded_ids=excluded_ids,
+ st_line,
+ orders,
+ excluded_ids=excluded_ids,
)
if proposition_vals:
line_vals["reconciliation_proposition"] = proposition_vals
From 0624295e877af42e912bcd873b2b5f0a245a9df8 Mon Sep 17 00:00:00 2001
From: CarlosRoca13
Date: Wed, 30 Mar 2022 14:36:16 +0200
Subject: [PATCH 13/20] [MIG] account_reconcile_payment_order: Migration to
14.0
---
account_reconcile_payment_order/README.rst | 11 ++++++-----
.../__manifest__.py | 6 +++---
.../i18n/account_reconcile_payment_order.pot | 17 ++++++++++++++++-
.../readme/CONTRIBUTORS.rst | 1 +
.../static/description/index.html | 7 ++++---
.../test_account_reconcile_payment_order.py | 19 +++----------------
6 files changed, 33 insertions(+), 28 deletions(-)
diff --git a/account_reconcile_payment_order/README.rst b/account_reconcile_payment_order/README.rst
index efedfe50..4f14197d 100644
--- a/account_reconcile_payment_order/README.rst
+++ b/account_reconcile_payment_order/README.rst
@@ -14,13 +14,13 @@ Reconcile payment orders
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github
- :target: https://github.com/OCA/account-reconcile/tree/13.0/account_reconcile_payment_order
+ :target: https://github.com/OCA/account-reconcile/tree/14.0/account_reconcile_payment_order
:alt: OCA/account-reconcile
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/account-reconcile-13-0/account-reconcile-13-0-account_reconcile_payment_order
+ :target: https://translation.odoo-community.org/projects/account-reconcile-14-0/account-reconcile-14-0-account_reconcile_payment_order
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/98/13.0
+ :target: https://runbot.odoo-community.org/runbot/98/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -77,7 +77,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -98,6 +98,7 @@ Contributors
* Pedro M. Baeza
* João Marques
+ * Carlos Roca
Maintainers
~~~~~~~~~~~
@@ -120,6 +121,6 @@ Current `maintainer `__:
|maintainer-pedrobaeza|
-This module is part of the `OCA/account-reconcile `_ project on GitHub.
+This module is part of the `OCA/account-reconcile `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_reconcile_payment_order/__manifest__.py b/account_reconcile_payment_order/__manifest__.py
index 274f3e63..6aa4bbd3 100644
--- a/account_reconcile_payment_order/__manifest__.py
+++ b/account_reconcile_payment_order/__manifest__.py
@@ -4,13 +4,13 @@
{
"name": "Reconcile payment orders",
- "version": "13.0.1.0.1",
- "author": "Therp BV," "Tecnativa," "Odoo Community Association (OCA)",
+ "version": "14.0.1.0.0",
+ "author": "Therp BV, Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/account-reconcile",
"category": "Invoicing Management",
"summary": "Automatically propose all lines generated from payment orders",
- "depends": ["account_payment_order"],
+ "depends": ["account_payment_order", "account_reconciliation_widget"],
"installable": True,
"maintainers": ["pedrobaeza"],
}
diff --git a/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot b/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
index 7ed0bfaa..85017c2c 100644
--- a/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
+++ b/account_reconcile_payment_order/i18n/account_reconcile_payment_order.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -17,3 +17,18 @@ msgstr ""
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
msgstr ""
+
+#. module: account_reconcile_payment_order
+#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: account_reconcile_payment_order
+#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget__id
+msgid "ID"
+msgstr ""
+
+#. module: account_reconcile_payment_order
+#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget____last_update
+msgid "Last Modified on"
+msgstr ""
diff --git a/account_reconcile_payment_order/readme/CONTRIBUTORS.rst b/account_reconcile_payment_order/readme/CONTRIBUTORS.rst
index dab82860..fd504b80 100644
--- a/account_reconcile_payment_order/readme/CONTRIBUTORS.rst
+++ b/account_reconcile_payment_order/readme/CONTRIBUTORS.rst
@@ -3,3 +3,4 @@
* Pedro M. Baeza
* João Marques
+ * Carlos Roca
diff --git a/account_reconcile_payment_order/static/description/index.html b/account_reconcile_payment_order/static/description/index.html
index 4bb87d52..5a4b00a9 100644
--- a/account_reconcile_payment_order/static/description/index.html
+++ b/account_reconcile_payment_order/static/description/index.html
@@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

Payment orders that show up as one big transaction can be difficult for the
accounting to handle if a transfer account is used. In this case, we need to
reconcile this transaction with possibly hundreds of move lines, which can be a
@@ -431,7 +431,7 @@ as a new type of reconciliation in this model.
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -450,6 +450,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
Tecnativa:
- Pedro M. Baeza
- João Marques
+- Carlos Roca
@@ -463,7 +464,7 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.
Current maintainer:

-
This module is part of the OCA/account-reconcile project on GitHub.
+
This module is part of the OCA/account-reconcile project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
index e335c3e7..76857ed6 100644
--- a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
+++ b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
@@ -42,6 +42,7 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
"date": "2019-01-01",
"name": "Test line",
"amount": 200, # 100 * 2
+ "payment_ref": "payment",
},
),
],
@@ -50,9 +51,7 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
def test_reconcile_payment_order_bank(self):
self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
- self.inbound_mode.write(
- {"offsetting_account": "bank_account", "move_option": "line"}
- )
+ self.inbound_mode.write({"move_option": "line"})
# Prepare payment order
self.inbound_order.draft2open()
self.inbound_order.open2generated()
@@ -63,21 +62,9 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
def test_reconcile_payment_order_transfer_account(self):
self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
- receivable_account = self.env["account.account"].create(
- {
- "name": "Extra receivable account",
- "code": "TEST_ERA",
- "reconcile": True,
- "user_type_id": (
- self.env.ref("account.data_account_type_receivable").id
- ),
- }
- )
self.inbound_mode.write(
{
- "offsetting_account": "transfer_account",
- "transfer_account_id": receivable_account.id,
- "transfer_journal_id": self.bank_journal.id,
+ "default_journal_ids": [(4, self.bank_journal.id)],
"move_option": "line",
}
)
From dce1a0313023204d5b534377472064f1f9d13430 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dept=2E=20T=C3=A9cnico?=
Date: Tue, 12 Apr 2022 14:06:06 +0000
Subject: [PATCH 14/20] Added translation using Weblate (Spanish)
---
account_reconcile_payment_order/i18n/es.po | 35 ++++++++++++++++++++++
1 file changed, 35 insertions(+)
create mode 100644 account_reconcile_payment_order/i18n/es.po
diff --git a/account_reconcile_payment_order/i18n/es.po b/account_reconcile_payment_order/i18n/es.po
new file mode 100644
index 00000000..5ccb987f
--- /dev/null
+++ b/account_reconcile_payment_order/i18n/es.po
@@ -0,0 +1,35 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_reconcile_payment_order
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: account_reconcile_payment_order
+#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
+msgid "Account Reconciliation widget"
+msgstr ""
+
+#. module: account_reconcile_payment_order
+#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: account_reconcile_payment_order
+#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget__id
+msgid "ID"
+msgstr ""
+
+#. module: account_reconcile_payment_order
+#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget____last_update
+msgid "Last Modified on"
+msgstr ""
From 649d45b27b21df528de638e2ff9d01a3e6f2e7d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dept=2E=20T=C3=A9cnico?=
Date: Tue, 12 Apr 2022 16:16:05 +0000
Subject: [PATCH 15/20] Translated using Weblate (Spanish)
Currently translated at 100.0% (4 of 4 strings)
Translation: account-reconcile-14.0/account-reconcile-14.0-account_reconcile_payment_order
Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-14-0/account-reconcile-14-0-account_reconcile_payment_order/es/
---
account_reconcile_payment_order/i18n/es.po | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/account_reconcile_payment_order/i18n/es.po b/account_reconcile_payment_order/i18n/es.po
index 5ccb987f..c91ba3af 100644
--- a/account_reconcile_payment_order/i18n/es.po
+++ b/account_reconcile_payment_order/i18n/es.po
@@ -6,30 +6,32 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2022-04-12 18:05+0000\n"
+"Last-Translator: Dept. Técnico \n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
#. module: account_reconcile_payment_order
#: model:ir.model,name:account_reconcile_payment_order.model_account_reconciliation_widget
msgid "Account Reconciliation widget"
-msgstr ""
+msgstr "Widget de reconciliación de cuentas"
#. module: account_reconcile_payment_order
#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget__display_name
msgid "Display Name"
-msgstr ""
+msgstr "Mostrar nombre"
#. module: account_reconcile_payment_order
#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget__id
msgid "ID"
-msgstr ""
+msgstr "Identifiación"
#. module: account_reconcile_payment_order
#: model:ir.model.fields,field_description:account_reconcile_payment_order.field_account_reconciliation_widget____last_update
msgid "Last Modified on"
-msgstr ""
+msgstr "Última modificación en"
From 63d87f142c02229b17a2e8de7e4fb5626d88bb20 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Mon, 18 Apr 2022 09:57:38 +0200
Subject: [PATCH 16/20] [FIX] account_reconcile_payment_order: Run tests
post-install
Since https://github.com/odoo/odoo/commit/81aac30dd2278e43a43cf8fd6cef31e1e8c60f3f,
all tests inheriting from AccountTestInvoicingCommon must be post-install.
---
.../tests/test_account_reconcile_payment_order.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
index 76857ed6..77824076 100644
--- a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
+++ b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
@@ -2,11 +2,14 @@
# Copyright 2021 Tecnativa - João Marques
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+import odoo.tests
+
from odoo.addons.account_payment_order.tests.test_payment_order_inbound import (
TestPaymentOrderInboundBase,
)
+@odoo.tests.tagged("post_install", "-at_install")
class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
@classmethod
def setUpClass(cls):
From 1ffdf5e371067807e2439f9c8328581544b5106f Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Tue, 8 Nov 2022 13:36:46 +0100
Subject: [PATCH 17/20] [REF] account_reconcile_payment_order: Adapt module to
native payment refactoring
Following OCA/bank-payment#979
---
account_reconcile_payment_order/__manifest__.py | 2 +-
.../models/account_reconciliation_widget.py | 15 ++++++++-------
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/account_reconcile_payment_order/__manifest__.py b/account_reconcile_payment_order/__manifest__.py
index 6aa4bbd3..dcdc4953 100644
--- a/account_reconcile_payment_order/__manifest__.py
+++ b/account_reconcile_payment_order/__manifest__.py
@@ -4,7 +4,7 @@
{
"name": "Reconcile payment orders",
- "version": "14.0.1.0.0",
+ "version": "14.0.2.0.0",
"author": "Therp BV, Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/account-reconcile",
diff --git a/account_reconcile_payment_order/models/account_reconciliation_widget.py b/account_reconcile_payment_order/models/account_reconciliation_widget.py
index 57539d0e..d51992f9 100644
--- a/account_reconcile_payment_order/models/account_reconciliation_widget.py
+++ b/account_reconcile_payment_order/models/account_reconciliation_widget.py
@@ -23,14 +23,15 @@ class AccountReconciliationWidget(models.AbstractModel):
def _get_reconcile_lines_from_order(self, st_line, order, excluded_ids=None):
"""Return lines to reconcile our statement line with."""
aml_obj = self.env["account.move.line"]
- reconciled_lines = aml_obj.search(
- [("bank_payment_line_id", "in", order.bank_line_ids.ids)]
+ lines = aml_obj
+ for payment in order.payment_ids:
+ lines |= payment.move_id.line_ids.filtered(
+ lambda x: x.account_id != payment.destination_account_id
+ and x.partner_id == payment.partner_id
+ )
+ return (lines - aml_obj.browse(excluded_ids)).filtered(
+ lambda x: not x.reconciled
)
- return (
- reconciled_lines.mapped("move_id.line_ids")
- - reconciled_lines
- - aml_obj.browse(excluded_ids)
- ).filtered(lambda x: not x.reconciled)
def _prepare_proposition_from_orders(self, st_line, orders, excluded_ids=None):
"""Fill with the expected format the reconciliation proposition
From 0d1821f86a6b020a7f16887024246996c2e606a5 Mon Sep 17 00:00:00 2001
From: Alexis de Lattre
Date: Wed, 22 Mar 2023 00:29:28 +0100
Subject: [PATCH 18/20] account_reconcile_payment_order: Disable tests
account_reconcile_payment_order needs to be ported to the new version of
account_payment_order. In the meantime, tests are disabled to avoid
blocking all PRs.
---
account_reconcile_payment_order/tests/__init__.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/account_reconcile_payment_order/tests/__init__.py b/account_reconcile_payment_order/tests/__init__.py
index 90ea9363..7a720517 100644
--- a/account_reconcile_payment_order/tests/__init__.py
+++ b/account_reconcile_payment_order/tests/__init__.py
@@ -1,3 +1,4 @@
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
-from . import test_account_reconcile_payment_order
+# Tests (and module?) must be ported to new version of account_payment_order
+# from . import test_account_reconcile_payment_order
From 321e54954593313a23d293c888cac5e6430ef1be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luis=20Ernesto=20Garc=C3=ADa=20Medina?=
Date: Thu, 4 May 2023 17:13:24 -0600
Subject: [PATCH 19/20] [IMP] account_reconcile_payment_order: black, isort,
prettier
---
.../odoo/addons/account_reconcile_payment_order | 1 +
setup/account_reconcile_payment_order/setup.py | 6 ++++++
2 files changed, 7 insertions(+)
create mode 120000 setup/account_reconcile_payment_order/odoo/addons/account_reconcile_payment_order
create mode 100644 setup/account_reconcile_payment_order/setup.py
diff --git a/setup/account_reconcile_payment_order/odoo/addons/account_reconcile_payment_order b/setup/account_reconcile_payment_order/odoo/addons/account_reconcile_payment_order
new file mode 120000
index 00000000..f6734f33
--- /dev/null
+++ b/setup/account_reconcile_payment_order/odoo/addons/account_reconcile_payment_order
@@ -0,0 +1 @@
+../../../../account_reconcile_payment_order
\ No newline at end of file
diff --git a/setup/account_reconcile_payment_order/setup.py b/setup/account_reconcile_payment_order/setup.py
new file mode 100644
index 00000000..28c57bb6
--- /dev/null
+++ b/setup/account_reconcile_payment_order/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
From d25eb2a40c4f7405ab54d5c471236bb6a6ab46c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luis=20Ernesto=20Garc=C3=ADa=20Medina?=
Date: Thu, 4 May 2023 17:48:06 -0600
Subject: [PATCH 20/20] [MIG] account_reconcile_payment_order: Migration to
15.0
---
account_reconcile_payment_order/__manifest__.py | 2 +-
account_reconcile_payment_order/tests/__init__.py | 2 +-
.../tests/test_account_reconcile_payment_order.py | 2 --
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/account_reconcile_payment_order/__manifest__.py b/account_reconcile_payment_order/__manifest__.py
index dcdc4953..8b6303f0 100644
--- a/account_reconcile_payment_order/__manifest__.py
+++ b/account_reconcile_payment_order/__manifest__.py
@@ -4,7 +4,7 @@
{
"name": "Reconcile payment orders",
- "version": "14.0.2.0.0",
+ "version": "15.0.1.0.0",
"author": "Therp BV, Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/account-reconcile",
diff --git a/account_reconcile_payment_order/tests/__init__.py b/account_reconcile_payment_order/tests/__init__.py
index 7a720517..86a246fb 100644
--- a/account_reconcile_payment_order/tests/__init__.py
+++ b/account_reconcile_payment_order/tests/__init__.py
@@ -1,4 +1,4 @@
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
# Tests (and module?) must be ported to new version of account_payment_order
-# from . import test_account_reconcile_payment_order
+from . import test_account_reconcile_payment_order
diff --git a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
index 77824076..5a54294d 100644
--- a/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
+++ b/account_reconcile_payment_order/tests/test_account_reconcile_payment_order.py
@@ -54,7 +54,6 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
def test_reconcile_payment_order_bank(self):
self.assertEqual(len(self.inbound_order.payment_line_ids), 2)
- self.inbound_mode.write({"move_option": "line"})
# Prepare payment order
self.inbound_order.draft2open()
self.inbound_order.open2generated()
@@ -68,7 +67,6 @@ class TestAccountReconcilePaymentOrder(TestPaymentOrderInboundBase):
self.inbound_mode.write(
{
"default_journal_ids": [(4, self.bank_journal.id)],
- "move_option": "line",
}
)
self.assertEqual(len(self.inbound_order.payment_line_ids), 2)