File: utm_medium.py

package info (click to toggle)
odoo 18.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 878,716 kB
  • sloc: javascript: 927,937; python: 685,670; xml: 388,524; sh: 1,033; sql: 415; makefile: 26
file content (63 lines) | stat: -rw-r--r-- 2,322 bytes parent folder | download
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