WIP: Aureplop/kpsul js refactor #501
2 changed files with 50 additions and 39 deletions
|
@ -565,14 +565,14 @@ class Day extends ModelObject {
|
||||||
* @default <tt>['id', 'date']</tt>
|
* @default <tt>['id', 'date']</tt>
|
||||||
* @see {@link Models.ModelObject.props|ModelObject.props}
|
* @see {@link Models.ModelObject.props|ModelObject.props}
|
||||||
*/
|
*/
|
||||||
static get props() { return ['id', 'date', 'opegroups'] }
|
static get props() { return ['id', 'at', 'opegroups'] }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default values for Day model instances
|
* Default values for Day model instances
|
||||||
* @default <tt>{'id': '', 'date': moment()}</tt>
|
* @default <tt>{'id': '', 'date': moment()}</tt>
|
||||||
* @see {@link Models.ModelObject.default_data|ModelObject.default_data}
|
* @see {@link Models.ModelObject.default_data|ModelObject.default_data}
|
||||||
*/
|
*/
|
||||||
static get default_data() { return {'id': '', 'date': moment(), 'opegroups': []}; }
|
static get default_data() { return {'id': '', 'at': moment(), 'opegroups': []}; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verbose name for Article model
|
* Verbose name for Article model
|
||||||
|
@ -580,6 +580,11 @@ class Day extends ModelObject {
|
||||||
*/
|
*/
|
||||||
static get verbose_name() { return 'day'; }
|
static get verbose_name() { return 'day'; }
|
||||||
|
|
||||||
|
from(data) {
|
||||||
|
super.from(data);
|
||||||
|
this.id = this.at.format("YYYYMMDD");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @default {@link Formatters.DayFormatter}
|
* @default {@link Formatters.DayFormatter}
|
||||||
*/
|
*/
|
||||||
|
@ -593,14 +598,14 @@ class Day extends ModelObject {
|
||||||
*/
|
*/
|
||||||
static compare (a, b) {
|
static compare (a, b) {
|
||||||
//Days are sorted by most recent first
|
//Days are sorted by most recent first
|
||||||
if (a.date < b.date) return 1;
|
if (a.at < b.at) return 1;
|
||||||
else if (a.date > b.date) return -1;
|
else if (a.at > b.at) return -1;
|
||||||
else return 0;
|
else return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Parse date and round it
|
//Parse date and round it
|
||||||
get date() { return this._date; }
|
get at() { return this._at; }
|
||||||
set date(v) { this._date = dateUTCToParis(v).startOf('date'); }
|
set at(v) { this._at = dateUTCToParis(v).startOf('date'); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -955,7 +960,8 @@ class ModelForest {
|
||||||
* @param {number} direction
|
* @param {number} direction
|
||||||
*/
|
*/
|
||||||
get_or_create(data, direction) {
|
get_or_create(data, direction) {
|
||||||
var struct_data = this.constructor.structure[data.modelname];
|
var struct = this.constructor.structure ;
|
||||||
|
var struct_data = struct[data.modelname];
|
||||||
var model = struct_data.model;
|
var model = struct_data.model;
|
||||||
|
|
||||||
var existing = this.find(data.modelname, data.content.id);
|
var existing = this.find(data.modelname, data.content.id);
|
||||||
|
@ -963,19 +969,41 @@ class ModelForest {
|
||||||
return existing;
|
return existing;
|
||||||
}
|
}
|
||||||
|
|
||||||
var node = new model(data.content);
|
var node;
|
||||||
|
if (data.content instanceof ModelObject)
|
||||||
|
node = data.content;
|
||||||
|
else
|
||||||
|
node = new model(data.content);
|
||||||
|
|
||||||
if (direction <= 0) {
|
if (direction <= 0) {
|
||||||
var parent_name = struct_data.parent;
|
var parent_name = struct_data.parent;
|
||||||
var parent_data = data.parent;
|
if (!parent_name) {
|
||||||
var parent_struct = this.constructor.structure[parent_name];
|
|
||||||
if (parent_data) {
|
|
||||||
var parent_node = this.get_or_create(parent_data, -1);
|
|
||||||
node[parent_name] = parent_node;
|
|
||||||
parent_node[parent_struct.children].push(node);
|
|
||||||
} else {
|
|
||||||
this.roots.push(node);
|
this.roots.push(node);
|
||||||
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If index, we create it
|
||||||
|
if (struct_data.index) {
|
||||||
|
var new_parent = {}
|
||||||
|
for (let key of struct_data.index.fields) {
|
||||||
|
new_parent[key] = data.content[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
// We create model in case there are some special fields
|
||||||
|
var data_parent = {
|
||||||
|
'modelname': struct_data.index.modelname,
|
||||||
|
'content': new struct[struct_data.index.modelname].model(new_parent),
|
||||||
|
}
|
||||||
|
console.log(data_parent.content);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
var data_parent = data.parent ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var parent = this.get_or_create(data_parent, -1);
|
||||||
|
var parent_childname = struct[parent.constructor.verbose_name].children;
|
||||||
|
node[parent_name] = parent ;
|
||||||
|
parent[parent_childname].push(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (direction >= 0) {
|
if (direction >= 0) {
|
||||||
|
@ -983,7 +1011,7 @@ class ModelForest {
|
||||||
if (data.children && data.children.length) {
|
if (data.children && data.children.length) {
|
||||||
for (let child_data of data.children) {
|
for (let child_data of data.children) {
|
||||||
var child = this.get_or_create(child_data, 1);
|
var child = this.get_or_create(child_data, 1);
|
||||||
var child_parent = this.constructor.structure[child.constructor.verbose_name];
|
var child_parent = struct[child.constructor.verbose_name];
|
||||||
child[child_parent] = node;
|
child[child_parent] = node;
|
||||||
node[child_name].push(child);
|
node[child_name].push(child);
|
||||||
}
|
}
|
||||||
|
@ -1235,6 +1263,10 @@ class OperationList extends APIModelForest {
|
||||||
'model': OperationGroup,
|
'model': OperationGroup,
|
||||||
'parent': 'day',
|
'parent': 'day',
|
||||||
'children': 'opes',
|
'children': 'opes',
|
||||||
|
'index': {
|
||||||
|
'modelname': 'day',
|
||||||
|
'fields': ["at"]
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'transfergroup': {
|
'transfergroup': {
|
||||||
'model': TransferGroup,
|
'model': TransferGroup,
|
||||||
|
@ -1648,14 +1680,14 @@ class DayFormatter extends Formatter {
|
||||||
* @default {@link Models.Day.props}
|
* @default {@link Models.Day.props}
|
||||||
*/
|
*/
|
||||||
static get props() {
|
static get props() {
|
||||||
return Day.props;
|
return ['date'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <tt>a.date</tt> formatted as <tt>D MMMM</tt>
|
* <tt>a.date</tt> formatted as <tt>D MMMM</tt>
|
||||||
*/
|
*/
|
||||||
static prop_date(a) {
|
static prop_date(a) {
|
||||||
return a.date.format('D MMMM');
|
return a.at.format('D MMMM');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1182,13 +1182,6 @@ def kpsul_perform_operations(request):
|
||||||
'account_id': operationgroup.on_acc.pk,
|
'account_id': operationgroup.on_acc.pk,
|
||||||
'checkout_id': operationgroup.checkout.pk,
|
'checkout_id': operationgroup.checkout.pk,
|
||||||
},
|
},
|
||||||
'parent': {
|
|
||||||
'modelname': 'day',
|
|
||||||
'content': {
|
|
||||||
'id': operationgroup.at.strftime('%Y%m%d'),
|
|
||||||
'date': operationgroup.at
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'children': [],
|
'children': [],
|
||||||
}]
|
}]
|
||||||
for ope in operations:
|
for ope in operations:
|
||||||
|
@ -1547,13 +1540,6 @@ def history_json(request):
|
||||||
'trigramme':
|
'trigramme':
|
||||||
opegroup.on_acc and opegroup.on_acc.trigramme or None,
|
opegroup.on_acc and opegroup.on_acc.trigramme or None,
|
||||||
},
|
},
|
||||||
'parent': {
|
|
||||||
'modelname': 'day',
|
|
||||||
'content': {
|
|
||||||
'id': opegroup.at.strftime('%Y%m%d'),
|
|
||||||
'date': opegroup.at
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'children': [],
|
'children': [],
|
||||||
}
|
}
|
||||||
if request.user.has_perm('kfet.is_team'):
|
if request.user.has_perm('kfet.is_team'):
|
||||||
|
@ -1603,13 +1589,6 @@ def history_json(request):
|
||||||
'at': transfergroup.at,
|
'at': transfergroup.at,
|
||||||
'comment': transfergroup.comment,
|
'comment': transfergroup.comment,
|
||||||
},
|
},
|
||||||
'parent': {
|
|
||||||
'modelname': 'day',
|
|
||||||
'content': {
|
|
||||||
'id': transfergroup.at.strftime('%Y%m%d'),
|
|
||||||
'date': transfergroup.at
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'children': [],
|
'children': [],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue