1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import _, api, fields, models
from odoo.exceptions import UserError
class UtmMedium(models.Model):
_name = 'utm.medium'
_description = 'UTM Medium'
_order = 'name'
name = fields.Char(string='Medium Name', required=True, translate=False)
active = fields.Boolean(default=True)
_sql_constraints = [
('unique_name', 'UNIQUE(name)', 'The name must be unique'),
]
@api.model_create_multi
def create(self, vals_list):
new_names = self.env['utm.mixin']._get_unique_names(self._name, [vals.get('name') for vals in vals_list])
for vals, new_name in zip(vals_list, new_names):
vals['name'] = new_name
return super().create(vals_list)
@property
def SELF_REQUIRED_UTM_MEDIUMS_REF(self):
return {
'utm.utm_medium_email': 'Email',
'utm.utm_medium_direct': 'Direct',
'utm.utm_medium_website': 'Website',
'utm.utm_medium_twitter': 'X',
'utm.utm_medium_facebook': 'Facebook',
'utm.utm_medium_linkedin': 'LinkedIn'
}
@api.ondelete(at_uninstall=False)
def _unlink_except_utm_medium_record(self):
for medium in self.SELF_REQUIRED_UTM_MEDIUMS_REF:
utm_medium = self.env.ref(medium, raise_if_not_found=False)
if utm_medium and utm_medium in self:
raise UserError(_(
"Oops, you can't delete the Medium '%s'.\n"
"Doing so would be like tearing down a load-bearing wall \u2014 not the best idea.",
utm_medium.name
))
def _fetch_or_create_utm_medium(self, name, module='utm'):
try:
return self.env.ref(f'{module}.utm_medium_{name}')
except ValueError:
utm_medium = self.sudo().env['utm.medium'].create({
'name': self.SELF_REQUIRED_UTM_MEDIUMS_REF.get(f'{module}.utm_medium_{name}', name)
})
self.sudo().env['ir.model.data'].create({
'name': f'utm_medium_{name}',
'module': module,
'res_id': utm_medium.id,
'model': 'utm.medium',
})
return utm_medium
|