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 IDNameModelTypeStatus
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)HandlerAuthTypeMethodsFlags
/web/hook/<string:rule_uuid> BaseAutomationController.call_webhook_http public http GET, POST csrf off sudo
Models touched (3)

New fields (26)
  • action_server_ids One2many → ir.actions.server
    compute='_compute_action_server_ids' context={'default_usage': 'base_automation'} readonly=False store=True string='Actions' args: 'ir.actions.server', 'base_automation_id'
  • active Boolean
    default=True help='When unchecked, the rule is hidden and will not be executed.'
  • description Html
    string='Description'
  • filter_domain Char
    compute='_compute_filter_domain' help='If present, this condition must be satisfied before executing the automation rule.' readonly=False store=True string='Apply on'
  • filter_pre_domain Char
    compute='_compute_filter_pre_domain' help='If present, this condition must be satisfied before the update of the record. Not checked on record creation.' readonly=False store=True string='Before Update Domain'
  • last_run Datetime
    copy=False readonly=True
  • log_webhook_calls Boolean
    default=False string='Log Calls'
  • model_id Many2one → ir.model
    domain=[('abstract', '=', False)] ondelete='cascade' required=True string='Model' tracking=True args: 'ir.model'
  • model_is_mail_thread Boolean
    related='model_id.is_mail_thread'
  • model_name Char
    inverse='_inverse_model_name' readonly=True related='model_id.model' string='Model Name'
  • name Char
    required=True string='Automation Rule Name' tracking=True translate=True
  • on_change_field_ids Many2many → ir.model.fields
    compute='_compute_on_change_field_ids' help='Fields that trigger the onchange.' readonly=False relation='base_automation_onchange_fields_rel' store=True string='On Change Fields Trigger' args: 'ir.model.fields'
  • previous_domain Char
    default=<expr> store=False
  • record_getter Char
    default="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_id Many2one → resource.calendar
    compute='_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=False store=True string='Use Calendar' args: 'resource.calendar'
  • trg_date_id Many2one → ir.model.fields
    compute='_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=False store=True string='Trigger Date' tracking=True args: 'ir.model.fields'
  • trg_date_range Integer
    compute='_compute_trg_date_range_data' readonly=False store=True string='Delay' tracking=True
  • trg_date_range_mode Selection
    compute='_compute_trg_date_range_data' readonly=False store=True string='Delay mode' tracking=True args: [('after', 'After'), ('before', 'Before')]
  • trg_date_range_type Selection
    compute='_compute_trg_date_range_data' readonly=False store=True string='Delay unit' tracking=True args: [('minutes', 'Minutes'), ('hour', 'Hours'), ('day', 'Days'), ('month', 'Months')]
  • trg_field_ref Many2oneReference
    compute='_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=False store=True string='Trigger Reference'
  • trg_field_ref_model_name Char
    compute='_compute_trg_field_ref_model_name' string='Trigger Field Model'
  • trg_selection_field_id Many2one → ir.model.fields.selection
    compute='_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=False store=True string='Trigger Field' args: 'ir.model.fields.selection'
  • trigger Selection
    compute='_compute_trigger' readonly=False required=True store=True string='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_ids Many2many → ir.model.fields
    compute='_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=False store=True string='Trigger Fields' args: 'ir.model.fields'
  • url Char
    compute='_compute_url' help='Use this URL in the third-party app to call this webhook.'
  • webhook_uuid Char
    copy=False default=<expr> readonly=True string='Webhook UUID'
Public methods (7)
  • 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_id Many2one → base.automation
    index='btree_not_null' ondelete='cascade' string='Automation Rule' args: 'base.automation'
  • usage Selection
    ondelete={'base_automation': 'cascade'} selection_add=[('base_automation', 'Automation Rule')]
Public methods (1)
  • 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…