Add index for Day objects

This commit is contained in:
Ludovic Stephan 2017-04-09 21:50:47 -03:00
parent 688d5bba29
commit 5e8752632c
2 changed files with 50 additions and 39 deletions

View file

@ -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');
} }
} }

View file

@ -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': [],
} }