Events Organization

event
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/event
VERSION
VERSION 1.9
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Xavier Morel, Nicolas Martinelli, Aaron Bohy, Jeremy Kersten, Damien Bouvy, qsm-odoo, Julien Castiaux, Adrien Dieudonné, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, luvi, Renaud Thiry, Julien Banken, Louis Wicket (wil), Victor Piryns (pivi), amdi-odoo, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Antoine (ande), Louis Travaux, omra-odoo, lase@odoo.com, Jérémy Hennecart (jeh), Julien Carion (juca), adsh-odoo, nihp-odoo, Max Whale, Shaan Thakkar (THSH), yagp-odoo, abdelrahmanfawzy, khsr-odoo, Michaël Mattiello, Pierre Pulinckx, Bastien PIERRE, Krzysztof Magusiak (krma), defl, mojem, josm-odoo, Augustin (duau), adip-odoo, Yagnik ✗ (yagp), Karna, assh-odoo, saurabh, alan-odoo, Farah (ahmfa), ELCO, chpa-odoo, Claire Nguyen (clan), Romain ROSANO (rros)
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - barcodes
    - web
    - base
    - base_setup
    - mail
    - bus
    - web_tour
    - html_editor
    - phone_validation
    - portal
    - http_routing
    - auth_signup
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (65)
XML IDNameModelTypeStatus
attendee_list attendee_list ir.ui.view qweb New
event_default_descripton Event default description ir.ui.view qweb New
event_event_attendee_list event_event_attendee_list ir.ui.view qweb New
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_event_report_template_full_page_ticket event_event_report_template_full_page_ticket ir.ui.view qweb New
event_event_ticket_form_view event.event.ticket.view.form event.event.ticket form New
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event event.event.ticket form New
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket kanban New
event_event_ticket_view_tree event.event.ticket.view.list event.event.ticket xpath Inherits event_event_ticket_view_tree_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.list.from.event event.event.ticket list New
event_event_view_activity event.event.view.activity event.event activity New
event_event_view_form_quick_create event.event.form.quick_create event.event form New
event_question_view_form event.question.view.form event.question form New
event_question_view_list event.question.view.list event.question list New
event_question_view_list_add event.question.view.list.add event.question xpath Inherits event.event_question_view_list
event_question_view_search event.question.view.search event.question search New
event_registration_answer_view_graph event.registration.answer.view.graph event.registration.answer graph New
event_registration_answer_view_pivot event.registration.answer.view.pivot event.registration.answer pivot New
event_registration_answer_view_search event.registration.answer.view.search event.registration.answer search New
event_registration_answer_view_tree event.registration.answer.view.list event.registration.answer list New
event_registration_attendee_list event_registration_attendee_list ir.ui.view qweb New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
event_registration_report_template_full_page_ticket event_registration_report_template_full_page_ticket ir.ui.view qweb New
event_registration_report_template_responsive_html_ticket event_registration_report_template_responsive_html_ticket ir.ui.view qweb New
event_registration_view_kanban event.registration.kanban event.registration kanban New
event_registration_view_search_event_specific event.registration.view.search.event.specific event.registration xpath Inherits view_registration_search
event_report_full_page_ticket_layout event_report_full_page_ticket_layout ir.ui.view qweb New
event_report_template_a6_badge event_report_template_a6_badge ir.ui.view qweb New
event_report_template_badge_card event_report_template_badge_card ir.ui.view qweb New
event_report_template_foldable_badge event_report_template_foldable_badge ir.ui.view qweb New
event_report_template_formatted_event_address event_report_template_formatted_event_address ir.ui.view qweb New
event_report_template_four_per_sheet_badge event_report_template_four_per_sheet_badge ir.ui.view qweb New
event_report_template_full_page_ticket event_report_template_full_page_ticket ir.ui.view qweb New
event_stage_view_form event.stage.view.form event.stage form New
event_stage_view_tree event.stage.view.list event.stage list New
event_tag_category_view_form event.tag.category.view.form event.tag.category form New
event_tag_category_view_tree event.tag.category.view.list event.tag.category list New
event_tag_view_form event.tag.view.form event.tag form New
event_tag_view_tree event.tag.view.list event.tag list New
event_type_ticket_view_form event.type.ticket.view.form event.type.ticket xpath Inherits event_type_ticket_view_form_from_type
event_type_ticket_view_form_from_type event.type.ticket.view.form.from.type event.type.ticket form New
event_type_ticket_view_tree event.type.ticket.view.list event.type.ticket xpath Inherits event_type_ticket_view_tree_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.list.from.type event.type.ticket list New
event_type_view_search event.type.search event.type search New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits mail.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner div Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.list event.mail list New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.list event.registration list New
view_event_search event.event.search event.event search New
view_event_slot_calendar event.slot.calendar event.slot calendar New
view_event_slot_form event.slot.form event.slot form New
view_event_slot_multi_create_form event.slot.form event.slot form New
view_event_slot_tree event.slot.list event.slot list New
view_event_tree event.event.list event.event list New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.list event.type list New
view_registration_search event.registration.search event.registration search New
Models touched (19)

New fields (48)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    check_company=True default=<expr> string='Venue' tracking=True args: 'res.partner'
  • address_inline Char
    compute='_compute_address_inline' compute_sudo=True string='Venue (formatted for one line uses)'
  • address_search Many2one → res.partner
    compute='_compute_address_search' search='_search_address_search' string='Address' args: 'res.partner'
  • badge_format Selection
    default='A6' required=True selection=[('A4_french_fold', 'A4 foldable'), ('A6', 'A6'), ('four_per_sheet', '4 per sheet')] string='Badge Dimension'
  • badge_image Image
    max_height=1024 max_width=1024 args: 'Badge Background'
  • company_id Many2one → res.company
    change_default=True default=<expr> required=False string='Company' args: 'res.company'
  • country_id Many2one → res.country
    readonly=False related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    help='When the event is scheduled to take place (expressed in your local timezone on the form view).' required=True string='Start Date' tracking=True
  • date_end Datetime
    required=True string='End Date' tracking=True
  • date_tz Selection
    compute='_compute_date_tz' help='Indicates the timezone in which the event dates/times will be displayed on the website.' precompute=True readonly=False required=True store=True string='Display Timezone' args: _tz_get
  • description Html
    default=_default_description sanitize_attributes=False sanitize_form=False string='Description' translate=html_translate
  • event_mail_ids One2many → event.mail
    compute='_compute_event_mail_ids' copy=True readonly=False store=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_registrations_open Boolean
    compute='_compute_event_registrations_open' compute_sudo=True help='Registrations are open if:\n- the event is not ended or not cancelled\n- there are seats available on event\n- the tickets are sellable (if ticketing is used)' args: 'Registration open'
  • event_registrations_sold_out Boolean
    compute='_compute_event_registrations_sold_out' compute_sudo=True help='The event is sold out if no more seats are available on event. If ticketing is used and all tickets are sold out, the event will be sold out.' args: 'Sold Out'
  • event_registrations_started Boolean
    compute='_compute_event_registrations_started' help='registrations have started if the current datetime is after the earliest starting date of tickets.' args: 'Registrations started'
  • event_share_url Char
    compute='_compute_event_share_url' string='Event Share URL'
  • event_slot_count Integer
    compute='_compute_event_slot_count' args: 'Slots Count'
  • event_slot_ids One2many → event.slot
    copy=True args: 'event.slot', 'event_id', 'Slots'
  • event_ticket_ids One2many → event.event.ticket
    compute='_compute_event_ticket_ids' copy=True precompute=True readonly=False store=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
  • event_type_id Many2one → event.type
    help='Choose a template to auto-fill tickets, communications, descriptions and other fields.' ondelete='set null' string='Template' args: 'event.type'
  • event_url Char
    compute='_compute_event_url' help='Link where the online event will take place.' readonly=False store=True string='Online Event URL'
  • general_question_ids Many2many → event.question
    domain=[('once_per_order', '=', True)] string='General Questions' args: 'event.question', 'event_event_event_question_rel'
  • is_finished Boolean
    compute='_compute_is_finished' search='_search_is_finished'
  • is_multi_slots Boolean
    copy=True help='Allow multiple time slots. The communications, the maximum number of attendees and the maximum number of tickets registrations are defined for each time slot instead of the whole event.' args: 'Is Multi Slots'
  • is_one_day Boolean
    compute='_compute_field_is_one_day'
  • is_ongoing Boolean
    compute='_compute_is_ongoing' search='_search_is_ongoing' args: 'Is Ongoing'
  • kanban_state Selection
    compute='_compute_kanban_state' copy=False default='normal' readonly=False store=True tracking=True args: [('normal', 'In Progress'), ('done', 'Ready for Next Stage'), ('blocked', 'Blocked'), ('cancel', 'Cancelled')]
  • lang Selection
    help='All the communication emails sent to attendees will be translated in this language.' string='Language' args: _lang_get
  • name Char
    required=True string='Event' translate=True
  • note Html
    compute='_compute_note' readonly=False store=True string='Note'
  • organizer_id Many2one → res.partner
    check_company=True default=<expr> string='Organizer' tracking=True args: 'res.partner'
  • question_ids Many2many → event.question
    compute='_compute_question_ids' precompute=True readonly=False store=True string='Questions' args: 'event.question', 'event_event_event_question_rel'
  • registration_ids One2many → event.registration
    string='Attendees' args: 'event.registration', 'event_id'
  • registration_properties_definition PropertiesDefinition
    args: 'Registration Properties'
  • seats_available Integer
    compute='_compute_seats' readonly=True store=False string='Available Seats'
  • seats_limited Boolean
    compute='_compute_seats_limited' precompute=True readonly=False required=True store=True args: 'Limit Attendees'
  • seats_max Integer
    compute='_compute_seats_max' help='For each event you can define a maximum registration of seats(number of attendees), above this number the registrations are not accepted. If the event has multiple slots, this maximum number is applied per slot.' readonly=False store=True string='Maximum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' readonly=True store=False string='Number of Registrations'
  • seats_taken Integer
    compute='_compute_seats' readonly=True store=False string='Number of Taken Seats'
  • seats_used Integer
    compute='_compute_seats' readonly=True store=False string='Number of Attendees'
  • specific_question_ids Many2many → event.question
    domain=[('once_per_order', '=', False)] string='Specific Questions' args: 'event.question', 'event_event_event_question_rel'
  • stage_id Many2one → event.stage
    copy=False default=_get_default_stage_id group_expand='_read_group_expand_full' ondelete='restrict' tracking=True args: 'event.stage'
  • start_sale_datetime Datetime
    compute='_compute_start_sale_date' help='If ticketing is used, contains the earliest starting sale date of tickets.' args: 'Start sale date'
  • tag_ids Many2many → event.tag
    compute='_compute_tag_ids' readonly=False store=True string='Tags' args: 'event.tag'
  • ticket_instructions Html
    compute='_compute_ticket_instructions' help='This information will be printed on your tickets.' readonly=False store=True translate=True args: 'Ticket Instructions'
  • use_barcode Boolean
    compute='_compute_use_barcode'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
Public methods (5)
  • action_open_slot_calendar(self)
  • action_set_done(self)
    Action which will move the events into the first next (by sequence) stage defined as "Ended" (if they are not already in an ended stage)
  • copy_data(self, default=None)
  • default_get(self, fields)
    @api.model
  • get_kiosk_url(self)

New fields (16)
  • color Char
    default='#875A7B' args: 'Color'
  • company_id Many2one → res.company
    related='event_id.company_id' args: 'res.company'
  • end_sale_datetime Datetime
    string='Registration End'
  • event_id Many2one → event.event
    index=True ondelete='cascade' required=True string='Event' args: 'event.event'
  • event_type_id Many2one
    ondelete='set null' required=False
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • is_launched Boolean
    compute='_compute_is_launched' string='Are sales launched'
  • is_sold_out Boolean
    compute='_compute_is_sold_out' help='Whether seats are not available for this ticket.' args: 'Sold Out'
  • limit_max_per_order Integer
    default=0 help='Maximum of this product per order.\nSet to 0 to ignore this rule' string='Limit per Order'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • sale_available Boolean
    compute='_compute_sale_available' compute_sudo=True help='Whether it is possible to sell these tickets' string='Is Available'
  • seats_available Integer
    compute='_compute_seats' store=False string='Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=False string='Reserved Seats'
  • seats_taken Integer
    compute='_compute_seats' store=False string='Taken Seats'
  • seats_used Integer
    compute='_compute_seats' store=False string='Used Seats'
  • start_sale_datetime Datetime
    string='Registration Start'
Public methods (1)
  • default_get(self, fields)
    @api.model

New fields (15)
  • error_datetime Datetime
    args: 'Last Error'
  • event_id Many2one → event.event
    index=True ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' help='Indicates when the communication is sent. If the event has multiple slots, the interval is related to each time slot instead of the whole event.' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event starts'), ('after_event_start', 'After the event started'), ('after_event', 'After the event ended'), ('before_event_end', 'Before the event ends')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • last_registration_id Many2one → event.registration
    args: 'event.registration', 'Last Attendee'
  • mail_count_done Integer
    copy=False readonly=True args: '# Sent'
  • mail_done Boolean
    copy=False readonly=True args: 'Sent'
  • mail_registration_ids One2many → event.mail.registration
    help='Communication related to event registrations' args: 'event.mail.registration', 'scheduler_id'
  • mail_slot_ids One2many → event.mail.slot
    help='Slot-based communication' args: 'event.mail.slot', 'scheduler_id'
  • mail_state Selection
    compute='_compute_mail_state' string='Global communication Status' args: [('running', 'Running'), ('scheduled', 'Scheduled'), ('sent', 'Sent'), ('error', 'Error'), ('cancelled', 'Cancelled')]
  • notification_type Selection
    compute='_compute_notification_type' string='Send' args: [('mail', 'Mail')]
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Schedule Date'
  • sequence Integer
    args: 'Display order'
  • template_ref Reference
    ondelete={'mail.template': 'cascade'} required=True selection=[('mail.template', 'Mail')] string='Template'
Public methods (3)
  • execute(self)
  • run(self, autocommit=False)
    @api.model
    Backward compatible method, notably if crons are not updated when migrating for some reason.
  • schedule_communications(self, autocommit=False)
    @api.model

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    index=True ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    index=True ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)

New fields (6)
  • event_slot_id Many2one → event.slot
    ondelete='cascade' required=True args: 'event.slot', 'Slot'
  • last_registration_id Many2one → event.registration
    args: 'event.registration', 'Last Attendee'
  • mail_count_done Integer
    copy=False readonly=True args: '# Sent'
  • mail_done Boolean
    copy=False readonly=True args: 'Sent'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Schedule Date'
  • scheduler_id Many2one → event.mail
    index=True ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (0)

No public methods.

New fields (12)
  • active Boolean
    default=True args: 'Active'
  • answer_ids One2many → event.question.answer
    copy=True args: 'event.question.answer', 'question_id', 'Answers'
  • event_count Integer
    compute='_compute_event_count' args: '# Events'
  • event_ids Many2many → event.event
    copy=False string='Events' args: 'event.event'
  • event_type_ids Many2many → event.type
    copy=False string='Event Types' args: 'event.type'
  • is_default Boolean
    help='Include by default in new events.' args: 'Default question'
  • is_mandatory_answer Boolean
    args: 'Mandatory Answer'
  • is_reusable Boolean
    compute='_compute_is_reusable' default=True help='Allow this question to be selected and reused for any future event. Always true for default questions.' store=True args: 'Is Reusable'
  • once_per_order Boolean
    help="Check this for order-level questions (e.g., 'Company Name') where the answer is the same for everyone." args: 'Ask once per order'
  • question_type Selection
    default='simple_choice' required=True string='Question Type' args: [('simple_choice', 'Selection'), ('text_box', 'Text Input'), ('name', 'Name'), ('email', 'Email'), ('phone', 'Phone'), ('company_name', 'Company')]
  • sequence Integer
    default=10
  • title Char
    required=True translate=True
Public methods (3)
  • action_event_view(self)
  • action_view_question_answers(self)
    Allow analyzing the attendees answers to event questions in a convenient way: - A graph view showing counts of each suggestion for simple_choice questions (Along with secondary pivot and list views) - A list view showing textual answers values for text_box questions.
  • write(self, vals)
    We add a check to prevent changing the question_type of a question that already has answers. Indeed, it would mess up the event.registration.answer (answer type not matching the question type).

New fields (3)
  • name Char
    required=True translate=True args: 'Answer'
  • question_id Many2one → event.question
    index=True ondelete='cascade' required=True args: 'event.question'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (26)
  • active Boolean
    default=True
  • barcode Char
    copy=False default=<expr> readonly=True string='Barcode'
  • company_id Many2one → res.company
    readonly=False related='event_id.company_id' store=True string='Company' args: 'res.company'
  • company_name Char
    compute='_compute_company_name' readonly=False store=True string='Company Name' tracking=5
  • date_closed Datetime
    compute='_compute_date_closed' readonly=False store=True string='Attended Date'
  • email Char
    compute='_compute_email' readonly=False store=True string='Email' tracking=3
  • event_begin_date Datetime
    compute='_compute_event_begin_date' search='_search_event_begin_date' args: 'Event Start Date'
  • event_date_range Char
    compute='_compute_date_range' args: 'Date Range'
  • event_end_date Datetime
    compute='_compute_event_end_date' search='_search_event_end_date' args: 'Event End Date'
  • event_id Many2one → event.event
    index=True required=True string='Event' tracking=True args: 'event.event'
  • event_organizer_id Many2one
    readonly=True related='event_id.organizer_id' string='Event Organizer'
  • event_slot_id Many2one → event.slot
    domain="[('event_id', '=', event_id)]" index='btree_not_null' ondelete='restrict' string='Slot' tracking=True args: 'event.slot'
  • event_ticket_id Many2one → event.event.ticket
    index='btree_not_null' ondelete='restrict' string='Ticket Type' tracking=True args: 'event.event.ticket'
  • event_user_id Many2one
    readonly=True related='event_id.user_id' string='Event Responsible'
  • is_multi_slots Boolean
    related='event_id.is_multi_slots' string='Is Event Multi Slots'
  • mail_registration_ids One2many → event.mail.registration
    readonly=True string='Scheduler Emails' args: 'event.mail.registration', 'registration_id'
  • name Char
    compute='_compute_name' index='trigram' readonly=False store=True string='Attendee Name' tracking=2
  • partner_id Many2one → res.partner
    index='btree_not_null' string='Booked by' tracking=1 args: 'res.partner'
  • phone Char
    compute='_compute_phone' readonly=False store=True string='Phone' tracking=4
  • registration_answer_choice_ids One2many → event.registration.answer
    domain=[('question_type', '=', 'simple_choice')] string='Attendee Selection Answers' args: 'event.registration.answer', 'registration_id'
  • registration_answer_ids One2many → event.registration.answer
    string='Attendee Answers' args: 'event.registration.answer', 'registration_id'
  • registration_properties Properties
    copy=True definition='event_id.registration_properties_definition' args: 'Properties'
  • state Selection
    copy=False default='open' help='Unconfirmed: registrations in a pending state waiting for an action (specific case, notably with sale status)\nRegistered: registrations considered taken by a client\nAttended: registrations for which the attendee attended the event\nCancelled: registrations cancelled manually' readonly=True string='Status' tracking=6 args: [('draft', 'Unconfirmed'), ('open', 'Registered'), ('done', 'Attended'), ('cancel', 'Cancelled')]
  • utm_campaign_id Many2one → utm.campaign
    index=True ondelete='set null' args: 'utm.campaign', 'Campaign'
  • utm_medium_id Many2one → utm.medium
    index=True ondelete='set null' args: 'utm.medium', 'Medium'
  • utm_source_id Many2one → utm.source
    index=True ondelete='set null' args: 'utm.source', 'Source'
