mirror of
https://github.com/brain-tec/account_ebics.git
synced 2025-08-14 22:55:38 +00:00
11.0 - account_ebics - backport of 12.0 code to enable configuration of request types on FDL
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# Copyright 2009-2018 Noviat.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
# Copyright 2009-2022 Noviat.
|
||||
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
# Copyright 2009-2019 Noviat.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
# Copyright 2009-2022 Noviat.
|
||||
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
|
||||
|
||||
"""
|
||||
import logging
|
||||
|
@@ -1,5 +1,5 @@
|
||||
# Copyright 2009-2022 Noviat.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
|
||||
|
||||
import logging
|
||||
|
||||
@@ -74,12 +74,11 @@ class EbicsFile(models.Model):
|
||||
raise UserError(_(
|
||||
"You can only remove EBICS files in state 'Draft'."))
|
||||
# execute format specific actions
|
||||
ff = ebics_file.format_id.name
|
||||
ff = ebics_file.format_id.download_process_method
|
||||
if ff in ff_methods:
|
||||
if ff_methods[ff].get('unlink'):
|
||||
ff_methods[ff]['unlink'](ebics_file)
|
||||
elif ff[:7] == 'camt.05' and ff_methods[ff[:8]].get('unlink'):
|
||||
ff_methods[ff[:8]]['unlink'](self)
|
||||
# remove bank statements
|
||||
ebics_file.bank_statement_ids.unlink()
|
||||
return super(EbicsFile, self).unlink()
|
||||
|
||||
@@ -96,16 +95,12 @@ class EbicsFile(models.Model):
|
||||
self.ensure_one()
|
||||
self.note_process = ''
|
||||
ff_methods = self._file_format_methods()
|
||||
ff = self.format_id.name
|
||||
ff = self.format_id.download_process_method
|
||||
if ff in ff_methods:
|
||||
if ff_methods[ff].get('process'):
|
||||
res = ff_methods[ff]['process'](self)
|
||||
self.state = 'done'
|
||||
return res
|
||||
elif ff[:7] == 'camt.05' and ff_methods[ff[:8]].get('process'):
|
||||
res = ff_methods[ff[:8]]['process'](self)
|
||||
self.state = 'done'
|
||||
return res
|
||||
else:
|
||||
return self._process_undefined_format()
|
||||
|
||||
@@ -130,18 +125,21 @@ class EbicsFile(models.Model):
|
||||
for extra file formats.
|
||||
"""
|
||||
res = {
|
||||
'camt.xxx.cfonb120.stm':
|
||||
'cfonb120':
|
||||
{'process': self._process_cfonb120,
|
||||
'unlink': self._unlink_cfonb120},
|
||||
'camt.052':
|
||||
{'process': self._process_camt052,
|
||||
'unlink': self._unlink_camt052},
|
||||
'camt.053.001.02.stm':
|
||||
'camt.053':
|
||||
{'process': self._process_camt053,
|
||||
'unlink': self._unlink_camt053},
|
||||
'camt.054':
|
||||
{'process': self._process_camt054,
|
||||
'unlink': self._unlink_camt054},
|
||||
'pain.002':
|
||||
{'process': self._process_pain002,
|
||||
'unlink': self._unlink_pain002},
|
||||
}
|
||||
return res
|
||||
|
||||
@@ -294,6 +292,23 @@ class EbicsFile(models.Model):
|
||||
"""
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def _process_pain002(self):
|
||||
"""
|
||||
Placeholder for processing pain.002 files.
|
||||
TODO:
|
||||
add import logic based upon OCA 'account_payment_return_import'
|
||||
"""
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def _unlink_pain002(self):
|
||||
"""
|
||||
Placeholder for pain.002 specific actions before removing the
|
||||
EBICS data file.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def _process_undefined_format(self):
|
||||
raise UserError(_(
|
||||
"The current version of the 'account_ebics' module "
|
||||
|
@@ -1,5 +1,5 @@
|
||||
# Copyright 2009-2022 Noviat.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
@@ -7,21 +7,35 @@ from odoo import api, fields, models
|
||||
class EbicsFileFormat(models.Model):
|
||||
_name = 'ebics.file.format'
|
||||
_description = 'EBICS File Formats'
|
||||
_order = 'type,name'
|
||||
_order = 'type,name,order_type'
|
||||
|
||||
name = fields.Selection(
|
||||
selection=lambda self: self._selection_name(),
|
||||
string='Request Type', required=True)
|
||||
name = fields.Char(
|
||||
string='Request Type',
|
||||
required=True,
|
||||
help="E.g. camt.xxx.cfonb120.stm, pain.001.001.03.sct.\n"
|
||||
"Specify camt.052, camt.053, camt.054 for camt "
|
||||
"Order Types such as C53, Z53, C54, Z54.\n"
|
||||
"This name has to match the 'Request Type' in your "
|
||||
"EBICS contract for Order Type 'FDL' or 'FUL'.\n")
|
||||
type = fields.Selection(
|
||||
selection=[('down', 'Download'),
|
||||
('up', 'Upload')],
|
||||
required=True)
|
||||
order_type = fields.Selection(
|
||||
selection=lambda self: self._selection_order_type(),
|
||||
order_type = fields.Char(
|
||||
string='Order Type',
|
||||
help="For most banks is France you should use the "
|
||||
required=True,
|
||||
help="E.g. C53 (check your EBICS contract).\n"
|
||||
"For most banks in France you should use the "
|
||||
"format neutral Order Types 'FUL' for upload "
|
||||
"and 'FDL' for download.")
|
||||
download_process_method = fields.Selection(
|
||||
selection='_selection_download_process_method',
|
||||
help="Enable processing within Odoo of the downloaded file "
|
||||
"via the 'Process' button."
|
||||
"E.g. specify camt.053 to import a camt.053 file and create "
|
||||
"a bank statement.")
|
||||
# TODO:
|
||||
# move signature_class parameter so that it can be set per EBICS config
|
||||
signature_class = fields.Selection(
|
||||
selection=[('E', 'Single signature'),
|
||||
('T', 'Transport signature')],
|
||||
@@ -30,52 +44,19 @@ class EbicsFileFormat(models.Model):
|
||||
"ERP system when using class 'E' to prevent unauthorised "
|
||||
"users to make supplier payments."
|
||||
"\nLeave this field empty to use the default "
|
||||
"defined for your bank connection.")
|
||||
"defined for your EBICS Configuration.")
|
||||
description = fields.Char()
|
||||
suffix = fields.Char(
|
||||
required=True,
|
||||
help="Specify the filename suffix for this File Format."
|
||||
"\nE.g. camt.053.xml")
|
||||
"\nE.g. c53.xml")
|
||||
|
||||
@api.model
|
||||
def _selection_order_type(self):
|
||||
up = self._supported_upload_order_types()
|
||||
down = self._supported_download_order_types()
|
||||
selection = [(x, x) for x in up + down]
|
||||
return selection
|
||||
def _selection_download_process_method(self):
|
||||
methods = self.env['ebics.file']._file_format_methods().keys()
|
||||
return [(x, x) for x in methods]
|
||||
|
||||
def _supported_upload_order_types(self):
|
||||
return ['FUL', 'CCT', 'CDD', 'CDB', 'XE2', 'XE3']
|
||||
|
||||
def _supported_download_order_types(self):
|
||||
return ['FDL', 'C52', 'C53', 'C54']
|
||||
|
||||
@api.model
|
||||
def _selection_name(self):
|
||||
"""
|
||||
List of supported EBICS Request Types.
|
||||
Extend this method via a custom module when testing
|
||||
a new Request Type and make a PR for the
|
||||
account_ebics module when this new Request Type
|
||||
is working correctly.
|
||||
This PR should include at least updates to
|
||||
- 'data/ebics_file_format.xml'
|
||||
- 'models/ebics_file_format.py'
|
||||
An overview of the EBICS Request Types can be found in
|
||||
the doc folder of this module (EBICS_Annex2).
|
||||
"""
|
||||
request_types = [
|
||||
'camt.053.001.02.stm',
|
||||
'pain.001.001.03.sct',
|
||||
'pain.008.001.02.sdd',
|
||||
'pain.008.001.02.sbb',
|
||||
'camt.xxx.cfonb120.stm',
|
||||
'pain.001.001.02.sct',
|
||||
'camt.052',
|
||||
'camt.053',
|
||||
'camt.054',
|
||||
'pain.001',
|
||||
'pain.008',
|
||||
]
|
||||
selection = [(x, x) for x in request_types]
|
||||
return selection
|
||||
@api.onchange('type')
|
||||
def _onchange_type(self):
|
||||
if self.type == 'up':
|
||||
self.download_process_method = False
|
||||
|
@@ -1,5 +1,5 @@
|
||||
# Copyright 2009-2019 Noviat.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
# Copyright 2009-2022 Noviat.
|
||||
# License LGPL-3 or later (http://www.gnu.org/licenses/lpgl).
|
||||
|
||||
import logging
|
||||
from sys import exc_info
|
||||
|
Reference in New Issue
Block a user