Purpose of this commit is to give description more "business oriented" because those descriptions appears in Odoo Studio which is supposed to be used by end users, not only by developers. Related Task ID : 37311
86 lines
3.6 KiB
Python
86 lines
3.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, SUPERUSER_ID
|
|
from odoo.http import request
|
|
from odoo.tools import pycompat
|
|
|
|
|
|
class UtmMedium(models.Model):
|
|
# OLD crm.case.channel
|
|
_name = 'utm.medium'
|
|
_description = 'UTM Medium'
|
|
_order = 'name'
|
|
|
|
name = fields.Char(string='Channel Name', required=True)
|
|
active = fields.Boolean(default=True)
|
|
|
|
|
|
class UtmCampaign(models.Model):
|
|
# OLD crm.case.resource.type
|
|
_name = 'utm.campaign'
|
|
_description = 'UTM Campaign'
|
|
|
|
name = fields.Char(string='Campaign Name', required=True, translate=True)
|
|
|
|
|
|
class UtmSource(models.Model):
|
|
_name = 'utm.source'
|
|
_description = 'UTM Source'
|
|
|
|
name = fields.Char(string='Source Name', required=True, translate=True)
|
|
|
|
|
|
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", oldname='channel_id')
|
|
|
|
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'),
|
|
]
|
|
|
|
@api.model
|
|
def default_get(self, fields):
|
|
values = super(UtmMixin, self).default_get(fields)
|
|
|
|
# We ignore UTM for salemen, except some requests that could be done as superuser_id to bypass access rights.
|
|
if self.env.uid != SUPERUSER_ID 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, pycompat.string_types) and value:
|
|
Model = self.env[field.comodel_name]
|
|
records = Model.search([('name', '=', value)], limit=1)
|
|
if not records:
|
|
records = Model.create({'name': value})
|
|
value = records.id
|
|
if value:
|
|
values[field_name] = value
|
|
return values
|