Public methods (9)
  • action_cancel(self)
  • action_confirm(self)
  • action_send_badge_email(self)
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • action_set_done(self)
    Close Registration
  • action_set_draft(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • register_attendee(self, barcode, event_id)
    @api.model
  • write(self, vals)

New fields (7)
  • event_id Many2one → event.event
    related='registration_id.event_id' args: 'event.event'
  • partner_id Many2one → res.partner
    related='registration_id.partner_id' args: 'res.partner'
  • question_id Many2one → event.question
    domain="[('event_ids', 'in', event_id)]" ondelete='restrict' required=True args: 'event.question'
  • question_type Selection
    related='question_id.question_type'
  • registration_id Many2one → event.registration
    index=True ondelete='cascade' required=True args: 'event.registration'
  • value_answer_id Many2one → event.question.answer
    string='Suggested answer' args: 'event.question.answer'
  • value_text_box Text
    args: 'Text answer'
Public methods (0)

No public methods.

New fields (14)
  • color Integer
    default=0 args: 'Color'
  • date Date
    required=True args: 'Date'
  • date_tz Selection
    related='event_id.date_tz'
  • end_datetime Datetime
    compute='_compute_datetimes' store=True args: 'End Datetime'
  • end_hour Float
    help='Expressed in the event timezone.' required=True args: 'Ending Hour'
  • event_id Many2one → event.event
    index=True ondelete='cascade' required=True args: 'event.event', 'Event'
  • is_sold_out Boolean
    compute='_compute_is_sold_out' help='Whether seats are sold out for this slot.' args: 'Sold Out'
  • registration_ids One2many → event.registration
    string='Attendees' args: 'event.registration', 'event_slot_id'
  • seats_available Integer
    compute='_compute_seats' readonly=True store=False string='Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' readonly=True store=False string='Number of Registrations'
  • seats_taken Integer
    compute='_compute_seats' readonly=True store=False string='Number of Taken Seats'
  • seats_used Integer
    compute='_compute_seats' readonly=True store=False string='Number of Attendees'
  • start_datetime Datetime
    compute='_compute_datetimes' store=True args: 'Start Datetime'
  • start_hour Float
    help='Expressed in the event timezone.' required=True args: 'Starting Hour'
Public methods (0)

No public methods.

New fields (5)
  • description Text
    string='Stage description' translate=True
  • fold Boolean
    default=False string='Folded in Kanban'
  • name Char
    required=True string='Stage Name' translate=True
  • pipe_end Boolean
    default=False help='Events will automatically be moved into this stage when they are finished. The event moved into this stage will automatically be set as green.' string='End Stage'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (5)
  • category_id Many2one → event.tag.category
    index=True ondelete='cascade' required=True string='Category' args: 'event.tag.category'
  • category_sequence Integer
    related='category_id.sequence' store=True string='Category Sequence'
  • color Integer
    default=<expr> help='Tag color. No color means no display in kanban or front-end, to distinguish internal tags from public categorization tags.' string='Color Index'
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=0 args: 'Sequence'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=_default_sequence args: 'Sequence'
  • tag_ids One2many → event.tag
    string='Tags' args: 'event.tag', 'category_id'
Public methods (0)

No public methods.

New fields (11)
  • default_timezone Selection
    default=<expr> string='Timezone' args: _tz_get
  • event_type_mail_ids One2many → event.type.mail
    default=_default_event_mail_type_ids string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • event_type_ticket_ids One2many → event.type.ticket
    string='Tickets' args: 'event.type.ticket', 'event_type_id'
  • has_seats_limitation Boolean
    args: 'Limited Seats'
  • name Char
    required=True translate=True args: 'Event Template'
  • note Html
    string='Note'
  • question_ids Many2many → event.question
    copy=True default=_default_question_ids string='Questions' args: 'event.question'
  • seats_max Integer
    compute='_compute_seats_max' help='It will select this default maximum value when you choose this event' readonly=False store=True args: 'Maximum Registrations'
  • sequence Integer
    default=10
  • tag_ids Many2many → event.tag
    string='Tags' args: 'event.tag'
  • ticket_instructions Html
    help='This information will be printed on your tickets.' translate=True args: 'Ticket Instructions'
Public methods (0)

No public methods.

New fields (6)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event starts'), ('after_event_start', 'After the event started'), ('after_event', 'After the event ended'), ('before_event_end', 'Before the event ends')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notification_type Selection
    compute='_compute_notification_type' string='Send' args: [('mail', 'Mail')]
  • template_ref Reference
    ondelete={'mail.template': 'cascade'} required=True selection=[('mail.template', 'Mail')] string='Template'
Public methods (0)

No public methods.

New fields (6)
  • description Text
    help='A description of the ticket that you want to communicate to your customers.' translate=True args: 'Description'
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Category' args: 'event.type'
  • name Char
    default=<expr> required=True string='Name' translate=True
  • seats_limited Boolean
    compute='_compute_seats_limited' readonly=True store=True string='Limit Attendees'
  • seats_max Integer
    help='Define the number of available tickets. If you have too many registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Attendees'
  • sequence Integer
    default=10 args: 'Sequence'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • unlink(self)

New fields (13)
  • barcode_nomenclature_id Many2one → barcode.nomenclature
    readonly=False related='company_id.nomenclature_id' args: 'barcode.nomenclature'
  • google_maps_static_api_key Char
    compute='_compute_maps_static_api_key' config_parameter='google_maps.signed_static_api_key' readonly=False store=True args: 'Google Maps API key'
  • google_maps_static_api_secret Char
    compute='_compute_maps_static_api_secret' config_parameter='google_maps.signed_static_api_secret' readonly=False store=True args: 'Google Maps API secret'
  • module_event_booth Boolean
    args: 'Booth Management'
  • module_event_sale Boolean
    args: 'Tickets with Sale'
  • module_pos_event Boolean
    args: 'Tickets with PoS'
  • module_website_event_exhibitor Boolean
    args: 'Advanced Sponsors'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
  • module_website_event_track_live Boolean
    args: 'Live Mode'
  • module_website_event_track_quiz Boolean
    args: 'Quiz on Tracks'
  • use_event_barcode Boolean
    config_parameter='event.use_event_barcode' help='Enable or Disable Event Barcode functionality.' string='Use Event Barcode'
  • use_google_maps_static_api Boolean
    default=_default_use_google_maps_static_api args: 'Google Maps static API'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (3)
  • event_count Integer
    compute='_compute_event_count' groups='event.group_event_registration_desk' args: '# Events'
  • static_map_url Char
    compute='_compute_static_map_url'
  • static_map_url_is_valid Boolean
    compute='_compute_static_map_url_is_valid'
Public methods (1)
  • action_event_view(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/event
VERSION
VERSION 1.9
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Xavier ALT, Christophe Simonis, Xavier Morel, Joren Van Onder, Nicolas Martinelli, Aaron Bohy, Jeremy Kersten, Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Jorge Pinna Puissant, Xavier-Do, svs-odoo, Nasreddin Boulif (bon), Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, luvi, Renaud Thiry, Julien Banken, David Monnom (moda), Louis Wicket (wil), Julien (jula), miad-odoo, amdi-odoo, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Antoine (ande), Mayurrajsinh Rathod, Xavier Bol (xbo), Noe Antoine, omra-odoo, Andrzej(pian), dane@odoo.com, lase@odoo.com, Maryam Kia, reka-odoo, Jérémy Hennecart (jeh), vava-odoo, jobl, Julien Carion (juca), adsh-odoo, nihp-odoo, sami odoo, Louis (wil), Max Whale, Shaan Thakkar (THSH), Clément Cardot, guce, Pierre Pulinckx (PIPU), khsr-odoo, Khushi, Pierre Pulinckx (pipu), Bastien PIERRE, kusi-odoo, Krzysztof Magusiak (krma), bikh-odoo, defl, josm-odoo, alan-odoo, Farah (ahmfa)
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - barcodes
    - web
    - base
    - base_setup
    - mail
    - bus
    - web_tour
    - html_editor
    - phone_validation
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (60)
XML IDNameModelTypeStatus
attendee_list attendee_list ir.ui.view qweb New
event_default_descripton Event default description ir.ui.view qweb New
event_event_attendee_list event_event_attendee_list ir.ui.view qweb New
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_event_report_template_full_page_ticket event_event_report_template_full_page_ticket ir.ui.view qweb New
event_event_ticket_form_view event.event.ticket.view.form event.event.ticket form New
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event event.event.ticket form New
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket kanban New
event_event_ticket_view_tree event.event.ticket.view.list event.event.ticket xpath Inherits event_event_ticket_view_tree_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.list.from.event event.event.ticket list New
event_event_view_activity event.event.view.activity event.event activity New
event_event_view_form_quick_create event.event.form.quick_create event.event form New
event_question_view_form event.question.view.form event.question form New
event_registration_answer_view_graph event.registration.answer.view.graph event.registration.answer graph New
event_registration_answer_view_pivot event.registration.answer.view.pivot event.registration.answer pivot New
event_registration_answer_view_search event.registration.answer.view.search event.registration.answer search New
event_registration_answer_view_tree event.registration.answer.view.list event.registration.answer list New
event_registration_attendee_list event_registration_attendee_list ir.ui.view qweb New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
event_registration_report_template_full_page_ticket event_registration_report_template_full_page_ticket ir.ui.view qweb New
event_registration_report_template_responsive_html_ticket event_registration_report_template_responsive_html_ticket ir.ui.view qweb New
event_registration_view_kanban event.registration.kanban event.registration kanban New
event_registration_view_search_event_specific event.registration.view.search.event.specific event.registration xpath Inherits view_registration_search
event_report_full_page_ticket_layout event_report_full_page_ticket_layout ir.ui.view qweb New
event_report_template_a6_badge event_report_template_a6_badge ir.ui.view qweb New
event_report_template_badge_card event_report_template_badge_card ir.ui.view qweb New
event_report_template_esc_label_96x134_badge event_report_template_esc_label_96x134_badge ir.ui.view qweb New
event_report_template_esc_label_96x82_badge event_report_template_esc_label_96x82_badge ir.ui.view qweb New
event_report_template_foldable_badge event_report_template_foldable_badge ir.ui.view qweb New
event_report_template_formatted_event_address event_report_template_formatted_event_address ir.ui.view qweb New
event_report_template_four_per_sheet_badge event_report_template_four_per_sheet_badge ir.ui.view qweb New
event_report_template_full_page_ticket event_report_template_full_page_ticket ir.ui.view qweb New
event_stage_view_form event.stage.view.form event.stage form New
event_stage_view_tree event.stage.view.list event.stage list New
event_tag_category_view_form event.tag.category.view.form event.tag.category form New
event_tag_category_view_tree event.tag.category.view.list event.tag.category list New
event_tag_view_form event.tag.view.form event.tag form New
event_tag_view_tree event.tag.view.list event.tag list New
event_type_ticket_view_form event.type.ticket.view.form event.type.ticket xpath Inherits event_type_ticket_view_form_from_type
event_type_ticket_view_form_from_type event.type.ticket.view.form.from.type event.type.ticket form New
event_type_ticket_view_tree event.type.ticket.view.list event.type.ticket xpath Inherits event_type_ticket_view_tree_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.list.from.type event.type.ticket list New
event_type_view_search event.type.search event.type search New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits mail.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner div Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.list event.mail list New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.list event.registration list New
view_event_search event.event.search event.event search New
view_event_tree event.event.list event.event list New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.list event.type list New
view_registration_search event.registration.search event.registration search New
Models touched (17)

New fields (49)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    check_company=True default=<expr> string='Venue' tracking=True args: 'res.partner'
  • address_inline Char
    compute='_compute_address_inline' compute_sudo=True string='Venue (formatted for one line uses)'
  • address_search Many2one → res.partner
    compute='_compute_address_search' search='_search_address_search' string='Address' args: 'res.partner'
  • badge_format Selection
    default='A6' required=True selection=[('A4_french_fold', 'A4 foldable'), ('A6', 'A6'), ('four_per_sheet', '4 per sheet'), ('96x82', '96x82mm (Badge Printer)'), ('96x134', '96x134mm (Badge Printer)')] string='Badge Dimension'
  • badge_image Image
    max_height=1024 max_width=1024 args: 'Badge Background'
  • company_id Many2one → res.company
    change_default=True default=<expr> required=False string='Company' args: 'res.company'
  • country_id Many2one → res.country
    readonly=False related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    help='When the event is scheduled to take place (expressed in your local timezone on the form view).' required=True string='Start Date' tracking=True
  • date_begin_located Char
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True string='End Date' tracking=True
  • date_end_located Char
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    compute='_compute_date_tz' help='Indicates the timezone in which the event dates/times will be displayed on the website.' precompute=True readonly=False required=True store=True string='Display Timezone' args: _tz_get
  • description Html
    default=_default_description sanitize_attributes=False sanitize_form=False string='Description' translate=html_translate
  • event_mail_ids One2many → event.mail
    compute='_compute_event_mail_ids' copy=True readonly=False store=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_registrations_open Boolean
    compute='_compute_event_registrations_open' compute_sudo=True help='Registrations are open if:\n- the event is not ended\n- there are seats available on event\n- the tickets are sellable (if ticketing is used)' args: 'Registration open'
  • event_registrations_sold_out Boolean
    compute='_compute_event_registrations_sold_out' compute_sudo=True help='The event is sold out if no more seats are available on event. If ticketing is used and all tickets are sold out, the event will be sold out.' args: 'Sold Out'
  • event_registrations_started Boolean
    compute='_compute_event_registrations_started' help='registrations have started if the current datetime is after the earliest starting date of tickets.' args: 'Registrations started'
  • event_ticket_ids One2many → event.event.ticket
    compute='_compute_event_ticket_ids' copy=True readonly=False store=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
  • event_type_id Many2one → event.type
    help='Choose a template to auto-fill tickets, communications, descriptions and other fields.' ondelete='set null' string='Template' args: 'event.type'
  • general_question_ids One2many → event.question
    domain=[('once_per_order', '=', True)] args: 'event.question', 'event_id', 'General Questions'
  • is_finished Boolean
    compute='_compute_is_finished' search='_search_is_finished'
  • is_one_day Boolean
    compute='_compute_field_is_one_day'
  • is_ongoing Boolean
    compute='_compute_is_ongoing' search='_search_is_ongoing' args: 'Is Ongoing'
  • kanban_state Selection
    copy=False default='normal' args: [('normal', 'In Progress'), ('done', 'Done'), ('blocked', 'Blocked')]
  • kanban_state_label Char
    compute='_compute_kanban_state_label' store=True string='Kanban State Label' tracking=True
  • lang Selection
    help='All the communication emails sent to attendees will be translated in this language.' string='Language' args: _lang_get
  • legend_blocked Char
    readonly=True related='stage_id.legend_blocked' string='Kanban Blocked Explanation'
  • legend_done Char
    readonly=True related='stage_id.legend_done' string='Kanban Valid Explanation'
  • legend_normal Char
    readonly=True related='stage_id.legend_normal' string='Kanban Ongoing Explanation'
  • name Char
    required=True string='Event' translate=True
  • note Html
    compute='_compute_note' readonly=False store=True string='Note'
  • organizer_id Many2one → res.partner
    check_company=True default=<expr> string='Organizer' tracking=True args: 'res.partner'
  • question_ids One2many → event.question
    compute='_compute_question_ids' copy=True readonly=False store=True args: 'event.question', 'event_id', 'Questions'
  • registration_ids One2many → event.registration
    string='Attendees' args: 'event.registration', 'event_id'
  • registration_properties_definition PropertiesDefinition
    args: 'Registration Properties'
  • seats_available Integer
    compute='_compute_seats' readonly=True store=False string='Available Seats'
  • seats_limited Boolean
    compute='_compute_seats_limited' precompute=True readonly=False required=True store=True args: 'Limit Attendees'
  • seats_max Integer
    compute='_compute_seats_max' help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' readonly=False store=True string='Maximum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' readonly=True store=False string='Number of Registrations'
  • seats_taken Integer
    compute='_compute_seats' readonly=True store=False string='Number of Taken Seats'
  • seats_used Integer
    compute='_compute_seats' readonly=True store=False string='Number of Attendees'
  • specific_question_ids One2many → event.question
    domain=[('once_per_order', '=', False)] args: 'event.question', 'event_id', 'Specific Questions'
  • stage_id Many2one → event.stage
    copy=False default=_get_default_stage_id group_expand='_read_group_expand_full' ondelete='restrict' tracking=True args: 'event.stage'
  • start_sale_datetime Datetime
    compute='_compute_start_sale_date' help='If ticketing is used, contains the earliest starting sale date of tickets.' args: 'Start sale date'
  • tag_ids Many2many → event.tag
    compute='_compute_tag_ids' readonly=False store=True string='Tags' args: 'event.tag'
  • ticket_instructions Html
    compute='_compute_ticket_instructions' help='This information will be printed on your tickets.' readonly=False store=True translate=True args: 'Ticket Instructions'
  • use_barcode Boolean
    compute='_compute_use_barcode'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
Public methods (7)
  • action_set_done(self)
    Action which will move the events into the first next (by sequence) stage defined as "Ended" (if they are not already in an ended stage)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • get_kiosk_url(self)
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
  • write(self, vals)

New fields (15)
  • color Char
    default='#875A7B' args: 'Color'
  • company_id Many2one → res.company
    related='event_id.company_id' args: 'res.company'
  • end_sale_datetime Datetime
    string='Registration End'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • event_type_id Many2one
    ondelete='set null' required=False
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • is_launched Boolean
    compute='_compute_is_launched' string='Are sales launched'
  • is_sold_out Boolean
    compute='_compute_is_sold_out' help='Whether seats are not available for this ticket.' args: 'Sold Out'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • sale_available Boolean
    compute='_compute_sale_available' compute_sudo=True help='Whether it is possible to sell these tickets' string='Is Available'
  • seats_available Integer
    compute='_compute_seats' store=False string='Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=False string='Reserved Seats'
  • seats_taken Integer
    compute='_compute_seats' store=False string='Taken Seats'
  • seats_used Integer
    compute='_compute_seats' store=False string='Used Seats'
  • start_sale_datetime Datetime
    string='Registration Start'
Public methods (1)
  • default_get(self, fields)
    @api.model

New fields (13)
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • last_registration_id Many2one → event.registration
    args: 'event.registration', 'Last Attendee'
  • mail_count_done Integer
    copy=False readonly=True args: '# Sent'
  • mail_done Boolean
    copy=False readonly=True args: 'Sent'
  • mail_registration_ids One2many → event.mail.registration
    help='Communication related to event registrations' args: 'event.mail.registration', 'scheduler_id'
  • mail_state Selection
    compute='_compute_mail_state' string='Global communication Status' args: [('running', 'Running'), ('scheduled', 'Scheduled'), ('sent', 'Sent')]
  • notification_type Selection
    compute='_compute_notification_type' string='Send' args: [('mail', 'Mail')]
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Schedule Date'
  • sequence Integer
    args: 'Display order'
  • template_ref Reference
    ondelete={'mail.template': 'cascade'} required=True selection=[('mail.template', 'Mail')] string='Template'
Public methods (3)
  • execute(self)
  • run(self, autocommit=False)
    @api.model
    Backward compatible method, notably if crons are not updated when migrating for some reason.
  • schedule_communications(self, autocommit=False)
    @api.model

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)

New fields (8)
  • answer_ids One2many → event.question.answer
    copy=True args: 'event.question.answer', 'question_id', 'Answers'
  • event_id Many2one → event.event
    ondelete='cascade' args: 'event.event', 'Event'
  • event_type_id Many2one → event.type
    ondelete='cascade' args: 'event.type', 'Event Type'
  • is_mandatory_answer Boolean
    args: 'Mandatory Answer'
  • once_per_order Boolean
    help='If True, this question will be asked only once and its value will be propagated to every attendees.If not it will be asked for every attendee of a reservation.' args: 'Ask once per order'
  • question_type Selection
    default='simple_choice' required=True string='Question Type' args: [('simple_choice', 'Selection'), ('text_box', 'Text Input'), ('name', 'Name'), ('email', 'Email'), ('phone', 'Phone'), ('company_name', 'Company')]
  • sequence Integer
    default=10
  • title Char
    required=True translate=True
Public methods (2)
  • action_view_question_answers(self)
    Allow analyzing the attendees answers to event questions in a convenient way: - A graph view showing counts of each suggestions for simple_choice questions (Along with secondary pivot and list views) - A list view showing textual answers values for text_box questions.
  • write(self, vals)
    We add a check to prevent changing the question_type of a question that already has answers. Indeed, it would mess up the event.registration.answer (answer type not matching the question type).

New fields (3)
  • name Char
    required=True translate=True args: 'Answer'
  • question_id Many2one → event.question
    ondelete='cascade' required=True args: 'event.question'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (24)
  • active Boolean
    default=True
  • barcode Char
    copy=False default=<expr> readonly=True string='Barcode'
  • company_id Many2one → res.company
    readonly=False related='event_id.company_id' store=True string='Company' args: 'res.company'
  • company_name Char
    compute='_compute_company_name' readonly=False store=True string='Company Name' tracking=5
  • date_closed Datetime
    compute='_compute_date_closed' readonly=False store=True string='Attended Date'
  • email Char
    compute='_compute_email' readonly=False store=True string='Email' tracking=3
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_date_range Char
    compute='_compute_date_range' args: 'Date Range'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_organizer_id Many2one
    readonly=True related='event_id.organizer_id' string='Event Organizer'
  • event_ticket_id Many2one → event.event.ticket
    ondelete='restrict' string='Ticket Type' args: 'event.event.ticket'
  • event_user_id Many2one
    readonly=True related='event_id.user_id' string='Event Responsible'
  • mail_registration_ids One2many → event.mail.registration
    readonly=True string='Scheduler Emails' args: 'event.mail.registration', 'registration_id'
  • name Char
    compute='_compute_name' index='trigram' readonly=False store=True string='Attendee Name' tracking=2
  • partner_id Many2one → res.partner
    string='Booked by' tracking=1 args: 'res.partner'
  • phone Char
    compute='_compute_phone' readonly=False store=True string='Phone' tracking=4
  • registration_answer_choice_ids One2many → event.registration.answer
    domain=[('question_type', '=', 'simple_choice')] string='Attendee Selection Answers' args: 'event.registration.answer', 'registration_id'
  • registration_answer_ids One2many → event.registration.answer
    string='Attendee Answers' args: 'event.registration.answer', 'registration_id'
  • registration_properties Properties
    copy=True definition='event_id.registration_properties_definition' args: 'Properties'
  • state Selection
    copy=False default='open' help='Unconfirmed: registrations in a pending state waiting for an action (specific case, notably with sale status)\nRegistered: registrations considered taken by a client\nAttended: registrations for which the attendee attended the event\nCancelled: registrations cancelled manually' readonly=True string='Status' tracking=6 args: [('draft', 'Unconfirmed'), ('open', 'Registered'), ('done', 'Attended'), ('cancel', 'Cancelled')]
  • utm_campaign_id Many2one → utm.campaign
    index=True ondelete='set null' args: 'utm.campaign', 'Campaign'
  • utm_medium_id Many2one → utm.medium
    index=True ondelete='set null' args: 'utm.medium', 'Medium'
  • utm_source_id Many2one → utm.source
    index=True ondelete='set null' args: 'utm.source', 'Source'
Public methods (10)
  • action_cancel(self)
  • action_confirm(self)
  • action_send_badge_email(self)
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • action_set_done(self)
    Close Registration
  • action_set_draft(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
  • register_attendee(self, barcode, event_id)
    @api.model
  • toggle_active(self)
  • write(self, vals)

New fields (7)
  • event_id Many2one → event.event
    related='registration_id.event_id' args: 'event.event'
  • partner_id Many2one → res.partner
    related='registration_id.partner_id' args: 'res.partner'
  • question_id Many2one → event.question
    domain="[('event_id', '=', event_id)]" ondelete='restrict' required=True args: 'event.question'
  • question_type Selection
    related='question_id.question_type'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration'
  • value_answer_id Many2one → event.question.answer
    string='Suggested answer' args: 'event.question.answer'
  • value_text_box Text
    args: 'Text answer'
Public methods (0)

No public methods.

New fields (8)
  • description Text
    string='Stage description' translate=True
  • fold Boolean
    default=False string='Folded in Kanban'
  • legend_blocked Char
    default=<expr> help='Override the default value displayed for the blocked state for kanban selection.' prefetch='legend' required=True translate=True args: 'Red Kanban Label'
  • legend_done Char
    default=<expr> help='Override the default value displayed for the done state for kanban selection.' prefetch='legend' required=True translate=True args: 'Green Kanban Label'
  • legend_normal Char
    default=<expr> help='Override the default value displayed for the normal state for kanban selection.' prefetch='legend' required=True translate=True args: 'Grey Kanban Label'
  • name Char
    required=True string='Stage Name' translate=True
  • pipe_end Boolean
    default=False help='Events will automatically be moved into this stage when they are finished. The event moved into this stage will automatically be set as green.' string='End Stage'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (5)
  • category_id Many2one → event.tag.category
    ondelete='cascade' required=True string='Category' args: 'event.tag.category'
  • category_sequence Integer
    related='category_id.sequence' store=True string='Category Sequence'
  • color Integer
    default=<expr> help='Tag color. No color means no display in kanban or front-end, to distinguish internal tags from public categorization tags.' string='Color Index'
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=0 args: 'Sequence'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=_default_sequence args: 'Sequence'
  • tag_ids One2many → event.tag
    string='Tags' args: 'event.tag', 'category_id'
Public methods (0)

No public methods.

New fields (11)
  • default_timezone Selection
    default=<expr> string='Timezone' args: _tz_get
  • event_type_mail_ids One2many → event.type.mail
    default=_default_event_mail_type_ids string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • event_type_ticket_ids One2many → event.type.ticket
    string='Tickets' args: 'event.type.ticket', 'event_type_id'
  • has_seats_limitation Boolean
    args: 'Limited Seats'
  • name Char
    required=True translate=True args: 'Event Template'
  • note Html
    string='Note'
  • question_ids One2many → event.question
    copy=True default=_default_question_ids string='Questions' args: 'event.question', 'event_type_id'
  • seats_max Integer
    compute='_compute_seats_max' help='It will select this default maximum value when you choose this event' readonly=False store=True args: 'Maximum Registrations'
  • sequence Integer
    default=10
  • tag_ids Many2many → event.tag
    string='Tags' args: 'event.tag'
  • ticket_instructions Html
    help='This information will be printed on your tickets.' translate=True args: 'Ticket Instructions'
Public methods (0)

No public methods.

New fields (6)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notification_type Selection
    compute='_compute_notification_type' string='Send' args: [('mail', 'Mail')]
  • template_ref Reference
    ondelete={'mail.template': 'cascade'} required=True selection=[('mail.template', 'Mail')] string='Template'
Public methods (0)

No public methods.

New fields (6)
  • description Text
    help='A description of the ticket that you want to communicate to your customers.' translate=True args: 'Description'
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Category' args: 'event.type'
  • name Char
    default=<expr> required=True string='Name' translate=True
  • seats_limited Boolean
    compute='_compute_seats_limited' readonly=True store=True string='Limit Attendees'
  • seats_max Integer
    help='Define the number of available tickets. If you have too many registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Attendees'
  • sequence Integer
    default=10 args: 'Sequence'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • unlink(self)

New fields (14)
  • barcode_nomenclature_id Many2one → barcode.nomenclature
    readonly=False related='company_id.nomenclature_id' args: 'barcode.nomenclature'
  • google_maps_static_api_key Char
    compute='_compute_maps_static_api_key' config_parameter='google_maps.signed_static_api_key' readonly=False store=True args: 'Google Maps API key'
  • google_maps_static_api_secret Char
    compute='_compute_maps_static_api_secret' config_parameter='google_maps.signed_static_api_secret' readonly=False store=True args: 'Google Maps API secret'
  • module_event_booth Boolean
    args: 'Booth Management'
  • module_event_sale Boolean
    args: 'Tickets with Sale'
  • module_pos_event Boolean
    args: 'Tickets with PoS'
  • module_website_event_exhibitor Boolean
    args: 'Advanced Sponsors'
  • module_website_event_meet Boolean
    args: 'Discussion Rooms'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
  • module_website_event_track_live Boolean
    args: 'Live Mode'
  • module_website_event_track_quiz Boolean
    args: 'Quiz on Tracks'
  • use_event_barcode Boolean
    config_parameter='event.use_event_barcode' help='Enable or Disable Event Barcode functionality.' string='Use Event Barcode'
  • use_google_maps_static_api Boolean
    default=_default_use_google_maps_static_api args: 'Google Maps static API'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (3)
  • event_count Integer
    compute='_compute_event_count' groups='event.group_event_registration_desk' args: '# Events'
  • static_map_url Char
    compute='_compute_static_map_url'
  • static_map_url_is_valid Boolean
    compute='_compute_static_map_url_is_valid'
Public methods (1)
  • action_event_view(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/event
VERSION
VERSION 1.8
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Xavier ALT, Christophe Simonis, Xavier Morel, Joren Van Onder, qdp-odoo, Géry Debongnie, Aaron Bohy, Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Jorge Pinna Puissant, Aurélien Warnon, Xavier-Do, Victor Feyens, Joseph Caburnay, Julien Mougenot, Samuel Degueldre, Nasreddin Boulif (bon), Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, abd-msyukyu-odoo, Patrick Hoste, Renaud Thiry, Julien Banken, Thomas Lefebvre (thle), Andro Gvivradze, Louis Wicket (wil), althaf shaik, Julien (jula), Mahamadasif Ansari, miad-odoo, amdi-odoo, Pierre-Yves Dufays, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Hansun (hale), Bruno Boi, Antoine (ande), Michael (mcm), Mayurrajsinh Rathod, Adrien Schoffeniels, Xavier Bol (xbo), Brieuc-brd, Ivan Rasputin, Nguyễn Đại Dương, Noe Antoine, Andrzej(pian), dane@odoo.com, lase@odoo.com, reka-odoo, Jérémy Hennecart (jeh), jobl, Julien Carion (juca), adsh-odoo, Louis (wil), Shaan Thakkar (THSH), Elisabeth Dickinson, Pierre Pulinckx (pipu), Bastien PIERRE, Sahil Patel
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - barcodes
    - web
    - base
    - base_setup
    - mail
    - bus
    - web_tour
    - phone_validation
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (53)
XML IDNameModelTypeStatus
attendee_list attendee_list ir.ui.view qweb New
event_default_descripton Event default description ir.ui.view qweb New
event_event_attendee_list event_event_attendee_list ir.ui.view qweb New
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_event_report_template_full_page_ticket event_event_report_template_full_page_ticket ir.ui.view qweb New
event_event_ticket_form_view event.event.ticket.view.form event.event.ticket form New
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event event.event.ticket form New
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket kanban New
event_event_ticket_view_tree event.event.ticket.view.tree event.event.ticket xpath Inherits event_event_ticket_view_tree_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.tree.from.event event.event.ticket tree New
event_event_view_activity event.event.view.activity event.event activity New
event_event_view_form_quick_create event.event.form.quick_create event.event form New
event_registration_attendee_list event_registration_attendee_list ir.ui.view qweb New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
event_registration_report_template_full_page_ticket event_registration_report_template_full_page_ticket ir.ui.view qweb New
event_registration_report_template_responsive_html_ticket event_registration_report_template_responsive_html_ticket ir.ui.view qweb New
event_registration_view_kanban event.registration.kanban event.registration kanban New
event_registration_view_search_event_specific event.registration.view.search.event.specific event.registration xpath Inherits view_registration_search
event_report_full_page_ticket_layout event_report_full_page_ticket_layout ir.ui.view qweb New
event_report_template_a6_badge event_report_template_a6_badge ir.ui.view qweb New
event_report_template_badge_card event_report_template_badge_card ir.ui.view qweb New
event_report_template_foldable_badge event_report_template_foldable_badge ir.ui.view qweb New
event_report_template_formatted_event_address event_report_template_formatted_event_address ir.ui.view qweb New
event_report_template_four_per_sheet_badge event_report_template_four_per_sheet_badge ir.ui.view qweb New
event_report_template_full_page_ticket event_report_template_full_page_ticket ir.ui.view qweb New
event_stage_view_form event.stage.view.form event.stage form New
event_stage_view_tree event.stage.view.tree event.stage tree New
event_tag_category_view_form event.tag.category.view.form event.tag.category form New
event_tag_category_view_tree event.tag.category.view.tree event.tag.category tree New
event_tag_view_form event.tag.view.form event.tag form New
event_tag_view_tree event.tag.view.tree event.tag tree New
event_type_ticket_view_form event.type.ticket.view.form event.type.ticket xpath Inherits event_type_ticket_view_form_from_type
event_type_ticket_view_form_from_type event.type.ticket.view.form.from.type event.type.ticket form New
event_type_ticket_view_tree event.type.ticket.view.tree event.type.ticket xpath Inherits event_type_ticket_view_tree_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.tree.from.type event.type.ticket tree New
event_type_view_search event.type.search event.type search New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits mail.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner div Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
Models touched (14)

New fields (46)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    check_company=True default=<expr> string='Venue' tracking=True args: 'res.partner'
  • address_inline Char
    compute='_compute_address_inline' compute_sudo=True string='Venue (formatted for one line uses)'
  • address_search Many2one → res.partner
    compute='_compute_address_search' search='_search_address_search' string='Address' args: 'res.partner'
  • badge_format Selection
    default='A6' required=True selection=[('A4_french_fold', 'A4 foldable'), ('A6', 'A6'), ('four_per_sheet', '4 per sheet')] string='Badge Dimension'
  • badge_image Image
    max_height=1024 max_width=1024 args: 'Badge Background'
  • company_id Many2one → res.company
    change_default=True default=<expr> required=False string='Company' args: 'res.company'
  • country_id Many2one → res.country
    readonly=False related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    help='When the event is scheduled to take place (expressed in your local timezone on the form view).' required=True string='Start Date' tracking=True
  • date_begin_located Char
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True string='End Date' tracking=True
  • date_end_located Char
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    compute='_compute_date_tz' help='Indicates the timezone in which the event dates/times will be displayed on the website.' precompute=True readonly=False required=True store=True string='Display Timezone' args: _tz_get
  • description Html
    default=_default_description sanitize_attributes=False sanitize_form=False string='Description' translate=html_translate
  • event_mail_ids One2many → event.mail
    compute='_compute_event_mail_ids' copy=True readonly=False store=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_registrations_open Boolean
    compute='_compute_event_registrations_open' compute_sudo=True help='Registrations are open if:\n- the event is not ended\n- there are seats available on event\n- the tickets are sellable (if ticketing is used)' args: 'Registration open'
  • event_registrations_sold_out Boolean
    compute='_compute_event_registrations_sold_out' compute_sudo=True help='The event is sold out if no more seats are available on event. If ticketing is used and all tickets are sold out, the event will be sold out.' args: 'Sold Out'
  • event_registrations_started Boolean
    compute='_compute_event_registrations_started' help='registrations have started if the current datetime is after the earliest starting date of tickets.' args: 'Registrations started'
  • event_ticket_ids One2many → event.event.ticket
    compute='_compute_event_ticket_ids' copy=True readonly=False store=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
  • event_type_id Many2one → event.type
    ondelete='set null' string='Template' args: 'event.type'
  • is_finished Boolean
    compute='_compute_is_finished' search='_search_is_finished'
  • is_one_day Boolean
    compute='_compute_field_is_one_day'
  • is_ongoing Boolean
    compute='_compute_is_ongoing' search='_search_is_ongoing' args: 'Is Ongoing'
  • kanban_state Selection
    copy=False default='normal' args: [('normal', 'In Progress'), ('done', 'Done'), ('blocked', 'Blocked')]
  • kanban_state_label Char
    compute='_compute_kanban_state_label' store=True string='Kanban State Label' tracking=True
  • lang Selection
    help='All the communication emails sent to attendees will be translated in this language.' string='Language' args: _lang_get
  • legend_blocked Char
    readonly=True related='stage_id.legend_blocked' string='Kanban Blocked Explanation'
  • legend_done Char
    readonly=True related='stage_id.legend_done' string='Kanban Valid Explanation'
  • legend_normal Char
    readonly=True related='stage_id.legend_normal' string='Kanban Ongoing Explanation'
  • name Char
    required=True string='Event' translate=True
  • note Html
    compute='_compute_note' readonly=False store=True string='Note'
  • organizer_id Many2one → res.partner
    check_company=True default=<expr> string='Organizer' tracking=True args: 'res.partner'
  • registration_ids One2many → event.registration
    string='Attendees' args: 'event.registration', 'event_id'
  • registration_properties_definition PropertiesDefinition
    args: 'Registration Properties'
  • seats_available Integer
    compute='_compute_seats' readonly=True store=False string='Available Seats'
  • seats_limited Boolean
    compute='_compute_seats_limited' precompute=True readonly=False required=True store=True args: 'Limit Attendees'
  • seats_max Integer
    compute='_compute_seats_max' help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' readonly=False store=True string='Maximum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' readonly=True store=False string='Number of Registrations'
  • seats_taken Integer
    compute='_compute_seats' readonly=True store=False string='Number of Taken Seats'
  • seats_used Integer
    compute='_compute_seats' readonly=True store=False string='Number of Attendees'
  • stage_id Many2one → event.stage
    copy=False default=_get_default_stage_id group_expand='_read_group_stage_ids' ondelete='restrict' tracking=True args: 'event.stage'
  • start_sale_datetime Datetime
    compute='_compute_start_sale_date' help='If ticketing is used, contains the earliest starting sale date of tickets.' args: 'Start sale date'
  • tag_ids Many2many → event.tag
    compute='_compute_tag_ids' readonly=False store=True string='Tags' args: 'event.tag'
  • ticket_instructions Html
    compute='_compute_ticket_instructions' help='This information will be printed on your tickets.' readonly=False store=True translate=True args: 'Ticket Instructions'
  • use_barcode Boolean
    compute='_compute_use_barcode'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
Public methods (6)
  • action_set_done(self)
    Action which will move the events into the first next (by sequence) stage defined as "Ended" (if they are not already in an ended stage)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
  • write(self, vals)

New fields (15)
  • color Char
    default='#875A7B' args: 'Color'
  • company_id Many2one → res.company
    related='event_id.company_id' args: 'res.company'
  • end_sale_datetime Datetime
    string='Registration End'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • event_type_id Many2one
    ondelete='set null' required=False
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • is_launched Boolean
    compute='_compute_is_launched' string='Are sales launched'
  • is_sold_out Boolean
    compute='_compute_is_sold_out' help='Whether seats are not available for this ticket.' args: 'Sold Out'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • sale_available Boolean
    compute='_compute_sale_available' compute_sudo=True help='Whether it is possible to sell these tickets' string='Is Available'
  • seats_available Integer
    compute='_compute_seats' store=False string='Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=False string='Reserved Seats'
  • seats_taken Integer
    compute='_compute_seats' store=False string='Taken Seats'
  • seats_used Integer
    compute='_compute_seats' store=False string='Used Seats'
  • start_sale_datetime Datetime
    string='Registration Start'
Public methods (1)
  • default_get(self, fields)
    @api.model

New fields (13)
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • mail_count_done Integer
    copy=False readonly=True args: '# Sent'
  • mail_done Boolean
    copy=False readonly=True args: 'Sent'
  • mail_registration_ids One2many → event.mail.registration
    help='Communication related to event registrations' args: 'event.mail.registration', 'scheduler_id'
  • mail_state Selection
    compute='_compute_mail_state' string='Global communication Status' args: [('running', 'Running'), ('scheduled', 'Scheduled'), ('sent', 'Sent')]
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Schedule Date'
  • sequence Integer
    args: 'Display order'
  • template_model_id Many2one → ir.model
    compute='_compute_template_model_id' compute_sudo=True string='Template Model' args: 'ir.model'
  • template_ref Reference
    required=True selection='_selection_template_model' string='Template'
Public methods (4)
  • execute(self)
  • run(self, autocommit=False)
    @api.model
    Backward compatible method, notably if crons are not updated when migrating for some reason.
  • schedule_communications(self, autocommit=False)
    @api.model
  • set_template_ref_model(self)
    @api.onchange('notification_type')

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)

New fields (20)
  • active Boolean
    default=True
  • barcode Char
    copy=False default=<expr> readonly=True string='Barcode'
  • company_id Many2one → res.company
    readonly=False related='event_id.company_id' store=True string='Company' args: 'res.company'
  • company_name Char
    compute='_compute_company_name' readonly=False store=True string='Company Name' tracking=5
  • date_closed Datetime
    compute='_compute_date_closed' readonly=False store=True string='Attended Date'
  • email Char
    compute='_compute_email' readonly=False store=True string='Email' tracking=3
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_organizer_id Many2one
    readonly=True related='event_id.organizer_id' string='Event Organizer'
  • event_ticket_id Many2one → event.event.ticket
    ondelete='restrict' string='Event Ticket' args: 'event.event.ticket'
  • event_user_id Many2one
    readonly=True related='event_id.user_id' string='Event Responsible'
  • name Char
    compute='_compute_name' index='trigram' readonly=False store=True string='Attendee Name' tracking=2
  • partner_id Many2one → res.partner
    string='Booked by' tracking=1 args: 'res.partner'
  • phone Char
    compute='_compute_phone' readonly=False store=True string='Phone' tracking=4
  • registration_properties Properties
    copy=True definition='event_id.registration_properties_definition' args: 'Properties'
  • state Selection
    copy=False default='open' help='Unconfirmed: registrations in a pending state waiting for an action (specific case, notably with sale status)\nRegistered: registrations considered taken by a client\nAttended: registrations for which the attendee attended the event\nCancelled: registrations cancelled manually' readonly=True string='Status' tracking=6 args: [('draft', 'Unconfirmed'), ('open', 'Registered'), ('done', 'Attended'), ('cancel', 'Cancelled')]
  • utm_campaign_id Many2one → utm.campaign
    index=True ondelete='set null' args: 'utm.campaign', 'Campaign'
  • utm_medium_id Many2one → utm.medium
    index=True ondelete='set null' args: 'utm.medium', 'Medium'
  • utm_source_id Many2one → utm.source
    index=True ondelete='set null' args: 'utm.source', 'Source'
Public methods (12)
  • action_cancel(self)
  • action_confirm(self)
  • action_send_badge_email(self)
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • action_set_done(self)
    Close Registration
  • action_set_draft(self)
  • action_set_previous_state(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
  • get_date_range_str(self, lang_code=False)
  • register_attendee(self, barcode, event_id)
    @api.model
  • toggle_active(self)
  • write(self, vals)

New fields (8)
  • description Text
    string='Stage description' translate=True
  • fold Boolean
    default=False string='Folded in Kanban'
  • legend_blocked Char
    default=<expr> help='Override the default value displayed for the blocked state for kanban selection.' prefetch='legend' required=True translate=True args: 'Red Kanban Label'
  • legend_done Char
    default=<expr> help='Override the default value displayed for the done state for kanban selection.' prefetch='legend' required=True translate=True args: 'Green Kanban Label'
  • legend_normal Char
    default=<expr> help='Override the default value displayed for the normal state for kanban selection.' prefetch='legend' required=True translate=True args: 'Grey Kanban Label'
  • name Char
    required=True string='Stage Name' translate=True
  • pipe_end Boolean
    default=False help='Events will automatically be moved into this stage when they are finished. The event moved into this stage will automatically be set as green.' string='End Stage'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (5)
  • category_id Many2one → event.tag.category
    ondelete='cascade' required=True string='Category' args: 'event.tag.category'
  • category_sequence Integer
    related='category_id.sequence' store=True string='Category Sequence'
  • color Integer
    default=<expr> help='Tag color. No color means no display in kanban or front-end, to distinguish internal tags from public categorization tags.' string='Color Index'
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=0 args: 'Sequence'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=_default_sequence args: 'Sequence'
  • tag_ids One2many → event.tag
    string='Tags' args: 'event.tag', 'category_id'
Public methods (0)

No public methods.

New fields (10)
  • default_timezone Selection
    default=<expr> string='Timezone' args: _tz_get
  • event_type_mail_ids One2many → event.type.mail
    default=_default_event_mail_type_ids string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • event_type_ticket_ids One2many → event.type.ticket
    string='Tickets' args: 'event.type.ticket', 'event_type_id'
  • has_seats_limitation Boolean
    args: 'Limited Seats'
  • name Char
    required=True translate=True args: 'Event Template'
  • note Html
    string='Note'
  • seats_max Integer
    compute='_compute_seats_max' help='It will select this default maximum value when you choose this event' readonly=False store=True args: 'Maximum Registrations'
  • sequence Integer
    default=10
  • tag_ids Many2many → event.tag
    string='Tags' args: 'event.tag'
  • ticket_instructions Html
    help='This information will be printed on your tickets.' translate=True args: 'Ticket Instructions'
Public methods (0)

No public methods.

New fields (7)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • template_model_id Many2one → ir.model
    compute='_compute_template_model_id' compute_sudo=True string='Template Model' args: 'ir.model'
  • template_ref Reference
    required=True selection='_selection_template_model' string='Template'
Public methods (0)

No public methods.

New fields (6)
  • description Text
    help='A description of the ticket that you want to communicate to your customers.' translate=True args: 'Description'
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Category' args: 'event.type'
  • name Char
    default=<expr> required=True string='Name' translate=True
  • seats_limited Boolean
    compute='_compute_seats_limited' readonly=True store=True string='Limit Attendees'
  • seats_max Integer
    help='Define the number of available tickets. If you have too many registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Attendees'
  • sequence Integer
    default=10 args: 'Sequence'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • unlink(self)

New fields (13)
  • barcode_nomenclature_id Many2one → barcode.nomenclature
    readonly=False related='company_id.nomenclature_id' args: 'barcode.nomenclature'
  • google_maps_static_api_key Char
    compute='_compute_maps_static_api_key' config_parameter='google_maps.signed_static_api_key' readonly=False store=True args: 'Google Maps API key'
  • google_maps_static_api_secret Char
    compute='_compute_maps_static_api_secret' config_parameter='google_maps.signed_static_api_secret' readonly=False store=True args: 'Google Maps API secret'
  • module_event_booth Boolean
    args: 'Booth Management'
  • module_event_sale Boolean
    args: 'Tickets'
  • module_website_event_exhibitor Boolean
    args: 'Advanced Sponsors'
  • module_website_event_meet Boolean
    args: 'Discussion Rooms'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
  • module_website_event_track_live Boolean
    args: 'Live Mode'
  • module_website_event_track_quiz Boolean
    args: 'Quiz on Tracks'
  • use_event_barcode Boolean
    config_parameter='event.use_event_barcode' help='Enable or Disable Event Barcode functionality.' string='Use Event Barcode'
  • use_google_maps_static_api Boolean
    default=_default_use_google_maps_static_api args: 'Google Maps static API'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (3)
  • event_count Integer
    compute='_compute_event_count' groups='event.group_event_registration_desk' args: '# Events'
  • static_map_url Char
    compute='_compute_static_map_url'
  • static_map_url_is_valid Boolean
    compute='_compute_static_map_url_is_valid'
Public methods (1)
  • action_event_view(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/event
VERSION
VERSION 1.7
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Aaron Bohy, Yannick Tivisse, qsm-odoo, Romain Derie, Christophe Monniez, Julien Castiaux, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Nasreddin Boulif (bon), Tiffany Chang (tic), Nathan Marotte (nama), Rémy Voet (ryv), Ivàn Todorovich, Gorash, Miquel Raïch, ijas ahammed, Florian Charlier, Patrick Hoste, Nicolas Bayet, Fabio Barbero, Renaud Thiry, Thomas Lefebvre (thle), Andro Gvivradze, Louis Wicket (wil), Julien (jula), Mahamadasif Ansari, miad-odoo, amdi-odoo, Pierre-Yves Dufays, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Hansun (hale), Bruno Boi, Antoine (ande), Michael (mcm), Mayurrajsinh Rathod, Ivan Rasputin, Andrzej(pian), stefanorigano (SRI), lase@odoo.com, Jérémy Hennecart (jeh), jobl, umgu-odoo, stra
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:50
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (45)
XML IDNameModelTypeStatus
event_default_descripton Event default description ir.ui.view qweb New
event_event_report_template_foldable_badge event_event_report_template_foldable_badge ir.ui.view qweb New
event_event_report_template_full_page_ticket event_event_report_template_full_page_ticket ir.ui.view qweb New
event_event_ticket_form_view event.event.ticket.view.form event.event.ticket form New
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event event.event.ticket form New
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket kanban New
event_event_ticket_view_tree event.event.ticket.view.tree event.event.ticket xpath Inherits event_event_ticket_view_tree_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.tree.from.event event.event.ticket tree New
event_event_view_form_quick_create event.event.form.quick_create event.event form New
event_registration_report_template_foldable_badge event_registration_report_template_foldable_badge ir.ui.view qweb New
event_registration_report_template_full_page_ticket event_registration_report_template_full_page_ticket ir.ui.view qweb New
event_registration_view_kanban event.registration.kanban event.registration kanban New
event_registration_view_search_event_specific event.registration.view.search.event.specific event.registration xpath Inherits view_registration_search
event_report_full_page_ticket_layout event_report_full_page_ticket_layout ir.ui.view qweb New
event_report_template_foldable_badge event_report_template_foldable_badge ir.ui.view qweb New
event_report_template_formatted_event_address event_report_template_formatted_event_address ir.ui.view qweb New
event_report_template_full_page_ticket event_report_template_full_page_ticket ir.ui.view qweb New
event_stage_view_form event.stage.view.form event.stage form New
event_stage_view_tree event.stage.view.tree event.stage tree New
event_tag_category_view_form event.tag.category.view.form event.tag.category form New
event_tag_category_view_tree event.tag.category.view.tree event.tag.category tree New
event_tag_view_form event.tag.view.form event.tag form New
event_tag_view_tree event.tag.view.tree event.tag tree New
event_type_ticket_view_form event.type.ticket.view.form event.type.ticket xpath Inherits event_type_ticket_view_form_from_type
event_type_ticket_view_form_from_type event.type.ticket.view.form.from.type event.type.ticket form New
event_type_ticket_view_tree event.type.ticket.view.tree event.type.ticket xpath Inherits event_type_ticket_view_tree_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.tree.from.type event.type.ticket tree New
event_type_view_search event.type.search event.type search New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner div Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
Models touched (14)

New fields (43)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    default=<expr> domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Venue' tracking=True args: 'res.partner'
  • address_inline Char
    compute='_compute_address_inline' compute_sudo=True string='Venue (formatted for one line uses)'
  • address_search Many2one → res.partner
    compute='_compute_address_search' search='_search_address_search' string='Address' args: 'res.partner'
  • auto_confirm Boolean
    compute='_compute_auto_confirm' help='Autoconfirm Registrations. Registrations will automatically be confirmed upon creation.' readonly=False store=True string='Autoconfirmation'
  • company_id Many2one → res.company
    change_default=True default=<expr> required=False string='Company' args: 'res.company'
  • country_id Many2one → res.country
    readonly=False related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    help='When the event is scheduled to take place (expressed in your local timezone on the form view).' required=True string='Start Date' tracking=True
  • date_begin_located Char
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True string='End Date' tracking=True
  • date_end_located Char
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    compute='_compute_date_tz' help='Indicates the timezone in which the event dates/times will be displayed on the website.' precompute=True readonly=False required=True store=True string='Display Timezone' args: _tz_get
  • description Html
    default=_default_description sanitize_attributes=False sanitize_form=False string='Description' translate=html_translate
  • event_mail_ids One2many → event.mail
    compute='_compute_event_mail_ids' copy=True readonly=False store=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_registrations_open Boolean
    compute='_compute_event_registrations_open' compute_sudo=True help='Registrations are open if:\n- the event is not ended\n- there are seats available on event\n- the tickets are sellable (if ticketing is used)' args: 'Registration open'
  • event_registrations_sold_out Boolean
    compute='_compute_event_registrations_sold_out' compute_sudo=True help='The event is sold out if no more seats are available on event. If ticketing is used and all tickets are sold out, the event will be sold out.' args: 'Sold Out'
  • event_registrations_started Boolean
    compute='_compute_event_registrations_started' help='registrations have started if the current datetime is after the earliest starting date of tickets.' args: 'Registrations started'
  • event_ticket_ids One2many → event.event.ticket
    compute='_compute_event_ticket_ids' copy=True readonly=False store=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
  • event_type_id Many2one → event.type
    ondelete='set null' string='Template' args: 'event.type'
  • is_finished Boolean
    compute='_compute_is_finished' search='_search_is_finished'
  • is_one_day Boolean
    compute='_compute_field_is_one_day'
  • is_ongoing Boolean
    compute='_compute_is_ongoing' search='_search_is_ongoing' args: 'Is Ongoing'
  • kanban_state Selection
    copy=False default='normal' args: [('normal', 'In Progress'), ('done', 'Done'), ('blocked', 'Blocked')]
  • kanban_state_label Char
    compute='_compute_kanban_state_label' store=True string='Kanban State Label' tracking=True
  • legend_blocked Char
    readonly=True related='stage_id.legend_blocked' string='Kanban Blocked Explanation'
  • legend_done Char
    readonly=True related='stage_id.legend_done' string='Kanban Valid Explanation'
  • legend_normal Char
    readonly=True related='stage_id.legend_normal' string='Kanban Ongoing Explanation'
  • name Char
    required=True string='Event' translate=True
  • note Html
    compute='_compute_note' readonly=False store=True string='Note'
  • organizer_id Many2one → res.partner
    default=<expr> domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Organizer' tracking=True args: 'res.partner'
  • registration_ids One2many → event.registration
    string='Attendees' args: 'event.registration', 'event_id'
  • seats_available Integer
    compute='_compute_seats' readonly=True store=False string='Available Seats'
  • seats_expected Integer
    compute='_compute_seats' readonly=True store=False string='Number of Expected Attendees'
  • seats_limited Boolean
    compute='_compute_seats_limited' precompute=True readonly=False required=True store=True args: 'Limit Attendees'
  • seats_max Integer
    compute='_compute_seats_max' help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' readonly=False store=True string='Maximum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' readonly=True store=False string='Number of Registrations'
  • seats_unconfirmed Integer
    compute='_compute_seats' readonly=True store=False string='Unconfirmed Registrations'
  • seats_used Integer
    compute='_compute_seats' readonly=True store=False string='Number of Attendees'
  • stage_id Many2one → event.stage
    copy=False default=_get_default_stage_id group_expand='_read_group_stage_ids' ondelete='restrict' tracking=True args: 'event.stage'
  • start_sale_datetime Datetime
    compute='_compute_start_sale_date' help='If ticketing is used, contains the earliest starting sale date of tickets.' args: 'Start sale date'
  • tag_ids Many2many → event.tag
    compute='_compute_tag_ids' readonly=False store=True string='Tags' args: 'event.tag'
  • ticket_instructions Html
    compute='_compute_ticket_instructions' help='This information will be printed on your tickets.' readonly=False store=True translate=True args: 'Ticket Instructions'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
Public methods (7)
  • action_set_done(self)
    Action which will move the events into the first next (by sequence) stage defined as "Ended" (if they are not already in an ended stage)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
  • name_get(self)
    Adds ticket seats availability if requested by context.
  • write(self, vals)

New fields (14)
  • company_id Many2one → res.company
    related='event_id.company_id' args: 'res.company'
  • end_sale_datetime Datetime
    string='Registration End'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • event_type_id Many2one
    ondelete='set null' required=False
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • is_launched Boolean
    compute='_compute_is_launched' string='Are sales launched'
  • is_sold_out Boolean
    compute='_compute_is_sold_out' help='Whether seats are not available for this ticket.' args: 'Sold Out'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • sale_available Boolean
    compute='_compute_sale_available' compute_sudo=True help='Whether it is possible to sell these tickets' string='Is Available'
  • seats_available Integer
    compute='_compute_seats' store=False string='Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=False string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' store=False string='Unconfirmed Seats'
  • seats_used Integer
    compute='_compute_seats' store=False string='Used Seats'
  • start_sale_datetime Datetime
    string='Registration Start'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • name_get(self)
    Adds ticket seats availability if requested by context.

New fields (13)
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • mail_count_done Integer
    copy=False readonly=True args: '# Sent'
  • mail_done Boolean
    copy=False readonly=True args: 'Sent'
  • mail_registration_ids One2many → event.mail.registration
    help='Communication related to event registrations' args: 'event.mail.registration', 'scheduler_id'
  • mail_state Selection
    compute='_compute_mail_state' string='Global communication Status' args: [('running', 'Running'), ('scheduled', 'Scheduled'), ('sent', 'Sent')]
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Schedule Date'
  • sequence Integer
    args: 'Display order'
  • template_model_id Many2one → ir.model
    compute='_compute_template_model_id' compute_sudo=True string='Template Model' args: 'ir.model'
  • template_ref Reference
    required=True selection='_selection_template_model' string='Template'
Public methods (4)
  • execute(self)
  • run(self, autocommit=False)
    @api.model
    Backward compatible method, notably if crons are not updated when migrating for some reason.
  • schedule_communications(self, autocommit=False)
    @api.model
  • set_template_ref_model(self)
    @api.onchange('notification_type')

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)

New fields (18)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    compute='_compute_date_closed' readonly=False store=True string='Attended Date'
  • email Char
    compute='_compute_email' readonly=False store=True string='Email' tracking=11
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • event_organizer_id Many2one
    readonly=True related='event_id.organizer_id' string='Event Organizer'
  • event_ticket_id Many2one → event.event.ticket
    ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Event Ticket' args: 'event.event.ticket'
  • event_user_id Many2one
    readonly=True related='event_id.user_id' string='Event Responsible'
  • mobile Char
    compute='_compute_mobile' readonly=False store=True string='Mobile' tracking=13
  • name Char
    compute='_compute_name' index='trigram' readonly=False store=True string='Attendee Name' tracking=10
  • partner_id Many2one → res.partner
    string='Booked by' tracking=1 args: 'res.partner'
  • phone Char
    compute='_compute_phone' readonly=False store=True string='Phone' tracking=12
  • state Selection
    copy=False default='draft' readonly=True string='Status' tracking=True args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
  • utm_campaign_id Many2one → utm.campaign
    index=True ondelete='set null' args: 'utm.campaign', 'Campaign'
  • utm_medium_id Many2one → utm.medium
    index=True ondelete='set null' args: 'utm.medium', 'Medium'
  • utm_source_id Many2one → utm.source
    index=True ondelete='set null' args: 'utm.source', 'Source'
Public methods (11)
  • action_cancel(self)
  • action_confirm(self)
  • action_send_badge_email(self)
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • action_set_done(self)
    Close Registration
  • action_set_draft(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
  • get_date_range_str(self, lang_code=False)
  • name_get(self)
    Custom name_get implementation to better differentiate registrations linked to a given partner but with different name (one partner buying several registrations) * name, partner_id has no name -> take name * partner_id has name, name void or same -> take partner name * both have name: partner + name
  • toggle_active(self)
  • write(self, vals)

New fields (8)
  • description Text
    string='Stage description' translate=True
  • fold Boolean
    default=False string='Folded in Kanban'
  • legend_blocked Char
    default=<expr> help='Override the default value displayed for the blocked state for kanban selection.' prefetch='legend' required=True translate=True args: 'Red Kanban Label'
  • legend_done Char
    default=<expr> help='Override the default value displayed for the done state for kanban selection.' prefetch='legend' required=True translate=True args: 'Green Kanban Label'
  • legend_normal Char
    default=<expr> help='Override the default value displayed for the normal state for kanban selection.' prefetch='legend' required=True translate=True args: 'Grey Kanban Label'
  • name Char
    required=True string='Stage Name' translate=True
  • pipe_end Boolean
    default=False help='Events will automatically be moved into this stage when they are finished. The event moved into this stage will automatically be set as green.' string='End Stage'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (5)
  • category_id Many2one → event.tag.category
    ondelete='cascade' required=True string='Category' args: 'event.tag.category'
  • category_sequence Integer
    related='category_id.sequence' store=True string='Category Sequence'
  • color Integer
    default=<expr> help='Tag color. No color means no display in kanban or front-end, to distinguish internal tags from public categorization tags.' string='Color Index'
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=0 args: 'Sequence'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=_default_sequence args: 'Sequence'
  • tag_ids One2many → event.tag
    string='Tags' args: 'event.tag', 'category_id'
Public methods (0)

No public methods.

New fields (11)
  • auto_confirm Boolean
    default=True help='Events and registrations will automatically be confirmed upon creation, easing the flow for simple events.' args: 'Automatically Confirm Registrations'
  • default_timezone Selection
    default=<expr> string='Timezone' args: _tz_get
  • event_type_mail_ids One2many → event.type.mail
    default=_default_event_mail_type_ids string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • event_type_ticket_ids One2many → event.type.ticket
    string='Tickets' args: 'event.type.ticket', 'event_type_id'
  • has_seats_limitation Boolean
    args: 'Limited Seats'
  • name Char
    required=True translate=True args: 'Event Template'
  • note Html
    string='Note'
  • seats_max Integer
    compute='_compute_seats_max' help='It will select this default maximum value when you choose this event' readonly=False store=True args: 'Maximum Registrations'
  • sequence Integer
  • tag_ids Many2many → event.tag
    string='Tags' args: 'event.tag'
  • ticket_instructions Html
    help='This information will be printed on your tickets.' translate=True args: 'Ticket Instructions'
Public methods (0)

No public methods.

New fields (7)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • template_model_id Many2one → ir.model
    compute='_compute_template_model_id' compute_sudo=True string='Template Model' args: 'ir.model'
  • template_ref Reference
    required=True selection='_selection_template_model' string='Template'
Public methods (0)

No public methods.

New fields (5)
  • description Text
    help='A description of the ticket that you want to communicate to your customers.' translate=True args: 'Description'
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Category' args: 'event.type'
  • name Char
    default=<expr> required=True string='Name' translate=True
  • seats_limited Boolean
    compute='_compute_seats_limited' readonly=True store=True string='Limit Attendees'
  • seats_max Integer
    help='Define the number of available tickets. If you have too many registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Attendees'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • unlink(self)

New fields (10)
  • module_event_barcode Boolean
    args: 'Barcode'
  • module_event_booth Boolean
    args: 'Booth Management'
  • module_event_sale Boolean
    args: 'Tickets'
  • module_website_event_exhibitor Boolean
    args: 'Advanced Sponsors'
  • module_website_event_meet Boolean
    args: 'Discussion Rooms'
  • module_website_event_questions Boolean
    args: 'Registration Survey'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
  • module_website_event_track_live Boolean
    args: 'Live Mode'
  • module_website_event_track_quiz Boolean
    args: 'Quiz on Tracks'
Public methods (0)

No public methods.

New fields (1)
  • event_count Integer
    compute='_compute_event_count' groups='event.group_event_registration_desk' args: '# Events'
Public methods (1)
  • action_event_view(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/event
VERSION
VERSION 1.6
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Mohammed Shekha, Nicolas Lempereur, Aaron Bohy, Yannick Tivisse, Dharmraj Jhala, Romain Derie, Adrien Dieudonne, Christophe Monniez, Aurélien Warnon, Xavier-Do, Paul Morelle, Nasreddin (bon), Julien Mougenot, std-odoo, Nathan Marotte (nama), IEL, Ivàn Todorovich, Mathieu Duckerts-Antoine, nounoubensebia, Patrick Hoste, Nicolas Bayet, Michael Mattiello (mcm), dht-odoo, Fabio Barbero, Renaud Thiry, Thomas Lefebvre (thle), David, Julien (jula), miad-odoo, Munaf Khan, Saurabh Choraria, Hansun (hale), Antoine (ande), Mayurrajsinh Rathod, Leonardo Pavan Rocha, Andrzej(pian), Damien (abd), MAHAMADASIF ANSARI, jobl
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (46)
XML IDNameModelTypeStatus
event_default_descripton Event default description ir.ui.view qweb New
event_event_report_template_foldable_badge event_event_report_template_foldable_badge ir.ui.view qweb New
event_event_report_template_full_page_ticket event_event_report_template_full_page_ticket ir.ui.view qweb New
event_event_ticket_form_view event.event.ticket.view.form event.event.ticket form New
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event event.event.ticket form New
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket kanban New
event_event_ticket_view_tree event.event.ticket.view.tree event.event.ticket xpath Inherits event_event_ticket_view_tree_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.tree.from.event event.event.ticket tree New
event_event_view_form_quick_create event.event.form.quick_create event.event form New
event_event_view_graph event.event.view.graph event.event graph New
event_event_view_pivot event.event.view.pivot event.event pivot New
event_registration_report_template_foldable_badge event_registration_report_template_foldable_badge ir.ui.view qweb New
event_registration_report_template_full_page_ticket event_registration_report_template_full_page_ticket ir.ui.view qweb New
event_registration_view_kanban event.registration.kanban event.registration kanban New
event_report_full_page_ticket_layout event_report_full_page_ticket_layout ir.ui.view qweb New
event_report_template_foldable_badge event_report_template_foldable_badge ir.ui.view qweb New
event_report_template_formatted_event_address event_report_template_formatted_event_address ir.ui.view qweb New
event_report_template_full_page_ticket event_report_template_full_page_ticket ir.ui.view qweb New
event_stage_view_form event.stage.view.form event.stage form New
event_stage_view_tree event.stage.view.tree event.stage tree New
event_tag_category_view_form event.tag.category.view.form event.tag.category form New
event_tag_category_view_tree event.tag.category.view.tree event.tag.category tree New
event_tag_view_form event.tag.view.form event.tag form New
event_tag_view_tree event.tag.view.tree event.tag tree New
event_type_ticket_view_form event.type.ticket.view.form event.type.ticket xpath Inherits event_type_ticket_view_form_from_type
event_type_ticket_view_form_from_type event.type.ticket.view.form.from.type event.type.ticket form New
event_type_ticket_view_tree event.type.ticket.view.tree event.type.ticket xpath Inherits event_type_ticket_view_tree_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.tree.from.type event.type.ticket tree New
event_type_view_search event.type.search event.type search New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner div Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
Models touched (14)

New fields (41)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    default=<expr> domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Venue' tracking=True args: 'res.partner'
  • auto_confirm Boolean
    compute='_compute_auto_confirm' help='Autoconfirm Registrations. Registrations will automatically be confirmed upon creation.' readonly=False store=True string='Autoconfirmation'
  • company_id Many2one → res.company
    change_default=True default=<expr> required=False string='Company' args: 'res.company'
  • country_id Many2one → res.country
    readonly=False related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    required=True string='Start Date' tracking=True
  • date_begin_located Char
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True string='End Date' tracking=True
  • date_end_located Char
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    compute='_compute_date_tz' readonly=False required=True store=True string='Timezone' args: _tz_get
  • description Html
    default=_default_description sanitize_attributes=False sanitize_form=False string='Description' translate=html_translate
  • event_mail_ids One2many → event.mail
    compute='_compute_event_mail_ids' copy=True readonly=False store=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_registrations_open Boolean
    compute='_compute_event_registrations_open' compute_sudo=True help='Registrations are open if:\n- the event is not ended\n- there are seats available on event\n- the tickets are sellable (if ticketing is used)' args: 'Registration open'
  • event_registrations_sold_out Boolean
    compute='_compute_event_registrations_sold_out' compute_sudo=True help='The event is sold out if no more seats are available on event. If ticketing is used and all tickets are sold out, the event will be sold out.' args: 'Sold Out'
  • event_registrations_started Boolean
    compute='_compute_event_registrations_started' help='registrations have started if the current datetime is after the earliest starting date of tickets.' args: 'Registrations started'
  • event_ticket_ids One2many → event.event.ticket
    compute='_compute_event_ticket_ids' copy=True readonly=False store=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
  • event_type_id Many2one → event.type
    ondelete='set null' string='Template' args: 'event.type'
  • is_finished Boolean
    compute='_compute_is_finished' search='_search_is_finished'
  • is_one_day Boolean
    compute='_compute_field_is_one_day'
  • is_ongoing Boolean
    compute='_compute_is_ongoing' search='_search_is_ongoing' args: 'Is Ongoing'
  • kanban_state Selection
    copy=False default='normal' args: [('normal', 'In Progress'), ('done', 'Done'), ('blocked', 'Blocked')]
  • kanban_state_label Char
    compute='_compute_kanban_state_label' store=True string='Kanban State Label' tracking=True
  • legend_blocked Char
    readonly=True related='stage_id.legend_blocked' string='Kanban Blocked Explanation'
  • legend_done Char
    readonly=True related='stage_id.legend_done' string='Kanban Valid Explanation'
  • legend_normal Char
    readonly=True related='stage_id.legend_normal' string='Kanban Ongoing Explanation'
  • name Char
    required=True string='Event' translate=True
  • note Html
    compute='_compute_note' readonly=False store=True string='Note'
  • organizer_id Many2one → res.partner
    default=<expr> domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Organizer' tracking=True args: 'res.partner'
  • registration_ids One2many → event.registration
    string='Attendees' args: 'event.registration', 'event_id'
  • seats_available Integer
    compute='_compute_seats' readonly=True store=True string='Available Seats'
  • seats_expected Integer
    compute='_compute_seats_expected' compute_sudo=True readonly=True string='Number of Expected Attendees'
  • seats_limited Boolean
    compute='_compute_seats_limited' readonly=False required=True store=True args: 'Maximum Attendees'
  • seats_max Integer
    compute='_compute_seats_max' help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' readonly=False store=True string='Maximum Attendees Number'
  • seats_reserved Integer
    compute='_compute_seats' readonly=True store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' readonly=True store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' readonly=True store=True string='Number of Participants'
  • stage_id Many2one → event.stage
    copy=False default=_get_default_stage_id group_expand='_read_group_stage_ids' ondelete='restrict' tracking=True args: 'event.stage'
  • start_sale_datetime Datetime
    compute='_compute_start_sale_date' help='If ticketing is used, contains the earliest starting sale date of tickets.' args: 'Start sale date'
  • tag_ids Many2many → event.tag
    compute='_compute_tag_ids' readonly=False store=True string='Tags' args: 'event.tag'
  • ticket_instructions Html
    compute='_compute_ticket_instructions' help='This information will be printed on your tickets.' readonly=False store=True translate=True args: 'Ticket Instructions'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
Public methods (5)
  • action_set_done(self)
    Action which will move the events into the first next (by sequence) stage defined as "Ended" (if they are not already in an ended stage)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
  • write(self, vals)

New fields (12)
  • company_id Many2one → res.company
    related='event_id.company_id' args: 'res.company'
  • end_sale_datetime Datetime
    string='Registration End'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • event_type_id Many2one
    ondelete='set null' required=False
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • sale_available Boolean
    compute='_compute_sale_available' compute_sudo=True string='Is Available'
  • seats_available Integer
    compute='_compute_seats' store=True string='Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' store=True string='Unconfirmed Seats'
  • seats_used Integer
    compute='_compute_seats' store=True string='Used Seats'
  • start_sale_datetime Datetime
    string='Registration Start'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • is_launched(self)

New fields (13)
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • mail_count_done Integer
    copy=False readonly=True args: '# Sent'
  • mail_done Boolean
    copy=False readonly=True args: 'Sent'
  • mail_registration_ids One2many → event.mail.registration
    help='Communication related to event registrations' args: 'event.mail.registration', 'scheduler_id'
  • mail_state Selection
    compute='_compute_mail_state' string='Global communication Status' args: [('running', 'Running'), ('scheduled', 'Scheduled'), ('sent', 'Sent')]
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Schedule Date'
  • sequence Integer
    args: 'Display order'
  • template_model_id Many2one → ir.model
    compute='_compute_template_model_id' compute_sudo=True string='Template Model' args: 'ir.model'
  • template_ref Reference
    required=True selection='_selection_template_model' string='Template'
Public methods (4)
  • execute(self)
  • run(self, autocommit=False)
    @api.model
    Backward compatible method, notably if crons are not updated when migrating for some reason.
  • schedule_communications(self, autocommit=False)
    @api.model
  • set_template_ref_model(self)
    @api.onchange('notification_type')

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)

New fields (17)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    compute='_compute_date_closed' readonly=False store=True string='Attended Date'
  • date_open Datetime
    default=<expr> readonly=True string='Registration Date'
  • email Char
    compute='_compute_email' readonly=False store=True string='Email' tracking=11
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Event Ticket' args: 'event.event.ticket'
  • mobile Char
    compute='_compute_mobile' readonly=False store=True string='Mobile' tracking=13
  • name Char
    compute='_compute_name' index=True readonly=False store=True string='Attendee Name' tracking=10
  • partner_id Many2one → res.partner
    states={'done': [('readonly', True)]} string='Booked by' args: 'res.partner'
  • phone Char
    compute='_compute_phone' readonly=False store=True string='Phone' tracking=12
  • state Selection
    copy=False default='draft' readonly=True string='Status' tracking=True args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
  • utm_campaign_id Many2one → utm.campaign
    index=True ondelete='set null' args: 'utm.campaign', 'Campaign'
  • utm_medium_id Many2one → utm.medium
    index=True ondelete='set null' args: 'utm.medium', 'Medium'
  • utm_source_id Many2one → utm.source
    index=True ondelete='set null' args: 'utm.source', 'Source'
Public methods (10)
  • action_cancel(self)
  • action_confirm(self)
  • action_send_badge_email(self)
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • action_set_done(self)
    Close Registration
  • action_set_draft(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
  • get_date_range_str(self)
  • name_get(self)
    Custom name_get implementation to better differentiate registrations linked to a given partner but with different name (one partner buying several registrations) * name, partner_id has no name -> take name * partner_id has name, name void or same -> take partner name * both have name: partner + name
  • write(self, vals)

New fields (8)
  • description Text
    string='Stage description' translate=True
  • fold Boolean
    default=False string='Folded in Kanban'
  • legend_blocked Char
    default=<expr> help='Override the default value displayed for the blocked state for kanban selection.' required=True translate=True args: 'Red Kanban Label'
  • legend_done Char
    default=<expr> help='Override the default value displayed for the done state for kanban selection.' required=True translate=True args: 'Green Kanban Label'
  • legend_normal Char
    default=<expr> help='Override the default value displayed for the normal state for kanban selection.' required=True translate=True args: 'Grey Kanban Label'
  • name Char
    required=True string='Stage Name' translate=True
  • pipe_end Boolean
    default=False help='Events will automatically be moved into this stage when they are finished. The event moved into this stage will automatically be set as green.' string='End Stage'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (4)
  • category_id Many2one → event.tag.category
    ondelete='cascade' required=True string='Category' args: 'event.tag.category'
  • color Integer
    default=<expr> help='Tag color. No color means no display in kanban or front-end, to distinguish internal tags from public categorization tags.' string='Color Index'
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=0 args: 'Sequence'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=0 args: 'Sequence'
  • tag_ids One2many → event.tag
    string='Tags' args: 'event.tag', 'category_id'
Public methods (0)

No public methods.

New fields (11)
  • auto_confirm Boolean
    default=True help='Events and registrations will automatically be confirmed upon creation, easing the flow for simple events.' args: 'Automatically Confirm Registrations'
  • default_timezone Selection
    default=<expr> string='Timezone' args: _tz_get
  • event_type_mail_ids One2many → event.type.mail
    default=_default_event_mail_type_ids string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • event_type_ticket_ids One2many → event.type.ticket
    string='Tickets' args: 'event.type.ticket', 'event_type_id'
  • has_seats_limitation Boolean
    args: 'Limited Seats'
  • name Char
    required=True translate=True args: 'Event Template'
  • note Html
    string='Note'
  • seats_max Integer
    compute='_compute_default_registration' help='It will select this default maximum value when you choose this event' readonly=False store=True args: 'Maximum Registrations'
  • sequence Integer
  • tag_ids Many2many → event.tag
    string='Tags' args: 'event.tag'
  • ticket_instructions Html
    help='This information will be printed on your tickets.' translate=True args: 'Ticket Instructions'
Public methods (0)

No public methods.

New fields (7)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • template_model_id Many2one → ir.model
    compute='_compute_template_model_id' compute_sudo=True string='Template Model' args: 'ir.model'
  • template_ref Reference
    required=True selection='_selection_template_model' string='Template'
Public methods (0)

No public methods.

New fields (5)
  • description Text
    help='A description of the ticket that you want to communicate to your customers.' translate=True args: 'Description'
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Category' args: 'event.type'
  • name Char
    default=<expr> required=True string='Name' translate=True
  • seats_limited Boolean
    compute='_compute_seats_limited' readonly=True store=True string='Seats Limit'
  • seats_max Integer
    help='Define the number of available tickets. If you have too many registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Seats'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • unlink(self)

New fields (10)
  • module_event_barcode Boolean
    args: 'Barcode'
  • module_event_booth Boolean
    args: 'Booth Management'
  • module_event_sale Boolean
    args: 'Tickets'
  • module_website_event_exhibitor Boolean
    args: 'Advanced Sponsors'
  • module_website_event_meet Boolean
    args: 'Discussion Rooms'
  • module_website_event_questions Boolean
    args: 'Registration Survey'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
  • module_website_event_track_live Boolean
    args: 'Live Mode'
  • module_website_event_track_quiz Boolean
    args: 'Quiz on Tracks'
Public methods (0)

No public methods.

New fields (1)
  • event_count Integer
    compute='_compute_event_count' groups='event.group_event_registration_desk' help='Number of events the partner has participated.' args: '# Events'
Public methods (1)
  • action_event_view(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/event
VERSION
VERSION 1.3
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Mohammed Shekha, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, Barad Mahendra, Yannick Tivisse, qsm-odoo, Romain Derie, Aurélien Warnon, Xavier-Do, Victor Feyens, Paul Morelle, Sébastien Theys, Nasreddin (bon), fw-bot, Debauche Stéphane, std-odoo, Nathan Marotte (nama), IEL, fja-odoo, Mathieu Duckerts-Antoine, Kevin Baptiste, qmo-odoo, Patrick Hoste, Fabio Barbero, Louis Wicket (wil), miad-odoo, Krupal Oza, Munaf Khan, Mayurrajsinh Rathod
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (42)
XML IDNameModelTypeStatus
assets_backend event assets ir.ui.view qweb Inherits web.assets_backend
assets_common Event Assets Common ir.ui.view qweb Inherits web.assets_common
event_default_descripton Event default description ir.ui.view qweb New
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_event_ticket_form_view event.event.ticket.view.form event.event.ticket form New
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event event.event.ticket form New
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket kanban New
event_event_ticket_view_tree event.event.ticket.view.tree event.event.ticket xpath Inherits event_event_ticket_view_tree_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.tree.from.event event.event.ticket tree New
event_event_view_form_quick_create event.event.form.quick_create event.event form New
event_event_view_graph event.event.view.graph event.event graph New
event_event_view_pivot event.event.view.pivot event.event pivot New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
event_registration_view_kanban event.registration.kanban event.registration kanban New
event_stage_view_form event.stage.view.form event.stage form New
event_stage_view_tree event.stage.view.tree event.stage tree New
event_tag_category_view_form event.tag.category.view.form event.tag.category form New
event_tag_category_view_tree event.tag.category.view.tree event.tag.category tree New
event_tag_view_form event.tag.view.form event.tag form New
event_tag_view_tree event.tag.view.tree event.tag tree New
event_type_ticket_view_form event.type.ticket.view.form event.type.ticket xpath Inherits event_type_ticket_view_form_from_type
event_type_ticket_view_form_from_type event.type.ticket.view.form.from.type event.type.ticket form New
event_type_ticket_view_tree event.type.ticket.view.tree event.type.ticket xpath Inherits event_type_ticket_view_tree_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.tree.from.type event.type.ticket tree New
event_type_view_search event.type.search event.type search New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner div Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
Models touched (13)

New fields (43)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    default=<expr> domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Venue' tracking=True args: 'res.partner'
  • auto_confirm Boolean
    compute='_compute_auto_confirm' help='Autoconfirm Registrations. Registrations will automatically be confirmed upon creation.' readonly=False store=True string='Autoconfirmation'
  • badge_back Html
    string='Badge Back'
  • badge_front Html
    string='Badge Front'
  • badge_innerleft Html
    string='Badge Inner Left'
  • badge_innerright Html
    string='Badge Inner Right'
  • company_id Many2one → res.company
    change_default=True default=<expr> required=False string='Company' args: 'res.company'
  • country_id Many2one → res.country
    readonly=False related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    required=True string='Start Date' tracking=True
  • date_begin_located Char
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True string='End Date' tracking=True
  • date_end_located Char
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    compute='_compute_date_tz' readonly=False required=True store=True string='Timezone' args: _tz_get
  • description Html
    default=_default_description sanitize_attributes=False sanitize_form=False string='Description' translate=html_translate
  • event_logo Html
    string='Event Logo'
  • event_mail_ids One2many → event.mail
    compute='_compute_event_mail_ids' copy=True readonly=False store=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_registrations_open Boolean
    compute='_compute_event_registrations_open' compute_sudo=True help='Registrations are open if:\n- the event is not ended\n- there are seats available on event\n- the tickets are sellable (if ticketing is used)' args: 'Registration open'
  • event_registrations_sold_out Boolean
    compute='_compute_event_registrations_sold_out' compute_sudo=True help='The event is sold out if no more seats are available on event. If ticketing is used and all tickets are sold out, the event will be sold out.' args: 'Sold Out'
  • event_ticket_ids One2many → event.event.ticket
    compute='_compute_event_ticket_ids' copy=True readonly=False store=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
  • event_type_id Many2one → event.type
    ondelete='set null' string='Template' args: 'event.type'
  • is_one_day Boolean
    compute='_compute_field_is_one_day'
  • is_ongoing Boolean
    compute='_compute_is_ongoing' search='_search_is_ongoing' args: 'Is Ongoing'
  • kanban_state Selection
    default='normal' args: [('normal', 'In Progress'), ('done', 'Done'), ('blocked', 'Blocked')]
  • kanban_state_label Char
    compute='_compute_kanban_state_label' store=True string='Kanban State Label' tracking=True
  • legend_blocked Char
    readonly=True related='stage_id.legend_blocked' string='Kanban Blocked Explanation'
  • legend_done Char
    readonly=True related='stage_id.legend_done' string='Kanban Valid Explanation'
  • legend_normal Char
    readonly=True related='stage_id.legend_normal' string='Kanban Ongoing Explanation'
  • name Char
    required=True string='Event' translate=True
  • note Text
    string='Note'
  • organizer_id Many2one → res.partner
    default=<expr> domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Organizer' tracking=True args: 'res.partner'
  • registration_ids One2many → event.registration
    string='Attendees' args: 'event.registration', 'event_id'
  • seats_available Integer
    compute='_compute_seats' readonly=True store=True string='Available Seats'
  • seats_expected Integer
    compute='_compute_seats_expected' compute_sudo=True readonly=True string='Number of Expected Attendees'
  • seats_limited Boolean
    compute='_compute_seats_limited' readonly=False required=True store=True args: 'Maximum Attendees'
  • seats_max Integer
    compute='_compute_seats_max' help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' readonly=False store=True string='Maximum Attendees Number'
  • seats_reserved Integer
    compute='_compute_seats' readonly=True store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' readonly=True store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' readonly=True store=True string='Number of Participants'
  • stage_id Many2one → event.stage
    default=_get_default_stage_id group_expand='_read_group_stage_ids' ondelete='restrict' tracking=True args: 'event.stage'
  • start_sale_date Date
    compute='_compute_start_sale_date' help='If ticketing is used, contains the earliest starting sale date of tickets.' args: 'Start sale date'
  • tag_ids Many2many → event.tag
    compute='_compute_tag_ids' readonly=False store=True string='Tags' args: 'event.tag'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
Public methods (6)
  • action_set_done(self)
    Action which will move the events into the first next (by sequence) stage defined as "Ended" (if they are not already in an ended stage)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
  • name_get(self)
    @api.depends('name', 'date_begin', 'date_end')
  • write(self, vals)

New fields (12)
  • company_id Many2one → res.company
    related='event_id.company_id' args: 'res.company'
  • end_sale_date Date
    string='Registration End'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • event_type_id Many2one
    ondelete='set null' required=False
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • sale_available Boolean
    compute='_compute_sale_available' compute_sudo=True string='Is Available'
  • seats_available Integer
    compute='_compute_seats' store=True string='Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' store=True string='Unconfirmed Seats'
  • seats_used Integer
    compute='_compute_seats' store=True string='Used Seats'
  • start_sale_date Date
    string='Registration Start'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • is_launched(self)

New fields (11)
  • done Boolean
    compute='_compute_done' store=True args: 'Sent'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • mail_registration_ids One2many → event.mail.registration
    args: 'event.mail.registration', 'scheduler_id'
  • mail_sent Boolean
    copy=False args: 'Mail Sent on Event'
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Sent Mail'
  • sequence Integer
    args: 'Display order'
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' string='Email Template' args: 'mail.template'
Public methods (2)
  • execute(self)
  • run(self, autocommit=False)
    @api.model

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)

New fields (16)
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    compute='_compute_date_closed' readonly=False store=True string='Attended Date'
  • date_open Datetime
    default=<expr> readonly=True string='Registration Date'
  • email Char
    compute='_compute_email' readonly=False store=True string='Email' tracking=11
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} string='Event Ticket' args: 'event.event.ticket'
  • mobile Char
    compute='_compute_mobile' readonly=False store=True string='Mobile' tracking=13
  • name Char
    compute='_compute_name' index=True readonly=False store=True string='Attendee Name' tracking=10
  • partner_id Many2one → res.partner
    states={'done': [('readonly', True)]} string='Booked by' args: 'res.partner'
  • phone Char
    compute='_compute_phone' readonly=False store=True string='Phone' tracking=12
  • state Selection
    copy=False default='draft' readonly=True string='Status' tracking=True args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
  • utm_campaign_id Many2one → utm.campaign
    index=True ondelete='set null' args: 'utm.campaign', 'Campaign'
  • utm_medium_id Many2one → utm.medium
    index=True ondelete='set null' args: 'utm.medium', 'Medium'
  • utm_source_id Many2one → utm.source
    index=True ondelete='set null' args: 'utm.source', 'Source'
Public methods (9)
  • action_cancel(self)
  • action_confirm(self)
  • action_send_badge_email(self)
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • action_set_done(self)
    Close Registration
  • action_set_draft(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_date_range_str(self)
  • name_get(self)
    Custom name_get implementation to better differentiate registrations linked to a given partner but with different name (one partner buying several registrations) * name, partner_id has no name -> take name * partner_id has name, name void or same -> take partner name * both have name: partner + name
  • write(self, vals)

New fields (8)
  • description Text
    string='Stage description' translate=True
  • fold Boolean
    default=False string='Folded in Kanban'
  • legend_blocked Char
    default=<expr> help='Override the default value displayed for the blocked state for kanban selection.' required=True translate=True args: 'Red Kanban Label'
  • legend_done Char
    default=<expr> help='Override the default value displayed for the done state for kanban selection.' required=True translate=True args: 'Green Kanban Label'
  • legend_normal Char
    default=<expr> help='Override the default value displayed for the normal state for kanban selection.' required=True translate=True args: 'Grey Kanban Label'
  • name Char
    required=True string='Stage Name' translate=True
  • pipe_end Boolean
    default=False help='Events will automatically be moved into this stage when they are finished. The event moved into this stage will automatically be set as green.' string='End Stage'
  • sequence Integer
    default=1 args: 'Sequence'
Public methods (0)

No public methods.

New fields (4)
  • category_id Many2one → event.tag.category
    ondelete='cascade' required=True string='Category' args: 'event.tag.category'
  • color Integer
    default=<expr> help='Tag color. No color means no display in kanban or front-end, to distinguish internal tags from public categorization tags.' string='Color Index'
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=0 args: 'Sequence'
Public methods (1)
  • name_get(self)

New fields (3)
  • name Char
    required=True translate=True args: 'Name'
  • sequence Integer
    default=0 args: 'Sequence'
  • tag_ids One2many → event.tag
    string='Tags' args: 'event.tag', 'category_id'
Public methods (0)

No public methods.

New fields (12)
  • auto_confirm Boolean
    default=True help='Events and registrations will automatically be confirmed upon creation, easing the flow for simple events.' args: 'Automatically Confirm Registrations'
  • default_timezone Selection
    default=<expr> string='Timezone' args: _tz_get
  • event_type_mail_ids One2many → event.type.mail
    compute='_compute_event_type_mail_ids' readonly=False store=True string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • event_type_ticket_ids One2many → event.type.ticket
    compute='_compute_event_type_ticket_ids' readonly=False store=True string='Tickets' args: 'event.type.ticket', 'event_type_id'
  • has_seats_limitation Boolean
    args: 'Limited Seats'
  • name Char
    required=True translate=True args: 'Event Template'
  • seats_max Integer
    compute='_compute_default_registration' help='It will select this default maximum value when you choose this event' readonly=False store=True args: 'Maximum Registrations'
  • sequence Integer
  • tag_ids Many2many → event.tag
    string='Tags' args: 'event.tag'
  • use_mail_schedule Boolean
    default=True args: 'Automatically Send Emails'
  • use_ticket Boolean
    args: 'Ticketing'
  • use_timezone Boolean
    args: 'Use Default Timezone'
Public methods (0)

No public methods.

New fields (6)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' string='Email Template' args: 'mail.template'
Public methods (0)

No public methods.

New fields (5)
  • description Text
    help='A description of the ticket that you want to communicate to your customers.' translate=True args: 'Description'
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Category' args: 'event.type'
  • name Char
    default=<expr> required=True string='Name' translate=True
  • seats_limited Boolean
    compute='_compute_seats_limited' readonly=True store=True string='Seats Limit'
  • seats_max Integer
    help='Define the number of available tickets. If you have too many registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Seats'
Public methods (0)

No public methods.

New fields (9)
  • module_event_barcode Boolean
    args: 'Barcode'
  • module_event_sale Boolean
    args: 'Tickets'
  • module_website_event_meet Boolean
    args: 'Discussion Rooms'
  • module_website_event_questions Boolean
    args: 'Registration Survey'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
  • module_website_event_track_exhibitor Boolean
    args: 'Advanced Sponsors'
  • module_website_event_track_live Boolean
    args: 'Live Mode'
  • module_website_event_track_quiz Boolean
    args: 'Quiz on Tracks'
Public methods (0)

No public methods.

New fields (1)
  • event_count Integer
    compute='_compute_event_count' groups='event.group_event_user' help='Number of events the partner has participated.' args: '# Events'
Public methods (1)
  • action_event_view(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/event
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Nicolas Martinelli, Nicolas Lempereur, Jeremy Kersten, GitHub, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo, Martin Geubelle, Dharmraj Jhala, Odoo Online, Jigar Patel, jem-odoo, Adrien Dieudonne, RomainLibert, Jorge Pinna Puissant, Jairo Llopis, Alexandre Kühn, Adrian Torres, XavierDo, Xavier-Do, Paul Morelle, Sébastien Theys, Nasreddin (bon), Vincent Schippefilt, fw-bot, std-odoo, Kinjal Mehta, Ivan Yelizariev, IEL, jbm-odoo, qmo-odoo, Andrea Ulliana, Fabio Barbero
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (24)
XML IDNameModelTypeStatus
assets_backend event assets ir.ui.view qweb Inherits web.assets_backend
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_event_view_pivot event.event.view.pivot event.event pivot New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
event_registration_view_kanban event.registration.kanban event.registration kanban New
event_type_view_search event.type.search event.type search New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner div Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_confirm Event Confirmation event.confirm form New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
Models touched (9)

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)

New fields (35)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    default=<expr> domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" readonly=False states={'done': [('readonly', True)]} string='Location' tracking=True args: 'res.partner'
  • auto_confirm Boolean
    string='Autoconfirm Registrations'
  • badge_back Html
    string='Badge Back'
  • badge_front Html
    string='Badge Front'
  • badge_innerleft Html
    string='Badge Inner Left'
  • badge_innerright Html
    string='Badge Inner Right'
  • color Integer
    args: 'Kanban Color Index'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=False required=False states={'done': [('readonly', True)]} string='Company' args: 'res.company'
  • country_id Many2one → res.country
    readonly=False related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    required=True states={'done': [('readonly', True)]} string='Start Date' tracking=True
  • date_begin_located Char
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True states={'done': [('readonly', True)]} string='End Date' tracking=True
  • date_end_located Char
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    default=<expr> required=True string='Timezone' args: '_tz_get'
  • description Html
    readonly=False sanitize_attributes=False states={'done': [('readonly', True)]} string='Description' translate=html_translate
  • event_logo Html
    string='Event Logo'
  • event_mail_ids One2many → event.mail
    copy=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_type_id Many2one → event.type
    readonly=False states={'done': [('readonly', True)]} string='Category' args: 'event.type'
  • is_one_day Boolean
    compute='_compute_field_is_one_day'
  • is_online Boolean
    args: 'Online Event'
  • name Char
    readonly=False required=True states={'done': [('readonly', True)]} string='Event' translate=True
  • organizer_id Many2one → res.partner
    default=<expr> domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Organizer' tracking=True args: 'res.partner'
  • registration_ids One2many → event.registration
    readonly=False states={'done': [('readonly', True)]} string='Attendees' args: 'event.registration', 'event_id'
  • seats_availability Selection
    default='unlimited' required=True args: [('limited', 'Limited'), ('unlimited', 'Unlimited')], 'Maximum Attendees'
  • seats_available Integer
    compute='_compute_seats' readonly=True store=True string='Available Seats'
  • seats_expected Integer
    compute='_compute_seats_expected' compute_sudo=True readonly=True string='Number of Expected Attendees'
  • seats_max Integer
    help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' readonly=True states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]} string='Maximum Attendees Number'
  • seats_min Integer
    help='For each event you can define a minimum reserved seats (number of attendees), if it does not reach the mentioned registrations the event can not be confirmed (keep 0 to ignore this rule)' string='Minimum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' readonly=True store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' readonly=True store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' readonly=True store=True string='Number of Participants'
  • state Selection
    copy=False default='draft' help="If event is created, the status is 'Draft'. If event is confirmed for the particular dates the status is set to 'Confirmed'. If the event is over, the status is set to 'Done'. If event is cancelled the status is set to 'Cancelled'." readonly=True required=True string='Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('confirm', 'Confirmed'), ('done', 'Done')]
  • twitter_hashtag Char
    args: 'Twitter Hashtag'
  • user_id Many2one → res.users
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Responsible' tracking=True args: 'res.users'
Public methods (9)
  • button_cancel(self)
  • button_confirm(self)
  • button_done(self)
  • button_draft(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
  • name_get(self)
    @api.depends('name', 'date_begin', 'date_end')
  • write(self, vals)

New fields (11)
  • done Boolean
    compute='_compute_done' store=True args: 'Sent'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • mail_registration_ids One2many → event.mail.registration
    args: 'event.mail.registration', 'scheduler_id'
  • mail_sent Boolean
    copy=False args: 'Mail Sent on Event'
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Sent Mail'
  • sequence Integer
    args: 'Display order'
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' string='Email Template' args: 'mail.template'
Public methods (2)
  • execute(self)
  • run(self, autocommit=False)
    @api.model

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)

New fields (13)
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    readonly=True string='Attended Date'
  • date_open Datetime
    default=<expr> readonly=True string='Registration Date'
  • email Char
    string='Email'
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • mobile Char
    string='Mobile'
  • name Char
    index=True string='Attendee Name'
  • origin Char
    help='Reference of the document that created the registration, for example a sales order' readonly=True string='Source Document'
  • partner_id Many2one → res.partner
    states={'done': [('readonly', True)]} string='Contact' args: 'res.partner'
  • phone Char
    string='Phone'
  • state Selection
    copy=False default='draft' readonly=True string='Status' tracking=True args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
Public methods (9)
  • action_send_badge_email(self)
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • button_reg_cancel(self)
  • button_reg_close(self)
    Close Registration
  • check_access_rights(self, operation, raise_exception=True)
    @api.model
  • confirm_registration(self)
  • create(self, vals)
    @api.model
  • do_draft(self)
  • get_date_range_str(self)
  • summary(self)

New fields (13)
  • auto_confirm Boolean
    default=True help='Events and registrations will automatically be confirmed upon creation, easing the flow for simple events.' args: 'Automatically Confirm Registrations'
  • default_hashtag Char
    args: 'Twitter Hashtag'
  • default_registration_max Integer
    default=0 help='It will select this default maximum value when you choose this event' args: 'Maximum Registrations'
  • default_registration_min Integer
    default=0 help='It will select this default minimum value when you choose this event' args: 'Minimum Registrations'
  • default_timezone Selection
    default=<expr> string='Timezone' args: '_tz_get'
  • event_type_mail_ids One2many → event.type.mail
    copy=False default=<expr> string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • has_seats_limitation Boolean
    default=False args: 'Limited Seats'
  • is_online Boolean
    help='Online events like webinars do not require a specific location and are hosted online.' args: 'Online Event'
  • name Char
    required=True translate=True args: 'Event Category'
  • sequence Integer
  • use_hashtag Boolean
    args: 'Use Default Hashtag'
  • use_mail_schedule Boolean
    default=True args: 'Automatically Send Emails'
  • use_timezone Boolean
    args: 'Use Default Timezone'
Public methods (0)

No public methods.

New fields (6)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notification_type Selection
    default='mail' required=True string='Send' args: [('mail', 'Mail')]
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' string='Email Template' args: 'mail.template'
Public methods (0)

No public methods.

New fields (5)
  • module_event_barcode Boolean
    args: 'Barcode'
  • module_event_sale Boolean
    args: 'Tickets'
  • module_website_event_questions Boolean
    args: 'Registration Survey'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
Public methods (0)

No public methods.

New fields (1)
  • event_count Integer
    compute='_compute_event_count' help='Number of events the partner has participated.' args: 'Events'
Public methods (1)
  • action_event_view(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/event
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, qdp-odoo, Géry Debongnie, Jeremy Kersten, GitHub, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Martin Geubelle, Julien (juc) Castiaux, Jairo Llopis, Adrian Torres, XavierDo, Priyanka Kakadiya, Xavier-Do, jerome hanke (jhk), Paul Morelle, Sébastien Theys, fw-bot, David Beguin, jbm-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
assets_backend event assets ir.ui.view qweb Inherits web.assets_backend
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_event_view_pivot event.event.view.pivot event.event pivot New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
event_type_view_search event.type.search event.type search New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner button Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_confirm Event Confirmation event.confirm form New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
Models touched (9)

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)
    @api.multi

New fields (34)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Location' track_visibility='onchange' args: 'res.partner'
  • auto_confirm Boolean
    string='Autoconfirm Registrations'
  • badge_back Html
    string='Badge Back'
  • badge_front Html
    string='Badge Front'
  • badge_innerleft Html
    string='Badge Inner Left'
  • badge_innerright Html
    string='Badge Inner Right'
  • color Integer
    args: 'Kanban Color Index'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=False required=False states={'done': [('readonly', True)]} string='Company' args: 'res.company'
  • country_id Many2one → res.country
    readonly=False related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    required=True states={'done': [('readonly', True)]} string='Start Date' track_visibility='onchange'
  • date_begin_located Char
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True states={'done': [('readonly', True)]} string='End Date' track_visibility='onchange'
  • date_end_located Char
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    default=<expr> required=True string='Timezone' args: '_tz_get'
  • description Html
    oldname='note' readonly=False sanitize_attributes=False states={'done': [('readonly', True)]} string='Description' translate=html_translate
  • event_logo Html
    string='Event Logo'
  • event_mail_ids One2many → event.mail
    copy=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_type_id Many2one → event.type
    oldname='type' readonly=False states={'done': [('readonly', True)]} string='Category' args: 'event.type'
  • is_online Boolean
    args: 'Online Event'
  • name Char
    readonly=False required=True states={'done': [('readonly', True)]} string='Event' translate=True
  • organizer_id Many2one → res.partner
    default=<expr> string='Organizer' track_visibility='onchange' args: 'res.partner'
  • registration_ids One2many → event.registration
    readonly=False states={'done': [('readonly', True)]} string='Attendees' args: 'event.registration', 'event_id'
  • seats_availability Selection
    default='unlimited' required=True args: [('limited', 'Limited'), ('unlimited', 'Unlimited')], 'Maximum Attendees'
  • seats_available Integer
    compute='_compute_seats' oldname='register_avail' readonly=True store=True string='Available Seats'
  • seats_expected Integer
    compute='_compute_seats_expected' readonly=True string='Number of Expected Attendees'
  • seats_max Integer
    help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' oldname='register_max' readonly=True states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]} string='Maximum Attendees Number'
  • seats_min Integer
    help='For each event you can define a minimum reserved seats (number of attendees), if it does not reach the mentioned registrations the event can not be confirmed (keep 0 to ignore this rule)' oldname='register_min' string='Minimum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' oldname='register_current' readonly=True store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' oldname='register_prospect' readonly=True store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' oldname='register_attended' readonly=True store=True string='Number of Participants'
  • state Selection
    copy=False default='draft' help="If event is created, the status is 'Draft'. If event is confirmed for the particular dates the status is set to 'Confirmed'. If the event is over, the status is set to 'Done'. If event is cancelled the status is set to 'Cancelled'." readonly=True required=True string='Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('confirm', 'Confirmed'), ('done', 'Done')]
  • twitter_hashtag Char
    args: 'Twitter Hashtag'
  • user_id Many2one → res.users
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Responsible' track_visibility='onchange' args: 'res.users'
Public methods (9)
  • button_cancel(self)
    @api.multi
  • button_confirm(self)
    @api.one
  • button_done(self)
    @api.one
  • button_draft(self)
    @api.one
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • create(self, vals)
    @api.model
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
    @api.one
  • name_get(self)
    @api.multi@api.depends('name', 'date_begin', 'date_end')
  • write(self, vals)
    @api.multi

New fields (10)
  • done Boolean
    compute='_compute_done' store=True args: 'Sent'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hour(s)'), ('days', 'Day(s)'), ('weeks', 'Week(s)'), ('months', 'Month(s)')]
  • mail_registration_ids One2many → event.mail.registration
    args: 'event.mail.registration', 'scheduler_id'
  • mail_sent Boolean
    copy=False args: 'Mail Sent on Event'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Sent Mail'
  • sequence Integer
    args: 'Display order'
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' required=True string='Email Template' args: 'mail.template'
Public methods (2)
  • execute(self)
    @api.one
  • run(self, autocommit=False)
    @api.model

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)
    @api.one

New fields (12)
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    readonly=True string='Attended Date'
  • date_open Datetime
    default=<expr> readonly=True string='Registration Date'
  • email Char
    string='Email'
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • name Char
    index=True string='Attendee Name'
  • origin Char
    help='Reference of the document that created the registration, for example a sales order' readonly=True string='Source Document'
  • partner_id Many2one → res.partner
    states={'done': [('readonly', True)]} string='Contact' args: 'res.partner'
  • phone Char
    string='Phone'
  • state Selection
    copy=False default='draft' readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
Public methods (11)
  • action_send_badge_email(self)
    @api.multi
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • button_reg_cancel(self)
    @api.one
  • button_reg_close(self)
    @api.one
    Close Registration
  • check_access_rights(self, operation, raise_exception=True)
    @api.model
  • confirm_registration(self)
    @api.one
  • create(self, vals)
    @api.model
  • do_draft(self)
    @api.one
  • get_date_range_str(self)
    @api.multi
  • message_get_default_recipients(self)
    @api.multi
  • message_get_suggested_recipients(self)
    @api.multi
  • summary(self)
    @api.multi

New fields (12)
  • auto_confirm Boolean
    default=True help='Events and registrations will automatically be confirmed upon creation, easing the flow for simple events.' args: 'Automatically Confirm Registrations'
  • default_hashtag Char
    args: 'Twitter Hashtag'
  • default_registration_max Integer
    default=0 help='It will select this default maximum value when you choose this event' args: 'Maximum Registrations'
  • default_registration_min Integer
    default=0 help='It will select this default minimum value when you choose this event' args: 'Minimum Registrations'
  • default_timezone Selection
    default=<expr> string='Timezone' args: '_tz_get'
  • event_type_mail_ids One2many → event.type.mail
    copy=False default=_get_default_event_type_mail_ids string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • has_seats_limitation Boolean
    default=False args: 'Limited Seats'
  • is_online Boolean
    help='Online events like webinars do not require a specific location and are hosted online.' args: 'Online Event'
  • name Char
    required=True translate=True args: 'Event Category'
  • use_hashtag Boolean
    args: 'Use Default Hashtag'
  • use_mail_schedule Boolean
    default=True args: 'Automatically Send Emails'
  • use_timezone Boolean
    args: 'Use Default Timezone'
Public methods (0)

No public methods.

New fields (5)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hour(s)'), ('days', 'Day(s)'), ('weeks', 'Week(s)'), ('months', 'Month(s)')]
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' required=True string='Email Template' args: 'mail.template'
Public methods (0)

No public methods.

New fields (5)
  • module_event_barcode Boolean
    args: 'Barcode'
  • module_event_sale Boolean
    args: 'Tickets'
  • module_website_event_questions Boolean
    args: 'Registration Survey'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
Public methods (0)

No public methods.

New fields (1)
  • event_count Integer
    compute='_compute_event_count' help='Number of events the partner has participated.' args: 'Events'
Public methods (1)
  • action_event_view(self)
    @api.multi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/event
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Joren Van Onder, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Richard Mathot, qdp-odoo, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Olivier Colson, Yannick Tivisse, qsm-odoo, Odoo Online, Laurent Smet, RomainLibert, jvm-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
assets_backend event assets ir.ui.view qweb Inherits web.assets_backend
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_event_view_pivot event.event.view.pivot event.event pivot New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.event res.config.settings xpath Inherits base.res_config_settings_view_form
res_partner_view_tree view.res.partner.form.event.inherited res.partner div Inherits base.view_partner_form
view_event_calendar event.event.calendar event.event calendar New
view_event_confirm Event Confirmation event.confirm form New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
Models touched (9)

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)
    @api.multi

New fields (34)
  • active Boolean
    default=True
  • address_id Many2one → res.partner
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Location' track_visibility='onchange' args: 'res.partner'
  • auto_confirm Boolean
    string='Autoconfirm Registrations'
  • badge_back Html
    string='Badge Back'
  • badge_front Html
    string='Badge Front'
  • badge_innerleft Html
    string='Badge Inner Left'
  • badge_innerright Html
    string='Badge Inner Right'
  • color Integer
    args: 'Kanban Color Index'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=False required=False states={'done': [('readonly', True)]} string='Company' args: 'res.company'
  • country_id Many2one → res.country
    related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    required=True states={'done': [('readonly', True)]} string='Start Date' track_visibility='onchange'
  • date_begin_located Char
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True states={'done': [('readonly', True)]} string='End Date' track_visibility='onchange'
  • date_end_located Char
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    default=<expr> required=True string='Timezone' args: '_tz_get'
  • description Html
    oldname='note' readonly=False sanitize_attributes=False states={'done': [('readonly', True)]} string='Description' translate=html_translate
  • event_logo Html
    string='Event Logo'
  • event_mail_ids One2many → event.mail
    copy=True string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_type_id Many2one → event.type
    oldname='type' readonly=False states={'done': [('readonly', True)]} string='Category' args: 'event.type'
  • is_online Boolean
    args: 'Online Event'
  • name Char
    readonly=False required=True states={'done': [('readonly', True)]} string='Event Name' translate=True
  • organizer_id Many2one → res.partner
    default=<expr> string='Organizer' track_visibility='onchange' args: 'res.partner'
  • registration_ids One2many → event.registration
    readonly=False states={'done': [('readonly', True)]} string='Attendees' args: 'event.registration', 'event_id'
  • seats_availability Selection
    default='unlimited' required=True args: [('limited', 'Limited'), ('unlimited', 'Unlimited')], 'Maximum Attendees'
  • seats_available Integer
    compute='_compute_seats' oldname='register_avail' readonly=True store=True string='Available Seats'
  • seats_expected Integer
    compute='_compute_seats' readonly=True string='Number of Expected Attendees'
  • seats_max Integer
    help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' oldname='register_max' readonly=True states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]} string='Maximum Attendees Number'
  • seats_min Integer
    help='For each event you can define a minimum reserved seats (number of attendees), if it does not reach the mentioned registrations the event can not be confirmed (keep 0 to ignore this rule)' oldname='register_min' string='Minimum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' oldname='register_current' readonly=True store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' oldname='register_prospect' readonly=True store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' oldname='register_attended' readonly=True store=True string='Number of Participants'
  • state Selection
    copy=False default='draft' help="If event is created, the status is 'Draft'. If event is confirmed for the particular dates the status is set to 'Confirmed'. If the event is over, the status is set to 'Done'. If event is cancelled the status is set to 'Cancelled'." readonly=True required=True string='Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('confirm', 'Confirmed'), ('done', 'Done')]
  • twitter_hashtag Char
    args: 'Twitter Hashtag'
  • user_id Many2one → res.users
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Responsible' track_visibility='onchange' args: 'res.users'
Public methods (9)
  • button_cancel(self)
    @api.multi
  • button_confirm(self)
    @api.one
  • button_done(self)
    @api.one
  • button_draft(self)
    @api.one
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
    @api.one
  • name_get(self)
    @api.multi@api.depends('name', 'date_begin', 'date_end')
  • write(self, vals)
    @api.multi

New fields (10)
  • done Boolean
    compute='_compute_done' store=True args: 'Sent'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hour(s)'), ('days', 'Day(s)'), ('weeks', 'Week(s)'), ('months', 'Month(s)')]
  • mail_registration_ids One2many → event.mail.registration
    args: 'event.mail.registration', 'scheduler_id'
  • mail_sent Boolean
    copy=False args: 'Mail Sent on Event'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Sent Mail'
  • sequence Integer
    args: 'Display order'
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' required=True string='Email Template' args: 'mail.template'
Public methods (2)
  • execute(self)
    @api.one
  • run(self, autocommit=False)
    @api.model

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)
    @api.one

New fields (12)
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    readonly=True string='Attended Date'
  • date_open Datetime
    default=<expr> readonly=True string='Registration Date'
  • email Char
    string='Email'
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • name Char
    index=True string='Attendee Name'
  • origin Char
    help='Reference of the document that created the registration, for example a sales order' readonly=True string='Source Document'
  • partner_id Many2one → res.partner
    states={'done': [('readonly', True)]} string='Contact' args: 'res.partner'
  • phone Char
    string='Phone'
  • state Selection
    copy=False default='draft' readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
Public methods (11)
  • action_send_badge_email(self)
    @api.multi
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • button_reg_cancel(self)
    @api.one
  • button_reg_close(self)
    @api.one
    Close Registration
  • check_access_rights(self, operation, raise_exception=True)
    @api.model
  • confirm_registration(self)
    @api.one
  • create(self, vals)
    @api.model
  • do_draft(self)
    @api.one
  • get_date_range_str(self)
    @api.multi
  • message_get_default_recipients(self)
    @api.multi
  • message_get_suggested_recipients(self)
    @api.multi
  • summary(self)
    @api.multi

New fields (12)
  • auto_confirm Boolean
    default=True help='Events and registrations will automatically be confirmed upon creation, easing the flow for simple events.' args: 'Automatically Confirm Registrations'
  • default_hashtag Char
    args: 'Twitter Hashtag'
  • default_registration_max Integer
    default=0 help='It will select this default maximum value when you choose this event' args: 'Maximum Registrations'
  • default_registration_min Integer
    default=0 help='It will select this default minimum value when you choose this event' args: 'Minimum Registrations'
  • default_timezone Selection
    default=<expr> string='Timezone' args: '_tz_get'
  • event_type_mail_ids One2many → event.type.mail
    copy=False default=_get_default_event_type_mail_ids string='Mail Schedule' args: 'event.type.mail', 'event_type_id'
  • has_seats_limitation Boolean
    default=False args: 'Limited Seats'
  • is_online Boolean
    help='Online events like webinars do not require a specific location and are hosted online.' args: 'Online Event'
  • name Char
    required=True translate=True args: 'Event Category'
  • use_hashtag Boolean
    args: 'Use Default Hashtag'
  • use_mail_schedule Boolean
    default=True args: 'Automatically Send Emails'
  • use_timezone Boolean
    args: 'Use Default Timezone'
Public methods (0)

No public methods.

New fields (5)
  • event_type_id Many2one → event.type
    ondelete='cascade' required=True string='Event Type' args: 'event.type'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='Trigger' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hour(s)'), ('days', 'Day(s)'), ('weeks', 'Week(s)'), ('months', 'Month(s)')]
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' required=True string='Email Template' args: 'mail.template'
Public methods (0)

No public methods.

New fields (5)
  • module_event_barcode Boolean
    args: 'Barcode'
  • module_event_sale Boolean
    args: 'Tickets'
  • module_website_event_questions Boolean
    args: 'Registration Survey'
  • module_website_event_sale Boolean
    args: 'Online Ticketing'
  • module_website_event_track Boolean
    args: 'Tracks and Agenda'
Public methods (0)

No public methods.

New fields (1)
  • event_count Integer
    compute='_compute_event_count' help='Number of events the partner has participated.' args: 'Events'
Public methods (1)
  • action_event_view(self)
    @api.multi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/event
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Nicolas Martinelli, Julien Legros, Richard Mathot, qdp-odoo, Aaron Bohy, Jeremy Kersten, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - bus
    - web_tour
    - report
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organize events and all related tasks: planning, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgments for any event registration

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
assets_backend event assets ir.ui.view qweb Inherits web.assets_backend
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
report_event_registration_graph report.event.registration.graph report.event.registration graph New
report_event_registration_pivot report.event.registration.pivot report.event.registration pivot New
view_event_calendar event.event.calendar event.event calendar New
view_event_configuration Configure Event event.config.settings form New
view_event_confirm Event Confirmation event.confirm form New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
view_report_event_registration_search report.event.registration.search report.event.registration search New
Models touched (8)

New fields (5)
  • auto_confirmation Selection
    help='Unselect this option to manually manage draft event and draft registration' args: [(1, 'No validation step on registration'), (0, 'Manually confirm every registration')], 'Auto Confirmation'
  • module_event_barcode Boolean
    help='Install the event_barcode module' args: 'Scan badges to confirm attendances'
  • module_event_sale Selection
    help='Install the event_sale module' args: [(0, 'All events are free'), (1, 'Allow selling tickets')], 'Tickets'
  • module_website_event_questions Selection
    help='Install the website_event_questions module' args: [(0, 'No extra questions on registrations'), (1, 'Allow adding extra questions on registrations')], 'Registration Survey'
  • module_website_event_track Selection
    help='Install the module website_event_track' args: [(0, 'No mini website per event'), (1, 'Allow tracks, agenda and dedicated menus/website per event')], 'Tracks and Agenda'
Public methods (1)
  • set_default_auto_confirmation(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)
    @api.multi

New fields (33)
  • active Boolean
    default=True track_visibility='onchange'
  • address_id Many2one → res.partner
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Location' args: 'res.partner'
  • auto_confirm Boolean
    compute='_compute_auto_confirm' string='Confirmation not required'
  • badge_back Html
    string='Badge Back'
  • badge_front Html
    string='Badge Front'
  • badge_innerleft Html
    string='Badge Inner Left'
  • badge_innerright Html
    string='Badge Inner Right'
  • color Integer
    args: 'Kanban Color Index'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=False required=False states={'done': [('readonly', True)]} string='Company' args: 'res.company'
  • country_id Many2one → res.country
    related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    required=True states={'done': [('readonly', True)]} string='Start Date' track_visibility='onchange'
  • date_begin_located Datetime
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True states={'done': [('readonly', True)]} string='End Date' track_visibility='onchange'
  • date_end_located Datetime
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    default=<expr> required=True string='Timezone' args: '_tz_get'
  • description Html
    oldname='note' readonly=False sanitize_attributes=False states={'done': [('readonly', True)]} string='Description' translate=html_translate
  • event_logo Html
    string='Event Logo'
  • event_mail_ids One2many → event.mail
    copy=True default=<expr> string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_type_id Many2one → event.type
    oldname='type' readonly=False states={'done': [('readonly', True)]} string='Category' args: 'event.type'
  • name Char
    readonly=False required=True states={'done': [('readonly', True)]} string='Event Name' translate=True
  • organizer_id Many2one → res.partner
    default=<expr> string='Organizer' args: 'res.partner'
  • registration_ids One2many → event.registration
    readonly=False states={'done': [('readonly', True)]} string='Attendees' args: 'event.registration', 'event_id'
  • reply_to Char
    help="The email address of the organizer is likely to be put here, with the effect to be in the 'Reply-To' of the mails sent automatically at event or registrations confirmation. You can also put the email address of your mail gateway if you use one." readonly=False states={'done': [('readonly', True)]} args: 'Reply-To Email'
  • seats_availability Selection
    default='unlimited' required=True args: [('limited', 'Limited'), ('unlimited', 'Unlimited')], 'Maximum Attendees'
  • seats_available Integer
    compute='_compute_seats' oldname='register_avail' readonly=True store=True string='Available Seats'
  • seats_expected Integer
    compute='_compute_seats' readonly=True string='Number of Expected Attendees'
  • seats_max Integer
    help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' oldname='register_max' readonly=True states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]} string='Maximum Attendees Number'
  • seats_min Integer
    help='For each event you can define a minimum reserved seats (number of attendees), if it does not reach the mentioned registrations the event can not be confirmed (keep 0 to ignore this rule)' oldname='register_min' string='Minimum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' oldname='register_current' readonly=True store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' oldname='register_prospect' readonly=True store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' oldname='register_attended' readonly=True store=True string='Number of Participants'
  • state Selection
    copy=False default='draft' help="If event is created, the status is 'Draft'. If event is confirmed for the particular dates the status is set to 'Confirmed'. If the event is over, the status is set to 'Done'. If event is cancelled the status is set to 'Cancelled'." readonly=True required=True string='Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('confirm', 'Confirmed'), ('done', 'Done')]
  • user_id Many2one → res.users
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Responsible' args: 'res.users'
Public methods (9)
  • action_event_registration_report(self)
    @api.multi
  • button_cancel(self)
    @api.one
  • button_confirm(self)
    @api.one
  • button_done(self)
    @api.one
  • button_draft(self)
    @api.one
  • create(self, vals)
    @api.model
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
    @api.one
  • name_get(self)
    @api.multi@api.depends('name', 'date_begin', 'date_end')
  • write(self, vals)
    @api.multi

New fields (10)
  • done Boolean
    compute='_compute_done' store=True args: 'Sent'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='When to Run ' args: [('after_sub', 'After each registration'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hour(s)'), ('days', 'Day(s)'), ('weeks', 'Week(s)'), ('months', 'Month(s)')]
  • mail_registration_ids One2many → event.mail.registration
    args: 'event.mail.registration', 'scheduler_id'
  • mail_sent Boolean
    args: 'Mail Sent on Event'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Sent Mail'
  • sequence Integer
    args: 'Display order'
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' required=True string='Email to Send' args: 'mail.template'
Public methods (2)
  • execute(self)
    @api.one
  • run(self, autocommit=False)
    @api.model

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)
    @api.one

New fields (12)
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    readonly=True string='Attended Date'
  • date_open Datetime
    default=<expr> readonly=True string='Registration Date'
  • email Char
    string='Email'
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • name Char
    index=True string='Attendee Name'
  • origin Char
    help='Reference of the document that created the registration, for example a sale order' readonly=True string='Source Document'
  • partner_id Many2one → res.partner
    states={'done': [('readonly', True)]} string='Contact' args: 'res.partner'
  • phone Char
    string='Phone'
  • state Selection
    copy=False default='draft' readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
Public methods (8)
  • action_send_badge_email(self)
    @api.multi
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • button_reg_cancel(self)
    @api.one
  • button_reg_close(self)
    @api.one
    Close Registration
  • confirm_registration(self)
    @api.one
  • create(self, vals)
    @api.model
  • do_draft(self)
    @api.one
  • get_date_range_str(self)
    @api.multi
  • message_get_suggested_recipients(self)
    @api.multi

New fields (4)
  • default_registration_max Integer
    default=0 help='It will select this default maximum value when you choose this event' args: 'Default Maximum Registration'
  • default_registration_min Integer
    default=0 help='It will select this default minimum value when you choose this event' args: 'Default Minimum Registration'
  • default_reply_to Char
    args: 'Reply To'
  • name Char
    required=True translate=True args: 'Event Type'
Public methods (0)

No public methods.

New fields (15)
  • cancel_state Integer
    args: ' # No of Cancelled Registrations'
  • company_id Many2one → res.company
    readonly=True args: 'res.company', 'Company'
  • confirm_state Integer
    args: ' # No of Confirmed Registrations'
  • create_date Datetime
    readonly=True args: 'Creation Date'
  • draft_state Integer
    args: ' # No of Draft Registrations'
  • event_date Datetime
    readonly=True args: 'Event Date'
  • event_id Many2one → event.event
    required=True args: 'event.event', 'Event'
  • event_state Selection
    readonly=True required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')], 'Event State'
  • event_type_id Many2one → event.type
    args: 'event.type', 'Event Type'
  • name_registration Char
    readonly=True args: 'Participant / Contact Name'
  • nbevent Integer
    args: 'Number of Events'
  • nbregistration Integer
    args: 'Number of Registrations'
  • registration_state Selection
    readonly=True required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Attended'), ('cancel', 'Cancelled')], 'Registration State'
  • seats_max Integer
    args: 'Max Seats'
  • user_id Many2one → res.users
    readonly=True args: 'res.users', 'Event Responsible'
Public methods (1)
  • init(self)
    @api.model_cr
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/event
VERSION
VERSION 0.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Nicolas Martinelli, Jérome Maes, Richard Mathot, Géry Debongnie, Aaron Bohy, Jeremy Kersten, Lucas Perais (lpe), Damien Bouvy, Julien De Coster, Yannick Tivisse, qsm-odoo, Martin Geubelle, RomainLibert, paa-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - bus
    - marketing
    - report
    - web_tip
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organise events and all related tasks: planification, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgements for any event registration

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
assets_backend event assets ir.ui.view qweb Inherits web.assets_backend
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb New
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb New
report_event_registration_graph report.event.registration.graph report.event.registration graph New
report_event_registration_pivot report.event.registration.pivot report.event.registration pivot New
view_event_calendar event.event.calendar event.event calendar New
view_event_configuration Configure Event event.config.settings form New
view_event_confirm Event Confirmation event.confirm form New
view_event_form event.event.form event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_mail_form event.mail.form event.mail form New
view_event_mail_tree event.mail.tree event.mail tree New
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph event.registration.graph event.registration graph New
view_event_registration_pivot event.registration.pivot event.registration pivot New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search event.event.search event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form event.type.form event.type form New
view_event_type_tree event.type.tree event.type tree New
view_registration_search event.registration.search event.registration search New
view_report_event_registration_search report.event.registration.search report.event.registration search New
Models touched (8)

New fields (0)

No new fields.

Public methods (1)
  • set_default_auto_confirmation(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)
    @api.multi

New fields (33)
  • active Boolean
    default=True track_visibility='onchange'
  • address_id Many2one → res.partner
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Location' args: 'res.partner'
  • auto_confirm Boolean
    compute='_compute_auto_confirm' string='Confirmation not required'
  • badge_back Html
    string='Badge Back'
  • badge_front Html
    string='Badge Front'
  • badge_innerleft Html
    string='Badge Innner Left'
  • badge_innerright Html
    string='Badge Inner Right'
  • color Integer
    args: 'Kanban Color Index'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=False required=False states={'done': [('readonly', True)]} string='Company' args: 'res.company'
  • country_id Many2one → res.country
    related='address_id.country_id' store=True args: 'res.country', 'Country'
  • date_begin Datetime
    required=True states={'done': [('readonly', True)]} string='Start Date' track_visibility='onchange'
  • date_begin_located Datetime
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    required=True states={'done': [('readonly', True)]} string='End Date' track_visibility='onchange'
  • date_end_located Datetime
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    default=<expr> string='Timezone' args: '_tz_get'
  • description Html
    oldname='note' readonly=False states={'done': [('readonly', True)]} string='Description' translate=True
  • event_logo Html
    string='Event Logo'
  • event_mail_ids One2many → event.mail
    default=<expr> string='Mail Schedule' args: 'event.mail', 'event_id'
  • event_type_id Many2one → event.type
    oldname='type' readonly=False states={'done': [('readonly', True)]} string='Category' args: 'event.type'
  • name Char
    readonly=False required=True states={'done': [('readonly', True)]} string='Event Name' translate=True
  • organizer_id Many2one → res.partner
    default=<expr> string='Organizer' args: 'res.partner'
  • registration_ids One2many → event.registration
    readonly=False states={'done': [('readonly', True)]} string='Attendees' args: 'event.registration', 'event_id'
  • reply_to Char
    help="The email address of the organizer is likely to be put here, with the effect to be in the 'Reply-To' of the mails sent automatically at event or registrations confirmation. You can also put the email address of your mail gateway if you use one." readonly=False states={'done': [('readonly', True)]} args: 'Reply-To Email'
  • seats_availability Selection
    default='unlimited' required=True args: [('limited', 'Limited'), ('unlimited', 'Unlimited')], 'Maximum Attendees'
  • seats_available Integer
    compute='_compute_seats' oldname='register_avail' readonly=True store=True string='Maximum Attendees'
  • seats_expected Integer
    compute='_compute_seats' readonly=True string='Number of Expected Attendees'
  • seats_max Integer
    help='For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.' oldname='register_max' readonly=True states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]} string='Maximum Attendees Number'
  • seats_min Integer
    help='For each event you can define a minimum reserved seats (number of attendees), if it does not reach the mentioned registrations the event can not be confirmed (keep 0 to ignore this rule)' oldname='register_min' string='Minimum Attendees'
  • seats_reserved Integer
    compute='_compute_seats' oldname='register_current' readonly=True store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' oldname='register_prospect' readonly=True store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' oldname='register_attended' readonly=True store=True string='Number of Participants'
  • state Selection
    copy=False default='draft' help="If event is created, the status is 'Draft'. If event is confirmed for the particular dates the status is set to 'Confirmed'. If the event is over, the status is set to 'Done'. If event is cancelled the status is set to 'Cancelled'." readonly=True required=True string='Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('confirm', 'Confirmed'), ('done', 'Done')]
  • user_id Many2one → res.users
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Responsible' args: 'res.users'
Public methods (9)
  • action_event_registration_report(self)
    @api.multi
  • button_cancel(self)
    @api.one
  • button_confirm(self)
    @api.one
  • button_done(self)
    @api.one
  • button_draft(self)
    @api.one
  • create(self, vals)
    @api.model
  • mail_attendees(self, template_id, force_send=False, filter_func=<expr>)
    @api.one
  • name_get(self)
    @api.multi@api.depends('name', 'date_begin', 'date_end')
  • write(self, vals)
    @api.multi

New fields (10)
  • done Boolean
    compute='_compute_done' store=True args: 'Sent'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • interval_nbr Integer
    default=1 args: 'Interval'
  • interval_type Selection
    default='before_event' required=True string='When to Run ' args: [('after_sub', 'After each subscription'), ('before_event', 'Before the event'), ('after_event', 'After the event')]
  • interval_unit Selection
    default='hours' required=True string='Unit' args: [('now', 'Immediately'), ('hours', 'Hour(s)'), ('days', 'Day(s)'), ('weeks', 'Week(s)'), ('months', 'Month(s)')]
  • mail_registration_ids One2many → event.mail.registration
    args: 'event.mail.registration', 'scheduler_id'
  • mail_sent Boolean
    args: 'Mail Sent on Event'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Sent Mail'
  • sequence Integer
    args: 'Display order'
  • template_id Many2one → mail.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent' ondelete='restrict' required=True string='Email to Send' args: 'mail.template'
Public methods (2)
  • execute(self)
    @api.one
  • run(self, autocommit=False)
    @api.model

New fields (4)
  • mail_sent Boolean
    args: 'Mail Sent'
  • registration_id Many2one → event.registration
    ondelete='cascade' required=True args: 'event.registration', 'Attendee'
  • scheduled_date Datetime
    compute='_compute_scheduled_date' store=True args: 'Scheduled Time'
  • scheduler_id Many2one → event.mail
    ondelete='cascade' required=True args: 'event.mail', 'Mail Scheduler'
Public methods (1)
  • execute(self)
    @api.one

New fields (12)
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    readonly=True string='Attended Date'
  • date_open Datetime
    default=<expr> readonly=True string='Registration Date'
  • email Char
    string='Email'
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • name Char
    index=True string='Attendee Name'
  • origin Char
    help='Reference of the document that created the registration, for example a sale order' readonly=True string='Source Document'
  • partner_id Many2one → res.partner
    states={'done': [('readonly', True)]} string='Contact' args: 'res.partner'
  • phone Char
    string='Phone'
  • state Selection
    copy=False default='draft' readonly=True string='Status' track_visibility='onchange' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
Public methods (7)
  • action_send_badge_email(self)
    @api.multi
    Open a window to compose an email, with the template - 'event_badge' message loaded by default
  • button_reg_cancel(self)
    @api.one
  • button_reg_close(self)
    @api.one
    Close Registration
  • confirm_registration(self)
    @api.one
  • create(self, vals)
    @api.model
  • do_draft(self)
    @api.one
  • message_get_suggested_recipients(self)
    @api.multi

New fields (4)
  • default_registration_max Integer
    default=0 help='It will select this default maximum value when you choose this event' args: 'Default Maximum Registration'
  • default_registration_min Integer
    default=0 help='It will select this default minimum value when you choose this event' args: 'Default Minimum Registration'
  • default_reply_to Char
    args: 'Reply To'
  • name Char
    required=True translate=True args: 'Event Type'
Public methods (0)

No public methods.

New fields (15)
  • cancel_state Integer
    args: ' # No of Cancelled Registrations'
  • company_id Many2one → res.company
    readonly=True args: 'res.company', 'Company'
  • confirm_state Integer
    args: ' # No of Confirmed Registrations'
  • create_date Datetime
    readonly=True args: 'Creation Date'
  • draft_state Integer
    args: ' # No of Draft Registrations'
  • event_date Datetime
    readonly=True args: 'Event Date'
  • event_id Many2one → event.event
    required=True args: 'event.event', 'Event'
  • event_state Selection
    readonly=True required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')], 'Event State'
  • event_type_id Many2one → event.type
    args: 'event.type', 'Event Type'
  • name_registration Char
    readonly=True args: 'Participant / Contact Name'
  • nbevent Integer
    args: 'Number of Events'
  • nbregistration Integer
    args: 'Number of Registrations'
  • registration_state Selection
    readonly=True required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Attended'), ('cancel', 'Cancelled')], 'Registration State'
  • seats_max Integer
    args: 'Max Seats'
  • user_id Many2one → res.users
    readonly=True args: 'res.users', 'Event Responsible'
Public methods (1)
  • init(self, cr)
    Initialize the sql view for the event registration
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/event
VERSION
VERSION 0.1
CATEGORY
CATEGORYTools
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Foram Katharotiya (OpenERP), Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, Fabien Meghazi, ggh-openerp, Christophe Simonis, Xavier Morel, Goffin Simon, Anael Closson, Vishmita, RGA(OpenERP), Kersten Jeremy, Paramjit Singh Sahota, Nicolas Lempereur, Hiral Patel (OpenERP), Richard Mathot, Géry Debongnie, Aaron Bohy, Pariket Trivedi, Richard Mathot (OpenERP), ged-odoo, Jeremy Kersten, ima-openerp, Gery Debongnie, Randhir Mayatra rma-openerp, sgo@tinyerp.com, Yogesh Parekh (OpenERP), Sunil Sharma (OpenERP)
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - board
    - email_template
    - mail
    - marketing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organise events and all related tasks: planification, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgements for any event registration

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
assets_backend event assets ir.ui.view qweb Inherits web.assets_backend
report_event_registration_graph report.event.registration.graph report.event.registration graph New
view_event_calendar event.event.calendar event.event calendar New
view_event_confirm Event Confirmation event.confirm form New
view_event_form Events event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_partner_info_form res.partner.event.info.inherit res.partner field Inherits base.view_partner_form
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph Registration Graph event.registration graph New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search Events event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form Event type event.type form New
view_event_type_tree Event type event.type tree New
view_registration_search Registrations event.registration search New
view_report_event_registration_search report.event.registration.search report.event.registration search New
Models touched (6)

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)
    @api.multi

