Events Sales

event_sale
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/event_sale
VERSION
VERSION 1.3
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Laurent Smet, Julien Castiaux, Victor Feyens, Julien Mougenot, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Renaud Thiry, Ipsita Borisagar, David Monnom (moda), Victor Piryns (pivi), amdi-odoo, Dylan Kiss (dyki), Jérémy Hennecart (jeh), nihp-odoo, Max Whale, aamo-odoo, Shaan Thakkar (THSH), yagp-odoo, Michaël Mattiello, Pierre Pulinckx, Bastien PIERRE, Krzysztof Magusiak (krma), Omar (OSAH), krip-odoo, Mohamed Barakat, saurabh
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event_product
    - event
    - barcodes
    - web
    - base
    - base_setup
    - mail
    - bus
    - web_tour
    - html_editor
    - phone_validation
    - portal
    - http_routing
    - auth_signup
    - utm
    - product
    - uom
    - account
    - onboarding
    - analytic
    - digest
    - resource
    - sale_management
    - sale
    - sales_team
    - account_payment
    - payment
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
event_configurator_view_form event.configurator.view.form event.event.configurator form New
event_registration_change_exception Message: Alert on event registration data change ir.ui.view qweb New
event_registration_ticket_view_form event.registration.form.inherit event.registration xpath Inherits event_product.event_registration_ticket_view_form
event_sale_report_view_form event.sale.report.view.form event.sale.report form New
event_sale_report_view_graph event.sale.report.view.graph event.sale.report graph New
event_sale_report_view_pivot event.sale.report.view.pivot event.sale.report pivot New
event_sale_report_view_search event.sale.report.view.search event.sale.report search New
event_sale_report_view_tree event.sale.report.view.list event.sale.report list New
product_template_form_view product.template.inherit.event.sale product.template field Inherits sale.product_template_form_view
sale_order_view_form sale.order.form.inherit.event.sale sale.order div Inherits sale.view_order_form
view_event_form_inherit_ticket event.form.inherit event.event xpath Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_tree event.registration.list.inherit event.registration field Inherits event.view_event_registration_tree
Models touched (10)

New fields (2)
  • sale_order_lines_ids One2many → sale.order.line
    groups='sales_team.group_sale_salesman' string='All sale order lines pointing to this event' args: 'sale.order.line', 'event_id'
  • sale_price_total Monetary
    compute='_compute_sale_price_total' groups='sales_team.group_sale_salesman' string='Sales (Tax Included)'
Public methods (1)
  • action_view_linked_orders(self)
    Redirects to only the confirmed orders linked to the current events

New fields (6)
  • event_id Many2one → event.event
    string='Event' args: 'event.event'
  • event_slot_id Many2one → event.slot
    compute='_compute_event_slot_id' domain="[('event_id', '=', event_id)]" readonly=False store=True string='Slot' args: 'event.slot'
  • event_ticket_id Many2one → event.event.ticket
    compute='_compute_event_ticket_id' domain="[('event_id', '=', event_id)]" readonly=False store=True string='Ticket Type' args: 'event.event.ticket'
  • has_available_tickets Boolean
    compute='_compute_has_available_tickets' args: 'Has Available Tickets'
  • is_multi_slots Boolean
    related='event_id.is_multi_slots'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
Public methods (1)
  • check_event_id(self)
    @api.constrains('event_id', 'event_slot_id', 'event_ticket_id')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • sale_order_id Many2one → sale.order
    copy=False ondelete='cascade' string='Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    copy=False index='btree_not_null' ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
  • state Selection
    compute='_compute_registration_status' default=None precompute=True readonly=False store=True
  • utm_campaign_id Many2one
    compute='_compute_utm_campaign_id' ondelete='set null' readonly=False store=True
  • utm_medium_id Many2one
    compute='_compute_utm_medium_id' ondelete='set null' readonly=False store=True
  • utm_source_id Many2one
    compute='_compute_utm_source_id' ondelete='set null' readonly=False store=True
