details: https://code.tryton.org/tryton/commit/5ea7e646bbca
branch: 7.8
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 (74 lines):
diff -r 90382cbe0a1c -r 5ea7e646bbca sao/src/model.js
--- a/sao/src/model.js Sat Jan 24 19:25:47 2026 +0100
+++ b/sao/src/model.js Fri Jan 16 12:11:35 2026 +0100
@@ -513,11 +513,14 @@
} else {
cmp = function(a, b) { return a < b; };
}
+ let max_id = Math.max(0, ...this.map((r) => r.id));
for (const record of this) {
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;
}
@@ -528,7 +531,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;
}
@@ -536,7 +539,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 90382cbe0a1c -r 5ea7e646bbca
tryton/tryton/gui/window/view_form/model/group.py
--- a/tryton/tryton/gui/window/view_form/model/group.py Sat Jan 24 19:25:47
2026 +0100
+++ b/tryton/tryton/gui/window/view_form/model/group.py Fri Jan 16 12:11:35
2026 +0100
@@ -345,12 +345,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
@@ -360,13 +366,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):