Files
odoo_source/addons/utm/models/utm.py
T
Denis Ledoux f36d304473 [FIX] utm: utm.stage must be defined before being used in a default=
Otherwise, this can raise the below issue during an upgrade (`-u`):
```
  File "/home/odoo/src/odoo/13.0/odoo/modules/registry.py", line 369, in init_models
    model._auto_init()
  File "/home/odoo/src/odoo/13.0/odoo/models.py", line 2529, in _auto_init
    new = field.update_db(self, columns)
  File "/home/odoo/src/odoo/13.0/odoo/fields.py", line 2456, in update_db
    return super(Many2one, self).update_db(model, columns)
  File "/home/odoo/src/odoo/13.0/odoo/fields.py", line 857, in update_db
    self.update_db_notnull(model, column)
  File "/home/odoo/src/odoo/13.0/odoo/fields.py", line 897, in update_db_notnull
    model._init_column(self.name)
  File "/home/odoo/src/odoo/13.0/odoo/models.py", line 2455, in _init_column
    value = field.default(self)
  File "/home/odoo/src/odoo/13.0/addons/utm/models/utm.py", line 28, in <lambda>
    default=lambda self: self.env['utm.stage'].search([], limit=1),
  File "/home/odoo/src/odoo/13.0/odoo/models.py", line 1648, in search
    res = self._search(args, offset=offset, limit=limit, order=order, count=count)
  File "/home/odoo/src/odoo/13.0/odoo/models.py", line 4497, in _search
    self._cr.execute(query_str, where_clause_params)
  File "/home/odoo/src/odoo/13.0/odoo/sql_db.py", line 173, in wrapper
    return f(self, *args, **kwargs)
  File "/home/odoo/src/odoo/13.0/odoo/sql_db.py", line 250, in execute
    res = self._obj.execute(query, params)
psycopg2.errors.UndefinedColumn: column utm_stage.sequence does not exist
LINE 1: SELECT "utm_stage".id FROM "utm_stage" ORDER BY "utm_stage"
```

upg-5396

closes odoo/odoo#65135

X-original-commit: 9294c1dc4f24c23c1f81bec50d73cb594349b54b
Signed-off-by: Denis Ledoux (dle) <dle@odoo.com>
2021-01-27 13:19:12 +00:00

81 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from random import randint
from odoo import fields, models, api, SUPERUSER_ID
class UtmStage(models.Model):
"""Stage for utm campaigns. """
_name = 'utm.stage'
_description = 'Campaign Stage'
_order = 'sequence'
name = fields.Char(required=True, translate=True)
sequence = fields.Integer()
class UtmMedium(models.Model):
# OLD crm.case.channel
_name = 'utm.medium'
_description = 'UTM Medium'
_order = 'name'
name = fields.Char(string='Medium 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)
user_id = fields.Many2one(
'res.users', string='Responsible',
required=True, default=lambda self: self.env.uid)
stage_id = fields.Many2one('utm.stage', string='Stage', ondelete='restrict', required=True,
default=lambda self: self.env['utm.stage'].search([], limit=1),
group_expand='_group_expand_stage_ids')
tag_ids = fields.Many2many(
'utm.tag', 'utm_tag_rel',
'tag_id', 'campaign_id', string='Tags')
is_website = fields.Boolean(default=False, help="Allows us to filter relevant Campaign")
color = fields.Integer(string='Color Index')
@api.model
def _group_expand_stage_ids(self, stages, domain, order):
""" Read group customization in order to display all the stages in the
kanban view, even if they are empty
"""
stage_ids = stages._search([], order=order, access_rights_uid=SUPERUSER_ID)
return stages.browse(stage_ids)
class UtmSource(models.Model):
_name = 'utm.source'
_description = 'UTM Source'
name = fields.Char(string='Source Name', required=True, translate=True)
class UtmTag(models.Model):
"""Model of categories of utm campaigns, i.e. marketing, newsletter, ... """
_name = 'utm.tag'
_description = 'UTM Tag'
_order = 'name'
def _default_color(self):
return randint(1, 11)
name = fields.Char(required=True, translate=True)
color = fields.Integer(
string='Color Index', default=lambda self: self._default_color(),
help='Tag color. No color means no display in kanban to distinguish internal tags from public categorization tags.')
_sql_constraints = [
('name_uniq', 'unique (name)', "Tag name already exists !"),
]