diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py
index 5cd47b96f83..d033a750ed2 100644
--- a/addons/crm/models/crm_lead.py
+++ b/addons/crm/models/crm_lead.py
@@ -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')
diff --git a/addons/sales_team/data/sales_team_data.xml b/addons/sales_team/data/sales_team_data.xml
index 6863a00e153..cf007fd3f25 100644
--- a/addons/sales_team/data/sales_team_data.xml
+++ b/addons/sales_team/data/sales_team_data.xml
@@ -3,6 +3,7 @@
Sales
+ 0
@@ -12,7 +13,7 @@
-
+
Point of Sale
@@ -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')]"/>
diff --git a/addons/sales_team/models/crm_team.py b/addons/sales_team/models/crm_team.py
index 26700b547ba..a763067d9da 100644
--- a/addons/sales_team/models/crm_team.py
+++ b/addons/sales_team/models/crm_team.py
@@ -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)
diff --git a/addons/sales_team/tests/test_default_team.py b/addons/sales_team/tests/test_default_team.py
index 1dd1c39beb1..8d7b24d0357 100644
--- a/addons/sales_team/tests/test_default_team.py
+++ b/addons/sales_team/tests/test_default_team.py
@@ -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)
diff --git a/addons/sales_team/views/crm_team_views.xml b/addons/sales_team/views/crm_team_views.xml
index e22144cbf24..7d60b8f3e26 100644
--- a/addons/sales_team/views/crm_team_views.xml
+++ b/addons/sales_team/views/crm_team_views.xml
@@ -115,6 +115,7 @@
child_ids
+