New fields (26)
  • address_id Many2one → res.partner
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Location' args: 'res.partner'
  • company_id Many2one → res.company
    change_default=True default=<expr> readonly=False required=False states={'done': [('readonly', True)]} string='Company' args: 'res.company'
  • count_registrations Integer
    compute='_count_registrations' string='Registrations'
  • country_id Many2one → res.country
    compute='_compute_country' store=True string='Country' args: 'res.country'
  • date_begin Datetime
    readonly=True required=True states={'draft': [('readonly', False)]} string='Start Date'
  • date_begin_located Datetime
    compute='_compute_date_begin_tz' string='Start Date Located'
  • date_end Datetime
    readonly=True required=True states={'draft': [('readonly', False)]} string='End Date'
  • date_end_located Datetime
    compute='_compute_date_end_tz' string='End Date Located'
  • date_tz Selection
    default=<expr> string='Timezone' args: '_tz_get'
  • description Html
    oldname='note' readonly=False states={'done': [('readonly', True)]} string='Description' translate=True
  • email_confirmation_id Many2one → email.template
    domain=[('model', '=', 'event.registration')] help='If you set an email template, each participant will receive this email announcing the confirmation of the event.' string='Event Confirmation Email' args: 'email.template'
  • email_registration_id Many2one → email.template
    domain=[('model', '=', 'event.registration')] help='This field contains the template of the mail that will be automatically sent each time a registration for this event is confirmed.' string='Registration Confirmation Email' args: 'email.template'
  • is_subscribed Boolean
    compute='_compute_subscribe' string='Subscribed'
  • name Char
    readonly=False required=True states={'done': [('readonly', True)]} string='Event Name' translate=True
  • organizer_id Many2one → res.partner
    default=<expr> string='Organizer' args: 'res.partner'
  • registration_ids One2many → event.registration
    readonly=False states={'done': [('readonly', True)]} string='Registrations' args: 'event.registration', 'event_id'
  • reply_to Char
    help="The email address of the organizer is likely to be put here, with the effect to be in the 'Reply-To' of the mails sent automatically at event or registrations confirmation. You can also put the email address of your mail gateway if you use one." readonly=False states={'done': [('readonly', True)]} string='Reply-To Email'
  • seats_available Integer
    compute='_compute_seats' oldname='register_avail' readonly=True store=True string='Available Seats'
  • seats_max Integer
    help='You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )' oldname='register_max' readonly=True states={'draft': [('readonly', False)]} string='Maximum Available Seats'
  • seats_min Integer
    help='You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )' oldname='register_min' readonly=True states={'draft': [('readonly', False)]} string='Minimum Reserved Seats'
  • seats_reserved Integer
    compute='_compute_seats' oldname='register_current' readonly=True store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' oldname='register_prospect' readonly=True store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' oldname='register_attended' readonly=True store=True string='Number of Participations'
  • state Selection
    copy=False default='draft' help="If event is created, the status is 'Draft'. If event is confirmed for the particular dates the status is set to 'Confirmed'. If the event is over, the status is set to 'Done'. If event is cancelled the status is set to 'Cancelled'." readonly=True required=True string='Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('confirm', 'Confirmed'), ('done', 'Done')]
  • type Many2one → event.type
    readonly=False states={'done': [('readonly', True)]} string='Type of Event' args: 'event.type'
  • user_id Many2one → res.users
    default=<expr> readonly=False states={'done': [('readonly', True)]} string='Responsible User' args: 'res.users'
