summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqmo-odoo <qmo@odoo.com>2019-07-30 11:29:30 +0000
committerqmo-odoo <qmo@odoo.com>2019-07-31 06:01:39 +0000
commitd3291207efb524306cd129c7c8d1db90c49f09c5 (patch)
treee4b098c0831cfa8ab4655f0e1af75aa2b3c4830b
parent0d2be38333d8fe5a4cbef4161ac92cac00e47eb1 (diff)
[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>
-rw-r--r--addons/crm/models/crm_lead.py10
-rw-r--r--addons/sales_team/data/sales_team_data.xml5
-rw-r--r--addons/sales_team/models/crm_team.py28
-rw-r--r--addons/sales_team/tests/test_default_team.py9
-rw-r--r--addons/sales_team/views/crm_team_views.xml1
5 files changed, 29 insertions, 24 deletions
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 @@
<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>
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 @@
<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"/>