TIP: You can type at any time to perform a new search.
Automation Rules
base_automation · odoo/odoo
- Repository
- odoo/odoo · module folder
- Module version
- 1.0
- Category
- Sales/Sales
- Folder size
- 2.47 MB
- License
- LGPL-3
- Application
- No
- Auto-installable
- No
- Website
- None
- Last tracking update
- 2026-08-15 22:44:18
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Thibault Delavallée, Odoo Translation Bot, Nicolas Martinelli, Aaron Bohy, Lucas Perais, Julien Castiaux, Julien Mougenot, std-odoo, Achraf (abz), Rémy Voet (ryv), Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, luvi, Julien Banken, Gaetan Vanden Bergh (gavb), Maximilien (malb), Victor Piryns (pivi), Levi Siuzdak (sile), Dylan Kiss (dyki), Bruno Boi, omra-odoo, Zelong Lin, Cyrus Robins, “Beekan”, Bruno Boi (boi), Lopes Marc (loma), Julien Segers (juse), Michaël Mattiello, Corentin Heinix (cohe), Krzysztof Magusiak (krma), Elijah Tay (elct), ramh, Bruno BOI
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- fieldservice_stage_server_action, mgmtsystem_audit, server_action_navigate, test_base_automation
- Description
This module allows to implement automation rules for any object. ================================================================ Use automation rules to automatically trigger actions for various screens. **Example:** A lead created by a specific user may be automatically set to a specific Sales Team, or an opportunity which still has status pending after 14 days might trigger an automatic reminder email.
Code Analysis ⓘ
Views touched (5)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_base_automation_form |
Automations | base.automation | form | New |
view_base_automation_kanban |
base.automation.kanban | base.automation | kanban | New |
view_base_automation_search |
base.automation.search | base.automation | search | New |
view_base_automation_tree |
base.automation.list | base.automation | list | New |
view_server_action_form |
Server Actions | ir.actions.server | form | Inherits base.view_server_action_form |
HTTP endpoints (1)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/web/hook/<string:rule_uuid> |
BaseAutomationController.call_webhook_http |
public | http | GET, POST | csrf off sudo |
Models touched (3)
New fields (26)
-
action_server_idsOne2many → ir.actions.servercompute='_compute_action_server_ids'context={'default_usage': 'base_automation'}readonly=Falsestore=Truestring='Actions' args: 'ir.actions.server', 'base_automation_id' -
activeBooleandefault=Truehelp='When unchecked, the rule is hidden and will not be executed.' -
descriptionHtmlstring='Description' -
filter_domainCharcompute='_compute_filter_domain'help='If present, this condition must be satisfied before executing the automation rule.'readonly=Falsestore=Truestring='Apply on' -
filter_pre_domainCharcompute='_compute_filter_pre_domain'help='If present, this condition must be satisfied before the update of the record. Not checked on record creation.'readonly=Falsestore=Truestring='Before Update Domain' -
last_runDatetimecopy=Falsereadonly=True -
log_webhook_callsBooleandefault=Falsestring='Log Calls' -
model_idMany2one → ir.modeldomain=[('abstract', '=', False)]ondelete='cascade'required=Truestring='Model'tracking=True args: 'ir.model' -
model_is_mail_threadBooleanrelated='model_id.is_mail_thread' -
model_nameCharinverse='_inverse_model_name'readonly=Truerelated='model_id.model'string='Model Name' -
nameCharrequired=Truestring='Automation Rule Name'tracking=Truetranslate=True -
on_change_field_idsMany2many → ir.model.fieldscompute='_compute_on_change_field_ids'help='Fields that trigger the onchange.'readonly=Falserelation='base_automation_onchange_fields_rel'store=Truestring='On Change Fields Trigger' args: 'ir.model.fields' -
previous_domainChardefault=<expr>store=False -
record_getterChardefault="model.env[payload.get('_model')].browse(int(payload.get('_id')))"help='This code will be run to find on which record the automation rule should be run.' -
trg_date_calendar_idMany2one → resource.calendarcompute='_compute_trg_date_calendar_id'help='When calculating a day-based timed condition, it is possible to use a calendar to compute the date based on working days.'readonly=Falsestore=Truestring='Use Calendar' args: 'resource.calendar' -
trg_date_idMany2one → ir.model.fieldscompute='_compute_trg_date_id'domain="[('model_id', '=', model_id), ('ttype', 'in', ('date', 'datetime'))]"help='When should the condition be triggered.\n If present, will be checked by the scheduler. If empty, will be checked at creation and update.'readonly=Falsestore=Truestring='Trigger Date'tracking=True args: 'ir.model.fields' -
trg_date_rangeIntegercompute='_compute_trg_date_range_data'readonly=Falsestore=Truestring='Delay'tracking=True -
trg_date_range_modeSelectioncompute='_compute_trg_date_range_data'readonly=Falsestore=Truestring='Delay mode'tracking=True args: [('after', 'After'), ('before', 'Before')] -
trg_date_range_typeSelectioncompute='_compute_trg_date_range_data'readonly=Falsestore=Truestring='Delay unit'tracking=True args: [('minutes', 'Minutes'), ('hour', 'Hours'), ('day', 'Days'), ('month', 'Months')] -
trg_field_refMany2oneReferencecompute='_compute_trg_field_ref'help='Some triggers need a reference to another field. This field is used to store it.'model_field='trg_field_ref_model_name'readonly=Falsestore=Truestring='Trigger Reference' -
trg_field_ref_model_nameCharcompute='_compute_trg_field_ref_model_name'string='Trigger Field Model' -
trg_selection_field_idMany2one → ir.model.fields.selectioncompute='_compute_trg_selection_field_id'domain="[('field_id', 'in', trigger_field_ids)]"help='Some triggers need a reference to a selection field. This field is used to store it.'readonly=Falsestore=Truestring='Trigger Field' args: 'ir.model.fields.selection' -
triggerSelectioncompute='_compute_trigger'readonly=Falserequired=Truestore=Truestring='Trigger'tracking=True args: [('on_stage_set', 'Stage is set to'), ('on_user_set', 'User is set'), ('on_tag_set', 'Tag is added'), ('on_state_set', 'State is set to'), ('on_priority_set', 'Priority is set to'), ('on_archive', 'On archived'), ('on_unarchive', 'On unarchived'), ('on_create', 'On create'), ('on_create_or_write', 'On create and edit'), ('on_write', 'On update'), ('on_unlink', 'On deletion'), ('on_change', 'On UI change'), ('on_time', 'Based on date field'), ('on_time_created', 'After creation'), ('on_time_updated', 'After last update'), ('on_message_received', 'On incoming message'), ('on_message_sent', 'On outgoing message'), ('on_webhook', 'On webhook')] -
trigger_field_idsMany2many → ir.model.fieldscompute='_compute_trigger_field_ids'help='The automation rule will be triggered if and only if one of these fields is updated.If empty, all fields are watched.'readonly=Falsestore=Truestring='Trigger Fields' args: 'ir.model.fields' -
urlCharcompute='_compute_url'help='Use this URL in the third-party app to call this webhook.' -
webhook_uuidCharcopy=Falsedefault=<expr>readonly=Truestring='Webhook UUID'
-
action_open_scheduled_action(self) -
action_rotate_webhook_uuid(self) -
action_view_webhook_logs(self) -
copy(self, default=None)Copy the actions of the automation while copying the automation itself. -
create(self, vals_list)@api.model_create_multi -
unlink(self) -
write(self, vals: dict)
New fields (2)
-
base_automation_idMany2one → base.automationindex='btree_not_null'ondelete='cascade'string='Automation Rule' args: 'base.automation' -
usageSelectionondelete={'base_automation': 'cascade'}selection_add=[('base_automation', 'Automation Rule')]
-
action_open_automation(self)
New fields (0)
No new fields.
Public methods (1)-
action_open_automation(self)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…