This commit renames the field is_website into is_auto_campaign for clarity purpose. The is_website field always meant that the campaigns were created automatically in some instances. Could be created automatically via a link to the website or even by simply creating a marketing campaign in marketing_automation. is_auto_campaign is a better name as it does not wrongly imply that only the website can generate campaigns automatically, while also pointing out the automatic generation mechanism. The utm campaigns behaviour rests unchanged. LINKS: TaskID: 2414694 PR: #65824 Enterprise PR: #16238 Related: odoo/upgrade#2146 Related: odoo/enterprise#16238 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
62 lines
3.1 KiB
Python
62 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
from odoo.http import request
|
|
|
|
|
|
class UtmMixin(models.AbstractModel):
|
|
""" Mixin class for objects which can be tracked by marketing. """
|
|
_name = 'utm.mixin'
|
|
_description = 'UTM Mixin'
|
|
|
|
campaign_id = fields.Many2one('utm.campaign', 'Campaign',
|
|
help="This is a name that helps you keep track of your different campaign efforts, e.g. Fall_Drive, Christmas_Special")
|
|
source_id = fields.Many2one('utm.source', 'Source',
|
|
help="This is the source of the link, e.g. Search Engine, another domain, or name of email list")
|
|
medium_id = fields.Many2one('utm.medium', 'Medium',
|
|
help="This is the method of delivery, e.g. Postcard, Email, or Banner Ad")
|
|
|
|
@api.model
|
|
def default_get(self, fields):
|
|
values = super(UtmMixin, self).default_get(fields)
|
|
|
|
# We ignore UTM for salesmen, except some requests that could be done as superuser_id to bypass access rights.
|
|
if not self.env.is_superuser() and self.env.user.has_group('sales_team.group_sale_salesman'):
|
|
return values
|
|
|
|
for url_param, field_name, cookie_name in self.env['utm.mixin'].tracking_fields():
|
|
if field_name in fields:
|
|
field = self._fields[field_name]
|
|
value = False
|
|
if request:
|
|
# ir_http dispatch saves the url params in a cookie
|
|
value = request.httprequest.cookies.get(cookie_name)
|
|
# if we receive a string for a many2one, we search/create the id
|
|
if field.type == 'many2one' and isinstance(value, str) and value:
|
|
Model = self.env[field.comodel_name]
|
|
records = Model.search([('name', '=', value)], limit=1)
|
|
if not records:
|
|
if 'is_auto_campaign' in records._fields:
|
|
records = Model.create({'name': value, 'is_auto_campaign': True})
|
|
else:
|
|
records = Model.create({'name': value})
|
|
value = records.id
|
|
if value:
|
|
values[field_name] = value
|
|
return values
|
|
|
|
def tracking_fields(self):
|
|
# This function cannot be overridden in a model which inherit utm.mixin
|
|
# Limitation by the heritage on AbstractModel
|
|
# record_crm_lead.tracking_fields() will call tracking_fields() from module utm.mixin (if not overridden on crm.lead)
|
|
# instead of the overridden method from utm.mixin.
|
|
# To force the call of overridden method, we use self.env['utm.mixin'].tracking_fields() which respects overridden
|
|
# methods of utm.mixin, but will ignore overridden method on crm.lead
|
|
return [
|
|
# ("URL_PARAMETER", "FIELD_NAME_MIXIN", "NAME_IN_COOKIES")
|
|
('utm_campaign', 'campaign_id', 'odoo_utm_campaign'),
|
|
('utm_source', 'source_id', 'odoo_utm_source'),
|
|
('utm_medium', 'medium_id', 'odoo_utm_medium'),
|
|
]
|