Public methods (8)
  • button_cancel(self)
    @api.one
  • button_confirm(self)
    @api.one
    Confirm Event and send confirmation email to all register peoples
  • button_done(self)
    @api.one
  • button_draft(self)
    @api.one
  • confirm_event(self)
    @api.one
  • name_get(self)
    @api.multi@api.depends('name', 'date_begin', 'date_end')
  • subscribe_to_event(self)
    @api.one
    Subscribe the current user to a given event
  • unsubscribe_to_event(self)
    @api.one
    Unsubscribe the current user from a given event

New fields (16)
  • company_id Many2one → res.company
    readonly=True related='event_id.company_id' states={'draft': [('readonly', False)]} store=True string='Company' args: 'res.company'
  • date_closed Datetime
    readonly=True string='Attended Date'
  • date_open Datetime
    readonly=True string='Registration Date'
  • email Char
    string='Email'
  • event_begin_date Datetime
    readonly=True related='event_id.date_begin' string='Event Start Date'
  • event_end_date Datetime
    readonly=True related='event_id.date_end' string='Event End Date'
  • event_id Many2one → event.event
    readonly=True required=True states={'draft': [('readonly', False)]} string='Event' args: 'event.event'
  • log_ids One2many → mail.message
    domain=[('model', '=', _name)] string='Logs' args: 'mail.message', 'res_id'
  • name Char
    select=True string='Name'
  • nb_register Integer
    default=1 readonly=True required=True states={'draft': [('readonly', False)]} string='Number of Participants'
  • origin Char
    help='Reference of the sales order which created the registration' readonly=True string='Source Document'
  • partner_id Many2one → res.partner
    states={'done': [('readonly', True)]} string='Partner' args: 'res.partner'
  • phone Char
    string='Phone'
  • reply_to Char
    readonly=True related='event_id.reply_to' string='Reply-to Email'
  • state Selection
    copy=False default='draft' readonly=True string='Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
  • user_id Many2one → res.users
    states={'done': [('readonly', True)]} string='User' args: 'res.users'
