Skip to main content
iVentureTeam

text_scheduled_date

New in Odoo 19, the text_scheduled_date widget renders the composer's Send Later button: a clock that opens a dialog with preset slots and a custom picker, then stores the choice in the wizard's scheduled_date field.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 25, 2026Updated August 25, 20266 min read
Technical nametext_scheduled_date
Field typeschar, text
Viewsform
Also registered asdatetime_scheduled_date, the same control for the datetime field on mail.scheduled.message
Modulemail, installed with Discuss and any messaging app
Used in core2 occurrences across 2 modules: the mail composer wizard and the hr_recruitment refuse wizard
VersionsOdoo 20.0, Odoo 19.0
No-code setupNo. Composer plumbing with no Studio path.
Alternativesdatetime_scheduled_date, datetime, remaining_days

What the Send Later button does

The text_scheduled_date widget is how Odoo 19's composer lets you write an email now and send it later. It renders a single button with a clock icon and the s hotkey. Clicking it opens a dialog with three presets, tomorrow morning at 8:00, tomorrow afternoon at 13:00, and Monday morning at 8:00, plus a custom datetime input. Saving writes the chosen moment back to the wizard; once set, the button highlights and reads Sending Aug 27, 8:00 AM in the user's locale format.

The source file explains its own naming: the composer stores the scheduled date in a text field while mail.scheduled.message uses a real datetime field, so the file registers two widgets around one shared component. text_scheduled_date serializes and deserializes the string; its sibling datetime_scheduled_date passes the luxon value through untouched.

What this means for your team

Send Later is one of those features that quietly changes how teams work: recruiters queue Friday rejections for Monday morning, salespeople writing at midnight schedule for 8:05, and support answers land inside business hours across time zones. The presets are the point. By making tomorrow morning one click, the widget steers users toward humane sending times instead of a full calendar they have to think about.

Odoo itself reuses the widget outside the composer, in the recruitment refuse wizard, which is the pattern to copy: any custom wizard that posts messages can offer the identical Send Later experience by adding one text field named scheduled_date and this widget, provided the server side honors the value the way mail.compose.message does.

Working examples

The core pattern: composer footer

<field name="scheduled_date"
       widget="text_scheduled_date"
       invisible="composition_batch or composition_mode != 'comment'"/>

Core hides the button in batch mode: mass sends are scheduled through the mailing machinery, not per-message. The recruitment refuse wizard ships the same field without conditions.

The sibling on Scheduled Messages

<field name="scheduled_date" widget="datetime_scheduled_date"/>

Same dialog, same presets, but bound to a datetime field and without the clear action, since a scheduled message must keep a date until sent or discarded.

Preset math and the two-widget split

The dialog seeds its custom picker with now plus one hour, minutes rounded up to the next multiple of five and seconds zeroed, and passes minDate: now so past moments cannot be picked. When reopened with an existing value, it reverse-matches the value against the three presets and preselects the matching radio, falling back to custom with the stored moment loaded. The Monday preset is computed as the next weekday 1, always in the future, so clicking it on a Monday schedules for the following week.

The two widgets differ in exactly two lines each: the value getter and the save shape. The text variant deserializes the stored string into a luxon DateTime and serializes back on save, writing an empty string to clear; the datetime variant passes the value straight through and sets isRemovable false, which removes the clear option from the dialog entirely.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Icon and internal typing changes visible on the development branch; see below.
Odoo 19.0VerifiedVerified against the shipped source, presets and hardcoded field name included.
Odoo 18.0Not availableWidget does not exist; the composer's send-later flow was internal.
Odoo 17.0Not availableWidget does not exist.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. The widget file is new in 19.0. Odoo 18's composer had its own send-later flow wired inside the composer component, not as a reusable field widget, so nothing carries over and nothing needs migrating; views written for 19 keep working on the development branch.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026, and the development branch is unstable until feature freeze, so treat the following as provisional; the page is re-verified after release.

