[IMP] account_ebics - Backport the README rework from 19.0

This commit is contained in:
Jérémy Didderen authored and Didderen Jérémy committed 2026-10-11 16:24:07 +02:00
1 parent a658ce9bd4
commit 5e03a670bc
44 files changed
+727 -2697

No files matched your search

+34 -33
View File
@@ -1,50 +1,51 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: https://www.gnu.org/licenses/agpl
:alt: License: AGPL-3
=============================
EBICS - Scheduled File Import
=============================
============================================
Module to enable batch import of EBICS files
============================================
**Your statements arrive without anyone asking for them.**
This module adds a cron job for the automated import of EBICS files.
This module adds a scheduled action that downloads and processes the EBICS files of every
confirmed connection. This is what turns EBICS from a manual download into something your
morning no longer depends on.
|
.. image:: https://raw.githubusercontent.com/Noviat/account_ebics/18.0/account_ebics_batch/static/description/ebics_download.png
:alt: A downloaded camt.053 statement file in Odoo, ready to be processed
:width: 100%
A Log is created during the import in order to document import errors.
If errors have been detected, the Batch Import Log state is set to 'error'.
When all EBICS Files have been imported correctly, the Batch Import Log state is set to 'done'.
|
The user can reprocess the imported EBICS files in status 'draft' via the Log object 'REPROCESS' button until all errors have been cleared.
As an alternative, the user can force the Batch Import Log state to 'done'
(e.g. when the errors have been circumvented via manual encoding or the reprocessing of a single EBICS file).
|
Each run creates a **Batch Import Log**. When a file cannot be processed, the log is set to
*error* and records why; when every file is processed, it is set to *done*. From the log,
**Reprocess** retries the files still in draft until the errors are cleared. A log can also be
set to *done* by hand, for instance after a file was processed on its own or the movements
were entered manually.
Configuration
=============
Adapt the 'EBICS Batch Import' ir.cron job created during the module installation.
The scheduled action **EBICS Batch Import** is created **inactive** at installation, with a
daily interval. Activate it in *Settings > Technical > Automation > Scheduled Actions* (developer
mode), and adapt its interval if needed.
The cron job calls the following python method:
It calls the following method, on all confirmed connections::
|
model._batch_import()
.. code-block:: python
To limit it to some connections, pass their ids::
_batch_import()
model._batch_import(ebics_config_ids=[1, 3])
Part of the EBICS suite
=======================
The EBICS download will be performed on all confirmed EBICS connections.
This module extends **EBICS Banking Protocol** (``account_ebics``), the EBICS implementation
for Odoo developed and maintained by Noviat. Install it first:
https://github.com/Noviat/account_ebics
You can limit the automated operation to a subset of your EBICS connections via the ebics_config_ids parameter, e.g.
What EBICS is and what it changes, in plain language, with screen recordings of the flow:
https://www.noviat.com/ebics
|
.. code-block:: python
_batch_import(ebics_config_ids=[1,3])
Credits
=======
Developed and maintained by `Noviat <https://www.noviat.com>`_, Odoo integrator in Belgium,
specialised in accounting and finance since 2009. We configure the connection with your banks
and support you through the first cycles.
+3 -3
View File
@@ -2,13 +2,13 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "EBICS Files batch import",
"name": "EBICS - Scheduled File Import",
"version": "18.0.1.0.1",
"license": "AGPL-3",
"author": "Noviat",
"website": "https://www.noviat.com/",
"category": "Accounting & Finance",
"summary": "EBICS Files automated import and processing",
"summary": "Download and process your EBICS files automatically, on a schedule",
"depends": ["account_ebics"],
"data": [
"security/ir.model.access.csv",
@@ -17,5 +17,5 @@
"views/menu.xml",
],
"installable": True,
"images": ["static/description/cover.png"],
"images": ["static/description/banner.png"],
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 19 KiB