Public methods (8)
  • button_reg_cancel(self)
    @api.one
  • button_reg_close(self)
    @api.one
    Close Registration
  • confirm_registration(self)
    @api.one
  • do_draft(self)
    @api.one
  • mail_user(self)
    @api.one
    Send email to user with email_template when registration is done
  • mail_user_confirm(self)
    @api.one
    Send email to user when the event is confirmed
  • message_get_suggested_recipients(self)
    @api.multi
  • registration_open(self)
    @api.one
    Open Registration

New fields (6)
  • default_email_event Many2one → email.template
    help='It will select this default confirmation event mail value when you choose this event' string='Event Confirmation Email' args: 'email.template'
  • default_email_registration Many2one → email.template
    help='It will select this default confirmation registration mail value when you choose this event' string='Registration Confirmation Email' args: 'email.template'
  • default_registration_max Integer
    default=0 help='It will select this default maximum value when you choose this event' string='Default Maximum Registration'
  • default_registration_min Integer
    default=0 help='It will select this default minimum value when you choose this event' string='Default Minimum Registration'
  • default_reply_to Char
    help="The email address of the organizer which is put in the 'Reply-To' of all emails sent automatically at event or registrations confirmation. You can also put your email address of your mail gateway if you use one." string='Default Reply-To'
  • name Char
    required=True string='Event Type'
