account_file_uploader
The Upload action on the Accounting dashboard is a view widget: account_file_uploader. It files whatever you drop as attachments, then asks the journal to turn them into draft invoices or bills.
| Technical name | account_file_uploader |
|---|---|
| Views | kanban (view widget, |
| Module | account (Invoicing) |
| Used in core | 3 occurrences, all on the Accounting dashboard kanban in account |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0 |
| No-code setup | No. Added in view XML; end users just use the Upload action it renders |
| Alternatives | many2many_binary, binary, Chatter attachments |
What the account file uploader does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
template | string (attribute) | QWeb template name rendered as the upload trigger. Replace it to restyle the whole toggler; your template receives btnClass and linkText and must re-add any group gating.(default: account.JournalUploadLink) |
btnClass | string (attribute) | CSS classes applied to the default link. Core passes file_upload_kanban_action_a on the sale card and btn btn-primary oe_kanban_action elsewhere. |
title | string (attribute) | Text of the default link. Odoo 17 also read a linkText attribute; 18 and later read title only.(default: Upload) |
The rendered link is group-gated. The default account.JournalUploadLink template wraps the anchor in groups="account.group_account_invoice", so users outside Billing see nothing at all. If you supply your own template via the template attribute, that gating is yours to re-add.
Working examples
How one widget creates bills, invoices or entries
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | Partial / changed | Not released. Widget file unchanged; its base class is refactored. See below. |
| Odoo 19.0 | Verified | Verified against the shipped source; byte-identical to 18. |
| Odoo 18.0 | Verified | Split into its own file with the DocumentFileUploader base; linkText attribute removed. |
| Odoo 17.0 | Verified | Lives inside bills_upload.js; additionally accepts the linkText attribute. |
| Odoo 16.0 | Verified | Lives inside bills_upload.js with the same registration and behavior. |
Upgrade note. Odoo 17 also accepted a linkText attribute with a source TODO admitting it was not translatable; 18 removed it. Views that used linkText must switch to title when leaving 17. Everything else carries over unchanged from 16 through 19.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| The Upload link is missing for some users | The default template is wrapped in the account.group_account_invoice group. Grant the user Billing access, or ship a custom template without the gate. |
| Documents come in as journal entries instead of bills | The widget sits on a journal whose type is neither sale nor purchase, so default_move_type falls back to entry. Drop the files on the purchase journal card, or set the journal type correctly. |
| Upload works but no digitization happens | The widget only creates draft moves with attachments; OCR or AI extraction is a separate service. Enable the digitization service, or pair the flow with a custom extraction step. |
| Custom template renders but nothing happens on click | The replacement template does not trigger the FileUploader input the component wraps. Model your template on account.JournalUploadLink so the click reaches the file input. |
| shift+i does not trigger the dashboard widget | That hotkey belongs to the invoice list's upload button template, a sibling component. Use the list or kanban view's Upload button for the keyboard path. |
Account file uploader vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
account_file_uploader | Turning dropped files into draft invoices, bills or entries from the journal dashboard | A view widget that creates new documents; the journal's type decides what kind |
| many2many_binary | Attaching multiple files to the record being edited | A field widget writing ir.attachment links; it never creates accounting documents |
| binary | One file stored in a binary field on the record | Stores file content in a field; no document creation, no journal context |
Chatter attachments | Filing reference documents on any record | Attaches without creating anything; the uploader widget exists precisely to go one step further |
Frequently asked questions
Which document type does an upload create?+
Can I upload several files at once?+
Where does the original file end up?+
Can I reuse this widget on my own model?+
Does the widget do the OCR itself?+
Drowning in supplier PDFs every month end?
Upload is only the first step: the payoff comes when every dropped bill is read, coded and matched automatically. We build AI document processing pipelines on top of Odoo's intake flow, so accounts payable stops retyping invoices.
Book a free consultation