diff --git a/CHANGELOG b/CHANGELOG
index e7d699396c..f276510188 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,5 @@
+* Allow to store SEPA message content on the file system
+
Version 5.2.0 - 2019-05-06
* Bug fixes (see mercurial logs for details)
* Remove unique constraint on SEPA identifier
diff --git a/doc/index.rst b/doc/index.rst
index 65d1e7b82b..0828d50f61 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -76,3 +76,16 @@ Party
The Party has a field `SEPA Creditor Identifier` used for the party of the
company.
+
+
+Configuration
+*************
+
+The account_payment_sepa module uses the section `account_payment_sepa` to
+retrieve some parameters:
+
+- `filestore`: a boolean value to store SEPA message in the FileStore.
+ The default value is `False`.
+
+- `store_prefix`: the prefix to use with the FileStore. The default value is
+ `None`.
diff --git a/payment.py b/payment.py
index 65e4a7f651..984d1bff6b 100644
--- a/payment.py
+++ b/payment.py
@@ -11,6 +11,7 @@ import genshi.template
from lxml import etree
from sql import Literal
+from trytond.config import config
from trytond.i18n import gettext
from trytond.pool import PoolMeta, Pool
from trytond.model import (ModelSQL, ModelView, Workflow, fields, dualmethod,
@@ -46,6 +47,14 @@ if not hasattr(ASTTransformer, 'visit_NameConstant'):
# Re-use visit_Name because _clone is deleted
ASTTransformer.visit_NameConstant = ASTTransformer.visit_Name
+if config.getboolean('account_payment_sepa', 'filestore', default=False):
+ file_id = 'message_file_id'
+ store_prefix = config.get(
+ 'account_payment_sepa', 'store_prefix', default=None)
+else:
+ file_id = None
+ store_prefix = None
+
class Journal(metaclass=PoolMeta):
__name__ = 'account.payment.journal'
@@ -613,7 +622,10 @@ class Message(Workflow, ModelSQL, ModelView):
'readonly': Eval('state') != 'draft',
}
_depends = ['state']
- message = fields.Text('Message', states=_states, depends=_depends)
+ message = fields.Binary('Message', filename='filename',
+ file_id=file_id, store_prefix=store_prefix,
+ states=_states, depends=_depends)
+ message_file_id = fields.Char("Message File ID", readonly=True)
filename = fields.Function(fields.Char('Filename'), 'get_filename')
type = fields.Selection([
('in', 'IN'),
diff --git a/tests/test_account_payment_sepa.py b/tests/test_account_payment_sepa.py
index 6b6b7c2b06..35ddddc6ac 100644
--- a/tests/test_account_payment_sepa.py
+++ b/tests/test_account_payment_sepa.py
@@ -138,7 +138,7 @@ def validate_file(flavor, kind, xsd=None):
message, = group.sepa_messages
assert message.type == 'out', message.type
assert message.state == 'waiting', message.state
- sepa_string = message.message.encode('utf-8')
+ sepa_string = bytes(message.message)
sepa_xml = etree.fromstring(sepa_string)
schema_file = os.path.join(os.path.dirname(__file__),
'%s.xsd' % xsd)
diff --git a/view/message_form.xml b/view/message_form.xml
index 23dbca1720..d4d3ad3d01 100644
--- a/view/message_form.xml
+++ b/view/message_form.xml
@@ -9,8 +9,7 @@ this repository contains the full copyright notices and license terms. -->
-
-
+