diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 137d792..4904dc9 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,7 +1,8 @@
exclude: |
(?x)
# NOT INSTALLABLE ADDONS
- ^server_environment_files/|
+ ^account_ebics_oca_statement_import/|
+ ^account_ebics_payment_order/|
# END NOT INSTALLABLE ADDONS
# Files and folders generated by bots, to avoid loops
^setup/|/static/description/index\.html$|
diff --git a/account_ebics/README.rst b/account_ebics/README.rst
index ccaf717..dd9e9d7 100644
--- a/account_ebics/README.rst
+++ b/account_ebics/README.rst
@@ -59,6 +59,16 @@ We also recommend to consider the installation of the following modules:
|
+- account_usability
+
+ Recommended if you have multiple financial journals.
+ This module adds a number of accounting menu entries such as bank statement list view
+ which allows to see all statements downloaded via the ir.cron automated EBICS download.
+
+ Cf. https://github.com/OCA/account-financial-tools
+
+|
+
- account_ebics_payment_order
Recommended if you are using the OCA account_payment_order module.
@@ -204,3 +214,5 @@ Known Issues / Roadmap
======================
- add support to import externally generated keys & certificates (currently only 3SKey signature certificate)
+- For Odoo 16.0 the interaction with the OCA payment order and bank statement import modules (e.g. french CFONB) is not yet available.
+
diff --git a/account_ebics/models/account_bank_statement.py b/account_ebics/models/account_bank_statement.py
index 6b6540f..e5eb289 100644
--- a/account_ebics/models/account_bank_statement.py
+++ b/account_ebics/models/account_bank_statement.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
from odoo import fields, models
diff --git a/account_ebics/models/ebics_config.py b/account_ebics/models/ebics_config.py
index 1e6e3cb..1726ae2 100644
--- a/account_ebics/models/ebics_config.py
+++ b/account_ebics/models/ebics_config.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
import logging
diff --git a/account_ebics/models/ebics_file.py b/account_ebics/models/ebics_file.py
index cf23a16..7f960a3 100644
--- a/account_ebics/models/ebics_file.py
+++ b/account_ebics/models/ebics_file.py
@@ -3,13 +3,18 @@
import base64
import logging
+from copy import deepcopy
from sys import exc_info
from traceback import format_exception
+from lxml import etree
+
from odoo import _, fields, models
from odoo.exceptions import UserError
from odoo.tools.safe_eval import safe_eval
+from odoo.addons.base.models.res_bank import sanitize_account_number
+
_logger = logging.getLogger(__name__)
@@ -65,10 +70,14 @@ class EbicsFile(models.Model):
readonly=True,
)
note = fields.Text(string="Notes")
- note_process = fields.Text(string="Notes")
+ note_process = fields.Text(
+ string="Notes",
+ readonly=True,
+ )
company_ids = fields.Many2many(
comodel_name="res.company",
string="Companies",
+ readonly=True,
help="Companies sharing this EBICS file.",
)
@@ -100,7 +109,7 @@ class EbicsFile(models.Model):
ff = self.format_id.download_process_method
if ff in ff_methods:
if ff_methods[ff].get("process"):
- res = ff_methods[ff]["process"](self)
+ res = ff_methods[ff]["process"]()
self.state = "done"
return res
else:
@@ -111,9 +120,8 @@ class EbicsFile(models.Model):
action = self.env["ir.actions.act_window"]._for_xml_id(
"account.action_bank_statement_tree"
)
- domain = safe_eval(action.get("domain") or "[]")
- domain += [("id", "in", self._context.get("statement_ids"))]
- action.update({"domain": domain})
+ domain = [("id", "in", self.env.context.get("statement_ids"))]
+ action["domain"] = domain
return action
def button_close(self):
@@ -169,50 +177,26 @@ class EbicsFile(models.Model):
return False
return True
- def _process_result_action(self, res_action):
- notifications = []
- st_line_ids = []
- statement_ids = []
+ def _process_download_result(self, res):
+ statement_ids = res["statement_ids"]
+ notifications = res["notifications"]
sts_data = []
- if res_action.get("type") and res_action["type"] == "ir.actions.client":
- st_line_ids = res_action["context"].get("statement_line_ids", [])
- if st_line_ids:
- self.env.flush_all()
- self.env.cr.execute(
- """
- SELECT DISTINCT
- absl.statement_id,
- abs.name, abs.date, abs.company_id,
- rc.name AS company_name
- FROM account_bank_statement_line absl
- INNER JOIN account_bank_statement abs
- ON abs.id = absl.statement_id
- INNER JOIN res_company rc
- ON rc.id = abs.company_id
- WHERE absl.id IN %s
- ORDER BY date, company_id
- """,
- (tuple(st_line_ids),),
- )
- sts_data = self.env.cr.dictfetchall()
- else:
- if res_action.get("res_id"):
- st_ids = res_action["res_id"]
- else:
- st_ids = res_action["domain"][0][2]
- statements = self.env["account.bank.statement"].browse(st_ids)
- for statement in statements:
- sts_data.append(
- {
- "statement_id": statement.id,
- "date": statement.date,
- "name": statement.name,
- "company_name": statement.company_id.name,
- }
- )
- st_cnt = len(sts_data)
+ if statement_ids:
+ self.env.flush_all()
+ self.env.cr.execute(
+ """
+ SELECT abs.name, abs.date, abs.company_id, rc.name AS company_name
+ FROM account_bank_statement abs
+ JOIN res_company rc ON rc.id = abs.company_id
+ WHERE abs.id in %s
+ ORDER BY abs.date, rc.id
+ """,
+ (tuple(res["statement_ids"]),),
+ )
+ sts_data = self.env.cr.dictfetchall()
+
+ st_cnt = len(statement_ids)
warning_cnt = error_cnt = 0
- notifications = res_action["context"].get("notifications", [])
if notifications:
for notif in notifications:
if notif["type"] == "error":
@@ -234,7 +218,11 @@ class EbicsFile(models.Model):
)
if st_cnt:
self.note_process += "\n\n"
- self.note_process += _("%s bank statements have been imported: ") % st_cnt
+ self.note_process += _(
+ "%(st_cnt)s bank statement%(sp)s been imported: ",
+ st_cnt=st_cnt,
+ sp=st_cnt == 1 and _(" has") or _("s have"),
+ )
self.note_process += "\n"
for st_data in sts_data:
self.note_process += ("\n%s, %s (%s)") % (
@@ -242,7 +230,6 @@ class EbicsFile(models.Model):
st_data["name"],
st_data["company_name"],
)
- statement_ids = [x["statement_id"] for x in sts_data]
if statement_ids:
self.sudo().bank_statement_ids = [(4, x) for x in statement_ids]
company_ids = self.sudo().bank_statement_ids.mapped("company_id").ids
@@ -262,8 +249,13 @@ class EbicsFile(models.Model):
"type": "ir.actions.act_window",
}
- @staticmethod
def _process_cfonb120(self):
+ """
+ Disable this code while waiting on OCA cfonb release for 16.0
+ """
+ # pylint: disable=W0101
+ raise NotImplementedError
+
import_module = "account_statement_import_fr_cfonb"
self._check_import_module(import_module)
wiz_model = "account.statement.import"
@@ -356,51 +348,56 @@ class EbicsFile(models.Model):
result_action["domain"] = [("id", "in", statement_ids)]
return self._process_result_action(result_action)
- @staticmethod
def _unlink_cfonb120(self):
"""
Placeholder for cfonb120 specific actions before removing the
EBICS data file and its related bank statements.
"""
- @staticmethod
def _process_camt052(self):
import_module = "account_statement_import_camt"
self._check_import_module(import_module)
return self._process_camt053(self)
- @staticmethod
def _unlink_camt052(self):
"""
Placeholder for camt052 specific actions before removing the
EBICS data file and its related bank statements.
"""
- @staticmethod
def _process_camt054(self):
import_module = "account_statement_import_camt"
self._check_import_module(import_module)
return self._process_camt053(self)
- @staticmethod
def _unlink_camt054(self):
"""
Placeholder for camt054 specific actions before removing the
EBICS data file and its related bank statements.
"""
- @staticmethod
- def _process_camt053(self):
+ def _process_camt053(self): # noqa C901
+ """
+ The Odoo standard statement import is based on manual selection
+ of a financial journal before importing the electronic statement file.
+ An EBICS download may return a single file containing a large number of
+ statements from different companies/journals.
+ Hence we need to split the CAMT file into
+ single statement CAMT files before we can call the logic
+ implemented by the Odoo OE or Community CAMT parsers.
+
+ TODO: refactor method to enable removal of noqa C901
+ """
modules = [
("oca", "account_statement_import_camt"),
("oe", "account_bank_statement_import_camt"),
]
- found = False
- for _src, mod in modules:
- if self._check_import_module(mod, raise_if_not_found=False):
- found = True
+ author = False
+ for entry in modules:
+ if self._check_import_module(entry[1], raise_if_not_found=False):
+ author = entry[0]
break
- if not found:
+ if not author:
raise UserError(
_(
"The module to process the '%(ebics_format)s' format is "
@@ -410,15 +407,125 @@ class EbicsFile(models.Model):
modules=", ".join([x[1] for x in modules]),
)
)
- if _src == "oca":
+ res = {"statement_ids": [], "notifications": []}
+ try:
+ with self.env.cr.savepoint():
+ msg_hdr = _("{} : Import failed for file %(fn)s:\n", fn=self.name)
+ file_data = base64.b64decode(self.data)
+ root = etree.fromstring(file_data, parser=etree.XMLParser(recover=True))
+ if root is None:
+ message = msg_hdr.format(_("Error"))
+ message += _("Invalid XML file.")
+ res["notifications"].append({"type": "error", "message": message})
+ ns = {k or "ns": v for k, v in root.nsmap.items()}
+ for i, stmt in enumerate(root[0].findall("ns:Stmt", ns), start=1):
+ msg_hdr = _(
+ "{} : Import failed for statement number %(index)s, filename %(fn)s:\n",
+ index=i,
+ fn=self.name,
+ )
+ acc_number = sanitize_account_number(
+ stmt.xpath(
+ "ns:Acct/ns:Id/ns:IBAN/text() | ns:Acct/ns:Id/ns:Othr/ns:Id/text()",
+ namespaces=ns,
+ )[0]
+ )
+ if not acc_number:
+ message = msg_hdr.format(_("Error"))
+ message += _("No bank account number found.")
+ res["notifications"].append(
+ {"type": "error", "message": message}
+ )
+ continue
+ currency_code = stmt.xpath(
+ "ns:Acct/ns:Ccy/text() | ns:Bal/ns:Amt/@Ccy", namespaces=ns
+ )[0]
+ currency = self.env["res.currency"].search(
+ [("name", "=ilike", currency_code)], limit=1
+ )
+ if not currency:
+ message = msg_hdr.format(_("Error"))
+ message += _("Currency %(cc) not found.", cc=currency_code)
+ res["notifications"] = {"type": "error", "message": message}
+ continue
+ journal = self.env["account.journal"].search(
+ [
+ ("type", "=", "bank"),
+ (
+ "bank_account_id.sanitized_acc_number",
+ "ilike",
+ acc_number,
+ ),
+ ]
+ )
+ journal_currency = (
+ journal.currency_id or journal.company_id.currency_id
+ )
+ if journal_currency != currency:
+ message = msg_hdr.format(_("Error"))
+ message += _(
+ "No financial journal found for Account Number %(nbr)s, "
+ "Currency %(cc)",
+ nbr=acc_number,
+ cc=currency_code,
+ )
+ res["notifications"].append(
+ {"type": "error", "message": message}
+ )
+ continue
+
+ root_new = deepcopy(root)
+ for j, el in enumerate(root_new[0].findall("ns:Stmt", ns), start=1):
+ if j != i:
+ el.getparent.remove(el)
+ data = base64.b64encode(etree.tostring(root_new))
+
+ if author == "oca":
+ # TODO: implement _process_camt053_oca() once OCA camt is
+ # released for 16.0
+ raise NotImplementedError
+ else:
+ self.env.company = journal.company_id
+ attachment = self.env["ir.attachment"].create(
+ {"name": self.name, "datas": data, "store_fname": self.name}
+ )
+ act = journal._import_bank_statement(attachment)
+ for entry in act["domain"]:
+ if (
+ isinstance(entry, tuple)
+ and entry[0] == "statement_id"
+ and entry[1] == "in"
+ ):
+ res["statement_ids"].extend(entry[2])
+ break
+ notifications = act["context"]["notifications"]
+ if notifications:
+ res["notifications"].append(act["context"]["notifications"])
+
+ except UserError as e:
+ message = msg_hdr.format(_("Error"))
+ message += "".join(e.args)
+ res["notifications"].append({"type": "error", "message": message})
+ except Exception:
+ tb = "".join(format_exception(*exc_info()))
+ message = msg_hdr.format(_("Error"))
+ message += tb
+ res["notifications"].append({"type": "error", "message": message})
+
+ if author == "oca":
+ # TODO: implement _process_camt053_oca() once OCA camt is
+ # released for 16.0
return self._process_camt053_oca()
else:
- return self._process_camt053_oe()
+ return self._process_download_result(res)
def _process_camt053_oca(self):
"""
- TODO: merge common logic of this method and _process_cfonb120
+ Disable this code while waiting on OCA CAMT parser for 16.0
"""
+ # pylint: disable=W0101
+ raise NotImplementedError
+
wiz_model = "account.statement.import"
wiz_vals = {
"statement_filename": self.name,
@@ -487,38 +594,12 @@ class EbicsFile(models.Model):
result_action["domain"] = [("id", "in", statement_ids)]
return self._process_result_action(result_action)
- def _process_camt053_oe(self):
- wiz_model = "account.bank.statement.import"
- wiz_vals = {
- "attachment_ids": [
- (
- 0,
- 0,
- {"name": self.name, "datas": self.data, "store_fname": self.name},
- )
- ]
- }
- wiz = (
- self.env[wiz_model].with_context(active_model="ebics.file").create(wiz_vals)
- )
- res = wiz.import_file()
- if res.get("res_model") == "account.bank.statement.import.journal.creation":
- if res.get("context"):
- bank_account = res["context"].get("default_bank_acc_number")
- raise UserError(
- _("No financial journal found for Company Bank Account %s")
- % bank_account
- )
- return self._process_result_action(res)
-
- @staticmethod
def _unlink_camt053(self):
"""
Placeholder for camt053 specific actions before removing the
EBICS data file and its related bank statements.
"""
- @staticmethod
def _process_pain002(self):
"""
Placeholder for processing pain.002 files.
@@ -526,7 +607,6 @@ class EbicsFile(models.Model):
add import logic based upon OCA 'account_payment_return_import'
"""
- @staticmethod
def _unlink_pain002(self):
"""
Placeholder for pain.002 specific actions before removing the
diff --git a/account_ebics/models/ebics_file_format.py b/account_ebics/models/ebics_file_format.py
index 48d3d47..a4f4081 100644
--- a/account_ebics/models/ebics_file_format.py
+++ b/account_ebics/models/ebics_file_format.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
from odoo import api, fields, models
diff --git a/account_ebics/models/ebics_userid.py b/account_ebics/models/ebics_userid.py
index 10cb14c..6a863a9 100644
--- a/account_ebics/models/ebics_userid.py
+++ b/account_ebics/models/ebics_userid.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
import base64
diff --git a/account_ebics/wizards/ebics_change_passphrase.py b/account_ebics/wizards/ebics_change_passphrase.py
index 3f3c3ee..77faf6b 100644
--- a/account_ebics/wizards/ebics_change_passphrase.py
+++ b/account_ebics/wizards/ebics_change_passphrase.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
import logging
diff --git a/account_ebics/wizards/ebics_xfer.py b/account_ebics/wizards/ebics_xfer.py
index b7db435..12eb03c 100644
--- a/account_ebics/wizards/ebics_xfer.py
+++ b/account_ebics/wizards/ebics_xfer.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
"""
diff --git a/account_ebics_batch/__manifest__.py b/account_ebics_batch/__manifest__.py
index db12130..4f71eab 100644
--- a/account_ebics_batch/__manifest__.py
+++ b/account_ebics_batch/__manifest__.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
diff --git a/account_ebics_batch/data/ir_cron_data.xml b/account_ebics_batch/data/ir_cron_data.xml
index d33d59d..2726b75 100644
--- a/account_ebics_batch/data/ir_cron_data.xml
+++ b/account_ebics_batch/data/ir_cron_data.xml
@@ -10,7 +10,7 @@
1
days
-1
-
+
diff --git a/account_ebics_batch/models/ebics_batch_log.py b/account_ebics_batch/models/ebics_batch_log.py
index f81af12..74d8b25 100644
--- a/account_ebics_batch/models/ebics_batch_log.py
+++ b/account_ebics_batch/models/ebics_batch_log.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from sys import exc_info
diff --git a/account_ebics_batch_payment/__manifest__.py b/account_ebics_batch_payment/__manifest__.py
index 747b538..f1dca19 100644
--- a/account_ebics_batch_payment/__manifest__.py
+++ b/account_ebics_batch_payment/__manifest__.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
{
diff --git a/account_ebics_batch_payment/models/account_batch_payment.py b/account_ebics_batch_payment/models/account_batch_payment.py
index 62e51db..c313252 100644
--- a/account_ebics_batch_payment/models/account_batch_payment.py
+++ b/account_ebics_batch_payment/models/account_batch_payment.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
from odoo import _, models
diff --git a/account_ebics_oca_statement_import/__manifest__.py b/account_ebics_oca_statement_import/__manifest__.py
index 24a56e4..3c4cdc2 100644
--- a/account_ebics_oca_statement_import/__manifest__.py
+++ b/account_ebics_oca_statement_import/__manifest__.py
@@ -1,4 +1,4 @@
-# Copyright 2020-2022 Noviat.
+# Copyright 2020-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
{
@@ -13,6 +13,8 @@
"account_ebics",
"account_statement_import",
],
- "installable": True,
+ # installable False unit OCA statement import becomes
+ # available for 16.0
+ "installable": False,
"auto_install": True,
}
diff --git a/account_ebics_oe/__manifest__.py b/account_ebics_oe/__manifest__.py
index a56f856..b442879 100644
--- a/account_ebics_oe/__manifest__.py
+++ b/account_ebics_oe/__manifest__.py
@@ -1,4 +1,4 @@
-# Copyright 2020-2022 Noviat.
+# Copyright 2020-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
{
diff --git a/account_ebics_oe_statement_import/README.rst b/account_ebics_oe_statement_import/README.rst
deleted file mode 100644
index d588ff2..0000000
--- a/account_ebics_oe_statement_import/README.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-.. image:: https://img.shields.io/badge/license-LGPL--3-blue.png
- :target: https://www.gnu.org/licenses/lgpl
- :alt: License: LGPL-3
-
-======================================================================
-Deploy account_ebics module with Odoo Enterprise Bank Statement Import
-======================================================================
-
-This module makes it possible to use Odoo Enterprise account_bank_statement_import
-in combination with 'account_ebics'.
-
-This module will be installed automatically when following modules are activated
-on your odoo database :
-
-- account_ebics_oe
-- account_bank_statement_import
-
-
-TODO
-----
-
-Adapt module for Odoo 16.0 bank statement import
diff --git a/account_ebics_oe_statement_import/__init__.py b/account_ebics_oe_statement_import/__init__.py
deleted file mode 100644
index 56429fc..0000000
--- a/account_ebics_oe_statement_import/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# from . import wizards
diff --git a/account_ebics_oe_statement_import/__manifest__.py b/account_ebics_oe_statement_import/__manifest__.py
deleted file mode 100644
index 5d201ed..0000000
--- a/account_ebics_oe_statement_import/__manifest__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2020-2023 Noviat.
-# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
-
-{
- "name": "account_ebics with Odoo Enterprise Bank Statement Import",
- "summary": "Use Odoo Enterprise Bank Statement Import with account_ebics",
- "version": "16.0.1.0.0",
- "author": "Noviat",
- "website": "https://www.noviat.com",
- "category": "Hidden",
- "license": "LGPL-3",
- "depends": [
- "account_ebics_oe",
- "account_bank_statement_import",
- ],
- "installable": True,
- "auto_install": True,
-}
diff --git a/account_ebics_oe_statement_import/static/description/icon.png b/account_ebics_oe_statement_import/static/description/icon.png
deleted file mode 100644
index 889d129..0000000
Binary files a/account_ebics_oe_statement_import/static/description/icon.png and /dev/null differ
diff --git a/account_ebics_oe_statement_import/wizards/__init__.py b/account_ebics_oe_statement_import/wizards/__init__.py
deleted file mode 100644
index 7dafcd1..0000000
--- a/account_ebics_oe_statement_import/wizards/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from . import account_bank_statement_import
diff --git a/account_ebics_oe_statement_import/wizards/account_bank_statement_import.py b/account_ebics_oe_statement_import/wizards/account_bank_statement_import.py
deleted file mode 100644
index 03324a6..0000000
--- a/account_ebics_oe_statement_import/wizards/account_bank_statement_import.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2009-2020 Noviat.
-# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
-
-import logging
-
-from odoo import _, models
-
-_logger = logging.getLogger(__name__)
-
-
-class AccountBankStatementImport(models.TransientModel):
- _inherit = "account.bank.statement.import"
-
- def _check_parsed_data(self, stmts_vals, account_number):
- """Basic and structural verifications"""
- if self.env.context.get("active_model") == "ebics.file":
- message = False
- if len(stmts_vals) == 0:
- message = _("This file doesn't contain any statement.")
- if not message:
- no_st_line = True
- for vals in stmts_vals:
- if vals["transactions"] and len(vals["transactions"]) > 0:
- no_st_line = False
- break
- if no_st_line:
- message = _("This file doesn't contain any transaction.")
- if message:
- log_msg = (
- _("Error detected while processing and EBICS File")
- + ":\n"
- + message
- )
- _logger.warn(log_msg)
- return
- super()._check_parsed_data(stmts_vals, account_number)
-
- def _create_bank_statements(self, stmts_vals):
- """
- Return error message to ebics.file when handling empty camt.
-
- Remarks/TODO:
- We could add more info to the message (e.g. date, balance, ...)
- and write this to the ebics.file, note field.
- We could also create empty bank statement (in state done) to clearly
- show days without transactions via the bank statement list view.
- """
- if self.env.context.get("active_model") == "ebics.file":
- transactions = False
- for st_vals in stmts_vals:
- if st_vals.get("transactions"):
- transactions = True
- break
- if not transactions:
- message = _("This file doesn't contain any transaction.")
- st_line_ids = []
- notifications = {"type": "warning", "message": message, "details": ""}
- return st_line_ids, [notifications]
-
- return super()._create_bank_statements(stmts_vals)
diff --git a/account_ebics_payment_order/__manifest__.py b/account_ebics_payment_order/__manifest__.py
index eeab9e2..b5be3f9 100644
--- a/account_ebics_payment_order/__manifest__.py
+++ b/account_ebics_payment_order/__manifest__.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
{
@@ -12,5 +12,7 @@
"data": [
"views/account_payment_order_views.xml",
],
- "installable": True,
+ # installable False unit OCA payment order becomes
+ # available for 16.0
+ "installable": False,
}
diff --git a/account_ebics_payment_order/models/account_payment_order.py b/account_ebics_payment_order/models/account_payment_order.py
index 42045c2..ecd9c78 100644
--- a/account_ebics_payment_order/models/account_payment_order.py
+++ b/account_ebics_payment_order/models/account_payment_order.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2022 Noviat.
+# Copyright 2009-2023 Noviat.
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
from odoo import _, models
diff --git a/setup/account_ebics_oca_statement_import/odoo/addons/account_ebics_oca_statement_import b/setup/account_ebics_oca_statement_import/odoo/addons/account_ebics_oca_statement_import
deleted file mode 120000
index 766f43e..0000000
--- a/setup/account_ebics_oca_statement_import/odoo/addons/account_ebics_oca_statement_import
+++ /dev/null
@@ -1 +0,0 @@
-../../../../account_ebics_oca_statement_import
\ No newline at end of file
diff --git a/setup/account_ebics_oca_statement_import/setup.py b/setup/account_ebics_oca_statement_import/setup.py
deleted file mode 100644
index 28c57bb..0000000
--- a/setup/account_ebics_oca_statement_import/setup.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import setuptools
-
-setuptools.setup(
- setup_requires=['setuptools-odoo'],
- odoo_addon=True,
-)
diff --git a/setup/account_ebics_oe_statement_import/odoo/addons/account_ebics_oe_statement_import b/setup/account_ebics_oe_statement_import/odoo/addons/account_ebics_oe_statement_import
deleted file mode 120000
index 75aca1f..0000000
--- a/setup/account_ebics_oe_statement_import/odoo/addons/account_ebics_oe_statement_import
+++ /dev/null
@@ -1 +0,0 @@
-../../../../account_ebics_oe_statement_import
\ No newline at end of file
diff --git a/setup/account_ebics_oe_statement_import/setup.py b/setup/account_ebics_oe_statement_import/setup.py
deleted file mode 100644
index 28c57bb..0000000
--- a/setup/account_ebics_oe_statement_import/setup.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import setuptools
-
-setuptools.setup(
- setup_requires=['setuptools-odoo'],
- odoo_addon=True,
-)
diff --git a/setup/account_ebics_payment_order/odoo/addons/account_ebics_payment_order b/setup/account_ebics_payment_order/odoo/addons/account_ebics_payment_order
deleted file mode 120000
index 5ff2d5c..0000000
--- a/setup/account_ebics_payment_order/odoo/addons/account_ebics_payment_order
+++ /dev/null
@@ -1 +0,0 @@
-../../../../account_ebics_payment_order
\ No newline at end of file
diff --git a/setup/account_ebics_payment_order/setup.py b/setup/account_ebics_payment_order/setup.py
deleted file mode 100644
index 28c57bb..0000000
--- a/setup/account_ebics_payment_order/setup.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import setuptools
-
-setuptools.setup(
- setup_requires=['setuptools-odoo'],
- odoo_addon=True,
-)