Public methods (0)

No public methods.

New fields (14)
  • company_id Many2one → res.company
    readonly=True args: 'res.company', 'Company'
  • confirm_state Integer
    args: ' # No of Confirmed Registrations'
  • draft_state Integer
    args: ' # No of Draft Registrations'
  • event_date Datetime
    readonly=True args: 'Event Date'
  • event_id Many2one → event.event
    required=True args: 'event.event', 'Event'
  • event_state Selection
    readonly=True required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')], 'Event State'
  • event_type Many2one → event.type
    args: 'event.type', 'Event Type'
  • name_registration Char
    readonly=True args: 'Participant / Contact Name'
  • nbevent Integer
    args: 'Number of Events'
  • nbregistration Integer
    args: 'Number of Registrations'
  • registration_state Selection
    readonly=True required=True args: [('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Attended'), ('cancel', 'Cancelled')], 'Registration State'
  • seats_max Integer
    args: 'Max Seats'
  • user_id Many2one → res.users
    readonly=True args: 'res.users', 'Event Responsible'
  • user_id_registration Many2one → res.users
    readonly=True args: 'res.users', 'Register'
Public methods (1)
  • init(self, cr)
    Initialize the sql view for the event registration

New fields (1)
  • speaker Boolean
    help='Check this box if this contact is a speaker.'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/7.0/event