The visible changes are cosmetic and internal: the clock icon moves from FontAwesome's fa-clock-o to the new oi set with data-icon="schedule", props gain runtime type declarations through the new Owl typing API, and dialog state moves to the proxy API. The hardcoded scheduled_date key, the presets, and both registrations are unchanged.

Common problems and fixes

SymptomCause and fix
Dialog saves but the field never changesThe widget writes to a literal scheduled_date key, and your field has a different name. Rename the wizard field to scheduled_date or extend the component to use props.name.
Send Later button missing from the composerCore hides it in batch mode and outside comment composition. Compose from a single record's chatter; batch sends schedule through mailing tools instead.
Cannot pick a time in the pastThe dialog passes minDate now to the picker on purpose. None needed; schedule forward or send immediately.
Preset radio not selected when reopening the dialogThe stored value no longer equals any preset, for example tomorrow 8:00 chosen yesterday. Expected: the dialog falls back to the custom option holding the stored moment.
Clear option missing on the Scheduled Message formThat form uses datetime_scheduled_date, which sets isRemovable false. Delete the scheduled message itself instead of clearing its date.

Send Later button vs the alternatives

WidgetBest forKey difference
text_scheduled_dateSend Later controls in message wizardsPreset slots plus picker, stored through a hardcoded scheduled_date key
datetime_scheduled_dateThe mail.scheduled.message formSame dialog on a real datetime field, without the clear action
datetimeOrdinary datetime entryGeneric picker, no presets, writes to its own field
remaining_daysDisplaying deadlinesRead-oriented relative display, not a scheduling control

The alternatives are generic date editors. Reach for them when the user is entering a date as data; keep text_scheduled_date when the date is an instruction attached to a send action, presets included.

Frequently asked questions

What is the text_scheduled_date widget in Odoo?+
It is the Send Later button in the Odoo 19 email composer. It opens a dialog with preset times, tomorrow 8:00, tomorrow 13:00, Monday 8:00, or a custom picker, and stores the chosen moment in the wizard's scheduled_date text field.
Why is it called text_scheduled_date when it handles dates?+
The composer wizard stores its scheduled date in a text field, while mail.scheduled.message uses a real datetime field. The same source file registers this widget for the text case and datetime_scheduled_date for the datetime case, sharing one component.
Can I use text_scheduled_date on my own wizard field?+
Yes, with one hard requirement: the field must be named scheduled_date, because the widget updates that key literally rather than using the field name it is placed on. Your server logic must then read the value when posting, as mail.compose.message does.
What are the preset options in the Send Later dialog?+
Tomorrow at 8:00, tomorrow at 13:00, and next Monday at 8:00, plus a custom datetime that defaults to one hour ahead rounded up to the next five minutes. Past dates are blocked by the picker's minimum date.
Why does the Send Later button not appear on mass mailings?+
The core composer view hides the field when composing in batch or outside comment mode. Batch scheduling belongs to the mailing queue, so the per-message button is deliberately restricted to single-recipient sends.
Is text_scheduled_date available before Odoo 19?+
No. The widget file is new in 19.0. Earlier versions implemented send-later inside the composer component itself, so there is no widget name to reference in views before 19.
Does Odoo 20 change the widget?+
The development branch shows only the clock icon moving to the new oi set and internal prop typing changes. Presets, the hardcoded field name, and both registrations are untouched so far. Final only when Odoo 20 ships in late September 2026.

Want composer features in your own workflows?

Send Later, templates, and scheduled messages are all reusable pieces if you know their conventions, like this widget's hardcoded field name. We extend Odoo's mail stack with custom wizards and scheduling logic for teams on Odoo 16 through 19.

Book a free consultation

How this page was produced

This page was verified by reading scheduled_date_field.js and scheduled_date_dialog.js on the Odoo 19.0 branch, confirming absence from 16.0 through 18.0, diffing against the public development branch, and checking the core usages in the composer and recruitment refuse wizards. The screenshot was captured on a clean Odoo 19 database. Corrections via our contact page are welcome.