[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:
@@ -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,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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user