details: https://code.tryton.org/tryton/commit/3e5b25427f3f
branch: 6.0
user: Cédric Krier <[email protected]>
date: Fri Jan 16 12:11:35 2026 +0100
description:
Do not compare records order with negative id
Closes #14508
(grafted from 9fdf4dbd66f2f603d73268f1a4048849e3e19854)
diffstat:
sao/src/model.js | 7 +++++--
tryton/tryton/gui/window/view_form/model/group.py | 10 ++++++++--
2 files changed, 13 insertions(+), 4 deletions(-)
diffs (75 lines):
diff -r f61bb546903b -r 3e5b25427f3f sao/src/model.js
--- a/sao/src/model.js Thu Jan 15 17:20:32 2026 +0100
+++ b/sao/src/model.js Fri Jan 16 12:11:35 2026 +0100
@@ -508,12 +508,15 @@
} else {
cmp = function(a, b) { return a < b; };
}
+ let max_id = Math.max(0, ...this.map((r) => r.id));
for (var i=0; i < this.length; i++) {
record = this[i];
if (record.get_loaded([field]) || changed || record.id < 0) {
+ let prev_id = null;
if (prev) {
prev.load(field, false);
index = prev.field_get(field);
+ prev_id = prev.id >= 0 ? prev.id : max_id++;
} else {
index = null;
}
@@ -524,7 +527,7 @@
update = true;
} else if (prev) {
if (record.id >= 0) {
- update = cmp(record.id, prev.id);
+ update = cmp(record.id, prev_id);
} else if (position === 0) {
update = true;
}
@@ -532,7 +535,7 @@
} else if (value === index) {
if (prev) {
if (record.id >= 0) {
- update = cmp(record.id, prev.id);
+ update = cmp(record.id, prev_id);
} else if (position === 0) {
update = true;
}
diff -r f61bb546903b -r 3e5b25427f3f
tryton/tryton/gui/window/view_form/model/group.py
--- a/tryton/tryton/gui/window/view_form/model/group.py Thu Jan 15 17:20:32
2026 +0100
+++ b/tryton/tryton/gui/window/view_form/model/group.py Fri Jan 16 12:11:35
2026 +0100
@@ -358,12 +358,18 @@
cmp = operator.gt
else:
cmp = operator.lt
+ max_id = max(0, *(r.id for r in self))
for record in self:
# Assume not loaded records are correctly ordered
# as far as we do not change any previous records.
if record.get_loaded([field]) or changed or record.id < 0:
if prev:
index = prev[field].get(prev)
+ if prev.id >= 0:
+ prev_id = prev.id
+ else:
+ max_id += 1
+ prev_id = max_id
else:
index = None
update = False
@@ -373,13 +379,13 @@
update = True
elif prev:
if record.id >= 0:
- update = cmp(record.id, prev.id)
+ update = cmp(record.id, prev_id)
elif position == 0:
update = True
elif value == index:
if prev:
if record.id >= 0:
- update = cmp(record.id, prev.id)
+ update = cmp(record.id, prev_id)
elif position == 0:
update = True
elif value <= (index or 0):