From da986aa479b6dc8e1753887cb10c5e0bdf52eb74 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Wed, 26 Jun 2019 11:41:41 +0000 Subject: [PATCH 1/3] [FIX] l10n_fr_fec: backport fixes Backport of: a3519638a3a7f150c2aae141b22f74b6e528e930 fe9e7d47b8cd13819db0019070ce4a25732f0520 opw-2026861 --- addons/l10n_fr_fec/wizard/account_fr_fec.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/l10n_fr_fec/wizard/account_fr_fec.py b/addons/l10n_fr_fec/wizard/account_fr_fec.py index 42c21c4f675..4ea9a9cf24e 100644 --- a/addons/l10n_fr_fec/wizard/account_fr_fec.py +++ b/addons/l10n_fr_fec/wizard/account_fr_fec.py @@ -289,9 +289,9 @@ class AccountFrFec(models.TransientModel): END AS PieceRef, TO_CHAR(am.date, 'YYYYMMDD') AS PieceDate, - CASE WHEN aml.name IS NULL THEN '/' + CASE WHEN aml.name IS NULL OR aml.name = '' THEN '/' WHEN aml.name SIMILAR TO '[\t|\s|\n]*' THEN '/' - ELSE replace(aml.name, '|', '/') END AS EcritureLib, + ELSE replace(replace(aml.name, '|', '/'), '\t', '') END AS EcritureLib, replace(CASE WHEN aml.debit = 0 THEN '0,00' ELSE to_char(aml.debit, '000000000000000D99') END, '.', ',') AS Debit, replace(CASE WHEN aml.credit = 0 THEN '0,00' ELSE to_char(aml.credit, '000000000000000D99') END, '.', ',') AS Credit, CASE WHEN rec.name IS NULL THEN '' ELSE rec.name END AS EcritureLet, From d870749d79f079f9e88b9894c03fa24c97922c9f Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Wed, 26 Jun 2019 11:45:57 +0000 Subject: [PATCH 2/3] [FIX] l10n_fr_fec: remove new line - Make a SO with a product that have a carriage return in its description - Export FEC report The CSV contains new lines and is not correctly formatted. opw-2026861 closes odoo/odoo#34385 Signed-off-by: Nicolas Martinelli (nim) --- addons/l10n_fr_fec/wizard/account_fr_fec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/l10n_fr_fec/wizard/account_fr_fec.py b/addons/l10n_fr_fec/wizard/account_fr_fec.py index 4ea9a9cf24e..89be7525129 100644 --- a/addons/l10n_fr_fec/wizard/account_fr_fec.py +++ b/addons/l10n_fr_fec/wizard/account_fr_fec.py @@ -291,7 +291,7 @@ class AccountFrFec(models.TransientModel): TO_CHAR(am.date, 'YYYYMMDD') AS PieceDate, CASE WHEN aml.name IS NULL OR aml.name = '' THEN '/' WHEN aml.name SIMILAR TO '[\t|\s|\n]*' THEN '/' - ELSE replace(replace(aml.name, '|', '/'), '\t', '') END AS EcritureLib, + ELSE replace(replace(replace(aml.name, '|', '/'), '\t', ''), '\n', '') END AS EcritureLib, replace(CASE WHEN aml.debit = 0 THEN '0,00' ELSE to_char(aml.debit, '000000000000000D99') END, '.', ',') AS Debit, replace(CASE WHEN aml.credit = 0 THEN '0,00' ELSE to_char(aml.credit, '000000000000000D99') END, '.', ',') AS Credit, CASE WHEN rec.name IS NULL THEN '' ELSE rec.name END AS EcritureLet, From 5eb15c01b556620c77c0f7327494d4bf3117d115 Mon Sep 17 00:00:00 2001 From: Priyanka Kakadiya Date: Fri, 21 Jun 2019 11:45:00 +0000 Subject: [PATCH 3/3] [FIX] base, web: missing extension on binary downloads It's currently possible for binary downloads to be missing an extension entirely. Generate an extension from the mimetype and use that. Also ensure the existing extension (if any) matches the mimetype. Warning: this may require adding new mimetype/extensions pairs to the local mimetype database similar to f413d155df1c8f8fc15877fb6d9f737472291ae3. Also fix missing or incorrect filenames on records without a filename field: in some Odoo versions the client would send a filename of "null", resulting in a download of e.g. "null.pdf" instead of the attachment or inferred name. Task 2025716 closes odoo/odoo#34299 Signed-off-by: Xavier Morel (xmo) --- addons/web/static/src/js/views/form_widgets.js | 2 +- odoo/addons/base/ir/ir_http.py | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js index 25b4fbed8ba..515ba674eb7 100644 --- a/addons/web/static/src/js/views/form_widgets.js +++ b/addons/web/static/src/js/views/form_widgets.js @@ -1144,7 +1144,7 @@ var FieldBinary = common.AbstractField.extend(common.ReinitializeFieldMixin, { 'id': this.view.datarecord.id, 'field': this.name, 'filename_field': filename_fieldname, - 'filename': filename_field ? filename_field.get('value') : null, + 'filename': filename_field ? filename_field.get('value') : "", 'download': true, 'data': utils.is_bin_size(value) ? null : value, }, diff --git a/odoo/addons/base/ir/ir_http.py b/odoo/addons/base/ir/ir_http.py index df15e45df22..c01e6d4a4ea 100644 --- a/odoo/addons/base/ir/ir_http.py +++ b/odoo/addons/base/ir/ir_http.py @@ -303,9 +303,9 @@ class IrHttp(models.AbstractModel): if not filename: if filename_field in obj: filename = obj[filename_field] - elif module_resource_path: + if not filename and module_resource_path: filename = os.path.basename(module_resource_path) - else: + if not filename: filename = "%s-%s-%s" % (obj._name, obj.id, field) # mimetype @@ -320,6 +320,11 @@ class IrHttp(models.AbstractModel): if not mimetype: mimetype = guess_mimetype(base64.b64decode(content), default=default_mimetype) + # extension + extension = mimetypes.guess_extension(mimetype) + if extension and not filename.endswith(extension): + filename = "%s%s" % (filename, extension) + headers += [('Content-Type', mimetype), ('X-Content-Type-Options', 'nosniff')] # cache