Public methods (3)
  • action_view_sale_order(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (24)
  • active Boolean
    args: 'Is registration active (not archived)?'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • event_date_begin Date
    readonly=True string='Event Start Date'
  • event_date_end Date
    readonly=True string='Event End Date'
  • event_id Many2one → event.event
    readonly=True string='Event' args: 'event.event'
  • event_registration_create_date Date
    readonly=True string='Registration Date'
  • event_registration_id Many2one → event.registration
    readonly=True args: 'event.registration'
  • event_registration_name Char
    readonly=True args: 'Attendee Name'
  • event_registration_state Selection
    readonly=True string='Registration Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
  • event_slot_id Many2one → event.slot
    readonly=True string='Event Slot' args: 'event.slot'
  • event_ticket_id Many2one → event.event.ticket
    readonly=True string='Event Ticket' args: 'event.event.ticket'
  • event_ticket_price Float
    readonly=True string='Ticket price'
  • event_type_id Many2one → event.type
    readonly=True string='Event Type' args: 'event.type'
  • invoice_partner_id Many2one → res.partner
    readonly=True string='Invoice Address' args: 'res.partner'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • sale_order_date Datetime
    readonly=True args: 'Order Date'
  • sale_order_id Many2one → sale.order
    readonly=True args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    readonly=True args: 'sale.order.line'
  • sale_order_partner_id Many2one → res.partner
    readonly=True string='Customer' args: 'res.partner'
  • sale_order_state Selection
    readonly=True selection=SALE_ORDER_STATE string='Sale Order Status'
  • sale_order_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • sale_price Float
    readonly=True args: 'Revenues'
  • sale_price_untaxed Float
    readonly=True args: 'Untaxed Revenues'
  • sale_status Selection
    selection=[('to_pay', 'Not Sold'), ('sold', 'Sold'), ('free', 'Free')] string='Payment Status'
Public methods (1)
  • init(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order', 'Sales Order'
Public methods (2)
  • action_make_registration(self)
  • default_get(self, fields)
    @api.model

New fields (10)
  • company_id Many2one
    related='event_id.company_id'
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_slot_id Many2one → event.slot
    string='Event Slot' args: 'event.slot'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • name Char
    string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (0)

No public methods.

New fields (1)
  • attendee_count Integer
    compute='_compute_attendee_count' args: 'Attendee Count'
Public methods (3)
  • action_confirm(self)
  • action_view_attendee_list(self)
  • write(self, vals)
    Synchronize partner from SO to registrations. This is done notably in website_sale controller shop/address that updates customer, but not only.

New fields (5)
  • event_id Many2one → event.event
    compute='_compute_event_id' help='Choose an event and it will automatically create a registration for this event.' index='btree_not_null' precompute=True readonly=False store=True string='Event' args: 'event.event'
  • event_slot_id Many2one → event.slot
    compute='_compute_event_related' help='Choose an event slot and it will automatically create a registration for this event slot.' precompute=True readonly=False store=True string='Slot' args: 'event.slot'
  • event_ticket_id Many2one → event.event.ticket
    compute='_compute_event_related' help='Choose an event ticket and it will automatically create a registration for this event ticket.' precompute=True readonly=False store=True string='Ticket Type' args: 'event.event.ticket'
  • is_multi_slots Boolean
    related='event_id.is_multi_slots'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'sale_order_line_id'
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/18.0/event_sale
VERSION
VERSION 1.3
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Thibault Delavallée, Christophe Simonis, Yannick Tivisse, Odoo Online, Laurent Smet, Victor Feyens, Nasreddin Boulif (bon), Tiffany Chang (tic), Rémy Voet (ryv), Gorash, roen-odoo, Renaud Thiry, Vincent Larcin, David Monnom (moda), Louis Wicket (wil), David, Walid, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Noe Antoine, Youssef Bashandy, Jérémy Hennecart (jeh), kcv-odoo, pilarvargas-tecnativa, Lina (liew), nihp-odoo, sami odoo, Louis (wil), aamo-odoo, Clément Cardot, Pierre Pulinckx (PIPU), David Monnom, Khushi, Bastien PIERRE, Bastien (bvdn), Mohamed Barakat
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event_product
    - event
    - barcodes
    - web
    - base
    - base_setup
    - mail
    - bus
    - web_tour
    - html_editor
    - phone_validation
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
    - product
    - uom
    - account
    - onboarding
    - analytic
    - digest
    - resource
    - sale_management
    - sale
    - sales_team
    - account_payment
    - payment
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
event_configurator_view_form event.configurator.view.form event.event.configurator form New
event_registration_ticket_view_form event.registration.form.inherit event.registration xpath Inherits event.view_event_registration_form
event_registration_view_graph event.registration.graph.inherit.event.sale event.registration field Inherits event.view_event_registration_graph
event_registration_view_kanban event.registration.kanban.inherit.event.sale event.registration xpath Inherits event.event_registration_view_kanban
event_sale_report_view_form event.sale.report.view.form event.sale.report form New
event_sale_report_view_graph event.sale.report.view.graph event.sale.report graph New
event_sale_report_view_pivot event.sale.report.view.pivot event.sale.report pivot New
event_sale_report_view_search event.sale.report.view.search event.sale.report search New
event_sale_report_view_tree event.sale.report.view.list event.sale.report list New
event_ticket_id_change_exception Message: Alert on event ticket id change ir.ui.view qweb New
product_template_form_view product.template.inherit.event.sale product.template field Inherits sale.product_template_form_view
sale_order_view_form sale.order.form.inherit.event.sale sale.order xpath Inherits sale.view_order_form
view_event_form_inherit_ticket event.form.inherit event.event xpath Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_tree event.registration.list.inherit event.registration field Inherits event.view_event_registration_tree
Models touched (10)

New fields (2)
  • sale_order_lines_ids One2many → sale.order.line
    groups='sales_team.group_sale_salesman' string='All sale order lines pointing to this event' args: 'sale.order.line', 'event_id'
  • sale_price_subtotal Monetary
    compute='_compute_sale_price_subtotal' groups='sales_team.group_sale_salesman' string='Sales (Tax Excluded)'
Public methods (1)
  • action_view_linked_orders(self)
    Redirects to the orders linked to the current events

New fields (4)
  • event_id Many2one → event.event
    string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    compute='_compute_event_ticket_id' readonly=False store=True string='Ticket Type' args: 'event.event.ticket'
  • has_available_tickets Boolean
    compute='_compute_has_available_tickets' args: 'Has Available Tickets'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
Public methods (1)
  • check_event_id(self)
    @api.constrains('event_id', 'event_ticket_id')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (7)
  • sale_order_id Many2one → sale.order
    copy=False ondelete='cascade' string='Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    copy=False ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
  • sale_status Selection
    compute='_compute_registration_status' compute_sudo=True precompute=True selection=[('to_pay', 'Not Sold'), ('sold', 'Sold'), ('free', 'Free')] store=True string='Sale Status'
  • state Selection
    compute='_compute_registration_status' default=None precompute=True readonly=False store=True
  • utm_campaign_id Many2one
    compute='_compute_utm_campaign_id' ondelete='set null' readonly=False store=True
  • utm_medium_id Many2one
    compute='_compute_utm_medium_id' ondelete='set null' readonly=False store=True
  • utm_source_id Many2one
    compute='_compute_utm_source_id' ondelete='set null' readonly=False store=True
Public methods (3)
  • action_view_sale_order(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (23)
  • active Boolean
    args: 'Is registration active (not archived)?'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • event_date_begin Date
    readonly=True string='Event Start Date'
  • event_date_end Date
    readonly=True string='Event End Date'
  • event_id Many2one → event.event
    readonly=True string='Event' args: 'event.event'
  • event_registration_create_date Date
    readonly=True string='Registration Date'
  • event_registration_id Many2one → event.registration
    readonly=True args: 'event.registration'
  • event_registration_name Char
    readonly=True args: 'Attendee Name'
  • event_registration_state Selection
    readonly=True string='Registration Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
  • event_ticket_id Many2one → event.event.ticket
    readonly=True string='Event Ticket' args: 'event.event.ticket'
  • event_ticket_price Float
    readonly=True string='Ticket price'
  • event_type_id Many2one → event.type
    readonly=True string='Event Type' args: 'event.type'
  • invoice_partner_id Many2one → res.partner
    readonly=True string='Invoice Address' args: 'res.partner'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • sale_order_date Datetime
    readonly=True args: 'Order Date'
  • sale_order_id Many2one → sale.order
    readonly=True args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    readonly=True args: 'sale.order.line'
  • sale_order_partner_id Many2one → res.partner
    readonly=True string='Customer' args: 'res.partner'
  • sale_order_state Selection
    readonly=True selection=SALE_ORDER_STATE string='Sale Order Status'
  • sale_order_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • sale_price Float
    readonly=True args: 'Revenues'
  • sale_price_untaxed Float
    readonly=True args: 'Untaxed Revenues'
  • sale_status Selection
    selection=[('to_pay', 'Not Sold'), ('sold', 'Sold'), ('free', 'Free')] string='Payment Status'
Public methods (1)
  • init(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order', 'Sales Order'
Public methods (2)
  • action_make_registration(self)
  • default_get(self, fields)
    @api.model

New fields (9)
  • company_id Many2one
    related='event_id.company_id'
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • name Char
    string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (0)

No public methods.

New fields (1)
  • attendee_count Integer
    compute='_compute_attendee_count' args: 'Attendee Count'
Public methods (3)
  • action_confirm(self)
  • action_view_attendee_list(self)
  • write(self, vals)
    Synchronize partner from SO to registrations. This is done notably in website_sale controller shop/address that updates customer, but not only.

New fields (3)
  • event_id Many2one → event.event
    compute='_compute_event_id' help='Choose an event and it will automatically create a registration for this event.' precompute=True readonly=False store=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    compute='_compute_event_ticket_id' help='Choose an event ticket and it will automatically create a registration for this event ticket.' precompute=True readonly=False store=True string='Ticket Type' args: 'event.event.ticket'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'sale_order_line_id'
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/17.0/event_sale
VERSION
VERSION 1.3
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Géry Debongnie, Aaron Bohy, Yannick Tivisse, Odoo Online, Pierre Masereel, Victor Feyens, Joseph Caburnay, Nikunj Ladava, Nasreddin Boulif (bon), Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, mafo-odoo, Yolann Sabaux, Abdelouahab (abla), Demesmaeker, Valentin Chevalier, Renaud Thiry, Andro Gvivradze, Louis Wicket (wil), David, Walid, Maximilien (malb), Tommy (tong), amdi-odoo, Valentin Vallaeys (vava), Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), FrancoisGe, Michael (mcm), prye-odoo, Thomas Josse (thjo), Noe Antoine, Youssef Bashandy, Jérémy Hennecart (jeh), Eteil Djoumatchoua(etdj) etdj@odoo.com, Carlos Roca, Julien Carion (juca), pilarvargas-tecnativa, Louis (wil), thsh-odoo, Pierre Pulinckx (pipu), hmd-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - barcodes
    - web
    - base
    - base_setup
    - mail
    - bus
    - web_tour
    - phone_validation
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
    - sale_management
    - sale
    - sales_team
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - digest
    - resource
    - payment
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (20)
XML IDNameModelTypeStatus
event_configurator_view_form event.configurator.view.form event.event.configurator form New
event_event_ticket_form_view event.event.ticket.view.form.inherit.sale event.event.ticket field Inherits event.event_event_ticket_form_view
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event.inherit.sale event.event.ticket field Inherits event.event_event_ticket_view_form_from_event
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket field Inherits event.event_event_ticket_view_kanban_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.tree.from.event.inherit.sale event.event.ticket field Inherits event.event_event_ticket_view_tree_from_event
event_registration_ticket_view_form event.registration.form.inherit event.registration xpath Inherits event.view_event_registration_form
event_registration_view_graph event.registration.graph.inherit.event.sale event.registration field Inherits event.view_event_registration_graph
event_registration_view_kanban event.registration.kanban.inherit.event.sale event.registration xpath Inherits event.event_registration_view_kanban
event_sale_report_view_form event.sale.report.view.form event.sale.report form New
event_sale_report_view_graph event.sale.report.view.graph event.sale.report graph New
event_sale_report_view_pivot event.sale.report.view.pivot event.sale.report pivot New
event_sale_report_view_search event.sale.report.view.search event.sale.report search New
event_sale_report_view_tree event.sale.report.view.tree event.sale.report tree New
event_ticket_id_change_exception Message: Alert on event ticket id change ir.ui.view qweb New
event_type_ticket_view_form_from_type event.type.ticket.view.form.inherit.sale event.type.ticket field Inherits event.event_type_ticket_view_form_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.tree.inherit.sale event.type.ticket field Inherits event.event_type_ticket_view_tree_from_type
sale_order_view_form sale.order.form.inherit.event.sale sale.order xpath Inherits sale.view_order_form
view_event_form_inherit_ticket event.form.inherit event.event xpath Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_tree event.registration.tree.inherit event.registration field Inherits event.view_event_registration_tree
Models touched (12)

New fields (3)
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' string='Currency' args: 'res.currency'
  • sale_order_lines_ids One2many → sale.order.line
    groups='sales_team.group_sale_salesman' string='All sale order lines pointing to this event' args: 'sale.order.line', 'event_id'
  • sale_price_subtotal Monetary
    compute='_compute_sale_price_subtotal' groups='sales_team.group_sale_salesman' string='Sales (Tax Excluded)'
Public methods (1)
  • action_view_linked_orders(self)
    Redirects to the orders linked to the current events

New fields (3)
  • event_id Many2one → event.event
    string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
Public methods (1)
  • check_event_id(self)
    @api.constrains('event_id', 'event_ticket_id')

New fields (2)
  • price_incl Float
    compute='_compute_price_incl' compute_sudo=True digits='Product Price' readonly=False string='Price include'
  • price_reduce_taxinc Float
    compute='_compute_price_reduce_taxinc' compute_sudo=True string='Price Reduce Tax inc'
Public methods (0)

No public methods.

New fields (7)
  • sale_order_id Many2one → sale.order
    copy=False ondelete='cascade' string='Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    copy=False ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
  • sale_status Selection
    compute='_compute_registration_status' compute_sudo=True precompute=True selection=[('to_pay', 'Not Sold'), ('sold', 'Sold'), ('free', 'Free')] store=True string='Sale Status'
  • state Selection
    compute='_compute_registration_status' default=None precompute=True readonly=False store=True
  • utm_campaign_id Many2one
    compute='_compute_utm_campaign_id' ondelete='set null' readonly=False store=True
  • utm_medium_id Many2one
    compute='_compute_utm_medium_id' ondelete='set null' readonly=False store=True
  • utm_source_id Many2one
    compute='_compute_utm_source_id' ondelete='set null' readonly=False store=True
Public methods (3)
  • action_view_sale_order(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (23)
  • active Boolean
    args: 'Is registration active (not archived)?'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • event_date_begin Date
    readonly=True string='Event Start Date'
  • event_date_end Date
    readonly=True string='Event End Date'
  • event_id Many2one → event.event
    readonly=True string='Event' args: 'event.event'
  • event_registration_create_date Date
    readonly=True string='Registration Date'
  • event_registration_id Many2one → event.registration
    readonly=True args: 'event.registration'
  • event_registration_name Char
    readonly=True args: 'Attendee Name'
  • event_registration_state Selection
    readonly=True string='Registration Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
  • event_ticket_id Many2one → event.event.ticket
    readonly=True string='Event Ticket' args: 'event.event.ticket'
  • event_ticket_price Float
    readonly=True string='Ticket price'
  • event_type_id Many2one → event.type
    readonly=True string='Event Type' args: 'event.type'
  • invoice_partner_id Many2one → res.partner
    readonly=True string='Invoice Address' args: 'res.partner'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • sale_order_date Datetime
    readonly=True args: 'Order Date'
  • sale_order_id Many2one → sale.order
    readonly=True args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    readonly=True args: 'sale.order.line'
  • sale_order_partner_id Many2one → res.partner
    readonly=True string='Customer' args: 'res.partner'
  • sale_order_state Selection
    readonly=True selection=SALE_ORDER_STATE string='Sale Order Status'
  • sale_order_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • sale_price Float
    readonly=True args: 'Revenues'
  • sale_price_untaxed Float
    readonly=True args: 'Untaxed Revenues'
  • sale_status Selection
    selection=[('to_pay', 'Not Sold'), ('sold', 'Sold'), ('free', 'Free')] string='Payment Status'
Public methods (1)
  • init(self)

New fields (5)
  • currency_id Many2one
    related='product_id.currency_id' string='Currency'
  • description Text
    compute='_compute_description' readonly=False store=True
  • price Float
    compute='_compute_price' digits='Product Price' readonly=False store=True string='Price'
  • price_reduce Float
    compute='_compute_price_reduce' compute_sudo=True digits='Product Price' string='Price Reduce'
  • product_id Many2one → product.product
    default=_default_product_id domain=[('detailed_type', '=', 'event')] required=True string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    string='Event Tickets' args: 'event.event.ticket', 'product_id'
Public methods (0)

No public methods.

New fields (1)
  • detailed_type Selection
    ondelete={'event': 'set service'} selection_add=[('event', 'Event Ticket')]
Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order', 'Sales Order'
Public methods (2)
  • action_make_registration(self)
  • default_get(self, fields)
    @api.model

New fields (8)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • name Char
    string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (0)

No public methods.

New fields (1)
  • attendee_count Integer
    compute='_compute_attendee_count' args: 'Attendee Count'
Public methods (3)
  • action_confirm(self)
  • action_view_attendee_list(self)
  • write(self, vals)
    Synchronize partner from SO to registrations. This is done notably in website_sale controller shop/address that updates customer, but not only.

New fields (3)
  • event_id Many2one → event.event
    compute='_compute_event_id' help='Choose an event and it will automatically create a registration for this event.' precompute=True readonly=False store=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    compute='_compute_event_ticket_id' help='Choose an event ticket and it will automatically create a registration for this event ticket.' precompute=True readonly=False store=True string='Event Ticket' args: 'event.event.ticket'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'sale_order_line_id'
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/16.0/event_sale
VERSION
VERSION 1.2
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Christophe Simonis, Xavier Morel, Géry Debongnie, Yannick Tivisse, Pierre Masereel, Aurélien Warnon, Romeo Fragomeli, Victor Feyens, svs-odoo, Nikunj Ladava, Samuel Degueldre, Nasreddin Boulif (bon), Nathan Marotte (nama), william-andre, mafo-odoo, Florian Charlier, Yolann Sabaux, Abdelouahab (abla), Jinjiu Liu, Demesmaeker, Valentin Chevalier, David, Tommy (tong), Valentin Vallaeys (vava), Levi Siuzdak (sile), FrancoisGe, Horacio Tellez, Thomas Josse (thjo), Youssef Bashandy, Jérémy Hennecart (jeh), Eteil Djoumatchoua(etdj) etdj@odoo.com, Carlos Roca, Christopher Maloney (cmal)
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
    - sale_management
    - sale
    - sales_team
    - account_payment
    - account
    - product
    - uom
    - analytic
    - digest
    - resource
    - payment
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (20)
XML IDNameModelTypeStatus
event_configurator_view_form event.configurator.view.form event.event.configurator form New
event_event_ticket_form_view event.event.ticket.view.form.inherit.sale event.event.ticket field Inherits event.event_event_ticket_form_view
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event.inherit.sale event.event.ticket field Inherits event.event_event_ticket_view_form_from_event
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket field Inherits event.event_event_ticket_view_kanban_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.tree.from.event.inherit.sale event.event.ticket field Inherits event.event_event_ticket_view_tree_from_event
event_registration_ticket_view_form event.registration.form.inherit event.registration xpath Inherits event.view_event_registration_form
event_registration_view_kanban event.registration.kanban.inherit.event.sale event.registration xpath Inherits event.event_registration_view_kanban
event_report_template_full_page_ticket_inherit_sale event_report_template_full_page_ticket_inherit_sale ir.ui.view qweb Inherits event.event_report_template_full_page_ticket
event_sale_report_view_form event.sale.report.view.form event.sale.report form New
event_sale_report_view_graph event.sale.report.view.graph event.sale.report graph New
event_sale_report_view_pivot event.sale.report.view.pivot event.sale.report pivot New
event_sale_report_view_search event.sale.report.view.search event.sale.report search New
event_sale_report_view_tree event.sale.report.view.tree event.sale.report tree New
event_ticket_id_change_exception Message: Alert on event ticket id change ir.ui.view qweb New
event_type_ticket_view_form_from_type event.type.ticket.view.form.inherit.sale event.type.ticket field Inherits event.event_type_ticket_view_form_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.tree.inherit.sale event.type.ticket field Inherits event.event_type_ticket_view_tree_from_type
sale_order_view_form sale.order.form.inherit.event.sale sale.order button Inherits sale.view_order_form
view_event_form_inherit_ticket event.form.inherit event.event xpath Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_tree event.registration.tree.inherit event.registration field Inherits event.view_event_registration_tree
Models touched (15)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' string='Currency' args: 'res.currency'
  • sale_order_lines_ids One2many → sale.order.line
    groups='sales_team.group_sale_salesman' string='All sale order lines pointing to this event' args: 'sale.order.line', 'event_id'
  • sale_price_subtotal Monetary
    compute='_compute_sale_price_subtotal' groups='sales_team.group_sale_salesman' string='Sales (Tax Excluded)'
Public methods (1)
  • action_view_linked_orders(self)
    Redirects to the orders linked to the current events

New fields (3)
  • event_id Many2one → event.event
    string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
Public methods (1)
  • check_event_id(self)
    @api.constrains('event_id', 'event_ticket_id')

New fields (1)
  • price_reduce_taxinc Float
    compute='_compute_price_reduce_taxinc' compute_sudo=True string='Price Reduce Tax inc'
Public methods (0)

No public methods.

New fields (7)
  • is_paid Boolean
    args: 'Is Paid'
  • payment_status Selection
    compute='_compute_payment_status' compute_sudo=True selection=[('to_pay', 'Not Paid'), ('paid', 'Paid'), ('free', 'Free')] string='Payment Status'
  • sale_order_id Many2one → sale.order
    copy=False ondelete='cascade' string='Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    copy=False ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
  • utm_campaign_id Many2one
    compute='_compute_utm_campaign_id' ondelete='set null' readonly=False store=True
  • utm_medium_id Many2one
    compute='_compute_utm_medium_id' ondelete='set null' readonly=False store=True
  • utm_source_id Many2one
    compute='_compute_utm_source_id' ondelete='set null' readonly=False store=True
Public methods (3)
  • action_view_sale_order(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (24)
  • active Boolean
    args: 'Is registration active (not archived)?'
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • event_date_begin Date
    readonly=True string='Event Start Date'
  • event_date_end Date
    readonly=True string='Event End Date'
  • event_id Many2one → event.event
    readonly=True string='Event' args: 'event.event'
  • event_registration_create_date Date
    readonly=True string='Registration Date'
  • event_registration_id Many2one → event.registration
    readonly=True args: 'event.registration'
  • event_registration_name Char
    readonly=True args: 'Attendee Name'
  • event_registration_state Selection
    readonly=True string='Registration Status' args: [('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), ('open', 'Confirmed'), ('done', 'Attended')]
  • event_ticket_id Many2one → event.event.ticket
    readonly=True string='Event Ticket' args: 'event.event.ticket'
  • event_ticket_price Float
    readonly=True string='Ticket price'
  • event_type_id Many2one → event.type
    readonly=True string='Event Type' args: 'event.type'
  • invoice_partner_id Many2one → res.partner
    readonly=True string='Invoice Address' args: 'res.partner'
  • is_paid Boolean
    readonly=True args: 'Is Paid'
  • payment_status Selection
    selection=[('to_pay', 'Not Paid'), ('paid', 'Paid'), ('free', 'Free')] string='Payment Status'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
  • sale_order_date Datetime
    readonly=True args: 'Order Date'
  • sale_order_id Many2one → sale.order
    readonly=True args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    readonly=True args: 'sale.order.line'
  • sale_order_partner_id Many2one → res.partner
    readonly=True string='Customer' args: 'res.partner'
  • sale_order_state Selection
    readonly=True string='Sale Order Status' args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
  • sale_order_user_id Many2one → res.users
    readonly=True string='Salesperson' args: 'res.users'
  • sale_price Float
    readonly=True args: 'Revenues'
  • sale_price_untaxed Float
    readonly=True args: 'Untaxed Revenues'
Public methods (1)
  • init(self)

New fields (4)
  • description Text
    compute='_compute_description' readonly=False store=True
  • price Float
    compute='_compute_price' digits='Product Price' readonly=False store=True string='Price'
  • price_reduce Float
    compute='_compute_price_reduce' compute_sudo=True digits='Product Price' string='Price Reduce'
  • product_id Many2one → product.product
    default=_default_product_id domain=[('detailed_type', '=', 'event')] required=True string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    string='Event Tickets' args: 'event.event.ticket', 'product_id'
Public methods (0)

No public methods.

New fields (1)
  • detailed_type Selection
    ondelete={'event': 'set service'} selection_add=[('event', 'Event Ticket')]
Public methods (0)

No public methods.

New fields (3)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order', 'Sales Order'
  • seats_available_insufficient Boolean
    compute='_compute_seats_available_insufficient' readonly=True args: 'Not enough seats for all registrations'
Public methods (2)
  • action_make_registration(self)
  • default_get(self, fields)
    @api.model

New fields (9)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • mobile Char
    string='Mobile'
  • name Char
    string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (1)
  • get_registration_data(self)

New fields (1)
  • attendee_count Integer
    compute='_compute_attendee_count' args: 'Attendee Count'
Public methods (4)
  • action_confirm(self)
  • action_view_attendee_list(self)
  • unlink(self)
  • write(self, vals)
    Synchronize partner from SO to registrations. This is done notably in website_sale controller shop/address that updates customer, but not only.

New fields (3)
  • event_id Many2one → event.event
    compute='_compute_event_id' help='Choose an event and it will automatically create a registration for this event.' precompute=True readonly=False store=True string='Event' args: 'event.event'
  • event_ok Boolean
    compute='_compute_event_ok'
  • event_ticket_id Many2one → event.event.ticket
    compute='_compute_event_ticket_id' help='Choose an event ticket and it will automatically create a registration for this event ticket.' precompute=True readonly=False store=True string='Event Ticket' args: 'event.event.ticket'
Public methods (1)
  • unlink(self)

New fields (1)
  • product_id Many2one
    domain="[('sale_ok', '=', True), ('detailed_type', '!=', 'event'), ('company_id', 'in', [company_id, False])]"
Public methods (0)

No public methods.

New fields (1)
  • product_id Many2one
    domain="[('sale_ok', '=', True), ('detailed_type', '!=', 'event'), ('company_id', 'in', [company_id, False])]"
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/15.0/event_sale
VERSION
VERSION 1.2
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Yannick Tivisse, Dharmraj Jhala, Jorge Pinna Puissant, Aurélien Warnon, Xavier-Do, Victor Feyens, Julien Mougenot, svs-odoo, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), nie, Tiffany Chang (tic), Nathan Marotte (nama), nounoubensebia, Kevin Baptiste, Guillaume (guva), william-andre, Florian Charlier, Yolann Sabaux, Jinjiu Liu, Laurent Stukkens (LTU), David, Levi Siuzdak (sile), Mitul Shah, Thomas Josse (thjo), Nguyễn Đại Dương, Youssef Bashandy, Eteil Djoumatchoua(etdj) etdj@odoo.com, Justine Doutreloux
WEBSITE
WEBSITEhttps://www.odoo.com/app/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
    - sale_management
    - sale
    - sales_team
    - payment
    - account
    - product
    - uom
    - analytic
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
event_configurator_view_form event.configurator.view.form event.event.configurator form New
event_event_ticket_form_view event.event.ticket.view.form.inherit.sale event.event.ticket field Inherits event.event_event_ticket_form_view
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event.inherit.sale event.event.ticket field Inherits event.event_event_ticket_view_form_from_event
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket field Inherits event.event_event_ticket_view_kanban_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.tree.from.event.inherit.sale event.event.ticket field Inherits event.event_event_ticket_view_tree_from_event
event_registration_ticket_view_form event.registration.form.inherit event.registration xpath Inherits event.view_event_registration_form
event_registration_view_kanban event.registration.kanban.inherit.event.sale event.registration xpath Inherits event.event_registration_view_kanban
event_report_template_full_page_ticket_inherit_sale event_report_template_full_page_ticket_inherit_sale ir.ui.view qweb Inherits event.event_report_template_full_page_ticket
event_ticket_id_change_exception Message: Alert on event ticket id change ir.ui.view qweb New
event_type_ticket_view_form_from_type event.type.ticket.view.form.inherit.sale event.type.ticket field Inherits event.event_type_ticket_view_form_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.tree.inherit.sale event.type.ticket field Inherits event.event_type_ticket_view_tree_from_type
sale_order_view_form sale.order.form.inherit.event.sale sale.order xpath Inherits sale.view_order_form
view_event_form_inherit_ticket event.form.inherit event.event xpath Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_tree event.registration.tree.inherit event.registration field Inherits event.view_event_registration_tree
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • action_invoice_paid(self)
    When an invoice linked to a sales order selling registrations is paid confirm attendees. Attendees should indeed not be confirmed before full payment.

New fields (3)
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' string='Currency' args: 'res.currency'
  • sale_order_lines_ids One2many → sale.order.line
    groups='sales_team.group_sale_salesman' string='All sale order lines pointing to this event' args: 'sale.order.line', 'event_id'
  • sale_price_subtotal Monetary
    compute='_compute_sale_price_subtotal' groups='sales_team.group_sale_salesman' string='Sales (Tax Excluded)'
Public methods (1)
  • action_view_linked_orders(self)
    Redirects to the orders linked to the current events

New fields (3)
  • event_id Many2one → event.event
    string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (1)
  • price_reduce_taxinc Float
    compute='_compute_price_reduce_taxinc' compute_sudo=True string='Price Reduce Tax inc'
Public methods (0)

No public methods.

New fields (7)
  • is_paid Boolean
    args: 'Is Paid'
  • payment_status Selection
    compute='_compute_payment_status' compute_sudo=True selection=[('to_pay', 'Not Paid'), ('paid', 'Paid'), ('free', 'Free')] string='Payment Status'
  • sale_order_id Many2one → sale.order
    copy=False ondelete='cascade' string='Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    copy=False ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
  • utm_campaign_id Many2one
    compute='_compute_utm_campaign_id' readonly=False store=True
  • utm_medium_id Many2one
    compute='_compute_utm_medium_id' readonly=False store=True
  • utm_source_id Many2one
    compute='_compute_utm_source_id' readonly=False store=True
Public methods (3)
  • action_view_sale_order(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • description Text
    compute='_compute_description' readonly=False store=True
  • price Float
    compute='_compute_price' digits='Product Price' readonly=False store=True string='Price'
  • price_reduce Float
    compute='_compute_price_reduce' compute_sudo=True digits='Product Price' string='Price Reduce'
  • product_id Many2one → product.product
    default=_default_product_id domain=[('detailed_type', '=', 'event')] required=True string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    string='Event Tickets' args: 'event.event.ticket', 'product_id'
Public methods (0)

No public methods.

New fields (1)
  • detailed_type Selection
    ondelete={'event': 'set service'} selection_add=[('event', 'Event Ticket')]
Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order', 'Sales Order'
Public methods (2)
  • action_make_registration(self)
  • default_get(self, fields)
    @api.model

New fields (9)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • mobile Char
    string='Mobile'
  • name Char
    index=True string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (1)
  • get_registration_data(self)

New fields (1)
  • attendee_count Integer
    compute='_compute_attendee_count' args: 'Attendee Count'
Public methods (4)
  • action_confirm(self)
  • action_view_attendee_list(self)
  • unlink(self)
  • write(self, vals)
    Synchronize partner from SO to registrations. This is done notably in website_sale controller shop/address that updates customer, but not only.

New fields (3)
  • event_id Many2one → event.event
    help='Choose an event and it will automatically create a registration for this event.' string='Event' args: 'event.event'
  • event_ok Boolean
    compute='_compute_event_ok'
  • event_ticket_id Many2one → event.event.ticket
    help='Choose an event ticket and it will automatically create a registration for this event ticket.' string='Event Ticket' args: 'event.event.ticket'
Public methods (3)
  • get_sale_order_line_multiline_description_sale(self, product)
    We override this method because we decided that: The default description of a sales order line containing a ticket must be different than the default description when no ticket is present. So in that case we use the description computed from the ticket, instead of the description computed from the product. We need this override to be defined here in sales order line (and not in product) because here is the only place where the event_ticket_id is referenced.
  • product_uom_change(self)
    @api.onchange('product_uom', 'product_uom_qty')
  • unlink(self)

New fields (1)
  • product_id Many2one
    domain="[('sale_ok', '=', True), ('detailed_type', '!=', 'event')]"
Public methods (0)

No public methods.

New fields (1)
  • product_id Many2one
    domain="[('sale_ok', '=', True), ('detailed_type', '!=', 'event')]"
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/14.0/event_sale
VERSION
VERSION 1.2
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Goffin Simon, Nicolas Lempereur, GitHub, Yannick Tivisse, Adrien Dieudonne, Jorge Pinna Puissant, Arnold Moyaux, Xavier-Do, Victor Feyens, Julien Mougenot, fw-bot, std-odoo, Adrien Widart, nie, Nathan Marotte (nama), Guillaume (guva), Xavier BOL (xbo), qmo-odoo, Florian Charlier, Patrick Hoste, Jinjiu Liu, nje-odoo, Thomas Josse (thjo)
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - utm
    - sale_management
    - sale
    - sales_team
    - payment
    - account
    - product
    - uom
    - analytic
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (20)
XML IDNameModelTypeStatus
assets_backend event_sale assets backend ir.ui.view qweb Inherits web.assets_backend
assets_tests Event Sale Assets Tests ir.ui.view qweb Inherits web.assets_tests
event_configurator_view_form event.configurator.view.form event.event.configurator form New
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb Inherits event.event_event_report_template_badge
event_event_ticket_form_view event.event.ticket.view.form.inherit.sale event.event.ticket field Inherits event.event_event_ticket_form_view
event_event_ticket_view_form_from_event event.event.ticket.view.form.from.event.inherit.sale event.event.ticket field Inherits event.event_event_ticket_view_form_from_event
event_event_ticket_view_kanban_from_event event.event.ticket.view.kanban.from.event event.event.ticket field Inherits event.event_event_ticket_view_kanban_from_event
event_event_ticket_view_tree_from_event event.event.ticket.view.tree.from.event.inherit.sale event.event.ticket field Inherits event.event_event_ticket_view_tree_from_event
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb Inherits event.event_registration_report_template_badge
event_registration_ticket_view_form event.registration.form.inherit event.registration xpath Inherits event.view_event_registration_form
event_registration_view_kanban event.registration.kanban.inherit.event.sale event.registration xpath Inherits event.event_registration_view_kanban
event_sale_product_template_form product.template.event.form.inherit product.template group Inherits product.product_template_form_view
event_ticket_id_change_exception Message: Alert on event ticket id change ir.ui.view qweb New
event_type_ticket_view_form_from_type event.type.ticket.view.form.inherit.sale event.type.ticket field Inherits event.event_type_ticket_view_form_from_type
event_type_ticket_view_tree_from_type event.type.ticket.view.tree.inherit.sale event.type.ticket field Inherits event.event_type_ticket_view_tree_from_type
qunit_suite event_sale_tests ir.ui.view qweb Inherits web.qunit_suite_tests
sale_order_view_form sale.order.form.inherit.event.sale sale.order xpath Inherits sale.view_order_form
view_event_form_inherit_ticket event.form.inherit event.event xpath Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_tree event.registration.tree.inherit event.registration field Inherits event.view_event_registration_tree
Models touched (12)

New fields (0)

No new fields.

Public methods (1)
  • action_invoice_paid(self)
    When an invoice linked to a sales order selling registrations is paid confirm attendees. Attendees should indeed not be confirmed before full payment.

New fields (3)
  • currency_id Many2one → res.currency
    readonly=True related='company_id.currency_id' string='Currency' args: 'res.currency'
  • sale_order_lines_ids One2many → sale.order.line
    groups='sales_team.group_sale_salesman' string='All sale order lines pointing to this event' args: 'sale.order.line', 'event_id'
  • sale_price_subtotal Monetary
    compute='_compute_sale_price_subtotal' groups='sales_team.group_sale_salesman' string='Sales (Tax Excluded)'
Public methods (1)
  • action_view_linked_orders(self)
    Redirects to the orders linked to the current events

New fields (3)
  • event_id Many2one → event.event
    string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (1)
  • price_reduce_taxinc Float
    compute='_compute_price_reduce_taxinc' compute_sudo=True string='Price Reduce Tax inc'
Public methods (0)

No public methods.

New fields (7)
  • is_paid Boolean
    args: 'Is Paid'
  • payment_status Selection
    compute='_compute_payment_status' compute_sudo=True selection=[('to_pay', 'Not Paid'), ('paid', 'Paid'), ('free', 'Free')] string='Payment Status'
  • sale_order_id Many2one → sale.order
    copy=False ondelete='cascade' string='Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    copy=False ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
  • utm_campaign_id Many2one
    compute='_compute_utm_campaign_id' readonly=False store=True
  • utm_medium_id Many2one
    compute='_compute_utm_medium_id' readonly=False store=True
  • utm_source_id Many2one
    compute='_compute_utm_source_id' readonly=False store=True
Public methods (3)
  • action_view_sale_order(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • description Text
    compute='_compute_description' readonly=False store=True
  • price Float
    compute='_compute_price' digits='Product Price' readonly=False store=True string='Price'
  • price_reduce Float
    compute='_compute_price_reduce' compute_sudo=True digits='Product Price' string='Price Reduce'
  • product_id Many2one → product.product
    default=_default_product_id domain=[('event_ok', '=', True)] required=True string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    string='Event Tickets' args: 'event.event.ticket', 'product_id'
Public methods (0)

No public methods.

New fields (1)
  • event_ok Boolean
    help='If checked this product automatically creates an event registration at the sales order confirmation.' string='Is an Event Ticket'
Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order', 'Sales Order'
Public methods (2)
  • action_make_registration(self)
  • default_get(self, fields)
    @api.model

New fields (9)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • mobile Char
    string='Mobile'
  • name Char
    index=True string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (1)
  • get_registration_data(self)

New fields (1)
  • attendee_count Integer
    compute='_compute_attendee_count' args: 'Attendee Count'
Public methods (4)
  • action_confirm(self)
  • action_view_attendee_list(self)
  • unlink(self)
  • write(self, vals)
    Synchronize partner from SO to registrations. This is done notably in website_sale controller shop/address that updates customer, but not only.

New fields (3)
  • event_id Many2one → event.event
    help='Choose an event and it will automatically create a registration for this event.' string='Event' args: 'event.event'
  • event_ok Boolean
    readonly=True related='product_id.event_ok'
  • event_ticket_id Many2one → event.event.ticket
    help='Choose an event ticket and it will automatically create a registration for this event ticket.' string='Event Ticket' args: 'event.event.ticket'
Public methods (3)
  • get_sale_order_line_multiline_description_sale(self, product)
    We override this method because we decided that: The default description of a sales order line containing a ticket must be different than the default description when no ticket is present. So in that case we use the description computed from the ticket, instead of the description computed from the product. We need this override to be defined here in sales order line (and not in product) because here is the only place where the event_ticket_id is referenced.
  • product_uom_change(self)
    @api.onchange('product_uom', 'product_uom_qty')
  • unlink(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/event_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing/Events
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Simon Lejeune, Nicolas Lempereur, qdp-odoo, Géry Debongnie, Jeremy Kersten, Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Jorge Pinna Puissant, Alexandre Kühn, Adrian Torres, Aurélien Warnon, Xavier-Do, Rishabh Jadia, jvm-odoo, Victor Feyens, Sébastien Theys, Adrien Widart, nie, Guillaume (guva), mcm-odoo, Florian Charlier, Patrick Hoste
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - sale_management
    - sale
    - sales_team
    - payment
    - account
    - product
    - uom
    - analytic
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
assets_backend event_sale assets backend ir.ui.view qweb Inherits web.assets_backend
assets_tests Event Sale Assets Tests ir.ui.view qweb Inherits web.assets_tests
event_configurator_view_form event.configurator.view.form event.event.configurator form New
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb Inherits event.event_event_report_template_badge
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb Inherits event.event_registration_report_template_badge
event_sale_product_template_form product.template.event.form.inherit product.template group Inherits product.product_template_form_view
event_ticket_form_view event.event.ticket.form event.event.ticket form New
event_type_view_form_inherit_sale event.type.view.form.inherit.sale event.type div Inherits event.view_event_type_form
qunit_suite event_sale_tests ir.ui.view qweb Inherits web.qunit_suite
sale_order_view_form sale.order.form.inherit.event.sale sale.order xpath Inherits sale.view_order_form
view_event_form_inherit_ticket event.form.inherit event.event page Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_form event.registration.form.inherit event.registration field Inherits event.view_event_registration_form
view_event_registration_ticket_search event.registration.search.inherit event.registration filter Inherits event.view_registration_search
view_event_registration_ticket_tree event.registration.tree.inherit event.registration field Inherits event.view_event_registration_tree
Models touched (12)

New fields (0)

No new fields.

Public methods (1)
  • action_invoice_paid(self)
    When an invoice linked to a sales order selling registrations is paid confirm attendees. Attendees should indeed not be confirmed before full payment.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    copy=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
Public methods (0)

No public methods.

New fields (3)
  • event_id Many2one → event.event
    string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • product_id Many2one → product.product
    readonly=True string='Product' args: 'product.product'
Public methods (0)

No public methods.

New fields (17)
  • company_id Many2one → res.company
    related='event_id.company_id' args: 'res.company'
  • deadline Date
    string='Sales End'
  • event_id Many2one → event.event
    ondelete='cascade' string='Event' args: 'event.event'
  • event_type_id Many2one → event.type
    ondelete='cascade' string='Event Category' args: 'event.type'
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • name Char
    required=True string='Name' translate=True
  • price Float
    digits='Product Price' string='Price'
  • price_reduce Float
    compute='_compute_price_reduce' digits='Product Price' string='Price Reduce'
  • price_reduce_taxinc Float
    compute='_get_price_reduce_tax' string='Price Reduce Tax inc'
  • product_id Many2one → product.product
    default=_default_product_id domain=[('event_ok', '=', True)] required=True string='Product' args: 'product.product'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • seats_availability Selection
    compute='_compute_seats' default='limited' required=True store=True string='Available Seat' args: [('limited', 'Limited'), ('unlimited', 'Unlimited')]
  • seats_available Integer
    compute='_compute_seats' store=True string='Available Seats'
  • seats_max Integer
    help='Define the number of available tickets. If you have too much registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' store=True
Public methods (1)
  • get_ticket_multiline_description_sale(self)
    Compute a multiline description of this ticket, in the context of sales. It will often be used as the default description of a sales order line referencing this ticket. 1. the first line is the ticket name 2. the second line is the event name (if it exists, which should be the case with a normal workflow) or the product name (if it exists) We decided to ignore entirely the product name and the product description_sale because they are considered to be replaced by the ticket name and event name. -> the workflow of creating a new event also does not lead to filling them correctly, as the product is created through the event interface

New fields (6)
  • campaign_id Many2one → utm.campaign
    related='sale_order_id.campaign_id' store=True args: 'utm.campaign', 'Campaign'
  • event_ticket_id Many2one → event.event.ticket
    readonly=True states={'draft': [('readonly', False)]} string='Event Ticket' args: 'event.event.ticket'
  • medium_id Many2one → utm.medium
    related='sale_order_id.medium_id' store=True args: 'utm.medium', 'Medium'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' string='Source Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
  • source_id Many2one → utm.source
    related='sale_order_id.source_id' store=True args: 'utm.source', 'Source'
Public methods (2)
  • create(self, vals)
    @api.model
  • summary(self)

New fields (2)
  • event_ticket_ids One2many → event.event.ticket
    default=_get_default_event_ticket_ids string='Tickets' args: 'event.event.ticket', 'event_type_id'
  • use_ticketing Boolean
    args: 'Ticketing'
Public methods (0)

No public methods.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    string='Event Tickets' args: 'event.event.ticket', 'product_id'
Public methods (0)

No public methods.

New fields (1)
  • event_ok Boolean
    help='If checked this product automatically creates an event registration at the sales order confirmation.' string='Is an Event Ticket'
Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order', 'Sales Order'
Public methods (2)
  • action_make_registration(self)
  • default_get(self, fields)
    @api.model

New fields (9)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • mobile Char
    string='Mobile'
  • name Char
    index=True string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (1)
  • get_registration_data(self)

New fields (0)

No new fields.

Public methods (3)
  • action_cancel(self)
  • action_confirm(self)
  • unlink(self)

New fields (3)
  • event_id Many2one → event.event
    help='Choose an event and it will automatically create a registration for this event.' string='Event' args: 'event.event'
  • event_ok Boolean
    readonly=True related='product_id.event_ok'
  • event_ticket_id Many2one → event.event.ticket
    help='Choose an event ticket and it will automatically create a registration for this event ticket.' string='Event Ticket' args: 'event.event.ticket'
Public methods (3)
  • get_sale_order_line_multiline_description_sale(self, product)
    We override this method because we decided that: The default description of a sales order line containing a ticket must be different than the default description when no ticket is present. So in that case we use the description computed from the ticket, instead of the description computed from the product. We need this override to be defined here in sales order line (and not in product) because here is the only place where the event_ticket_id is referenced.
  • product_uom_change(self)
    @api.onchange('product_uom', 'product_uom_qty')
  • unlink(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/event_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, GitHub, Yannick Tivisse, qsm-odoo, jem-odoo, Nans Lefebvre, XavierDo, Xavier-Do, Victor Feyens, Sébastien Theys, Adrien Widart, nie, Guillaume (guva)
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - sale_management
    - sale
    - sales_team
    - payment
    - account
    - product
    - decimal_precision
    - uom
    - analytic
    - portal
    - http_routing
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
assets_backend_inherit_event_sale Event sale backend assets ir.ui.view qweb Inherits web.assets_backend
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb Inherits event.event_event_report_template_badge
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb Inherits event.event_registration_report_template_badge
event_sale_product_template_form product.template.event.form.inherit product.template group Inherits product.product_template_form_view
event_ticket_form_view event.event.ticket.form event.event.ticket form New
event_type_view_form_inherit_sale event.type.view.form.inherit.sale event.type div Inherits event.view_event_type_form
view_event_form_inherit_ticket event.form.inherit event.event page Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_form event.registration.form.inherit event.registration field Inherits event.view_event_registration_form
view_event_registration_ticket_search event.registration.search.inherit event.registration filter Inherits event.view_registration_search
view_event_registration_ticket_tree event.registration.tree.inherit event.registration field Inherits event.view_event_registration_tree
view_order_form_inherit_event_sale_group_event_user sale.order.form.inherit.event_sale.group_event_user sale.order xpath Inherits sale.view_order_form
view_sale_order_form_inherit_event sale.order.form.inherit sale.order xpath Inherits sale.view_order_form
Models touched (11)

New fields (0)

No new fields.

Public methods (1)
  • action_invoice_paid(self)
    @api.multi
    When an invoice linked to a sales order selling registrations is paid confirm attendees. Attendees should indeed not be confirmed before full payment.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    copy=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
Public methods (0)

No public methods.

New fields (16)
  • deadline Date
    string='Sales End'
  • event_id Many2one → event.event
    ondelete='cascade' string='Event' args: 'event.event'
  • event_type_id Many2one → event.type
    ondelete='cascade' string='Event Category' args: 'event.type'
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • name Char
    required=True string='Name' translate=True
  • price Float
    digits=dp.get_precision('Product Price') string='Price'
  • price_reduce Float
    compute='_compute_price_reduce' digits=dp.get_precision('Product Price') string='Price Reduce'
  • price_reduce_taxinc Float
    compute='_get_price_reduce_tax' string='Price Reduce Tax inc'
  • product_id Many2one → product.product
    default=_default_product_id domain=[('event_ok', '=', True)] required=True string='Product' args: 'product.product'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • seats_availability Selection
    compute='_compute_seats' default='limited' required=True store=True string='Available Seat' args: [('limited', 'Limited'), ('unlimited', 'Unlimited')]
  • seats_available Integer
    compute='_compute_seats' store=True string='Available Seats'
  • seats_max Integer
    help='Define the number of available tickets. If you have too much registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' store=True
Public methods (1)
  • get_ticket_multiline_description_sale(self)
    Compute a multiline description of this ticket, in the context of sales. It will often be used as the default description of a sales order line referencing this ticket. 1. the first line is the ticket name 2. the second line is the event name (if it exists, which should be the case with a normal workflow) or the product name (if it exists) We decided to ignore entirely the product name and the product description_sale because they are considered to be replaced by the ticket name and event name. -> the workflow of creating a new event also does not lead to filling them correctly, as the product is created through the event interface

New fields (3)
  • event_ticket_id Many2one → event.event.ticket
    readonly=True states={'draft': [('readonly', False)]} string='Event Ticket' args: 'event.event.ticket'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' string='Source Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
Public methods (2)
  • create(self, vals)
    @api.model
  • summary(self)
    @api.multi

New fields (2)
  • event_ticket_ids One2many → event.event.ticket
    default=_get_default_event_ticket_ids string='Tickets' args: 'event.event.ticket', 'event_type_id'
  • use_ticketing Boolean
    args: 'Ticketing'
Public methods (0)

No public methods.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    string='Event Tickets' args: 'event.event.ticket', 'product_id'
Public methods (0)

No public methods.

New fields (1)
  • event_ok Boolean
    help='If checked this product automatically creates an event registration at the sales order confirmation.' string='Is an Event Ticket'
Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order', 'Sales Order'
Public methods (2)
  • action_make_registration(self)
    @api.multi
  • default_get(self, fields)
    @api.model

New fields (8)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • name Char
    index=True string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (1)
  • get_registration_data(self)
    @api.multi

New fields (0)

No new fields.

Public methods (3)
  • action_cancel(self)
  • action_confirm(self)
    @api.multi
  • unlink(self)

New fields (3)
  • event_id Many2one → event.event
    help='Choose an event and it will automatically create a registration for this event.' string='Event' args: 'event.event'
  • event_ok Boolean
    readonly=True related='product_id.event_ok'
  • event_ticket_id Many2one → event.event.ticket
    help='Choose an event ticket and it will automatically create a registration for this event ticket.' string='Event Ticket' args: 'event.event.ticket'
Public methods (3)
  • get_sale_order_line_multiline_description_sale(self, product)
    We override this method because we decided that: The default description of a sales order line containing a ticket must be different than the default description when no ticket is present. So in that case we use the description computed from the ticket, instead of the description computed from the product. We need this override to be defined here in sales order line (and not in product) because here is the only place where the event_ticket_id is referenced.
  • product_uom_change(self)
    @api.onchange('product_uom', 'product_uom_qty')
  • unlink(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/event_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, GitHub, Lucas Perais (lpe), Yannick Tivisse, Odoo Online, Jorge Pinna Puissant
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - sale_management
    - sale
    - sales_team
    - account
    - product
    - decimal_precision
    - analytic
    - web_planner
    - portal
    - http_routing
    - account_invoicing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sales orders.
========================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sales order for
that product, you will be able to choose an existing event of that category and
when you confirm your sales order it will automatically create a registration for
this event.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb Inherits event.event_event_report_template_badge
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb Inherits event.event_registration_report_template_badge
event_sale_product_template_form product.template.event.form.inherit product.template group Inherits product.product_template_form_view
event_ticket_form_view event.event.ticket.form event.event.ticket form New
event_type_view_form_inherit_sale event.type.view.form.inherit.sale event.type div Inherits event.view_event_type_form
sale.view_order_form_editable_list New
view_event_form_inherit_ticket event.form.inherit event.event page Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_form event.registration.form.inherit event.registration field Inherits event.view_event_registration_form
view_event_registration_ticket_search event.registration.search.inherit event.registration filter Inherits event.view_registration_search
view_event_registration_ticket_tree event.registration.tree.inherit event.registration field Inherits event.view_event_registration_tree
view_sale_order_form_inherit_event sale.order.form.inherit sale.order xpath Inherits sale.view_order_form
Models touched (11)

New fields (0)

No new fields.

Public methods (1)
  • action_invoice_paid(self)
    @api.multi
    When an invoice linked to a sales order selling registrations is paid confirm attendees. Attendees should indeed not be confirmed before full payment.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    copy=True string='Event Ticket' args: 'event.event.ticket', 'event_id'
Public methods (0)

No public methods.

New fields (16)
  • deadline Date
    string='Sales End'
  • event_id Many2one → event.event
    ondelete='cascade' string='Event' args: 'event.event'
  • event_type_id Many2one → event.type
    ondelete='cascade' string='Event Category' args: 'event.type'
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • name Char
    required=True string='Name' translate=True
  • price Float
    digits=dp.get_precision('Product Price') string='Price'
  • price_reduce Float
    compute='_compute_price_reduce' digits=dp.get_precision('Product Price') string='Price Reduce'
  • price_reduce_taxinc Float
    compute='_get_price_reduce_tax' string='Price Reduce Tax inc'
  • product_id Many2one → product.product
    default=_default_product_id domain=[('event_ok', '=', True)] required=True string='Product' args: 'product.product'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • seats_availability Selection
    compute='_compute_seats' default='limited' required=True store=True string='Available Seat' args: [('limited', 'Limited'), ('unlimited', 'Unlimited')]
  • seats_available Integer
    compute='_compute_seats' store=True string='Available Seats'
  • seats_max Integer
    help='Define the number of available tickets. If you have too much registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' store=True
Public methods (0)

No public methods.

New fields (3)
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' string='Source Sales Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    ondelete='cascade' string='Sales Order Line' args: 'sale.order.line'
Public methods (2)
  • create(self, vals)
    @api.model
  • summary(self)
    @api.multi

New fields (2)
  • event_ticket_ids One2many → event.event.ticket
    default=_get_default_event_ticket_ids string='Tickets' args: 'event.event.ticket', 'event_type_id'
  • use_ticketing Boolean
    args: 'Ticketing'
Public methods (0)

No public methods.

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    string='Event Tickets' args: 'event.event.ticket', 'product_id'
Public methods (0)

No public methods.

New fields (1)
  • event_ok Boolean
    help='Determine if a product needs to create automatically an event registration at the confirmation of a sales order line.' string='Is an Event Ticket'
Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    required=True args: 'sale.order', 'Sales Order'
Public methods (2)
  • action_make_registration(self)
    @api.multi
  • default_get(self, fields)
    @api.model

New fields (8)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • name Char
    index=True string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sales Order Line' args: 'sale.order.line'
Public methods (1)
  • get_registration_data(self)
    @api.multi

New fields (0)

No new fields.

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

New fields (3)
  • event_id Many2one → event.event
    help='Choose an event and it will automatically create a registration for this event.' string='Event' args: 'event.event'
  • event_ok Boolean
    readonly=True related='product_id.event_ok'
  • event_ticket_id Many2one → event.event.ticket
    help='Choose an event ticket and it will automatically create a registration for this event ticket.' string='Event Ticket' args: 'event.event.ticket'
Public methods (2)
  • product_id_change(self)
    @api.multi@api.onchange('product_id')
  • product_uom_change(self)
    @api.onchange('product_uom', 'product_uom_qty')
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/event_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Nicolas Martinelli, Jérome Maes, Julien Legros, qdp-odoo, Lucas Perais (lpe), Yannick Tivisse
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - bus
    - web_tour
    - report
    - sale
    - sales_team
    - account
    - product
    - decimal_precision
    - analytic
    - web_planner
    - procurement
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sale orders.
=======================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sale order for
that product, you will be able to choose an existing event of that category and
when you confirm your sale order it will automatically create a registration for
this event.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb Inherits event.event_event_report_template_badge
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb Inherits event.event_registration_report_template_badge
event_sale_product_template_form product.template.event.form.inherit product.template field Inherits sale.product_template_form_view_invoice_policy
event_ticket_form_view event.event.ticket.form event.event.ticket form New
sale.view_order_form_editable_list New
view_event_form_inherit_ticket event.form.inherit event.event xpath Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_form event.registration.form.inherit event.registration field Inherits event.view_event_registration_form
view_event_registration_ticket_search event.registration.search.inherit event.registration filter Inherits event.view_registration_search
view_event_registration_ticket_tree event.registration.tree.inherit event.registration field Inherits event.view_event_registration_tree
view_sale_order_form_inherit_event sale.order.form.inherit sale.order xpath Inherits sale.view_order_form
Models touched (9)

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    copy=True default=<expr> string='Event Ticket' args: 'event.event.ticket', 'event_id'
Public methods (0)

No public methods.

New fields (15)
  • deadline Date
    string='Sales End'
  • event_id Many2one → event.event
    ondelete='cascade' required=True string='Event' args: 'event.event'
  • is_expired Boolean
    compute='_compute_is_expired' string='Is Expired'
  • name Char
    required=True string='Name' translate=True
  • price Float
    digits=dp.get_precision('Product Price') string='Price'
  • price_reduce Float
    compute='_compute_price_reduce' digits=dp.get_precision('Product Price') string='Price Reduce'
  • price_reduce_taxinc Float
    compute='_get_price_reduce_tax' string='Price Reduce Tax inc'
  • product_id Many2one → product.product
    default=_default_product_id domain=[('event_ok', '=', True)] required=True string='Product' args: 'product.product'
  • registration_ids One2many → event.registration
    string='Registrations' args: 'event.registration', 'event_ticket_id'
  • seats_availability Selection
    compute='_compute_seats' default='limited' required=True store=True string='Available Seat' args: [('limited', 'Limited'), ('unlimited', 'Unlimited')]
  • seats_available Integer
    compute='_compute_seats' store=True string='Available Seats'
  • seats_max Integer
    help='Define the number of available tickets. If you have too much registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' string='Maximum Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' store=True
Public methods (0)

No public methods.

New fields (3)
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' string='Source Sale Order' args: 'sale.order'
  • sale_order_line_id Many2one → sale.order.line
    ondelete='cascade' string='Sale Order Line' args: 'sale.order.line'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    string='Event Tickets' args: 'event.event.ticket', 'product_id'
Public methods (0)

No public methods.

New fields (1)
  • event_ok Boolean
    help='Determine if a product needs to create automatically an event registration at the confirmation of a sales order line.' string='Event Registration'
Public methods (0)

No public methods.

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    required=True args: 'sale.order', 'Sale Order'
Public methods (2)
  • action_make_registration(self)
    @api.multi
  • default_get(self, fields)
    @api.model

New fields (8)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • name Char
    index=True string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sale Order Line' args: 'sale.order.line'
Public methods (1)
  • get_registration_data(self)
    @api.multi

New fields (0)

No new fields.

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

New fields (3)
  • event_id Many2one → event.event
    help='Choose an event and it will automatically create a registration for this event.' string='Event' args: 'event.event'
  • event_ok Boolean
    readonly=True related='product_id.event_ok'
  • event_ticket_id Many2one → event.event.ticket
    help='Choose an event ticket and it will automatically create a registration for this event ticket.' string='Event Ticket' args: 'event.event.ticket'
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/9.0/event_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Jérome Maes, Richard Mathot, qdp-odoo, Aaron Bohy, Lucas Perais (lpe), Yannick Tivisse
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web_kanban
    - web
    - mail
    - bus
    - marketing
    - report
    - web_tip
    - sale
    - sales_team
    - account
    - product
    - decimal_precision
    - analytic
    - web_planner
    - procurement
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sale orders.
=======================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sale order for
that product, you will be able to choose an existing event of that category and
when you confirm your sale order it will automatically create a registration for
this event.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
event_event_report_template_badge event_event_report_template_badge ir.ui.view qweb Inherits event.event_event_report_template_badge
event_order_line event.sale.order sale.order xpath Inherits sale.view_order_form
event_registration_report_template_badge event_registration_report_template_badge ir.ui.view qweb Inherits event.event_registration_report_template_badge
event_sale_product_template_form product.template div Inherits product.product_template_form_view
sale.view_order_form_editable_list New
view_event_form_inherit_ticket view_event_form_inherit_tichet event.event data Inherits event.view_event_form
view_event_registration_editor_form registration.editor.form registration.editor form New
view_event_registration_ticket_form event.registration.ticket.form event.registration field Inherits event.view_event_registration_form
view_event_registration_ticket_search event.registration.ticket.search event.registration filter Inherits event.view_registration_search
view_event_registration_ticket_tree event.registration.ticket.tree event.registration field Inherits event.view_event_registration_tree
Models touched (5)

New fields (1)
  • event_ticket_ids One2many → event.event.ticket
    copy=True default=<expr> string='Event Ticket' args: 'event.event.ticket', 'event_id'
Public methods (0)

No public methods.

New fields (13)
  • deadline Date
    args: 'Sales End'
  • event_id Many2one → event.event
    ondelete='cascade' required=True args: 'event.event', 'Event'
  • is_expired Boolean
    compute='_is_expired' args: 'Is Expired'
  • name Char
    required=True translate=True args: 'Name'
  • price Float
    digits=dp.get_precision('Product Price') args: 'Price'
  • product_id Many2one → product.product
    default=<expr> domain=['|', ('event_type_id', '!=', False), ('event_ok', '=', True)] required=True args: 'product.product', 'Product'
  • registration_ids One2many → event.registration
    args: 'event.registration', 'event_ticket_id', 'Registrations'
  • seats_availability Selection
    compute='_compute_seats' default='limited' required=True store=True args: [('limited', 'Limited'), ('unlimited', 'Unlimited')], 'Available Seat'
  • seats_available Integer
    compute='_compute_seats' store=True string='Available Seats'
  • seats_max Integer
    help='Define the number of available tickets. If you have too much registrations you will not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.' args: 'Maximum Available Seats'
  • seats_reserved Integer
    compute='_compute_seats' store=True string='Reserved Seats'
  • seats_unconfirmed Integer
    compute='_compute_seats' store=True string='Unconfirmed Seat Reservations'
  • seats_used Integer
    compute='_compute_seats' store=True
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (3)
  • event_ticket_id Many2one → event.event.ticket
    args: 'event.event.ticket', 'Event Ticket'
  • sale_order_id Many2one → sale.order
    ondelete='cascade' args: 'sale.order', 'Source Sale Order'
  • sale_order_line_id Many2one → sale.order.line
    ondelete='cascade' args: 'sale.order.line', 'Sale Order Line'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (2)
  • event_registration_ids One2many → registration.editor.line
    string='Registrations to Edit' args: 'registration.editor.line', 'editor_id'
  • sale_order_id Many2one → sale.order
    required=True args: 'sale.order', 'Sale Order'
Public methods (2)
  • action_make_registration(self)
    @api.multi
  • default_get(self, fields)
    @api.model

New fields (8)
  • editor_id Many2one → registration.editor
    args: 'registration.editor'
  • email Char
    string='Email'
  • event_id Many2one → event.event
    required=True string='Event' args: 'event.event'
  • event_ticket_id Many2one → event.event.ticket
    string='Event Ticket' args: 'event.event.ticket'
  • name Char
    index=True string='Name'
  • phone Char
    string='Phone'
  • registration_id Many2one → event.registration
    args: 'event.registration', 'Original Registration'
  • sale_order_line_id Many2one → sale.order.line
    string='Sale Order Line' args: 'sale.order.line'
Public methods (1)
  • get_registration_data(self)
    @api.one
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/event_sale
VERSION
VERSION 0.1
CATEGORY
CATEGORYTools
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Vo Minh Thu, Josse Colpaert, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, ggh-openerp, Christophe Simonis, Cedric Snauwaert, Vishmita, Nicolas Lempereur, Julien Legros, Nimesh Contractor (OpenERP), Richard Mathot, Aaron Bohy, Richard Mathot (OpenERP), chm@openerp.com, ima-openerp, dhr-odoo, Farid Ghanchi (OpenERP)
WEBSITE
WEBSITEhttps://www.odoo.com/page/events
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web_kanban
    - web
    - board
    - email_template
    - mail
    - marketing
    - sale_crm
    - sale
    - sales_team
    - web_kanban_sparkline
    - account_voucher
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - edi
    - procurement
    - crm
    - base_action_rule
    - resource
    - calendar
    - web_calendar
    - fetchmail
    - web_kanban_gauge
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sale orders.
=======================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sale order for
that product, you will be able to choose an existing event of that category and
when you confirm your sale order it will automatically create a registration for
this event.

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
event_order_line event.sale.order sale.order xpath Inherits sale.view_order_form
event_sale_product_template_form product.template div Inherits product.product_template_form_view
report_registrationbadge report_registrationbadge ir.ui.view qweb New
sale.view_order_form_editable_list New
view_event_form view_event_form event.event data Inherits event.view_event_form
view_event_form view_event_form event.event data Inherits event.view_event_form
view_event_registration_ticket_form event.registration.ticket.form event.registration field Inherits event.view_event_registration_form
view_event_registration_ticket_search event.registration.ticket.search event.registration filter Inherits event.view_registration_search
view_event_registration_ticket_tree event.registration.ticket.tree event.registration field Inherits event.view_event_registration_tree
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/7.0/event_sale
VERSION
VERSION 0.1
CATEGORY
CATEGORYTools
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Pinakin Nayi (OpenERP), Harry (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Purnendu Singh (OpenERP), Fabien Pinckaers, Saurang Suthar, Olivier Dony, Rajesh Prajapati (OpenERP), Thibault Delavallée, Vo Minh Thu, Hardik, pso (OpenERP), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Nimesh (Open ERP), Mayur Maheshwari (OpenERP), Dharti Ratani (OpenERP), Vidhin Mehta (OpenERP), MVA
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - event
    - base_setup
    - base
    - web_kanban
    - web
    - board
    - email_template
    - mail
    - sale_crm
    - sale
    - account_voucher
    - account
    - product
    - process
    - decimal_precision
    - analytic
    - edi
    - crm
    - base_action_rule
    - base_status
    - base_calendar
    - resource
    - fetchmail
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Creating registration with sale orders.
=======================================

This module allows you to automate and connect your registration creation with
your main sale flow and therefore, to enable the invoicing feature of registrations.

It defines a new kind of service products that offers you the possibility to
choose an event category associated with it. When you encode a sale order for
that product, you will be able to choose an existing event of that category and
when you confirm your sale order it will automatically create a registration for
this event.

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
event_order_line event.sale.order sale.order xpath Inherits sale.view_order_form
event_sale_order event.product product.product div Inherits product.product_normal_form_view
sale.view_order_form_editable_list New
Models touched (0)

No models found for this module.