[FIX] crm, project: fixing some non-total order

Non total order can lead to randomized order in some case, making some
test behaviour random and/or difficult to debug.

Adding some fallback 'id' order shouldn't hurt

closes odoo/odoo#99324

X-original-commit: 6e40e5fe775273a2d3a968ac113cbeb578318dd1
Signed-off-by: Xavier Dollé (xdo) <xdo@odoo.com>
This commit is contained in:
Xavier-Do
2022-08-31 21:12:12 +02:00
parent 148976ff6d
commit b1b66b82a6
2 changed files with 10 additions and 10 deletions
+9 -9
View File
@@ -925,7 +925,7 @@ class Lead(models.Model):
stage_ids = stages._search(search_domain, order=order, access_rights_uid=SUPERUSER_ID)
return stages.browse(stage_ids)
def _stage_find(self, team_id=False, domain=None, order='sequence', limit=1):
def _stage_find(self, team_id=False, domain=None, order='sequence, id', limit=1):
""" Determine the stage of the current lead with its teams, the given domain and the given team_id
:param team_id
:param domain : base search domain for stage
@@ -1383,7 +1383,7 @@ class Lead(models.Model):
# check if the stage is in the stages of the Sales Team. If not, assign the stage with the lowest sequence
if merged_data.get('team_id'):
team_stage_ids = self.env['crm.stage'].search(['|', ('team_id', '=', merged_data['team_id']), ('team_id', '=', False)], order='sequence')
team_stage_ids = self.env['crm.stage'].search(['|', ('team_id', '=', merged_data['team_id']), ('team_id', '=', False)], order='sequence, id')
if merged_data.get('stage_id') not in team_stage_ids.ids:
merged_data['stage_id'] = team_stage_ids[0].id if team_stage_ids else False
@@ -1996,9 +1996,9 @@ class Lead(models.Model):
if field == 'stage_id' and value in won_stage_ids:
won_leads.add(lead_id)
leads_fields.add(field)
leads_fields = sorted(leads_fields)
# get all variable related records from frequency table, no matter the team_id
frequencies = self.env['crm.lead.scoring.frequency'].search([('variable', 'in', list(leads_fields))], order="team_id asc")
frequencies = self.env['crm.lead.scoring.frequency'].search([('variable', 'in', list(leads_fields))], order="team_id asc, id")
# get all team_ids from frequencies
frequency_teams = frequencies.mapped('team_id')
@@ -2283,7 +2283,7 @@ class Lead(models.Model):
else:
lead_frequency_values[field] = value
leads_frequency_values_by_team[team_id].append(lead_frequency_values)
leads_pls_fields = list(leads_pls_fields)
leads_pls_fields = sorted(leads_pls_fields)
# get new frequencies
new_frequencies_by_team = {}
@@ -2392,7 +2392,7 @@ class Lead(models.Model):
:return: won count, lost count and total count for all records in frequencies
"""
# TODO : check if we need to handle specific team_id stages [for lost count] (if first stage in sequence is team_specific)
first_stage_id = self.env['crm.stage'].search([('team_id', '=', False)], order='sequence', limit=1)
first_stage_id = self.env['crm.stage'].search([('team_id', '=', False)], order='sequence, id', limit=1)
if str(first_stage_id.id) not in team_results.get('stage_id', []):
return 0, 0, 0
stage_result = team_results['stage_id'][str(first_stage_id.id)]
@@ -2406,7 +2406,7 @@ class Lead(models.Model):
pls_fields = leads_pls_fields.copy()
frequencies = dict((field, {}) for field in pls_fields)
stage_ids = self.env['crm.stage'].search_read([], ['sequence', 'name', 'id'], order='sequence')
stage_ids = self.env['crm.stage'].search_read([], ['sequence', 'name', 'id'], order='sequence, id')
stage_sequences = {stage['id']: stage['sequence'] for stage in stage_ids}
# Increment won / lost frequencies by criteria (field / value couple)
@@ -2487,7 +2487,7 @@ class Lead(models.Model):
self.flush_model()
query = """SELECT id, probability, %s
FROM %s
WHERE %s order by team_id asc"""
WHERE %s order by team_id asc, id desc"""
query = sql.SQL(query % (str_fields, from_clause, where_clause)).format(*args)
self._cr.execute(query, where_params)
lead_results = self._cr.dictfetchall()
@@ -2498,7 +2498,7 @@ class Lead(models.Model):
FROM %s
LEFT JOIN crm_tag_rel rel ON crm_lead.id = rel.lead_id
LEFT JOIN crm_tag t ON rel.tag_id = t.id
WHERE %s order by crm_lead.team_id asc"""
WHERE %s order by crm_lead.team_id asc, crm_lead.id"""
args.append(sql.Identifier('tag_id'))
query = sql.SQL(query % (from_clause, where_clause)).format(*args)
self._cr.execute(query, where_params)
+1 -1
View File
@@ -1750,7 +1750,7 @@ class Task(models.Model):
# Case management
# ----------------------------------------
def stage_find(self, section_id, domain=[], order='sequence'):
def stage_find(self, section_id, domain=[], order='sequence, id'):
""" Override of the base.stage method
Parameter of the stage search taken from the lead:
- section_id: if set, stages must belong to this section or