From efd5401ee1efbdd388d9623d59a96353e93bf21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 12 Mar 2020 14:34:08 +0000 Subject: [PATCH] [REF] event: allow to use UTMs directly in event PURPOSE Allow to use UTMs directly in event, notably to be able to sort or make statistics on registrations. SPECIFICATIONS Move all UTMs fields definition to event. In base event module they are set by hand or through links (when using mass mailing for example).Shared links with utm bits defined in it allows to track marketing statistics on registrations. In event_sale registrations can be linked to a sale order. UTM information are copied from the sale order to the registration itself. Order defined utm always erase default one coming from event. LINKS Task ID 2212297 Community PR odoo/odoo#47229 Related: odoo/upgrade#913 Signed-off-by: Thibault Delavallee (tde) --- addons/event/__manifest__.py | 2 +- addons/event/models/event_registration.py | 4 ++++ addons/event/views/event_views.xml | 5 ++++ .../event_sale/models/event_registration.py | 24 ++++++++++++++++--- .../views/event_registration_views.xml | 7 +----- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/addons/event/__manifest__.py b/addons/event/__manifest__.py index 6286d8d8d8c..e49f260e24a 100644 --- a/addons/event/__manifest__.py +++ b/addons/event/__manifest__.py @@ -17,7 +17,7 @@ Key Features * Manage your Events and Registrations * Use emails to automatically confirm and send acknowledgments for any event registration """, - 'depends': ['base_setup', 'mail', 'portal'], + 'depends': ['base_setup', 'mail', 'portal', 'utm'], 'data': [ 'security/event_security.xml', 'security/ir.model.access.csv', diff --git a/addons/event/models/event_registration.py b/addons/event/models/event_registration.py index c7b7886527d..a70931038b6 100644 --- a/addons/event/models/event_registration.py +++ b/addons/event/models/event_registration.py @@ -22,6 +22,10 @@ class EventRegistration(models.Model): event_ticket_id = fields.Many2one( 'event.event.ticket', string='Event Ticket', readonly=True, states={'draft': [('readonly', False)]}) + # utm informations + utm_campaign_id = fields.Many2one('utm.campaign', 'Campaign', index=True, ondelete='set null') + utm_source_id = fields.Many2one('utm.source', 'Source', index=True, ondelete='set null') + utm_medium_id = fields.Many2one('utm.medium', 'Medium', index=True, ondelete='set null') # attendee partner_id = fields.Many2one( 'res.partner', string='Contact', diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml index a0d247928ec..43f778f9a5e 100644 --- a/addons/event/views/event_views.xml +++ b/addons/event/views/event_views.xml @@ -563,6 +563,11 @@ + + + + +
diff --git a/addons/event_sale/models/event_registration.py b/addons/event_sale/models/event_registration.py index e057739be10..c8bcd955252 100644 --- a/addons/event_sale/models/event_registration.py +++ b/addons/event_sale/models/event_registration.py @@ -12,9 +12,27 @@ class EventRegistration(models.Model): # TDE FIXME: maybe add an onchange on sale_order_id sale_order_id = fields.Many2one('sale.order', string='Source Sales Order', ondelete='cascade') sale_order_line_id = fields.Many2one('sale.order.line', string='Sales Order Line', ondelete='cascade') - campaign_id = fields.Many2one('utm.campaign', 'Campaign', related="sale_order_id.campaign_id", store=True) - source_id = fields.Many2one('utm.source', 'Source', related="sale_order_id.source_id", store=True) - medium_id = fields.Many2one('utm.medium', 'Medium', related="sale_order_id.medium_id", store=True) + utm_campaign_id = fields.Many2one(compute='_compute_utm_campaign_id', copy=True, readonly=False, store=True) + utm_source_id = fields.Many2one(compute='_compute_utm_source_id', copy=True, readonly=False, store=True) + utm_medium_id = fields.Many2one(compute='_compute_utm_medium_id', copy=True, readonly=False, store=True) + + @api.depends('sale_order_id') + def _compute_utm_campaign_id(self): + for registration in self: + if registration.sale_order_id.campaign_id: + registration.utm_campaign_id = registration.sale_order_id.campaign_id + + @api.depends('sale_order_id') + def _compute_utm_source_id(self): + for registration in self: + if registration.sale_order_id.source_id: + registration.utm_source_id = registration.sale_order_id.source_id + + @api.depends('sale_order_id') + def _compute_utm_medium_id(self): + for registration in self: + if registration.sale_order_id.medium_id: + registration.utm_medium_id = registration.sale_order_id.medium_id def action_view_sale_order(self): action = self.env.ref('sale.action_orders').read()[0] diff --git a/addons/event_sale/views/event_registration_views.xml b/addons/event_sale/views/event_registration_views.xml index fea2fbb0362..5365c7d1e77 100644 --- a/addons/event_sale/views/event_registration_views.xml +++ b/addons/event_sale/views/event_registration_views.xml @@ -38,16 +38,11 @@ - + - - - - -