+35 -399
View File
@@ -1,406 +1,42 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.20.1: https://docutils.sourceforge.io/" />
<title>README.rst</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document">
<a class="reference external image-reference" href="https://www.gnu.org/licenses/agpl"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a>
<div class="section" id="module-to-enable-batch-import-of-ebics-files">
<h1>Module to enable batch import of EBICS files</h1>
<p>This module adds a cron job for the automated import of EBICS files.</p>
<div class="line-block">
<div class="line"><br /></div>
</div>
<p>A Log is created during the import in order to document import errors.
If errors have been detected, the Batch Import Log state is set to 'error'.</p>
<p>When all EBICS Files have been imported correctly, the Batch Import Log state is set to 'done'.</p>
<div class="line-block">
<div class="line"><br /></div>
</div>
<p>The user can reprocess the imported EBICS files in status 'draft' via the Log object 'REPROCESS' button until all errors have been cleared.</p>
<p>As an alternative, the user can force the Batch Import Log state to 'done'
(e.g. when the errors have been circumvented via manual encoding or the reprocessing of a single EBICS file).</p>
<div class="line-block">
<div class="line"><br /></div>
</div>
<!-- Generated from README.rst: edit the README, not this file. -->
<div class="section" id="ebics-scheduled-file-import">
<h1>EBICS - Scheduled File Import</h1>
<p><strong>Your statements arrive without anyone asking for them.</strong></p>
<p>This module adds a scheduled action that downloads and processes the EBICS files of every
confirmed connection. This is what turns EBICS from a manual download into something your
morning no longer depends on.</p>
<img alt="A downloaded camt.053 statement file in Odoo, ready to be processed" src="ebics_download.png" style="width: 100%;" />
<p>Each run creates a <strong>Batch Import Log</strong>. When a file cannot be processed, the log is set to
<em>error</em> and records why; when every file is processed, it is set to <em>done</em>. From the log,
<strong>Reprocess</strong> retries the files still in draft until the errors are cleared. A log can also be
set to <em>done</em> by hand, for instance after a file was processed on its own or the movements
were entered manually.</p>
<div class="section" id="configuration">
<h2>Configuration</h2>
<p>Adapt the 'EBICS Batch Import' ir.cron job created during the module installation.</p>
<p>The cron job calls the following python method:</p>
<div class="line-block">
<div class="line"><br /></div>
</div>
<pre class="code python literal-block">
<span class="name">_batch_import</span><span class="punctuation">()</span>
<p>The scheduled action <strong>EBICS Batch Import</strong> is created <strong>inactive</strong> at installation, with a
daily interval. Activate it in <em>Settings &gt; Technical &gt; Automation &gt; Scheduled Actions</em> (developer
mode), and adapt its interval if needed.</p>
<p>It calls the following method, on all confirmed connections:</p>
<pre class="literal-block">
model._batch_import()
</pre>
<p>The EBICS download will be performed on all confirmed EBICS connections.</p>
<p>You can limit the automated operation to a subset of your EBICS connections via the ebics_config_ids parameter, e.g.</p>
<div class="line-block">
<div class="line"><br /></div>
</div>
<pre class="code python literal-block">
<span class="name">_batch_import</span><span class="punctuation">(</span><span class="name">ebics_config_ids</span><span class="operator">=</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">])</span>
<p>To limit it to some connections, pass their ids:</p>
<pre class="literal-block">
model._batch_import(ebics_config_ids=[1, 3])
</pre>
</div>
<div class="section" id="part-of-the-ebics-suite">
<h2>Part of the EBICS suite</h2>
<p>This module extends <strong>EBICS Banking Protocol</strong> (<tt class="docutils literal">account_ebics</tt>), the EBICS implementation
for Odoo developed and maintained by Noviat. Install it first:
<a class="reference external" href="https://github.com/Noviat/account_ebics">https://github.com/Noviat/account_ebics</a></p>
<p>What EBICS is and what it changes, in plain language, with screen recordings of the flow:
<a class="reference external" href="https://www.noviat.com/ebics">https://www.noviat.com/ebics</a></p>
</div>
<div class="section" id="credits">
<h2>Credits</h2>
<p>Developed and maintained by <a class="reference external" href="https://www.noviat.com">Noviat</a>, Odoo integrator in Belgium,
specialised in accounting and finance since 2009. We configure the connection with your banks
and support you through the first cycles.</p>
</div>
</div>
</body>
</html>