[MIG] : Migration to 20.0

This commit is contained in:
Luc De Meyer committed 2026-11-04 21:23:34 +01:00
1 parent 2e73b85130
commit 5353192edd
8 files changed
+47 -77

No files matched your search

+2 -2
View File
@@ -5,7 +5,7 @@
"name": "EBICS Banking Protocol", "name": "EBICS Banking Protocol",
"summary": "Download bank statements and upload payment " "summary": "Download bank statements and upload payment "
"files directly from Odoo, using the European EBICS standard", "files directly from Odoo, using the European EBICS standard",
"version": "19.0.1.3.1", "version": "20.0.1.0.0",
"license": "LGPL-3", "license": "LGPL-3",
"author": "Noviat", "author": "Noviat",
"website": "https://www.noviat.com/", "website": "https://www.noviat.com/",
@@ -13,7 +13,7 @@
"depends": ["account"], "depends": ["account"],
"data": [ "data": [
"security/ebics_security.xml", "security/ebics_security.xml",
"security/ir.model.access.csv", "security/ir.access.csv",
"data/ebics_file_format.xml", "data/ebics_file_format.xml",
"views/ebics_config_views.xml", "views/ebics_config_views.xml",
"views/ebics_file_views.xml", "views/ebics_file_views.xml",
+1 -1
View File
@@ -8,7 +8,7 @@ import re
from odoo import api, fields, models from odoo import api, fields, models
from odoo.exceptions import UserError from odoo.exceptions import UserError
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__) # lint-ignore=unused-logger
class EbicsConfig(models.Model): class EbicsConfig(models.Model):
+9 -11
View File
@@ -1,7 +1,6 @@
# Copyright 2009-2025 Noviat. # Copyright 2009-2025 Noviat.
# License LGPL-3 or later (https://www.gnu.org/licenses/lgpl). # License LGPL-3 or later (https://www.gnu.org/licenses/lgpl).
import base64
import logging import logging
from copy import deepcopy from copy import deepcopy
from sys import exc_info from sys import exc_info
@@ -12,9 +11,9 @@ from lxml import etree
from odoo import api, fields, models from odoo import api, fields, models
from odoo.exceptions import UserError from odoo.exceptions import UserError
from odoo.addons.base.models.res_bank import sanitize_account_number from odoo.addons.base.models.res_partner_bank import sanitize_account_number
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__) # lint-ignore=unused-logger
DUP_CHECK_FORMATS = ["cfonb120", "camt053"] DUP_CHECK_FORMATS = ["cfonb120", "camt053"]
@@ -202,7 +201,7 @@ class EbicsFile(models.Model):
[ [
("type", "=", "bank"), ("type", "=", "bank"),
( (
"bank_account_id.sanitized_acc_number", "bank_account_id.sanitized_account_number",
"ilike", "ilike",
acc_number, acc_number,
), ),
@@ -381,7 +380,7 @@ class EbicsFile(models.Model):
Statements without transactions are removed. Statements without transactions are removed.
""" """
datas = [] datas = []
file_data = base64.b64decode(self.data).replace(b"\n", b"").replace(b"\r", b"") file_data = bytes(self.data).replace(b"\n", b"").replace(b"\r", b"")
if len(file_data) % 120: if len(file_data) % 120:
message = self.env._( message = self.env._(
"Incorrect CFONB120 file:\nthe file is not divisible in 120 char lines" "Incorrect CFONB120 file:\nthe file is not divisible in 120 char lines"
@@ -413,7 +412,7 @@ class EbicsFile(models.Model):
"acc_number": acc_number, "acc_number": acc_number,
"journal_id": journal.id, "journal_id": journal.id,
"company_id": journal.company_id.id, "company_id": journal.company_id.id,
"data": base64.b64encode(st_lines), "data": st_lines,
} }
) )
st_lines = b"" st_lines = b""
@@ -500,7 +499,7 @@ class EbicsFile(models.Model):
.with_context(active_model="ebics.file") .with_context(active_model="ebics.file")
.create({"statement_filename": self.name}) .create({"statement_filename": self.name})
) )
wiz.import_single_file(base64.b64decode(st_data["data"]), res) wiz.import_single_file(st_data["data"], res)
def _process_bank_statement_oe(self, res, st_datas): def _process_bank_statement_oe(self, res, st_datas):
""" """
@@ -530,8 +529,7 @@ class EbicsFile(models.Model):
.create( .create(
{ {
"name": self.name, "name": self.name,
"datas": st_data["data"], "raw": st_data["data"],
"store_fname": self.name,
} }
) )
) )
@@ -565,7 +563,7 @@ class EbicsFile(models.Model):
Statements without transactions are removed. Statements without transactions are removed.
""" """
datas = [] datas = []
file_data = base64.b64decode(self.data) file_data = bytes(self.data)
root = etree.fromstring(file_data, parser=etree.XMLParser(recover=True)) root = etree.fromstring(file_data, parser=etree.XMLParser(recover=True))
if root is None: if root is None:
message = self.env._("Invalid XML file.") message = self.env._("Invalid XML file.")
@@ -623,7 +621,7 @@ class EbicsFile(models.Model):
"acc_number": acc_number, "acc_number": acc_number,
"journal_id": journal.id, "journal_id": journal.id,
"company_id": journal.company_id.id, "company_id": journal.company_id.id,
"data": base64.b64encode(etree.tostring(root_new)), "data": etree.tostring(root_new),
} }
) )
-29
View File
@@ -8,33 +8,4 @@
<field name="name">EBICS Manager</field> <field name="name">EBICS Manager</field>
<field name="privilege_id" ref="res_groups_privilege_ebics_manager" /> <field name="privilege_id" ref="res_groups_privilege_ebics_manager" />
</record> </record>
<data noupdate="1">
<record id="ebics_config_comp_rule" model="ir.rule">
<field name="name">EBICS Configuration model company rule</field>
<field name="model_id" ref="model_ebics_config" />
<field eval="True" name="global" />
<field
name="domain_force"
>['|', ('company_ids', '=', False), ('company_ids', 'in', user.company_ids.ids)]</field>
</record>
<record id="ebics_userid_comp_rule" model="ir.rule">
<field name="name">EBICS UserID model company rule</field>
<field name="model_id" ref="model_ebics_userid" />
<field eval="True" name="global" />
<field
name="domain_force"
>['|', ('company_ids', '=', False), ('company_ids', 'in', user.company_ids.ids)]</field>
</record>
<record id="ebics_file_comp_rule" model="ir.rule">
<field name="name">EBICS File model company rule</field>
<field name="model_id" ref="model_ebics_file" />
<field eval="True" name="global" />
<field
name="domain_force"
>['|', ('company_ids', '=', False), ('company_ids', 'in', user.company_ids.ids)]</field>
</record>
</data>
</odoo> </odoo>
+15
View File
@@ -0,0 +1,15 @@
id,name,model_id,group_id/id,operation,domain
access_ebics_config_manager,ebics_config manager,ebics.config,account_ebics.group_ebics_manager,crud,
access_ebics_config_user,ebics_config user,ebics.config,account.group_account_invoice,r,
access_ebics_userid_manager,ebics_userid manager,ebics.userid,account_ebics.group_ebics_manager,crud,
access_ebics_userid_user,ebics_userid user,ebics.userid,account.group_account_invoice,r,
access_ebics_file_format_manager,ebics_file_format manager,ebics.file.format,account_ebics.group_ebics_manager,crud,
access_ebics_file_format_user,ebics_file_format user,ebics.file.format,account.group_account_invoice,r,
access_ebics_file_manager,ebics_file manager,ebics.file,account_ebics.group_ebics_manager,crud,
access_ebics_file_user,ebics_file user,ebics.file,account.group_account_invoice,cru,
access_ebics_change_passphrase,access_ebics_change_passphrase,ebics.change.passphrase,account_ebics.group_ebics_manager,cru,
access_ebics_xfer,access_ebics_xfer,ebics.xfer,account.group_account_invoice,cru,
access_ebics_admin_order,access_ebics_admin_order,ebics.admin.order,account_ebics.group_ebics_manager,cru,
ebics_config_comp_rule,EBICS Configuration model company rule,ebics.config,,crud,"['|', ('company_ids', '=', False), ('company_ids', 'in', company_ids)]"
ebics_userid_comp_rule,EBICS UserID model company rule,ebics.userid,,crud,"['|', ('company_ids', '=', False), ('company_ids', 'in', company_ids)]"
ebics_file_comp_rule,EBICS File model company rule,ebics.file,,crud,"['|', ('company_ids', '=', False), ('company_ids', 'in', company_ids)]"
1 id name model_id group_id/id operation domain
2 access_ebics_config_manager ebics_config manager ebics.config account_ebics.group_ebics_manager crud
3 access_ebics_config_user ebics_config user ebics.config account.group_account_invoice r
4 access_ebics_userid_manager ebics_userid manager ebics.userid account_ebics.group_ebics_manager crud
5 access_ebics_userid_user ebics_userid user ebics.userid account.group_account_invoice r
6 access_ebics_file_format_manager ebics_file_format manager ebics.file.format account_ebics.group_ebics_manager crud
7 access_ebics_file_format_user ebics_file_format user ebics.file.format account.group_account_invoice r
8 access_ebics_file_manager ebics_file manager ebics.file account_ebics.group_ebics_manager crud
9 access_ebics_file_user ebics_file user ebics.file account.group_account_invoice cru
10 access_ebics_change_passphrase access_ebics_change_passphrase ebics.change.passphrase account_ebics.group_ebics_manager cru
11 access_ebics_xfer access_ebics_xfer ebics.xfer account.group_account_invoice cru
12 access_ebics_admin_order access_ebics_admin_order ebics.admin.order account_ebics.group_ebics_manager cru
13 ebics_config_comp_rule EBICS Configuration model company rule ebics.config crud ['|', ('company_ids', '=', False), ('company_ids', 'in', company_ids)]
14 ebics_userid_comp_rule EBICS UserID model company rule ebics.userid crud ['|', ('company_ids', '=', False), ('company_ids', 'in', company_ids)]
15 ebics_file_comp_rule EBICS File model company rule ebics.file crud ['|', ('company_ids', '=', False), ('company_ids', 'in', company_ids)]
@@ -1,13 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_ebics_config_manager,ebics_config manager,model_ebics_config,group_ebics_manager,1,1,1,1
access_ebics_config_user,ebics_config user,model_ebics_config,account.group_account_invoice,1,0,0,0
access_ebics_userid_manager,ebics_userid manager,model_ebics_userid,group_ebics_manager,1,1,1,1
access_ebics_userid_user,ebics_userid user,model_ebics_userid,account.group_account_invoice,1,0,0,0
access_ebics_file_format_manager,ebics_file_format manager,model_ebics_file_format,group_ebics_manager,1,1,1,1
access_ebics_file_format_user,ebics_file_format user,model_ebics_file_format,account.group_account_invoice,1,0,0,0
access_ebics_file_manager,ebics_file manager,model_ebics_file,group_ebics_manager,1,1,1,1
access_ebics_file_user,ebics_file user,model_ebics_file,account.group_account_invoice,1,1,1,0
access_ebics_change_passphrase,access_ebics_change_passphrase,model_ebics_change_passphrase,group_ebics_manager,1,1,1,0
access_ebics_xfer,access_ebics_xfer,model_ebics_xfer,account.group_account_invoice,1,1,1,0
access_ebics_admin_order,access_ebics_admin_order,model_ebics_admin_order,group_ebics_manager,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_ebics_config_manager ebics_config manager model_ebics_config group_ebics_manager 1 1 1 1
3 access_ebics_config_user ebics_config user model_ebics_config account.group_account_invoice 1 0 0 0
4 access_ebics_userid_manager ebics_userid manager model_ebics_userid group_ebics_manager 1 1 1 1
5 access_ebics_userid_user ebics_userid user model_ebics_userid account.group_account_invoice 1 0 0 0
6 access_ebics_file_format_manager ebics_file_format manager model_ebics_file_format group_ebics_manager 1 1 1 1
7 access_ebics_file_format_user ebics_file_format user model_ebics_file_format account.group_account_invoice 1 0 0 0
8 access_ebics_file_manager ebics_file manager model_ebics_file group_ebics_manager 1 1 1 1
9 access_ebics_file_user ebics_file user model_ebics_file account.group_account_invoice 1 1 1 0
10 access_ebics_change_passphrase access_ebics_change_passphrase model_ebics_change_passphrase group_ebics_manager 1 1 1 0
11 access_ebics_xfer access_ebics_xfer model_ebics_xfer account.group_account_invoice 1 1 1 0
12 access_ebics_admin_order access_ebics_admin_order model_ebics_admin_order group_ebics_manager 1 1 1 0
+17 -17
View File
@@ -7,27 +7,11 @@
sequence="4" sequence="4"
/> />
<menuitem
id="ebics_xfer_menu_download"
name="EBICS Download"
parent="ebics_processing_menu"
action="ebics_xfer_action_download"
sequence="10"
/>
<menuitem
id="ebics_xfer_menu_upload"
name="EBICS Upload"
parent="ebics_processing_menu"
action="ebics_xfer_action_upload"
sequence="20"
/>
<menuitem <menuitem
id="ebics_file_menu" id="ebics_file_menu"
name="EBICS Files" name="EBICS Files"
parent="ebics_processing_menu" parent="ebics_processing_menu"
sequence="30" sequence="10"
/> />
<menuitem <menuitem
@@ -46,6 +30,22 @@
sequence="20" sequence="20"
/> />
<menuitem
id="ebics_xfer_menu_download"
name="EBICS Download"
parent="ebics_processing_menu"
action="ebics_xfer_action_download"
sequence="20"
/>
<menuitem
id="ebics_xfer_menu_upload"
name="EBICS Upload"
parent="ebics_processing_menu"
action="ebics_xfer_action_upload"
sequence="30"
/>
<menuitem <menuitem
id="ebics_menu" id="ebics_menu"
name="EBICS" name="EBICS"
+3 -4
View File
@@ -1,13 +1,13 @@
# Copyright 2009-2025 Noviat. # Copyright 2009-2025 Noviat.
# License LGPL-3 or later (https://www.gnu.org/licenses/lgpl). # License LGPL-3 or later (https://www.gnu.org/licenses/lgpl).
import base64
import logging import logging
from sys import exc_info from sys import exc_info
from traceback import format_exception from traceback import format_exception
from odoo import SUPERUSER_ID, api, fields, models from odoo import SUPERUSER_ID, api, fields, models
from odoo.exceptions import UserError from odoo.exceptions import UserError
from odoo.tools.binary import BinaryBytes
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
@@ -370,7 +370,7 @@ class EbicsXfer(models.TransientModel):
self.note = "" self.note = ""
client = self._setup_client() client = self._setup_client()
if client: if client:
upload_data = base64.decodebytes(self.upload_data) upload_data = bytes(self.upload_data)
ef_format = self.format_id ef_format = self.format_id
OrderID = False OrderID = False
try: try:
@@ -619,10 +619,9 @@ class EbicsXfer(models.TransientModel):
fn, fn,
) )
) )
data = base64.encodebytes(data)
ef_vals = { ef_vals = {
"name": fn, "name": fn,
"data": data, "data": BinaryBytes(data),
"date": fields.Datetime.now(), "date": fields.Datetime.now(),
"date_from": self.date_from, "date_from": self.date_from,
"date_to": self.date_to, "date_to": self.date_to,