[REF] sales_team: Clean _get_default_team

This commit changes the method _get_default_team_id so that it removes
the xmlid reference to the default team. Instead, we will now use
the team sequence (with default team's sequence being set as 1)
and falling back to the next team with the highest sequence if the
default team got deleted.

Therefore, teams will now be ordered by sequence instead of name,
allowing the users to reorder their teams as they see fit

This commit also removes useless sudo when searching teams

Task: #1962182
PR: #32372

wip

Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
qmo-odoo
2019-07-31 06:01:39 +00:00
parent 0d2be38333
commit d3291207ef
5 changed files with 29 additions and 24 deletions
+7 -3
View File
@@ -63,8 +63,12 @@ class Lead(models.Model):
self._table, ['create_date', 'team_id'])
return res
def _default_team_id(self, user_id):
domain = [('use_leads', '=', True)] if self._context.get('default_type') == "lead" or self.type == 'lead' else [('use_opportunities', '=', True)]
return self.env['crm.team']._get_default_team_id(user_id=user_id, domain=domain)
def _default_stage_id(self):
team = self.env['crm.team'].sudo()._get_default_team_id(user_id=self.env.uid)
team = self._default_team_id(user_id=self.env.uid)
return self._stage_find(team_id=team.id, domain=[('fold', '=', False)]).id
name = fields.Char('Opportunity', required=True, index=True)
@@ -74,7 +78,7 @@ class Lead(models.Model):
date_action_last = fields.Datetime('Last Action', readonly=True)
email_from = fields.Char('Email', help="Email address of the contact", tracking=40, index=True)
website = fields.Char('Website', index=True, help="Website of the contact")
team_id = fields.Many2one('crm.team', string='Sales Team', oldname='section_id', default=lambda self: self.env['crm.team'].sudo()._get_default_team_id(user_id=self.env.uid),
team_id = fields.Many2one('crm.team', string='Sales Team', oldname='section_id', default=lambda self: self._default_team_id(self.env.uid),
index=True, tracking=True, help='When sending mails, the default email address is taken from the Sales Team.')
kanban_state = fields.Selection([('grey', 'No next activity planned'), ('red', 'Next activity late'), ('green', 'Next activity is planned')],
string='Kanban State', compute='_compute_kanban_state')
@@ -280,7 +284,7 @@ class Lead(models.Model):
team = self.env['crm.team'].browse(self._context['team_id'])
if user_id in team.member_ids.ids or user_id == team.user_id.id:
return {}
team_id = self.env['crm.team']._get_default_team_id(user_id=user_id)
team_id = self._default_team_id(user_id)
return {'team_id': team_id}
@api.onchange('user_id')
+3 -2
View File
@@ -3,6 +3,7 @@
<data noupdate="1">
<record id="team_sales_department" model="crm.team">
<field name="name">Sales</field>
<field name="sequence">0</field>
<field name="member_ids" eval="[(4, ref('base.user_admin'))]"/>
<field name="company_id" eval="False"/>
</record>
@@ -12,7 +13,7 @@
<field name="company_id" eval="False"/>
<field name="active" eval="False"/>
</record>
<record id="pos_sales_team" model="crm.team">
<field name="name">Point of Sale</field>
<field name="active" eval="False"/>
@@ -28,7 +29,7 @@
ref('sales_team.team_sales_department'),
ref('sales_team.salesteam_website_sales'),
ref('sales_team.ebay_sales_team'),
ref('sales_team.pos_sales_team')],
ref('sales_team.pos_sales_team')],
[ref('base.partner_root')]"/>
</data>
</odoo>
+11 -17
View File
@@ -17,35 +17,30 @@ class CrmTeam(models.Model):
_name = "crm.team"
_inherit = ['mail.thread']
_description = "Sales Team"
_order = "name"
_order = "sequence"
@api.model
@api.returns('self', lambda value: value.id if value else False)
def _get_default_team_id(self, user_id=None):
def _get_default_team_id(self, user_id=None, domain=None):
if not user_id:
user_id = self.env.uid
team_id = self.env['crm.team'].sudo().search([
team_id = self.env['crm.team'].search([
'|', ('user_id', '=', user_id), ('member_ids', '=', user_id),
'|', ('company_id', '=', False), ('company_id', '=', self.env.company.id)
], limit=1)
if not team_id and 'default_team_id' in self.env.context:
team_id = self.env['crm.team'].browse(self.env.context.get('default_team_id'))
if not team_id:
default_team_id = self.env.ref('sales_team.team_sales_department', raise_if_not_found=False)
if default_team_id:
try:
default_team_id.check_access_rule('read')
except AccessError:
return self.env['crm.team']
if self.env.context.get('default_type') != 'lead' and default_team_id.active:
team_id = default_team_id
team_domain = domain or []
default_team_id = self.env['crm.team'].search(team_domain, limit=1)
return default_team_id or self.env['crm.team']
return team_id
def _get_default_favorite_user_ids(self):
return [(6, 0, [self.env.uid])]
name = fields.Char('Sales Team', required=True, translate=True)
sequence = fields.Integer('Sequence', default=10)
active = fields.Boolean(default=True, help="If the active field is set to false, it will allow you to hide the Sales Team without removing it.")
company_id = fields.Many2one('res.company', string='Company',
default=lambda self: self.env.company)
@@ -65,7 +60,7 @@ class CrmTeam(models.Model):
color = fields.Integer(string='Color Index', help="The color of the channel")
dashboard_button_name = fields.Char(string="Dashboard Button", compute='_compute_dashboard_button_name')
dashboard_graph_data = fields.Text(compute='_compute_dashboard_graph')
def _compute_dashboard_graph(self):
for team in self:
team.dashboard_graph_data = json.dumps(team._get_graph())
@@ -85,7 +80,6 @@ class CrmTeam(models.Model):
""" skeleton function defined here because it'll be called by crm and/or sale
"""
raise UserError(_('Undefined graph model for Sales Team: %s') % self.name)
def _graph_get_dates(self, today):
""" return a coherent start and end date for the dashboard graph covering a month period grouped by week.
@@ -129,7 +123,7 @@ class CrmTeam(models.Model):
GROUP BY x_value;"""
# apply rules
dashboard_graph_model = self._graph_get_model()
dashboard_graph_model = self._graph_get_model()
GraphModel = self.env[dashboard_graph_model]
graph_table = GraphModel._table
extra_conditions = self._extra_sql_conditions()
@@ -149,7 +143,7 @@ class CrmTeam(models.Model):
'end_date': "%s",
'extra_conditions': extra_conditions
}
self._cr.execute(query, [self.id, start_date, end_date] + where_clause_params)
return self.env.cr.dictfetchall()
@@ -177,7 +171,7 @@ class CrmTeam(models.Model):
# generate all required x_fields and update the y_values where we have data for them
locale = self._context.get('lang') or 'en_US'
weeks_in_start_year = int(date(start_date.year, 12, 28).isocalendar()[1]) # This date is always in the last week of ISO years
for week in range(0, (end_date.isocalendar()[1] - start_date.isocalendar()[1]) % weeks_in_start_year + 1):
short_name = get_week_name(start_date + relativedelta(days=7 * week), locale)
+7 -2
View File
@@ -25,6 +25,11 @@ class TestDefaultTeam(common.SavepointCase):
})
# Europe Team (fall back team)
cls.team_2 = cls.env.ref('sales_team.team_sales_department')
cls.team_3 = cls.env['crm.team'].create({
'name': 'Team 3',
'sequence': 2,
'company_id': False
})
def test_01_user_team(self):
"""Get default team, when user belongs to one."""
@@ -42,7 +47,7 @@ class TestDefaultTeam(common.SavepointCase):
# Case 1.
team = self.CrmTeam.with_user(self.user)._get_default_team_id()
self.assertEqual(team, self.team_2)
# Case 2.
# Case 2. If default team is not active, fall back is the next team with the higher sequence
self.team_2.active = False
team = self.CrmTeam.with_user(self.user)._get_default_team_id()
self.assertEqual(team, self.CrmTeam)
self.assertEqual(team, self.team_3)
@@ -115,6 +115,7 @@
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Sales Team">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="active" invisible="1"/>
<field name="user_id"/>