VERSION
VERSION 0.1
CATEGORY
CATEGORYTools
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Numerigraphe - Lionel Sausin, Christophe Matthieu, Pinakin Nayi (OpenERP), Harry (OpenERP), Antonin Bourguignon, pankita shah (Open ERP), ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Bhumika (OpenERP), Purnendu Singh (OpenERP), Saurang Suthar (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Saurang Suthar, Olivier Dony, Rajesh Prajapati (OpenERP), Twinkle (OpenERP), Divyesh Makwana (Open ERP), Thibault Delavallée, Vo Minh Thu, Hardik, Arnaud Pineux, pso (OpenERP), Sbh (Openerp), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Nimesh (Open ERP), Denis Ledoux, Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), Alexis de Lattre, help, Fabien Meghazi, Christophe Simonis, Jiten (OpenERP), Dharti Ratani (OpenERP), Khushboo Bhatt (Open ERP), Amit Patel, Frédéric van der Essen, Gilles Major, Vishmita, Nicolas Martinelli, Vidhin Mehta (OpenERP), Amit (OpenERP), Paramjit Singh Sahota, MVA, Kuldeep, Jignesh Rathod (Open ERP), nwi-openerp, Pariket Trivedi
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base_setup
    - base
    - web_kanban
    - web
    - board
    - email_template
    - mail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

