tryton-sao 6.0.58 → 6.0.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG +10 -0
- package/dist/tryton-sao.js +71 -25
- package/dist/tryton-sao.min.js +2 -2
- package/package.json +1 -1
- package/src/common.js +36 -10
- package/src/model.js +11 -3
- package/src/screen.js +9 -3
- package/src/tab.js +13 -8
- package/src/view/tree.js +2 -1
package/CHANGELOG
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
|
|
2
|
+
Version 6.0.60 - 2025-05-15
|
|
3
|
+
---------------------------
|
|
4
|
+
* Bug fixes (see mercurial logs for details)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Version 6.0.59 - 2025-05-02
|
|
8
|
+
---------------------------
|
|
9
|
+
* Bug fixes (see mercurial logs for details)
|
|
10
|
+
|
|
11
|
+
|
|
2
12
|
Version 6.0.58 - 2025-04-26
|
|
3
13
|
---------------------------
|
|
4
14
|
* Bug fixes (see mercurial logs for details)
|
package/dist/tryton-sao.js
CHANGED
|
@@ -4926,6 +4926,15 @@ var Sao = {};
|
|
|
4926
4926
|
if (!context) {
|
|
4927
4927
|
context = {};
|
|
4928
4928
|
}
|
|
4929
|
+
function atof(string) {
|
|
4930
|
+
if (!string) {
|
|
4931
|
+
throw("empty string");
|
|
4932
|
+
}
|
|
4933
|
+
let { format } = new Intl.NumberFormat(
|
|
4934
|
+
Sao.i18n.BC47(Sao.i18n.getlang()));
|
|
4935
|
+
let [, decimalSign] = /^0(.)1$/.exec(format(0.1));
|
|
4936
|
+
return Number(string.replace(decimalSign, '.'));
|
|
4937
|
+
}
|
|
4929
4938
|
var convert_selection = function() {
|
|
4930
4939
|
if (typeof value == 'string') {
|
|
4931
4940
|
for (var i = 0; i < field.selection.length; i++) {
|
|
@@ -4957,8 +4966,12 @@ var Sao = {};
|
|
|
4957
4966
|
},
|
|
4958
4967
|
'float': function() {
|
|
4959
4968
|
var factor = Number(field.factor || 1);
|
|
4960
|
-
|
|
4961
|
-
|
|
4969
|
+
try {
|
|
4970
|
+
var result = atof(value);
|
|
4971
|
+
} catch (e) {
|
|
4972
|
+
return null;
|
|
4973
|
+
}
|
|
4974
|
+
if (isNaN(result)) {
|
|
4962
4975
|
return null;
|
|
4963
4976
|
} else {
|
|
4964
4977
|
return result / factor;
|
|
@@ -4966,18 +4979,25 @@ var Sao = {};
|
|
|
4966
4979
|
},
|
|
4967
4980
|
'integer': function() {
|
|
4968
4981
|
var factor = Number(field.factor || 1, 10);
|
|
4969
|
-
|
|
4982
|
+
try {
|
|
4983
|
+
var result = atof(value);
|
|
4984
|
+
} catch (e) {
|
|
4985
|
+
return null;
|
|
4986
|
+
}
|
|
4970
4987
|
if (isNaN(result)) {
|
|
4971
4988
|
return null;
|
|
4972
4989
|
} else {
|
|
4973
|
-
return result / factor;
|
|
4990
|
+
return parseInt(result / factor, 10);
|
|
4974
4991
|
}
|
|
4975
4992
|
},
|
|
4976
4993
|
'numeric': function() {
|
|
4977
4994
|
var factor = Number(field.factor || 1);
|
|
4978
|
-
|
|
4979
|
-
|
|
4980
|
-
|
|
4995
|
+
try {
|
|
4996
|
+
var result = atof(value);
|
|
4997
|
+
} catch (e) {
|
|
4998
|
+
return null;
|
|
4999
|
+
}
|
|
5000
|
+
if (isNaN(result)) {
|
|
4981
5001
|
return null;
|
|
4982
5002
|
} else {
|
|
4983
5003
|
return new Sao.Decimal(result / factor);
|
|
@@ -5041,8 +5061,7 @@ var Sao = {};
|
|
|
5041
5061
|
return '';
|
|
5042
5062
|
}
|
|
5043
5063
|
var digit = 0;
|
|
5044
|
-
var
|
|
5045
|
-
var string = String(value * factor);
|
|
5064
|
+
var string = String(value);
|
|
5046
5065
|
if (string.contains('e')) {
|
|
5047
5066
|
var exp = string.split('e')[1];
|
|
5048
5067
|
string = string.split('e')[0];
|
|
@@ -5051,7 +5070,14 @@ var Sao = {};
|
|
|
5051
5070
|
if (string.contains('.')) {
|
|
5052
5071
|
digit += string.replace(/0+$/, '').split('.')[1].length;
|
|
5053
5072
|
}
|
|
5054
|
-
|
|
5073
|
+
var factor = Number(field.factor || 1);
|
|
5074
|
+
digit -= Math.round(Math.log10(factor));
|
|
5075
|
+
return (value * factor).toLocaleString(
|
|
5076
|
+
Sao.i18n.BC47(Sao.i18n.getlang()), {
|
|
5077
|
+
useGrouping: true,
|
|
5078
|
+
minimumFractionDigits: digit,
|
|
5079
|
+
maximumFractionDigits: digit,
|
|
5080
|
+
});
|
|
5055
5081
|
};
|
|
5056
5082
|
var format_selection = function() {
|
|
5057
5083
|
if (field.selection instanceof Array) {
|
|
@@ -9503,6 +9529,7 @@ var Sao = {};
|
|
|
9503
9529
|
}
|
|
9504
9530
|
|
|
9505
9531
|
if (value && (value.add || value.update)) {
|
|
9532
|
+
let vals_to_set = {};
|
|
9506
9533
|
// First set already added fields to prevent triggering a
|
|
9507
9534
|
// second on_change call
|
|
9508
9535
|
if (value.update) {
|
|
@@ -9512,9 +9539,9 @@ var Sao = {};
|
|
|
9512
9539
|
}
|
|
9513
9540
|
var record2 = group.get(vals.id);
|
|
9514
9541
|
if (record2) {
|
|
9515
|
-
var vals_to_set = {};
|
|
9516
9542
|
for (var key in vals) {
|
|
9517
|
-
if (!(
|
|
9543
|
+
if (!Object.prototype.hasOwnProperty.call(
|
|
9544
|
+
new_field_names, key)) {
|
|
9518
9545
|
vals_to_set[key] = vals[key];
|
|
9519
9546
|
}
|
|
9520
9547
|
}
|
|
@@ -9548,7 +9575,14 @@ var Sao = {};
|
|
|
9548
9575
|
}
|
|
9549
9576
|
var record2 = group.get(vals.id);
|
|
9550
9577
|
if (record2) {
|
|
9551
|
-
|
|
9578
|
+
let to_update = Object.fromEntries(
|
|
9579
|
+
Object.entries(vals).filter(
|
|
9580
|
+
([k, v]) => {
|
|
9581
|
+
!Object.prototype.hasOwnProperty.call(
|
|
9582
|
+
vals_to_set, k)
|
|
9583
|
+
}
|
|
9584
|
+
));
|
|
9585
|
+
record2.set_on_change(to_update);
|
|
9552
9586
|
}
|
|
9553
9587
|
});
|
|
9554
9588
|
}
|
|
@@ -10767,15 +10801,20 @@ var Sao = {};
|
|
|
10767
10801
|
case 'ok':
|
|
10768
10802
|
return this.save();
|
|
10769
10803
|
case 'ko':
|
|
10770
|
-
var record_id =
|
|
10804
|
+
var record_id = null;
|
|
10805
|
+
if (this.screen.current_record) {
|
|
10806
|
+
record_id = this.screen.current_record.id;
|
|
10807
|
+
}
|
|
10771
10808
|
return this.reload(false).then(function() {
|
|
10772
|
-
if (record_id
|
|
10773
|
-
|
|
10774
|
-
|
|
10775
|
-
|
|
10776
|
-
if (
|
|
10777
|
-
|
|
10778
|
-
|
|
10809
|
+
if (record_id !== null) {
|
|
10810
|
+
if (record_id < 0) {
|
|
10811
|
+
return jQuery.Deferred().reject(true);
|
|
10812
|
+
}
|
|
10813
|
+
else if (this.screen.current_record) {
|
|
10814
|
+
if (record_id !=
|
|
10815
|
+
this.screen.current_record.id) {
|
|
10816
|
+
return jQuery.Deferred().reject();
|
|
10817
|
+
}
|
|
10779
10818
|
}
|
|
10780
10819
|
}
|
|
10781
10820
|
}.bind(this));
|
|
@@ -12307,7 +12346,7 @@ var Sao = {};
|
|
|
12307
12346
|
Sao.ScreenContainer.BetweenDates._super.init.call(this, id);
|
|
12308
12347
|
this.from.change(this._from_changed.bind(this));
|
|
12309
12348
|
},
|
|
12310
|
-
_get_value: function(entry
|
|
12349
|
+
_get_value: function(entry) {
|
|
12311
12350
|
return entry.find('input[type=text]').val();
|
|
12312
12351
|
},
|
|
12313
12352
|
_set_value: function(entry, value) {
|
|
@@ -12420,11 +12459,17 @@ var Sao = {};
|
|
|
12420
12459
|
'class': 'form-control input-sm',
|
|
12421
12460
|
'type': 'number',
|
|
12422
12461
|
'step': 'any',
|
|
12462
|
+
'lang': Sao.i18n.getlang(),
|
|
12423
12463
|
}).appendTo(el);
|
|
12424
12464
|
return entry;
|
|
12425
12465
|
},
|
|
12426
|
-
_get_value: function(entry
|
|
12427
|
-
|
|
12466
|
+
_get_value: function(entry) {
|
|
12467
|
+
let value = entry.val();
|
|
12468
|
+
if (value) {
|
|
12469
|
+
value = Number(value).toLocaleString(
|
|
12470
|
+
Sao.i18n.BC47(Sao.i18n.getlang()))
|
|
12471
|
+
}
|
|
12472
|
+
return value;
|
|
12428
12473
|
},
|
|
12429
12474
|
_set_value: function(entry, value) {
|
|
12430
12475
|
return entry.val(value);
|
|
@@ -20114,7 +20159,8 @@ function eval_pyson(value){
|
|
|
20114
20159
|
'class': 'btn btn-default btn-block',
|
|
20115
20160
|
'type': 'button'
|
|
20116
20161
|
}).text(Sao.i18n.gettext('More')
|
|
20117
|
-
).click
|
|
20162
|
+
).one('click', function() {
|
|
20163
|
+
this.tbody.find('tr.more-row').remove();
|
|
20118
20164
|
var height = this.table.height();
|
|
20119
20165
|
this.display_size += Sao.config.display_size;
|
|
20120
20166
|
this.display();
|