diff options
| author | qmo-odoo <qmo@odoo.com> | 2019-07-30 11:29:30 +0000 |
|---|---|---|
| committer | qmo-odoo <qmo@odoo.com> | 2019-07-31 06:01:39 +0000 |
| commit | d3291207efb524306cd129c7c8d1db90c49f09c5 (patch) | |
| tree | e4b098c0831cfa8ab4655f0e1af75aa2b3c4830b | |
| parent | 0d2be38333d8fe5a4cbef4161ac92cac00e47eb1 (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.py | 10 | ||||
| -rw-r--r-- | addons/sales_team/data/sales_team_data.xml | 5 | ||||
| -rw-r--r-- | addons/sales_team/models/crm_team.py | 28 | ||||
| -rw-r--r-- | addons/sales_team/tests/test_default_team.py | 9 | ||||
| -rw-r--r-- | addons/sales_team/views/crm_team_views.xml | 1 |
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"/> |