The event module allows you to efficiently organise events and all related tasks: planification, registration tracking,
attendances, etc.

Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgements for any event registration

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
board_associations_manager_form board.associations.manager.form board.board form New
report_event_registration_graph report.event.registration.graph report.event.registration graph New
report_event_registration_tree report.event.registration.tree report.event.registration tree New
view_event_calendar event.event.calendar event.event calendar New
view_event_confirm Event Confirmation event.confirm form New
view_event_form Events event.event form New
view_event_kanban event.event.kanban event.event kanban New
view_event_partner_info_form res.partner.event.info.inherit res.partner field Inherits base.view_partner_form
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph Registration Graph event.registration graph New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search Events event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form Event type event.type form New
view_event_type_tree Event type event.type tree New
view_registration_search Registrations event.registration search New
view_report_event_reg_graph Registration Event report report.event.registration graph New
view_report_event_registration_search report.event.registration.search report.event.registration search New
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/event
VERSION
VERSION 0.1
CATEGORY
CATEGORYTools
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Rucha (Open ERP), Stephane Wirtel, DBR (OpenERP), Harry (OpenERP), Fabien Pinckaers, Antony Lesuisse, Meera Trambadia (OpenERP), Olivier Dony, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Kuldeep Joshi (OpenERP), vro, niv-openerp, Christophe Simonis, Ujjvala Collins (OpenERP), Xavier Morel, Khushboo Bhatt (Open ERP), Amit (OpenERP), Thibault Francois, Maxime Chambreuil, Carlos Vásquez, ksa (Open ERP), Els Van Vossel, Israel Fermin Montilla, Rifakat Haradwala (Open ERP), Hardik Ansodariy (OpenERP), ssu, Yogesh (OpenERP), ron@tinyerp.com, mtr, Tejas (OpenERP), RavishchanraMurari (Open ERP), YSA (Openerp)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - crm
    - base_action_rule
    - base
    - mail
    - base_tools
    - base_setup
    - process
    - base_calendar
    - resource
    - board
    - fetchmail
    - account
    - product
    - decimal_precision
    - analytic
    - edi
    - email_template
    - marketing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Organization and management of Events.
======================================

This module allows you
    * to manage your events and their registrations
    * to use emails to automatically confirm and send acknowledgements for any registration to an event
    * ...

Note that:
    - You can define new types of events in
        Association / Configuration / Types of Events

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
board_associations_manager_form board.associations.manager.form board.board form New
report_event_registration_graph report.event.registration.graph report.event.registration graph New
report_event_registration_tree report.event.registration.tree report.event.registration tree New
view_event_calendar event.event.calendar event.event calendar New
view_event_confirm Event Confirmation event.confirm form New
view_event_confirm_registration Registration Confirmation event.confirm.registration form New
view_event_form Events event.event form New
view_event_graph Event Graph event.event graph New
view_event_make_invoice event.make.invoice event.make.invoice form New
view_event_partner_info_form res.partner.event.info.inherit res.partner page Inherits base.view_partner_form
view_event_registration_calendar event.registration.calendar event.registration calendar New
view_event_registration_form event.registration.form event.registration form New
view_event_registration_graph Registration Graph event.registration graph New
view_event_registration_tree event.registration.tree event.registration tree New
view_event_search Events event.event search New
view_event_tree event.event.tree event.event tree New
view_event_type_form Event type event.type form New
view_event_type_tree Event type event.type tree New
view_partner_event_registration Partner event registration partner.event.registration form New
view_registration_search Registrations event.registration search New
view_report_event_reg_graph Registration Event report report.event.registration graph New
view_report_event_registration_search report.event.registration.search report.event.registration search New
view_speaker_partner_info_form res.partner.speaker.info.inherit res.partner field Inherits base.view_partner_form
Models touched (0)

No models found for this module.