`ir.attachment` records do not require to have a filename set. In `AttachmentBox`, a filename is always set, although in case it's missing it was untranslated. I fixed that. In cases where `AttachmentBox` is not used but its underlying templates are rendered using other means, a user could get a client-side error like this one when browsing a record that had an attachment without filename: <details><summary>Error</summary> ``` Error: TypeError: dict.attachment.filename.split is not a function https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:26 Rastreo de error: anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:26:45 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous/<@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:340:33 foreach@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:180:25 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:338:25 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous/<@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:27:31 foreach@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:180:25 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:11:23 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:480:29 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:20:30 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:480:29 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:15:31 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:480:29 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:11:31 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:480:29 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 render@https://www.tecnativa.com/mail/static/src/js/thread_widget.js:183:28 _fetchAndRenderThread/<@https://www.tecnativa.com/mail/static/src/js/thread_field.js:124:36 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3276:89 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3276:89 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3283:104 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3283:104 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 rpc/<@https://www.tecnativa.com/web/static/src/js/services/ajax_service.js:16:29 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3276:89 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 genericJsonRpc/<@https://www.tecnativa.com/web/static/src/js/core/ajax.js:65:18 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3276:89 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3283:104 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 done@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:9275:42 callback@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:9685:57 ``` The error is produced when trying to render this line: https://github.com/odoo/odoo/blob/66c5053a3d1f8cb456929453a62869c95eccf86a/addons/mail/static/src/xml/thread.xml#L506 </details> This patch ensures all attachment has a filename, and fixes that problem. -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr @Tecnativa TT19555 closes odoo/odoo#37546 Forward-port-of: odoo/odoo#37253 X-original-commit: ebba3c9fa709dccf4cab91e9f37aa3eaa24c7d21 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>