Skip to main content
iVentureTeam

account_batch_sending_summary

Before Odoo sends fifty invoices, it tells you how each one will go out. This widget is the read-only panel that shows that answer, and it reads the value exactly once.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 27, 20266 min read
Technical nameaccount_batch_sending_summary
Field typesjson
Viewsform
Moduleaccount, present wherever Invoicing or Accounting is installed
Used in core1 occurrence, the batch send wizard in account
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0
No-code setupNo. The summary has to be computed server side
Alternativeshtml, account_payment_register_html, grouped_view_widget, account_resequence_widget

What the batch sending summary does

Sending invoices in bulk is not one action. Some customers are set up for electronic invoicing, some get an email, some have to be printed, and some cannot be sent at all because something is missing. Firing that off blind is how a batch ends with a dozen silent failures.

Odoo's batch send wizard therefore computes a summary first: for the selection you made, how many documents will go out by which route. This widget is what puts that summary on screen. It takes the structure the server produced and renders it as a panel above the send button.

It does nothing else. There is no interaction, no option, no writing back. It is a display component registered as a field widget so that it can be positioned in a wizard form like any other field.

What this means for your team

The value here is the confirmation step. A user who can see that forty two invoices will be emailed and three cannot be sent has a decision to make before anything leaves the building, rather than a list of failures to investigate afterwards. On a monthly invoicing run that difference is a morning.

It also makes the sending configuration visible at the moment it matters. Customers who are missing an email address, or who are set to a delivery method that is not configured, surface here rather than in a log. That turns a technical setup problem into something the person running the batch can act on.

What the panel cannot do is fix anything. It is a report on a computation, so the corrections happen on the customers or the invoices, and the wizard has to be reopened to see the effect.

Working examples

The core usage

<field name="summary_data"
       widget="account_batch_sending_summary"
       invisible="not summary_data"
       nolabel="1"/>

The invisible expression is what keeps an empty panel off the screen. The widget itself renders whatever it is given.

On your own wizard

<field name="my_summary"
       widget="account_batch_sending_summary"
       invisible="not my_summary" nolabel="1"/>

Possible, but the template expects the structure the accounting wizard produces, so the server side has to match it.

What it will not do

<!-- no options are read, so this changes nothing -->
<field name="summary_data"
       widget="account_batch_sending_summary"
       options="{'anything': True}"/>

The registration has no extractor, so the options dictionary is never looked at.

A snapshot, not a live view

This is one of the smallest field widgets in Odoo core: a component with the standard field props, a template, and a setup that copies the field's value onto the instance. That single assignment is the only logic in the file.

Reading the value in setup rather than in a getter is the detail worth recording. A getter would re-read the record on every render and the panel would follow any change to the field. As written, the panel is a snapshot taken when the component was created. On this wizard that is invisible, because the summary is computed by the server before the form is rendered and never changes while it is open, but anyone reusing the widget on a form where the value can change should know it will not refresh.

The absence of a supported types declaration is also worth noting. It means the widget can be named on a field of any type without the framework objecting; whether it renders anything sensible depends entirely on whether the value matches what the template expects.

Everything visible, the grouping, the counts, the wording of each line, lives in the template and in the server-side computation. There is no client-side logic deciding what to show, which is why the panel can change between versions without the JavaScript file changing at all.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Byte-identical to Odoo 19 on the development branch.
Odoo 19.0VerifiedVerified against the shipped source. Byte-identical to Odoo 18.
Odoo 18.0VerifiedFirst version.
Odoo 17.0Not availableWidget does not exist.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. The widget arrived in Odoo 18 and the Odoo 18 and Odoo 19 files are byte-identical, so nothing needs attention on upgrade. What can change between versions is the structure the server computes and the template that renders it, so a custom module that produces its own summary should re-check the shape after an upgrade.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this can still change; we re-verify the page after release.

Byte-identical. The widget file on the development branch matches Odoo 19 exactly, including the single read in setup. Any change to what the panel shows on Odoo 20 will come from the server-side computation or the template rather than from this file.

Common problems and fixes

SymptomCause and fix
The panel is emptyThe server produced no summary for the current selection. Core hides the field in that case with an invisible expression; add one if you reused the widget.
The panel does not updateThe value is read once when the component starts. Reopen the wizard so the component is recreated.
Nothing renders at allThe value does not match the structure the template expects. Match the server-side computation to what the accounting wizard produces, or write your own display widget.
Options are ignoredThe registration has no extractor, so the options dictionary is never read. Nothing to fix; there is nothing to configure.
Missing widget errorThe accounting module is not installed in that database. Install Invoicing or Accounting.

Batch sending summary vs the alternatives

WidgetBest forKey difference
account_batch_sending_summaryShowing a server-computed preview of what a batch action will doA read-only panel with no options, rendering a snapshot of the field taken when the form opened
htmlFree-form server-generated contentRenders arbitrary markup with no fixed structure to match
account_payment_register_htmlA summary panel that also has one clickable actionSame read-only idea, with a single interaction built in
grouped_view_widgetTabular previews from a JSON payloadRenders configurable columns and groups rather than a fixed panel
account_resequence_widgetPreviewing a renumbering before applying itAnother read-only wizard preview, with its own payload shape

For a read-only panel of your own, this widget is only useful if you produce the exact structure its template expects. Where you control both sides, a small custom widget is usually clearer. Where the content is genuinely free-form, an HTML field computed on the server is the lighter answer, since it needs no JavaScript at all.

Frequently asked questions

What does the batch sending summary show?+
How the selected documents will be sent: which go out electronically, which by email, which need printing, and which cannot be sent. The breakdown is computed on the server; the widget only renders it.
Can I configure what it shows?+
No. The registration provides a component and nothing else, with no options and no extractor, so anything in the options dictionary is ignored. The content comes from the server.
Why does the panel not refresh?+
The component reads the field once when it starts and keeps that copy. In the core wizard the summary is computed before the form opens, so it never changes while you are looking at it.
Can I use it in my own wizard?+
Only if your server-side value has the same structure the template expects. Where you control both ends, a small custom widget is usually clearer.
Which versions have it?+
Odoo 18 onwards. The file is byte-identical in Odoo 18, Odoo 19 and on the Odoo 20 development branch.

Sending a hundred invoices should not be a leap of faith

Electronic invoicing, email delivery and the customer data behind both decide whether a monthly run goes out cleanly. We set up and test invoice sending in Odoo, including country e-invoicing, on versions 16 through 19.

Book a free consultation

How this page was produced

The single read in setup, the absence of options, extractor and supported types, and the component's lack of interaction were read from account_batch_sending_summary.js on the Odoo 19.0 branch. The usage and its visibility expression come from the batch send wizard view in the same module. Version coverage comes from the absence of the file on 16.0 and 17.0, and byte comparisons against 18.0 and the public development branch. Spotted an error? Tell us and we will correct the page.