|
@@ -930,10 +930,10 @@
|
|
|
if(!realNode.data) return;
|
|
|
if(parent && parent.data.lastRefreshCount !== null && parent.data.lastRefreshCount !== -1) {
|
|
|
if(node.data.lastRefreshCount !== null && node.data.lastRefreshCount !== -1) {
|
|
|
- realNode.data.dropPercent = 100 - ((node.data.lastRefreshCount / parent.data.lastRefreshCount) * 100);
|
|
|
+ realNode.data.dropPercent = ((node.data.lastRefreshCount / parent.data.lastRefreshCount) * 100);
|
|
|
if(realNode.data.dropPercent) {
|
|
|
let element = StatTree.el.jstree(true).get_node(node.id, true), cssClass = '';
|
|
|
- if(realNode.data.dropPercent > 75) {
|
|
|
+ /*if(realNode.data.dropPercent > 75) {
|
|
|
cssClass = 'drop-76-100';
|
|
|
}
|
|
|
else if(realNode.data.dropPercent > 50 && realNode.data.dropPercent <= 75) {
|
|
@@ -944,11 +944,48 @@
|
|
|
}
|
|
|
else if(realNode.data.dropPercent > 0 && realNode.data.dropPercent <= 25) {
|
|
|
cssClass = 'drop-0-25';
|
|
|
- }
|
|
|
+ }*/
|
|
|
+ cssClass = 'drop-0-25';
|
|
|
element.find('>a.jstree-anchor')
|
|
|
.addClass('has-drop-visualization')
|
|
|
.addClass(cssClass)
|
|
|
.attr('data-drop-percent', (realNode.data.dropPercent.toFixed(3)) + '% ⤵');
|
|
|
+
|
|
|
+ if(!!realNode.data.goalCondition && realNode.data.goalPercent !== -1) {
|
|
|
+ let goalLabel = '';
|
|
|
+ switch(realNode.data.goalCondition) {
|
|
|
+ case '=':
|
|
|
+ if(realNode.data.dropPercent !== realNode.data.goalPercent) {
|
|
|
+ goalLabel = 'Should be = ' + realNode.data.goalPercent + '%';
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case '>':
|
|
|
+ if(realNode.data.dropPercent <= realNode.data.goalPercent) {
|
|
|
+ goalLabel = 'Should be > ' + realNode.data.goalPercent + '%';
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case '<':
|
|
|
+ if(realNode.data.dropPercent >= realNode.data.goalPercent) {
|
|
|
+ goalLabel = 'Should be < ' + realNode.data.goalPercent + '%';
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case '>=':
|
|
|
+ if(realNode.data.dropPercent < realNode.data.goalPercent) {
|
|
|
+ goalLabel = 'Should be >= ' + realNode.data.goalPercent + '%';
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case '<=':
|
|
|
+ if(realNode.data.dropPercent > realNode.data.goalPercent) {
|
|
|
+ goalLabel = 'Should be <= ' + realNode.data.goalPercent + '%';
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if(!!goalLabel) {
|
|
|
+ element.find('>a.jstree-anchor')
|
|
|
+ .addClass('has-goal-label')
|
|
|
+ .attr('data-goal-label', '⚠ ' + goalLabel);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1088,6 +1125,7 @@
|
|
|
clause: node.data.clause,
|
|
|
columns: node.data.columns,
|
|
|
goalPercent: node.data.goalPercent,
|
|
|
+ goalCondition: node.data.goalCondition,
|
|
|
};
|
|
|
let children = [];
|
|
|
for (let i = 0; i < node.children.length; i++) {
|
|
@@ -1151,7 +1189,10 @@
|
|
|
|
|
|
linePropsColumn.removeClass('d-none');
|
|
|
linePropsColumn.find('[line-label]').text(selected.data.displayLabel);
|
|
|
- linePropsColumn.find('[line-goal]').text(selected.data.goalPercent === -1 ? '-' : selected.data.goalPercent + '%');
|
|
|
+ linePropsColumn.find('[line-goal]').text(
|
|
|
+ selected.data.goalCondition + ' ' +
|
|
|
+ (selected.data.goalPercent === -1 ? '-' : selected.data.goalPercent + '%')
|
|
|
+ );
|
|
|
|
|
|
// fill args
|
|
|
let tbody = linePropsColumn.find('[line-args]');
|
|
@@ -1334,17 +1375,21 @@
|
|
|
.off('click', '.btn-edit-goal')
|
|
|
.on('click', '.btn-edit-goal', function() {
|
|
|
let selected = StatTree.selectedNode();
|
|
|
- let value = window.prompt('New goal (%):', (selected.data.goalPercent !== -1 ? selected.data.goalPercent : ''));
|
|
|
- if(value !== null) {
|
|
|
- if($.trim(value) === '') {
|
|
|
- value = -1;
|
|
|
- }
|
|
|
- else {
|
|
|
- value = +value;
|
|
|
+ let condition = window.prompt('Condition (=, <, >, <=, ):', selected.data.goalCondition);
|
|
|
+ if(condition !== null) {
|
|
|
+ let value = window.prompt('New goal (%):', (selected.data.goalPercent !== -1 ? selected.data.goalPercent : ''));
|
|
|
+ if(value !== null) {
|
|
|
+ if($.trim(value) === '') {
|
|
|
+ value = -1;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ value = +value;
|
|
|
+ }
|
|
|
+ selected.data.goalCondition = condition;
|
|
|
+ selected.data.goalPercent = value;
|
|
|
+ StatTree.onSelected();
|
|
|
+ StatTree.setDirty();
|
|
|
}
|
|
|
- selected.data.goalPercent = value;
|
|
|
- StatTree.onSelected();
|
|
|
- StatTree.setDirty();
|
|
|
}
|
|
|
return false;
|
|
|
});
|