initial github commit
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
import Ember from 'ember'
|
||||
import DS from 'ember-data'
|
||||
businessDayComputations = (target, prefix, options = {}) ->
|
||||
if options.add_attributes
|
||||
Ember.defineProperty target, "#{prefix}_value", DS.attr('number', defaultValue: 0)
|
||||
Ember.defineProperty target, "#{prefix}_unit", DS.attr('string', defaultValue: options.default_unit || 'day')
|
||||
Ember.defineProperty target, "#{prefix}_business_days", DS.attr(defaultValue: -> [ 1, 2, 3, 4, 5 ])
|
||||
#Ember.defineProperty target, "#{prefix}_business_days_index_sum", Ember.computed.sum "#{prefix}_business_days"
|
||||
#Ember.defineProperty target, "has_default_#{prefix}_business_days", Ember.computed "#{prefix}_business_days.length", "#{prefix}_business_days_index_sum", ->
|
||||
# @get("#{prefix}_business_days.length") is 5 and @get("#{prefix}_business_days_index_sum") is 15
|
||||
#Ember.defineProperty target, "#{prefix}_unit_businessday", Ember.computed.equal "#{prefix}_unit", 'businessday'
|
||||
true
|
||||
|
||||
export default businessDayComputations
|
||||
@@ -0,0 +1,28 @@
|
||||
// Generated by CoffeeScript 1.12.5
|
||||
var businessDayComputations;
|
||||
|
||||
import Ember from 'ember';
|
||||
|
||||
import DS from 'ember-data';
|
||||
|
||||
businessDayComputations = function(target, prefix, options) {
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (options.add_attributes) {
|
||||
Ember.defineProperty(target, prefix + "_value", DS.attr('number', {
|
||||
defaultValue: 0
|
||||
}));
|
||||
Ember.defineProperty(target, prefix + "_unit", DS.attr('string', {
|
||||
defaultValue: options.default_unit || 'day'
|
||||
}));
|
||||
Ember.defineProperty(target, prefix + "_business_days", DS.attr({
|
||||
defaultValue: function() {
|
||||
return [1, 2, 3, 4, 5];
|
||||
}
|
||||
}));
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
export default businessDayComputations;
|
||||
@@ -0,0 +1,148 @@
|
||||
'use strict'
|
||||
# taken from https://github.com/kalmecak/moment-business-days
|
||||
#if (typeof require === 'function') {
|
||||
# var moment = require('moment');
|
||||
#}
|
||||
|
||||
moment.fn.isHoliday = ->
|
||||
locale = @localeData()
|
||||
if locale._holidays
|
||||
if locale._holidays.indexOf(@format(locale._holidayFormat)) >= 0
|
||||
return true
|
||||
if locale.holiday
|
||||
if locale.holiday(this)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
false
|
||||
|
||||
moment.fn.isBusinessDay = (options) ->
|
||||
locale = @localeData()
|
||||
defaultWorkingWeekdays = [ 1, 2, 3, 4, 5 ]
|
||||
workingWeekdays = options.business_days or locale._workingWeekdays or defaultWorkingWeekdays
|
||||
if @isHoliday()
|
||||
return false
|
||||
if workingWeekdays.indexOf(@day()) >= 0
|
||||
return true
|
||||
false
|
||||
|
||||
moment.fn.businessDaysIntoMonth = ->
|
||||
businessDay = if @isBusinessDay() then this else @prevBusinessDay()
|
||||
monthBusinessDays = businessDay.monthBusinessDays()
|
||||
businessDaysIntoMonth = undefined
|
||||
monthBusinessDays.map (day, index) ->
|
||||
if day.format('M/DD/YY') == businessDay.format('M/DD/YY')
|
||||
businessDaysIntoMonth = index + 1
|
||||
return
|
||||
businessDaysIntoMonth
|
||||
|
||||
moment.fn.businessDiff = (param) ->
|
||||
d1 = @clone()
|
||||
d2 = param.clone()
|
||||
start = if d1 < d2 then d1 else d2
|
||||
end = if d2 > d1 then d2 else d1
|
||||
daysBetween = 0
|
||||
if start == end
|
||||
return daysBetween
|
||||
while start < end
|
||||
if start.isBusinessDay()
|
||||
daysBetween++
|
||||
start.add 1, 'd'
|
||||
daysBetween
|
||||
|
||||
moment.fn.businessAdd = (number, options = {}) ->
|
||||
options.period ||= 'days'
|
||||
day = @clone()
|
||||
signal = if number < 0 then -1 else 1
|
||||
remaining = Math.abs(number)
|
||||
while remaining
|
||||
day.add signal, options.period
|
||||
if day.isBusinessDay(options)
|
||||
remaining--
|
||||
day
|
||||
|
||||
moment.fn.businessSubtract = (number, options = {}) ->
|
||||
@businessAdd -number, options
|
||||
|
||||
moment.fn.nextBusinessDay = ->
|
||||
iterator = 1
|
||||
limit = 7
|
||||
while iterator < limit
|
||||
if @add(1, 'd').isBusinessDay()
|
||||
break
|
||||
iterator++
|
||||
this
|
||||
|
||||
moment.fn.prevBusinessDay = ->
|
||||
iterator = 1
|
||||
limit = 7
|
||||
while iterator < limit
|
||||
if @subtract(1, 'd').isBusinessDay()
|
||||
break
|
||||
iterator++
|
||||
this
|
||||
|
||||
moment.fn.monthBusinessDays = (partialEndDate) ->
|
||||
me = @clone()
|
||||
day = me.clone().startOf('month')
|
||||
end = if partialEndDate then partialEndDate else me.clone().endOf('month')
|
||||
daysArr = []
|
||||
done = false
|
||||
while !done
|
||||
if day.isBusinessDay()
|
||||
daysArr.push day.clone()
|
||||
if end.diff(day.add(1, 'd')) < 0
|
||||
done = true
|
||||
daysArr
|
||||
|
||||
moment.fn.monthNaturalDays = (fromToday) ->
|
||||
me = @clone()
|
||||
day = if fromToday then me.clone() else me.clone().startOf('month')
|
||||
end = me.clone().endOf('month')
|
||||
daysArr = []
|
||||
done = false
|
||||
while !done
|
||||
daysArr.push day.clone()
|
||||
if end.diff(day.add(1, 'd')) < 0
|
||||
done = true
|
||||
daysArr
|
||||
|
||||
moment.fn.monthBusinessWeeks = (fromToday) ->
|
||||
me = @clone()
|
||||
day = if fromToday then me.clone() else me.clone().startOf('month')
|
||||
end = me.clone().endOf('month')
|
||||
weeksArr = []
|
||||
daysArr = []
|
||||
done = false
|
||||
while !done
|
||||
if day.day() >= 1 and day.day() < 6
|
||||
daysArr.push day.clone()
|
||||
if day.day() == 5
|
||||
weeksArr.push daysArr
|
||||
daysArr = []
|
||||
if end.diff(day.add(1, 'd')) < 0
|
||||
if daysArr.length < 5
|
||||
weeksArr.push daysArr
|
||||
done = true
|
||||
weeksArr
|
||||
|
||||
moment.fn.monthNaturalWeeks = (fromToday) ->
|
||||
me = @clone()
|
||||
day = if fromToday then me.clone() else me.clone().startOf('month')
|
||||
end = me.clone().endOf('month')
|
||||
weeksArr = []
|
||||
daysArr = []
|
||||
done = false
|
||||
while !done
|
||||
daysArr.push day.clone()
|
||||
if day.day() == 6
|
||||
weeksArr.push daysArr
|
||||
daysArr = []
|
||||
if end.diff(day.add(1, 'd')) < 0
|
||||
if daysArr.length < 7
|
||||
weeksArr.push daysArr
|
||||
done = true
|
||||
weeksArr
|
||||
|
||||
if typeof module isnt 'undefined' and module.exports
|
||||
module.exports = moment
|
||||
@@ -0,0 +1,204 @@
|
||||
// Generated by CoffeeScript 1.12.5
|
||||
'use strict';
|
||||
moment.fn.isHoliday = function() {
|
||||
var locale;
|
||||
locale = this.localeData();
|
||||
if (locale._holidays) {
|
||||
if (locale._holidays.indexOf(this.format(locale._holidayFormat)) >= 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (locale.holiday) {
|
||||
if (locale.holiday(this)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
moment.fn.isBusinessDay = function(options) {
|
||||
var defaultWorkingWeekdays, locale, workingWeekdays;
|
||||
locale = this.localeData();
|
||||
defaultWorkingWeekdays = [1, 2, 3, 4, 5];
|
||||
workingWeekdays = options.business_days || locale._workingWeekdays || defaultWorkingWeekdays;
|
||||
if (this.isHoliday()) {
|
||||
return false;
|
||||
}
|
||||
if (workingWeekdays.indexOf(this.day()) >= 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
moment.fn.businessDaysIntoMonth = function() {
|
||||
var businessDay, businessDaysIntoMonth, monthBusinessDays;
|
||||
businessDay = this.isBusinessDay() ? this : this.prevBusinessDay();
|
||||
monthBusinessDays = businessDay.monthBusinessDays();
|
||||
businessDaysIntoMonth = void 0;
|
||||
monthBusinessDays.map(function(day, index) {
|
||||
if (day.format('M/DD/YY') === businessDay.format('M/DD/YY')) {
|
||||
businessDaysIntoMonth = index + 1;
|
||||
}
|
||||
});
|
||||
return businessDaysIntoMonth;
|
||||
};
|
||||
|
||||
moment.fn.businessDiff = function(param) {
|
||||
var d1, d2, daysBetween, end, start;
|
||||
d1 = this.clone();
|
||||
d2 = param.clone();
|
||||
start = d1 < d2 ? d1 : d2;
|
||||
end = d2 > d1 ? d2 : d1;
|
||||
daysBetween = 0;
|
||||
if (start === end) {
|
||||
return daysBetween;
|
||||
}
|
||||
while (start < end) {
|
||||
if (start.isBusinessDay()) {
|
||||
daysBetween++;
|
||||
}
|
||||
start.add(1, 'd');
|
||||
}
|
||||
return daysBetween;
|
||||
};
|
||||
|
||||
moment.fn.businessAdd = function(number, options) {
|
||||
var day, remaining, signal;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
options.period || (options.period = 'days');
|
||||
day = this.clone();
|
||||
signal = number < 0 ? -1 : 1;
|
||||
remaining = Math.abs(number);
|
||||
while (remaining) {
|
||||
day.add(signal, options.period);
|
||||
if (day.isBusinessDay(options)) {
|
||||
remaining--;
|
||||
}
|
||||
}
|
||||
return day;
|
||||
};
|
||||
|
||||
moment.fn.businessSubtract = function(number, options) {
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
return this.businessAdd(-number, options);
|
||||
};
|
||||
|
||||
moment.fn.nextBusinessDay = function() {
|
||||
var iterator, limit;
|
||||
iterator = 1;
|
||||
limit = 7;
|
||||
while (iterator < limit) {
|
||||
if (this.add(1, 'd').isBusinessDay()) {
|
||||
break;
|
||||
}
|
||||
iterator++;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
moment.fn.prevBusinessDay = function() {
|
||||
var iterator, limit;
|
||||
iterator = 1;
|
||||
limit = 7;
|
||||
while (iterator < limit) {
|
||||
if (this.subtract(1, 'd').isBusinessDay()) {
|
||||
break;
|
||||
}
|
||||
iterator++;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
moment.fn.monthBusinessDays = function(partialEndDate) {
|
||||
var day, daysArr, done, end, me;
|
||||
me = this.clone();
|
||||
day = me.clone().startOf('month');
|
||||
end = partialEndDate ? partialEndDate : me.clone().endOf('month');
|
||||
daysArr = [];
|
||||
done = false;
|
||||
while (!done) {
|
||||
if (day.isBusinessDay()) {
|
||||
daysArr.push(day.clone());
|
||||
}
|
||||
if (end.diff(day.add(1, 'd')) < 0) {
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
return daysArr;
|
||||
};
|
||||
|
||||
moment.fn.monthNaturalDays = function(fromToday) {
|
||||
var day, daysArr, done, end, me;
|
||||
me = this.clone();
|
||||
day = fromToday ? me.clone() : me.clone().startOf('month');
|
||||
end = me.clone().endOf('month');
|
||||
daysArr = [];
|
||||
done = false;
|
||||
while (!done) {
|
||||
daysArr.push(day.clone());
|
||||
if (end.diff(day.add(1, 'd')) < 0) {
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
return daysArr;
|
||||
};
|
||||
|
||||
moment.fn.monthBusinessWeeks = function(fromToday) {
|
||||
var day, daysArr, done, end, me, weeksArr;
|
||||
me = this.clone();
|
||||
day = fromToday ? me.clone() : me.clone().startOf('month');
|
||||
end = me.clone().endOf('month');
|
||||
weeksArr = [];
|
||||
daysArr = [];
|
||||
done = false;
|
||||
while (!done) {
|
||||
if (day.day() >= 1 && day.day() < 6) {
|
||||
daysArr.push(day.clone());
|
||||
}
|
||||
if (day.day() === 5) {
|
||||
weeksArr.push(daysArr);
|
||||
daysArr = [];
|
||||
}
|
||||
if (end.diff(day.add(1, 'd')) < 0) {
|
||||
if (daysArr.length < 5) {
|
||||
weeksArr.push(daysArr);
|
||||
}
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
return weeksArr;
|
||||
};
|
||||
|
||||
moment.fn.monthNaturalWeeks = function(fromToday) {
|
||||
var day, daysArr, done, end, me, weeksArr;
|
||||
me = this.clone();
|
||||
day = fromToday ? me.clone() : me.clone().startOf('month');
|
||||
end = me.clone().endOf('month');
|
||||
weeksArr = [];
|
||||
daysArr = [];
|
||||
done = false;
|
||||
while (!done) {
|
||||
daysArr.push(day.clone());
|
||||
if (day.day() === 6) {
|
||||
weeksArr.push(daysArr);
|
||||
daysArr = [];
|
||||
}
|
||||
if (end.diff(day.add(1, 'd')) < 0) {
|
||||
if (daysArr.length < 7) {
|
||||
weeksArr.push(daysArr);
|
||||
}
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
return weeksArr;
|
||||
};
|
||||
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
module.exports = moment;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
export default pandaRouteSetup = (context) ->
|
||||
context.route 'project', ->
|
||||
@route 'show', path: ':project_id', ->
|
||||
@route 'dunlop'
|
||||
@route 'tracker-subjects'
|
||||
@route 'tracker-subject', path: 'tracker-subject/:tracker_subject_id'
|
||||
@route 'add-progress'
|
||||
#@route 'tracker-subject', ->
|
||||
# @route 'show'
|
||||
@route 'dunlop-generator'
|
||||
@route 'analysis'
|
||||
@route 'project-instance', ->
|
||||
@route 'show', path: ':project_instance_id', ->
|
||||
@route 'groups'
|
||||
@route 'list'
|
||||
@route 'actions'
|
||||
@route 'graphs'
|
||||
@route 'project-instance-group', ->
|
||||
@route 'show', path: ':project_instance_group_id'
|
||||
@route 'project-instance-action', ->
|
||||
@route 'show', path: ':project_instance_action_id'
|
||||
#@route 'project/views', path: 'views'
|
||||
context.route 'login'
|
||||
#@route 'organization', path: 'organizations/:organization_id'
|
||||
context.route 'action-list'
|
||||
|
||||
context.route 'organization', ->
|
||||
@route 'show', path: ':organization_id', ->
|
||||
@route 'project-actions'
|
||||
|
||||
context.route 'user', ->
|
||||
@route 'profile'
|
||||
@route 'show', path: ':user_id'
|
||||
|
||||
|
||||
context.route 'tracker-subject', ->
|
||||
@route 'show', path: ':tracker_subject_id', ->
|
||||
@route 'tracking-connections'
|
||||
@route 'tracker-group', path: 'tracker-groups/:tracker_group_id'
|
||||
@route 'project', path: 'projects/:project_id'
|
||||
#@route 'tracker-subject/tracker-group', path: 'tracker-subjects/:tracker_subject_id/tracker-groups/:tracker_group_id'
|
||||
context.route 'event'
|
||||
|
||||
context.route 'meeting-reports'
|
||||
|
||||
context.route 'manual', ->
|
||||
@route 'project', ->
|
||||
@route 'dunlop'
|
||||
@route 'tracker', ->
|
||||
@route 'tricks' # dummy/empty now, to genate the index
|
||||
true
|
||||
@@ -0,0 +1,78 @@
|
||||
// Generated by CoffeeScript 1.12.5
|
||||
var pandaRouteSetup;
|
||||
|
||||
export default pandaRouteSetup = function(context) {
|
||||
context.route('project', function() {
|
||||
return this.route('show', {
|
||||
path: ':project_id'
|
||||
}, function() {
|
||||
this.route('dunlop');
|
||||
this.route('tracker-subjects');
|
||||
this.route('tracker-subject', {
|
||||
path: 'tracker-subject/:tracker_subject_id'
|
||||
});
|
||||
this.route('add-progress');
|
||||
this.route('dunlop-generator');
|
||||
this.route('analysis');
|
||||
this.route('project-instance', function() {
|
||||
return this.route('show', {
|
||||
path: ':project_instance_id'
|
||||
}, function() {
|
||||
this.route('groups');
|
||||
this.route('list');
|
||||
this.route('actions');
|
||||
return this.route('graphs');
|
||||
});
|
||||
});
|
||||
this.route('project-instance-group', function() {
|
||||
return this.route('show', {
|
||||
path: ':project_instance_group_id'
|
||||
});
|
||||
});
|
||||
return this.route('project-instance-action', function() {
|
||||
return this.route('show', {
|
||||
path: ':project_instance_action_id'
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
context.route('login');
|
||||
context.route('action-list');
|
||||
context.route('organization', function() {
|
||||
return this.route('show', {
|
||||
path: ':organization_id'
|
||||
}, function() {
|
||||
return this.route('project-actions');
|
||||
});
|
||||
});
|
||||
context.route('user', function() {
|
||||
this.route('profile');
|
||||
return this.route('show', {
|
||||
path: ':user_id'
|
||||
});
|
||||
});
|
||||
context.route('tracker-subject', function() {
|
||||
return this.route('show', {
|
||||
path: ':tracker_subject_id'
|
||||
}, function() {
|
||||
this.route('tracking-connections');
|
||||
this.route('tracker-group', {
|
||||
path: 'tracker-groups/:tracker_group_id'
|
||||
});
|
||||
return this.route('project', {
|
||||
path: 'projects/:project_id'
|
||||
});
|
||||
});
|
||||
});
|
||||
context.route('event');
|
||||
context.route('meeting-reports');
|
||||
context.route('manual', function() {
|
||||
this.route('project', function() {
|
||||
return this.route('dunlop');
|
||||
});
|
||||
return this.route('tracker', function() {
|
||||
return this.route('tricks');
|
||||
});
|
||||
});
|
||||
return true;
|
||||
};
|
||||
@@ -0,0 +1,45 @@
|
||||
import Ember from 'ember'
|
||||
# get_active_workflow_action_definitions(workflow_action_definitions, project_scenarios, set_operation = 'union or intersection')
|
||||
# this util takes as first arguments the workflow_action_definitions scope
|
||||
# and tries to apply filtering based on the given project_scenarios and set_operation
|
||||
|
||||
get_active_workflow_action_definitions_using_union = (project_scenarios) ->
|
||||
selected_project_scenario_workflow_action_definition_ids = []
|
||||
working_workflow_action_definitions = []
|
||||
project_scenarios.forEach (selected_project_scenario) ->
|
||||
selected_project_scenario.get('workflow_action_definitions').forEach (workflow_action_definition) ->
|
||||
if selected_project_scenario_workflow_action_definition_ids.indexOf(workflow_action_definition.get('id')) < 0
|
||||
selected_project_scenario_workflow_action_definition_ids.push workflow_action_definition.get('id')
|
||||
working_workflow_action_definitions.push workflow_action_definition
|
||||
working_workflow_action_definitions
|
||||
|
||||
get_active_workflow_action_definitions_using_intersection = (workflow_action_definitions, project_scenarios) ->
|
||||
selected_project_scenario_workflow_action_definition_ids = []
|
||||
first_run = true
|
||||
project_scenarios.forEach (selected_project_scenario) ->
|
||||
current_workflow_action_definition_ids = selected_project_scenario.get('workflow_action_definitions').mapBy('id').toArray()
|
||||
if first_run
|
||||
selected_project_scenario_workflow_action_definition_ids = current_workflow_action_definition_ids
|
||||
first_run = false
|
||||
return
|
||||
selected_project_scenario_workflow_action_definition_ids = selected_project_scenario_workflow_action_definition_ids.filter (id) -> id in current_workflow_action_definition_ids
|
||||
workflow_action_definitions.filter((r) -> r.get('id') in selected_project_scenario_workflow_action_definition_ids)
|
||||
|
||||
get_active_workflow_action_definitions = (workflow_action_definitions, project_scenarios, set_operation = 'union') ->
|
||||
project_scenarios = Ember.makeArray(project_scenarios)
|
||||
workflow_action_definitions = workflow_action_definitions.toArray()
|
||||
# initialize unused working workflow-action-definitions
|
||||
if project_scenarios.length
|
||||
if set_operation is 'intersection'
|
||||
get_active_workflow_action_definitions_using_intersection(workflow_action_definitions, project_scenarios)
|
||||
else
|
||||
get_active_workflow_action_definitions_using_union(project_scenarios)
|
||||
else
|
||||
# no filtering can be allplied, return all
|
||||
workflow_action_definitions
|
||||
|
||||
export { get_active_workflow_action_definitions_using_union }
|
||||
export { get_active_workflow_action_definitions_using_intersection }
|
||||
export { get_active_workflow_action_definitions }
|
||||
|
||||
export default get_active_workflow_action_definitions
|
||||
@@ -0,0 +1,73 @@
|
||||
// Generated by CoffeeScript 1.12.5
|
||||
var get_active_workflow_action_definitions, get_active_workflow_action_definitions_using_intersection, get_active_workflow_action_definitions_using_union,
|
||||
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
||||
|
||||
import Ember from 'ember';
|
||||
|
||||
get_active_workflow_action_definitions_using_union = function(project_scenarios) {
|
||||
var selected_project_scenario_workflow_action_definition_ids, working_workflow_action_definitions;
|
||||
selected_project_scenario_workflow_action_definition_ids = [];
|
||||
working_workflow_action_definitions = [];
|
||||
project_scenarios.forEach(function(selected_project_scenario) {
|
||||
return selected_project_scenario.get('workflow_action_definitions').forEach(function(workflow_action_definition) {
|
||||
if (selected_project_scenario_workflow_action_definition_ids.indexOf(workflow_action_definition.get('id')) < 0) {
|
||||
selected_project_scenario_workflow_action_definition_ids.push(workflow_action_definition.get('id'));
|
||||
return working_workflow_action_definitions.push(workflow_action_definition);
|
||||
}
|
||||
});
|
||||
});
|
||||
return working_workflow_action_definitions;
|
||||
};
|
||||
|
||||
get_active_workflow_action_definitions_using_intersection = function(workflow_action_definitions, project_scenarios) {
|
||||
var first_run, selected_project_scenario_workflow_action_definition_ids;
|
||||
selected_project_scenario_workflow_action_definition_ids = [];
|
||||
first_run = true;
|
||||
project_scenarios.forEach(function(selected_project_scenario) {
|
||||
var current_workflow_action_definition_ids;
|
||||
current_workflow_action_definition_ids = selected_project_scenario.get('workflow_action_definitions').mapBy('id').toArray();
|
||||
if (first_run) {
|
||||
selected_project_scenario_workflow_action_definition_ids = current_workflow_action_definition_ids;
|
||||
first_run = false;
|
||||
return;
|
||||
}
|
||||
return selected_project_scenario_workflow_action_definition_ids = selected_project_scenario_workflow_action_definition_ids.filter(function(id) {
|
||||
return indexOf.call(current_workflow_action_definition_ids, id) >= 0;
|
||||
});
|
||||
});
|
||||
return workflow_action_definitions.filter(function(r) {
|
||||
var ref;
|
||||
return ref = r.get('id'), indexOf.call(selected_project_scenario_workflow_action_definition_ids, ref) >= 0;
|
||||
});
|
||||
};
|
||||
|
||||
get_active_workflow_action_definitions = function(workflow_action_definitions, project_scenarios, set_operation) {
|
||||
if (set_operation == null) {
|
||||
set_operation = 'union';
|
||||
}
|
||||
project_scenarios = Ember.makeArray(project_scenarios);
|
||||
workflow_action_definitions = workflow_action_definitions.toArray();
|
||||
if (project_scenarios.length) {
|
||||
if (set_operation === 'intersection') {
|
||||
return get_active_workflow_action_definitions_using_intersection(workflow_action_definitions, project_scenarios);
|
||||
} else {
|
||||
return get_active_workflow_action_definitions_using_union(project_scenarios);
|
||||
}
|
||||
} else {
|
||||
return workflow_action_definitions;
|
||||
}
|
||||
};
|
||||
|
||||
export {
|
||||
get_active_workflow_action_definitions_using_union
|
||||
};
|
||||
|
||||
export {
|
||||
get_active_workflow_action_definitions_using_intersection
|
||||
};
|
||||
|
||||
export {
|
||||
get_active_workflow_action_definitions
|
||||
};
|
||||
|
||||
export default get_active_workflow_action_definitions;
|
||||
@@ -0,0 +1,45 @@
|
||||
import Ember from 'ember'
|
||||
# get_active_workflow_groups(workflow_groups, project_scenarios, set_operation = 'union or intersection')
|
||||
# this util takes as first arguments the workflow_groups scope
|
||||
# and tries to apply filtering based on the given project_scenarios and set_operation
|
||||
|
||||
get_active_workflow_groups_using_union = (project_scenarios) ->
|
||||
selected_project_scenario_workflow_group_ids = []
|
||||
working_workflow_groups = []
|
||||
project_scenarios.forEach (selected_project_scenario) ->
|
||||
selected_project_scenario.get('workflow_groups').forEach (workflow_group) ->
|
||||
if selected_project_scenario_workflow_group_ids.indexOf(workflow_group.get('id')) < 0
|
||||
selected_project_scenario_workflow_group_ids.push workflow_group.get('id')
|
||||
working_workflow_groups.push workflow_group
|
||||
working_workflow_groups
|
||||
|
||||
get_active_workflow_groups_using_intersection = (workflow_groups, project_scenarios) ->
|
||||
selected_project_scenario_workflow_group_ids = []
|
||||
first_run = true
|
||||
project_scenarios.forEach (selected_project_scenario) ->
|
||||
current_workflow_group_ids = selected_project_scenario.get('workflow_groups').mapBy('id').toArray()
|
||||
if first_run
|
||||
selected_project_scenario_workflow_group_ids = current_workflow_group_ids
|
||||
first_run = false
|
||||
return
|
||||
selected_project_scenario_workflow_group_ids = selected_project_scenario_workflow_group_ids.filter (id) -> id in current_workflow_group_ids
|
||||
workflow_groups.filter((r) -> r.get('id') in selected_project_scenario_workflow_group_ids)
|
||||
|
||||
get_active_workflow_groups = (workflow_groups, project_scenarios, set_operation = 'union') ->
|
||||
project_scenarios = Ember.makeArray(project_scenarios)
|
||||
workflow_groups = workflow_groups.toArray()
|
||||
# initialize unused working workflow-groups
|
||||
if project_scenarios.length
|
||||
if set_operation is 'intersection'
|
||||
get_active_workflow_groups_using_intersection(workflow_groups, project_scenarios)
|
||||
else
|
||||
get_active_workflow_groups_using_union(project_scenarios)
|
||||
else
|
||||
# no filtering can be allplied, return all
|
||||
workflow_groups
|
||||
|
||||
export { get_active_workflow_groups_using_union }
|
||||
export { get_active_workflow_groups_using_intersection }
|
||||
export { get_active_workflow_groups }
|
||||
|
||||
export default get_active_workflow_groups
|
||||
@@ -0,0 +1,73 @@
|
||||
// Generated by CoffeeScript 1.12.5
|
||||
var get_active_workflow_groups, get_active_workflow_groups_using_intersection, get_active_workflow_groups_using_union,
|
||||
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
||||
|
||||
import Ember from 'ember';
|
||||
|
||||
get_active_workflow_groups_using_union = function(project_scenarios) {
|
||||
var selected_project_scenario_workflow_group_ids, working_workflow_groups;
|
||||
selected_project_scenario_workflow_group_ids = [];
|
||||
working_workflow_groups = [];
|
||||
project_scenarios.forEach(function(selected_project_scenario) {
|
||||
return selected_project_scenario.get('workflow_groups').forEach(function(workflow_group) {
|
||||
if (selected_project_scenario_workflow_group_ids.indexOf(workflow_group.get('id')) < 0) {
|
||||
selected_project_scenario_workflow_group_ids.push(workflow_group.get('id'));
|
||||
return working_workflow_groups.push(workflow_group);
|
||||
}
|
||||
});
|
||||
});
|
||||
return working_workflow_groups;
|
||||
};
|
||||
|
||||
get_active_workflow_groups_using_intersection = function(workflow_groups, project_scenarios) {
|
||||
var first_run, selected_project_scenario_workflow_group_ids;
|
||||
selected_project_scenario_workflow_group_ids = [];
|
||||
first_run = true;
|
||||
project_scenarios.forEach(function(selected_project_scenario) {
|
||||
var current_workflow_group_ids;
|
||||
current_workflow_group_ids = selected_project_scenario.get('workflow_groups').mapBy('id').toArray();
|
||||
if (first_run) {
|
||||
selected_project_scenario_workflow_group_ids = current_workflow_group_ids;
|
||||
first_run = false;
|
||||
return;
|
||||
}
|
||||
return selected_project_scenario_workflow_group_ids = selected_project_scenario_workflow_group_ids.filter(function(id) {
|
||||
return indexOf.call(current_workflow_group_ids, id) >= 0;
|
||||
});
|
||||
});
|
||||
return workflow_groups.filter(function(r) {
|
||||
var ref;
|
||||
return ref = r.get('id'), indexOf.call(selected_project_scenario_workflow_group_ids, ref) >= 0;
|
||||
});
|
||||
};
|
||||
|
||||
get_active_workflow_groups = function(workflow_groups, project_scenarios, set_operation) {
|
||||
if (set_operation == null) {
|
||||
set_operation = 'union';
|
||||
}
|
||||
project_scenarios = Ember.makeArray(project_scenarios);
|
||||
workflow_groups = workflow_groups.toArray();
|
||||
if (project_scenarios.length) {
|
||||
if (set_operation === 'intersection') {
|
||||
return get_active_workflow_groups_using_intersection(workflow_groups, project_scenarios);
|
||||
} else {
|
||||
return get_active_workflow_groups_using_union(project_scenarios);
|
||||
}
|
||||
} else {
|
||||
return workflow_groups;
|
||||
}
|
||||
};
|
||||
|
||||
export {
|
||||
get_active_workflow_groups_using_union
|
||||
};
|
||||
|
||||
export {
|
||||
get_active_workflow_groups_using_intersection
|
||||
};
|
||||
|
||||
export {
|
||||
get_active_workflow_groups
|
||||
};
|
||||
|
||||
export default get_active_workflow_groups;
|
||||
@@ -0,0 +1,4 @@
|
||||
projectContract = () ->
|
||||
true
|
||||
|
||||
export default projectContract
|
||||
@@ -0,0 +1,8 @@
|
||||
// Generated by CoffeeScript 1.12.5
|
||||
var projectContract;
|
||||
|
||||
projectContract = function() {
|
||||
return true;
|
||||
};
|
||||
|
||||
export default projectContract;
|
||||
@@ -0,0 +1,295 @@
|
||||
#projectGetWorkflowActionDefinitionOffsets = () ->
|
||||
# true
|
||||
#export default projectGetWorkflowActionDefinitionOffsets
|
||||
import Ember from 'ember'
|
||||
|
||||
RecordNode = Ember.Object.extend
|
||||
resolved: false
|
||||
title: Ember.computed 'record.title', 'value_shift', ->
|
||||
title = @get('record.title')
|
||||
title = " #{title} (#{value_shift}d)" if value_shift = @get('value_shift')
|
||||
title
|
||||
|
||||
OffsetNode = Ember.Object.extend
|
||||
record: null
|
||||
total_offset: 0
|
||||
value_shift: 0
|
||||
resulting_absolute_value: 0
|
||||
|
||||
WorkflowActionDefinitionOffsetNodes = Ember.Object.extend
|
||||
iteration_context_counter: 0
|
||||
workflow_action_definitions: []
|
||||
reference_date: null
|
||||
batch_size: 0
|
||||
active_project_scenario: null
|
||||
|
||||
forEach: ->
|
||||
@get('processed_workflow_action_definitions').forEach(arguments...)
|
||||
|
||||
filterBy: ->
|
||||
@get('processed_workflow_action_definitions').filterBy(arguments...)
|
||||
|
||||
get_resolved: ->
|
||||
@get('processed_workflow_action_definitions').filterBy('resolved')
|
||||
|
||||
init: ->
|
||||
@set 'scope_workflow_action_definition_ids', @get('workflow_action_definitions').mapBy('id').toArray()
|
||||
@set 'processed_workflow_action_definitions', []
|
||||
@set 'working_workflow_action_definitions', []
|
||||
@get_workflow_action_definition_offsets()
|
||||
|
||||
get_workflow_action_definition_offsets: ->
|
||||
base = @
|
||||
active_scenario_identifier = @get('active_project_scenario.identifier')
|
||||
scope_workflow_action_definition_ids = @get('scope_workflow_action_definition_ids')
|
||||
first_loop_actions = []
|
||||
working_workflow_action_definitions = []
|
||||
@get('workflow_action_definitions').forEach (workflow_action_definition) ->
|
||||
action_added = false
|
||||
if workflow_action_definition.get('offset_type') is 'configured'
|
||||
workflow_action_definition.get('workflow_action_offsets').forEach (workflow_action_offset) ->
|
||||
return if action_added
|
||||
return if active_scenario_identifier and workflow_action_offset.get('project_scenario.identifier') and workflow_action_offset.get('project_scenario.identifier') isnt active_scenario_identifier
|
||||
if not workflow_action_offset.get('base_workflow_action_definition.content') # x_based
|
||||
[offset_date, offset_value] = base.get_offset_for_target(workflow_action_offset, 0)
|
||||
[date, value_shift] = base.get_dynamic_offset_for_target(workflow_action_offset, offset_value)
|
||||
absolute_value = offset_value + value_shift
|
||||
record_wrapper = RecordNode.create
|
||||
record: workflow_action_definition
|
||||
record_id: workflow_action_definition.get('id')
|
||||
offset_wrappers: [
|
||||
OffsetNode.create(total_offset: absolute_value, value_shift: value_shift)
|
||||
]
|
||||
absolute_value: absolute_value
|
||||
value_shift: value_shift
|
||||
date: date
|
||||
resolve_type: 'x'
|
||||
resolved: true
|
||||
resolve_level: 0
|
||||
first_loop_actions.push record_wrapper
|
||||
action_added = true
|
||||
working_workflow_action_definitions.push workflow_action_definition unless action_added
|
||||
|
||||
@set 'processed_workflow_action_definitions', first_loop_actions
|
||||
@set 'working_workflow_action_definitions', working_workflow_action_definitions
|
||||
|
||||
@incrementProperty 'iteration_context_counter'
|
||||
#@set 'working_workflow_action_definitions', @get('workflow_action_definitions').filterBy('offset_type', 'configured')
|
||||
@run_critical_path_resolve_loop()
|
||||
resolve_level = @get('iteration_context_counter')
|
||||
@get('working_workflow_action_definitions').forEach (unresolved_workflow_action_definition) => # add unresolved records
|
||||
offset_wrappers = []
|
||||
unresolved_workflow_action_definition.get('workflow_action_offsets').forEach (action_offset) ->
|
||||
return unless action_offset.get('base_workflow_action_definition.id') in scope_workflow_action_definition_ids # do not add offsets from other scenarios
|
||||
offset_wrappers.push OffsetNode.create
|
||||
total_offset: action_offset.get('offset_value')
|
||||
record: action_offset
|
||||
@get('processed_workflow_action_definitions').push RecordNode.create
|
||||
record: unresolved_workflow_action_definition
|
||||
record_id: unresolved_workflow_action_definition.get('id')
|
||||
offset_wrappers: offset_wrappers
|
||||
resolved: false
|
||||
resolve_level: resolve_level
|
||||
resolve_type: 'unresolved'
|
||||
|
||||
get_dynamic_offset_for_target: (target, absolute_value) ->
|
||||
base_date = @get('reference_date').clone().add(absolute_value, 'day')
|
||||
empty = [base_date, 0]
|
||||
return empty unless batch_size = @get('batch_size')
|
||||
return empty unless threshold = target.get('batch_element_threshold_value')
|
||||
return empty unless threshold_exceedance = Math.floor(batch_size / (0.1 + parseInt(threshold))) # + 0.1 (delta) to exclude exact match of batch_size and threshold. First day is action day
|
||||
|
||||
period_unit = target.get('batch_element_threshold_unit')
|
||||
offset_value = target.get('offset_value')
|
||||
operation = if offset_value < 0 then 'subtract' else 'add'
|
||||
if period_unit is 'businessday'
|
||||
operation = "business#{operation.capitalize()}"
|
||||
shifted_date = base_date.clone()[operation](threshold_exceedance, business_days: target.get('batch_element_threshold_business_days'))
|
||||
else
|
||||
shifted_date = base_date.clone()[operation](threshold_exceedance, period_unit)
|
||||
value_shift = shifted_date.diff(base_date, 'day')
|
||||
[shifted_date, value_shift]
|
||||
|
||||
get_offset_for_target: (target, absolute_value) ->
|
||||
base_date = @get('reference_date').clone().add(absolute_value, 'day')
|
||||
empty = [base_date, 0]
|
||||
return empty unless offset_value = target.get('offset_value')
|
||||
period_unit = target.get('offset_unit')
|
||||
operation = if offset_value < 0 then 'subtract' else 'add'
|
||||
if period_unit is 'businessday'
|
||||
operation = "business#{operation.capitalize()}"
|
||||
shifted_date = base_date.clone()[operation](Math.abs(offset_value), business_days: target.get('offset_business_days'))
|
||||
else
|
||||
shifted_date = base_date.clone()[operation](Math.abs(offset_value), period_unit)
|
||||
value_shift = shifted_date.diff(base_date, 'day')
|
||||
#debugger if target.get('workflow_action_definition.title') is 'Initial check done'
|
||||
[shifted_date, value_shift]
|
||||
|
||||
run_critical_path_resolve_loop: ->
|
||||
working_indices_to_be_removed = []
|
||||
active_scenario_identifier = @get('active_project_scenario.identifier')
|
||||
processed_workflow_action_definitions = @get('processed_workflow_action_definitions')
|
||||
scope_workflow_action_definition_ids = @get('scope_workflow_action_definition_ids')
|
||||
get_dynamic_offset_for_target = @get('get_dynamic_offset_for_target').bind(@)
|
||||
get_offset_for_target = @get('get_offset_for_target').bind(@)
|
||||
resolve_level = @get('iteration_context_counter')
|
||||
@get('working_workflow_action_definitions').forEach (working_workflow_action_definition, working_index) ->
|
||||
return unless working_workflow_action_definition.get('offset_type') is 'configured'
|
||||
farthest_absolute_value = 0
|
||||
farthest_absolute_value_value_shift = 0
|
||||
farthest_result_total_offset = 0
|
||||
date = null # scoping
|
||||
resolved_offset_wrappers = []
|
||||
all_offsets_resolved = working_workflow_action_definition.get('workflow_action_offsets').every (workflow_action_offset) ->
|
||||
return true if active_scenario_identifier and workflow_action_offset.get('project_scenario.identifier') and workflow_action_offset.get('project_scenario.identifier') isnt active_scenario_identifier
|
||||
unless processed_base_workflow_action_definition_wrapper = processed_workflow_action_definitions.findBy 'record_id', workflow_action_offset.get('base_workflow_action_definition.id')
|
||||
if workflow_action_offset.get('base_workflow_action_definition.id') not in scope_workflow_action_definition_ids # base is not present in this scenario, do not pursue this connection
|
||||
return true
|
||||
return false
|
||||
processed_absolute_value = processed_base_workflow_action_definition_wrapper.get('absolute_value')
|
||||
[offset_date, working_offset_value] = get_offset_for_target(workflow_action_offset, processed_absolute_value)
|
||||
[date, current_connection_value_shift] = get_dynamic_offset_for_target(workflow_action_offset, processed_absolute_value + working_offset_value)
|
||||
current_connection_total_offset_value = current_connection_value_shift + working_offset_value
|
||||
current_connection_absolute_value = processed_absolute_value + current_connection_total_offset_value
|
||||
#debugger if processed_base_workflow_action_definition_wrapper.get('record.title') is 'Initial check done'
|
||||
#debugger if working_workflow_action_definition.get('title') is 'Initial check done'
|
||||
if Math.abs(current_connection_absolute_value) > Math.abs(farthest_absolute_value)
|
||||
farthest_absolute_value = current_connection_absolute_value
|
||||
farthest_absolute_value_value_shift = current_connection_value_shift
|
||||
farthest_result_total_offset = current_connection_total_offset_value
|
||||
resolved_offset_wrappers.push OffsetNode.create
|
||||
record: workflow_action_offset
|
||||
value_shift: current_connection_value_shift
|
||||
total_offset: current_connection_total_offset_value
|
||||
resulting_absolute_value: current_connection_absolute_value
|
||||
true # indicate processed_base_workflow_action_definition_wrapper found for all_offsets_resolved value
|
||||
|
||||
if all_offsets_resolved and resolved_offset_wrappers.length
|
||||
record_wrapper = RecordNode.create
|
||||
record: working_workflow_action_definition
|
||||
record_id: working_workflow_action_definition.get('id')
|
||||
offset_wrappers: resolved_offset_wrappers
|
||||
value_shift: farthest_absolute_value_value_shift
|
||||
absolute_value: farthest_absolute_value
|
||||
date: date
|
||||
resolved: true
|
||||
resolve_level: resolve_level
|
||||
resolve_type: 'critical-path'
|
||||
processed_workflow_action_definitions.push record_wrapper
|
||||
working_indices_to_be_removed.push working_index
|
||||
if working_indices_to_be_removed.length
|
||||
@get('working_workflow_action_definitions').splice(working_indices_to_be_removed.pop(), 1) while working_indices_to_be_removed.length
|
||||
@run_critical_path_resolve_loop()
|
||||
else
|
||||
@incrementProperty 'iteration_context_counter'
|
||||
@run_unresolved_tree_resolve_loop()
|
||||
|
||||
run_unresolved_tree_resolve_loop: ->
|
||||
working_indices_to_be_removed = []
|
||||
active_scenario_identifier = @get('active_project_scenario.identifier')
|
||||
processed_workflow_action_definitions = @get('processed_workflow_action_definitions')
|
||||
scope_workflow_action_definition_ids = @get('scope_workflow_action_definition_ids')
|
||||
get_offset_for_target = @get('get_offset_for_target').bind(@)
|
||||
get_dynamic_offset_for_target = @get('get_dynamic_offset_for_target').bind(@)
|
||||
resolve_level = @get('iteration_context_counter')
|
||||
@get('working_workflow_action_definitions').forEach (working_workflow_action_definition, working_index) ->
|
||||
return unless working_workflow_action_definition.get('offset_type') is 'configured'
|
||||
farthest_absolute_value = 0
|
||||
farthest_absolute_value_value_shift = 0
|
||||
farthest_result_total_offset = 0
|
||||
date = null # scoping
|
||||
resolved_offset_wrappers = []
|
||||
working_workflow_action_definition.get('workflow_action_offsets').forEach (workflow_action_offset) ->
|
||||
return if active_scenario_identifier and workflow_action_offset.get('project_scenario.identifier') and workflow_action_offset.get('project_scenario.identifier') isnt active_scenario_identifier
|
||||
return unless workflow_action_offset.get('base_workflow_action_definition.id') in scope_workflow_action_definition_ids
|
||||
return unless processed_base_workflow_action_definition_wrapper = processed_workflow_action_definitions.findBy 'record_id', workflow_action_offset.get('base_workflow_action_definition.id')
|
||||
processed_absolute_value = processed_base_workflow_action_definition_wrapper.get('absolute_value')
|
||||
[offset_date, working_offset_value] = get_offset_for_target(workflow_action_offset, processed_absolute_value)
|
||||
[date, current_connection_value_shift] = get_dynamic_offset_for_target(workflow_action_offset, processed_absolute_value + working_offset_value)
|
||||
current_connection_total_offset_value = current_connection_value_shift + working_offset_value
|
||||
current_connection_absolute_value = processed_absolute_value + current_connection_total_offset_value
|
||||
#debugger if processed_base_workflow_action_definition_wrapper.get('record.title') is 'Initial check done'
|
||||
#debugger if working_workflow_action_definition.get('title') is 'Initial check done'
|
||||
if Math.abs(current_connection_absolute_value) > Math.abs(farthest_absolute_value)
|
||||
farthest_absolute_value = current_connection_absolute_value
|
||||
farthest_absolute_value_value_shift = current_connection_value_shift
|
||||
farthest_result_total_offset = current_connection_total_offset_value
|
||||
resolved_offset_wrappers.push OffsetNode.create
|
||||
record: workflow_action_offset
|
||||
value_shift: current_connection_value_shift
|
||||
total_offset: current_connection_total_offset_value
|
||||
resulting_absolute_value: current_connection_absolute_value
|
||||
if resolved_offset_wrappers.length
|
||||
record_wrapper = RecordNode.create
|
||||
record: working_workflow_action_definition
|
||||
record_id: working_workflow_action_definition.get('id')
|
||||
offset_wrappers: resolved_offset_wrappers # .clone()?
|
||||
value_shift: farthest_absolute_value_value_shift
|
||||
absolute_value: farthest_absolute_value
|
||||
date: date
|
||||
resolved: true
|
||||
resolve_level: resolve_level
|
||||
resolve_type: 'with-non-rooted-offsets'
|
||||
processed_workflow_action_definitions.push record_wrapper
|
||||
working_indices_to_be_removed.push working_index
|
||||
|
||||
if working_indices_to_be_removed.length
|
||||
@get('working_workflow_action_definitions').splice(working_indices_to_be_removed.pop(), 1) while working_indices_to_be_removed.length
|
||||
@run_critical_path_resolve_loop()
|
||||
else
|
||||
@run_offset_forwarding_loop()
|
||||
|
||||
run_offset_forwarding_loop: ->
|
||||
working_indices_to_be_removed = []
|
||||
active_scenario_identifier = @get('active_project_scenario.identifier')
|
||||
processed_workflow_action_definitions = @get('processed_workflow_action_definitions')
|
||||
scope_workflow_action_definition_ids = @get('scope_workflow_action_definition_ids')
|
||||
get_offset_for_target = @get('get_offset_for_target').bind(@)
|
||||
get_dynamic_offset_for_target = @get('get_dynamic_offset_for_target').bind(@)
|
||||
resolve_level = @get('iteration_context_counter')
|
||||
@get('working_workflow_action_definitions').forEach (working_workflow_action_definition, working_index) ->
|
||||
farthest_absolute_value = 0
|
||||
farthest_absolute_value_value_shift = 0
|
||||
farthest_result_total_offset = 0
|
||||
date = null # scoping
|
||||
resolved_offset_wrappers = []
|
||||
working_workflow_action_definition.get('dependent_workflow_action_offsets').forEach (workflow_action_offset) ->
|
||||
return if active_scenario_identifier and workflow_action_offset.get('project_scenario.identifier') and workflow_action_offset.get('project_scenario.identifier') isnt active_scenario_identifier
|
||||
return unless workflow_action_offset.get('workflow_action_definition.id') in scope_workflow_action_definition_ids
|
||||
return unless processed_base_workflow_action_definition_wrapper = processed_workflow_action_definitions.findBy 'record_id', workflow_action_offset.get('workflow_action_definition.id')
|
||||
#return if workflow_action_offset.get('workflow_action_definition.offset_type') is 'none' # do not resolve on none offset typed nodes
|
||||
processed_absolute_value = processed_base_workflow_action_definition_wrapper.get('absolute_value')
|
||||
[offset_date, working_offset_value] = get_offset_for_target(workflow_action_offset, processed_absolute_value)
|
||||
[date, current_connection_value_shift] = get_dynamic_offset_for_target(workflow_action_offset, processed_absolute_value + working_offset_value)
|
||||
current_connection_total_offset_value = current_connection_value_shift + working_offset_value
|
||||
#NOTE MINUS!!!!!!!!!!!!!!!!!!!!!
|
||||
current_connection_absolute_value = processed_absolute_value - current_connection_total_offset_value
|
||||
#debugger if processed_base_workflow_action_definition_wrapper.get('record.title') is 'Initial check done'
|
||||
#debugger if working_workflow_action_definition.get('title') is 'Initial check done'
|
||||
if Math.abs(current_connection_absolute_value) > Math.abs(farthest_absolute_value)
|
||||
farthest_absolute_value = current_connection_absolute_value
|
||||
farthest_absolute_value_value_shift = current_connection_value_shift
|
||||
farthest_result_total_offset = current_connection_total_offset_value
|
||||
resolved_offset_wrappers.push OffsetNode.create
|
||||
record: workflow_action_offset
|
||||
value_shift: current_connection_value_shift
|
||||
total_offset: current_connection_total_offset_value
|
||||
resulting_absolute_value: current_connection_absolute_value
|
||||
if resolved_offset_wrappers.length
|
||||
record_wrapper = RecordNode.create
|
||||
record: working_workflow_action_definition
|
||||
record_id: working_workflow_action_definition.get('id')
|
||||
offset_wrappers: resolved_offset_wrappers # .clone()?
|
||||
value_shift: farthest_absolute_value_value_shift
|
||||
absolute_value: farthest_absolute_value
|
||||
date: date
|
||||
resolved: true
|
||||
resolve_level: resolve_level
|
||||
resolve_type: 'offset-lookup-inversion'
|
||||
processed_workflow_action_definitions.push record_wrapper
|
||||
working_indices_to_be_removed.push working_index
|
||||
|
||||
if working_indices_to_be_removed.length
|
||||
@get('working_workflow_action_definitions').splice(working_indices_to_be_removed.pop(), 1) while working_indices_to_be_removed.length
|
||||
@run_critical_path_resolve_loop()
|
||||
export default WorkflowActionDefinitionOffsetNodes
|
||||
@@ -0,0 +1,389 @@
|
||||
// Generated by CoffeeScript 1.12.5
|
||||
var OffsetNode, RecordNode, WorkflowActionDefinitionOffsetNodes,
|
||||
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
||||
|
||||
import Ember from 'ember';
|
||||
|
||||
RecordNode = Ember.Object.extend({
|
||||
resolved: false,
|
||||
title: Ember.computed('record.title', 'value_shift', function() {
|
||||
var title, value_shift;
|
||||
title = this.get('record.title');
|
||||
if (value_shift = this.get('value_shift')) {
|
||||
title = " " + title + " (" + value_shift + "d)";
|
||||
}
|
||||
return title;
|
||||
})
|
||||
});
|
||||
|
||||
OffsetNode = Ember.Object.extend({
|
||||
record: null,
|
||||
total_offset: 0,
|
||||
value_shift: 0,
|
||||
resulting_absolute_value: 0
|
||||
});
|
||||
|
||||
WorkflowActionDefinitionOffsetNodes = Ember.Object.extend({
|
||||
iteration_context_counter: 0,
|
||||
workflow_action_definitions: [],
|
||||
reference_date: null,
|
||||
batch_size: 0,
|
||||
active_project_scenario: null,
|
||||
forEach: function() {
|
||||
var ref;
|
||||
return (ref = this.get('processed_workflow_action_definitions')).forEach.apply(ref, arguments);
|
||||
},
|
||||
filterBy: function() {
|
||||
var ref;
|
||||
return (ref = this.get('processed_workflow_action_definitions')).filterBy.apply(ref, arguments);
|
||||
},
|
||||
get_resolved: function() {
|
||||
return this.get('processed_workflow_action_definitions').filterBy('resolved');
|
||||
},
|
||||
init: function() {
|
||||
this.set('scope_workflow_action_definition_ids', this.get('workflow_action_definitions').mapBy('id').toArray());
|
||||
this.set('processed_workflow_action_definitions', []);
|
||||
this.set('working_workflow_action_definitions', []);
|
||||
return this.get_workflow_action_definition_offsets();
|
||||
},
|
||||
get_workflow_action_definition_offsets: function() {
|
||||
var active_scenario_identifier, base, first_loop_actions, resolve_level, scope_workflow_action_definition_ids, working_workflow_action_definitions;
|
||||
base = this;
|
||||
active_scenario_identifier = this.get('active_project_scenario.identifier');
|
||||
scope_workflow_action_definition_ids = this.get('scope_workflow_action_definition_ids');
|
||||
first_loop_actions = [];
|
||||
working_workflow_action_definitions = [];
|
||||
this.get('workflow_action_definitions').forEach(function(workflow_action_definition) {
|
||||
var action_added;
|
||||
action_added = false;
|
||||
if (workflow_action_definition.get('offset_type') === 'configured') {
|
||||
workflow_action_definition.get('workflow_action_offsets').forEach(function(workflow_action_offset) {
|
||||
var absolute_value, date, offset_date, offset_value, record_wrapper, ref, ref1, value_shift;
|
||||
if (action_added) {
|
||||
return;
|
||||
}
|
||||
if (active_scenario_identifier && workflow_action_offset.get('project_scenario.identifier') && workflow_action_offset.get('project_scenario.identifier') !== active_scenario_identifier) {
|
||||
return;
|
||||
}
|
||||
if (!workflow_action_offset.get('base_workflow_action_definition.content')) {
|
||||
ref = base.get_offset_for_target(workflow_action_offset, 0), offset_date = ref[0], offset_value = ref[1];
|
||||
ref1 = base.get_dynamic_offset_for_target(workflow_action_offset, offset_value), date = ref1[0], value_shift = ref1[1];
|
||||
absolute_value = offset_value + value_shift;
|
||||
record_wrapper = RecordNode.create({
|
||||
record: workflow_action_definition,
|
||||
record_id: workflow_action_definition.get('id'),
|
||||
offset_wrappers: [
|
||||
OffsetNode.create({
|
||||
total_offset: absolute_value,
|
||||
value_shift: value_shift
|
||||
})
|
||||
],
|
||||
absolute_value: absolute_value,
|
||||
value_shift: value_shift,
|
||||
date: date,
|
||||
resolve_type: 'x',
|
||||
resolved: true,
|
||||
resolve_level: 0
|
||||
});
|
||||
first_loop_actions.push(record_wrapper);
|
||||
return action_added = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!action_added) {
|
||||
return working_workflow_action_definitions.push(workflow_action_definition);
|
||||
}
|
||||
});
|
||||
this.set('processed_workflow_action_definitions', first_loop_actions);
|
||||
this.set('working_workflow_action_definitions', working_workflow_action_definitions);
|
||||
this.incrementProperty('iteration_context_counter');
|
||||
this.run_critical_path_resolve_loop();
|
||||
resolve_level = this.get('iteration_context_counter');
|
||||
return this.get('working_workflow_action_definitions').forEach((function(_this) {
|
||||
return function(unresolved_workflow_action_definition) {
|
||||
var offset_wrappers;
|
||||
offset_wrappers = [];
|
||||
unresolved_workflow_action_definition.get('workflow_action_offsets').forEach(function(action_offset) {
|
||||
var ref;
|
||||
if (ref = action_offset.get('base_workflow_action_definition.id'), indexOf.call(scope_workflow_action_definition_ids, ref) < 0) {
|
||||
return;
|
||||
}
|
||||
return offset_wrappers.push(OffsetNode.create({
|
||||
total_offset: action_offset.get('offset_value'),
|
||||
record: action_offset
|
||||
}));
|
||||
});
|
||||
return _this.get('processed_workflow_action_definitions').push(RecordNode.create({
|
||||
record: unresolved_workflow_action_definition,
|
||||
record_id: unresolved_workflow_action_definition.get('id'),
|
||||
offset_wrappers: offset_wrappers,
|
||||
resolved: false,
|
||||
resolve_level: resolve_level,
|
||||
resolve_type: 'unresolved'
|
||||
}));
|
||||
};
|
||||
})(this));
|
||||
},
|
||||
get_dynamic_offset_for_target: function(target, absolute_value) {
|
||||
var base_date, batch_size, empty, offset_value, operation, period_unit, shifted_date, threshold, threshold_exceedance, value_shift;
|
||||
base_date = this.get('reference_date').clone().add(absolute_value, 'day');
|
||||
empty = [base_date, 0];
|
||||
if (!(batch_size = this.get('batch_size'))) {
|
||||
return empty;
|
||||
}
|
||||
if (!(threshold = target.get('batch_element_threshold_value'))) {
|
||||
return empty;
|
||||
}
|
||||
if (!(threshold_exceedance = Math.floor(batch_size / (0.1 + parseInt(threshold))))) {
|
||||
return empty;
|
||||
}
|
||||
period_unit = target.get('batch_element_threshold_unit');
|
||||
offset_value = target.get('offset_value');
|
||||
operation = offset_value < 0 ? 'subtract' : 'add';
|
||||
if (period_unit === 'businessday') {
|
||||
operation = "business" + (operation.capitalize());
|
||||
shifted_date = base_date.clone()[operation](threshold_exceedance, {
|
||||
business_days: target.get('batch_element_threshold_business_days')
|
||||
});
|
||||
} else {
|
||||
shifted_date = base_date.clone()[operation](threshold_exceedance, period_unit);
|
||||
}
|
||||
value_shift = shifted_date.diff(base_date, 'day');
|
||||
return [shifted_date, value_shift];
|
||||
},
|
||||
get_offset_for_target: function(target, absolute_value) {
|
||||
var base_date, empty, offset_value, operation, period_unit, shifted_date, value_shift;
|
||||
base_date = this.get('reference_date').clone().add(absolute_value, 'day');
|
||||
empty = [base_date, 0];
|
||||
if (!(offset_value = target.get('offset_value'))) {
|
||||
return empty;
|
||||
}
|
||||
period_unit = target.get('offset_unit');
|
||||
operation = offset_value < 0 ? 'subtract' : 'add';
|
||||
if (period_unit === 'businessday') {
|
||||
operation = "business" + (operation.capitalize());
|
||||
shifted_date = base_date.clone()[operation](Math.abs(offset_value), {
|
||||
business_days: target.get('offset_business_days')
|
||||
});
|
||||
} else {
|
||||
shifted_date = base_date.clone()[operation](Math.abs(offset_value), period_unit);
|
||||
}
|
||||
value_shift = shifted_date.diff(base_date, 'day');
|
||||
return [shifted_date, value_shift];
|
||||
},
|
||||
run_critical_path_resolve_loop: function() {
|
||||
var active_scenario_identifier, get_dynamic_offset_for_target, get_offset_for_target, processed_workflow_action_definitions, resolve_level, scope_workflow_action_definition_ids, working_indices_to_be_removed;
|
||||
working_indices_to_be_removed = [];
|
||||
active_scenario_identifier = this.get('active_project_scenario.identifier');
|
||||
processed_workflow_action_definitions = this.get('processed_workflow_action_definitions');
|
||||
scope_workflow_action_definition_ids = this.get('scope_workflow_action_definition_ids');
|
||||
get_dynamic_offset_for_target = this.get('get_dynamic_offset_for_target').bind(this);
|
||||
get_offset_for_target = this.get('get_offset_for_target').bind(this);
|
||||
resolve_level = this.get('iteration_context_counter');
|
||||
this.get('working_workflow_action_definitions').forEach(function(working_workflow_action_definition, working_index) {
|
||||
var all_offsets_resolved, date, farthest_absolute_value, farthest_absolute_value_value_shift, farthest_result_total_offset, record_wrapper, resolved_offset_wrappers;
|
||||
if (working_workflow_action_definition.get('offset_type') !== 'configured') {
|
||||
return;
|
||||
}
|
||||
farthest_absolute_value = 0;
|
||||
farthest_absolute_value_value_shift = 0;
|
||||
farthest_result_total_offset = 0;
|
||||
date = null;
|
||||
resolved_offset_wrappers = [];
|
||||
all_offsets_resolved = working_workflow_action_definition.get('workflow_action_offsets').every(function(workflow_action_offset) {
|
||||
var current_connection_absolute_value, current_connection_total_offset_value, current_connection_value_shift, offset_date, processed_absolute_value, processed_base_workflow_action_definition_wrapper, ref, ref1, ref2, working_offset_value;
|
||||
if (active_scenario_identifier && workflow_action_offset.get('project_scenario.identifier') && workflow_action_offset.get('project_scenario.identifier') !== active_scenario_identifier) {
|
||||
return true;
|
||||
}
|
||||
if (!(processed_base_workflow_action_definition_wrapper = processed_workflow_action_definitions.findBy('record_id', workflow_action_offset.get('base_workflow_action_definition.id')))) {
|
||||
if (ref = workflow_action_offset.get('base_workflow_action_definition.id'), indexOf.call(scope_workflow_action_definition_ids, ref) < 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
processed_absolute_value = processed_base_workflow_action_definition_wrapper.get('absolute_value');
|
||||
ref1 = get_offset_for_target(workflow_action_offset, processed_absolute_value), offset_date = ref1[0], working_offset_value = ref1[1];
|
||||
ref2 = get_dynamic_offset_for_target(workflow_action_offset, processed_absolute_value + working_offset_value), date = ref2[0], current_connection_value_shift = ref2[1];
|
||||
current_connection_total_offset_value = current_connection_value_shift + working_offset_value;
|
||||
current_connection_absolute_value = processed_absolute_value + current_connection_total_offset_value;
|
||||
if (Math.abs(current_connection_absolute_value) > Math.abs(farthest_absolute_value)) {
|
||||
farthest_absolute_value = current_connection_absolute_value;
|
||||
farthest_absolute_value_value_shift = current_connection_value_shift;
|
||||
farthest_result_total_offset = current_connection_total_offset_value;
|
||||
}
|
||||
resolved_offset_wrappers.push(OffsetNode.create({
|
||||
record: workflow_action_offset,
|
||||
value_shift: current_connection_value_shift,
|
||||
total_offset: current_connection_total_offset_value,
|
||||
resulting_absolute_value: current_connection_absolute_value
|
||||
}));
|
||||
return true;
|
||||
});
|
||||
if (all_offsets_resolved && resolved_offset_wrappers.length) {
|
||||
record_wrapper = RecordNode.create({
|
||||
record: working_workflow_action_definition,
|
||||
record_id: working_workflow_action_definition.get('id'),
|
||||
offset_wrappers: resolved_offset_wrappers,
|
||||
value_shift: farthest_absolute_value_value_shift,
|
||||
absolute_value: farthest_absolute_value,
|
||||
date: date,
|
||||
resolved: true,
|
||||
resolve_level: resolve_level,
|
||||
resolve_type: 'critical-path'
|
||||
});
|
||||
processed_workflow_action_definitions.push(record_wrapper);
|
||||
return working_indices_to_be_removed.push(working_index);
|
||||
}
|
||||
});
|
||||
if (working_indices_to_be_removed.length) {
|
||||
while (working_indices_to_be_removed.length) {
|
||||
this.get('working_workflow_action_definitions').splice(working_indices_to_be_removed.pop(), 1);
|
||||
}
|
||||
return this.run_critical_path_resolve_loop();
|
||||
} else {
|
||||
this.incrementProperty('iteration_context_counter');
|
||||
return this.run_unresolved_tree_resolve_loop();
|
||||
}
|
||||
},
|
||||
run_unresolved_tree_resolve_loop: function() {
|
||||
var active_scenario_identifier, get_dynamic_offset_for_target, get_offset_for_target, processed_workflow_action_definitions, resolve_level, scope_workflow_action_definition_ids, working_indices_to_be_removed;
|
||||
working_indices_to_be_removed = [];
|
||||
active_scenario_identifier = this.get('active_project_scenario.identifier');
|
||||
processed_workflow_action_definitions = this.get('processed_workflow_action_definitions');
|
||||
scope_workflow_action_definition_ids = this.get('scope_workflow_action_definition_ids');
|
||||
get_offset_for_target = this.get('get_offset_for_target').bind(this);
|
||||
get_dynamic_offset_for_target = this.get('get_dynamic_offset_for_target').bind(this);
|
||||
resolve_level = this.get('iteration_context_counter');
|
||||
this.get('working_workflow_action_definitions').forEach(function(working_workflow_action_definition, working_index) {
|
||||
var date, farthest_absolute_value, farthest_absolute_value_value_shift, farthest_result_total_offset, record_wrapper, resolved_offset_wrappers;
|
||||
if (working_workflow_action_definition.get('offset_type') !== 'configured') {
|
||||
return;
|
||||
}
|
||||
farthest_absolute_value = 0;
|
||||
farthest_absolute_value_value_shift = 0;
|
||||
farthest_result_total_offset = 0;
|
||||
date = null;
|
||||
resolved_offset_wrappers = [];
|
||||
working_workflow_action_definition.get('workflow_action_offsets').forEach(function(workflow_action_offset) {
|
||||
var current_connection_absolute_value, current_connection_total_offset_value, current_connection_value_shift, offset_date, processed_absolute_value, processed_base_workflow_action_definition_wrapper, ref, ref1, ref2, working_offset_value;
|
||||
if (active_scenario_identifier && workflow_action_offset.get('project_scenario.identifier') && workflow_action_offset.get('project_scenario.identifier') !== active_scenario_identifier) {
|
||||
return;
|
||||
}
|
||||
if (ref = workflow_action_offset.get('base_workflow_action_definition.id'), indexOf.call(scope_workflow_action_definition_ids, ref) < 0) {
|
||||
return;
|
||||
}
|
||||
if (!(processed_base_workflow_action_definition_wrapper = processed_workflow_action_definitions.findBy('record_id', workflow_action_offset.get('base_workflow_action_definition.id')))) {
|
||||
return;
|
||||
}
|
||||
processed_absolute_value = processed_base_workflow_action_definition_wrapper.get('absolute_value');
|
||||
ref1 = get_offset_for_target(workflow_action_offset, processed_absolute_value), offset_date = ref1[0], working_offset_value = ref1[1];
|
||||
ref2 = get_dynamic_offset_for_target(workflow_action_offset, processed_absolute_value + working_offset_value), date = ref2[0], current_connection_value_shift = ref2[1];
|
||||
current_connection_total_offset_value = current_connection_value_shift + working_offset_value;
|
||||
current_connection_absolute_value = processed_absolute_value + current_connection_total_offset_value;
|
||||
if (Math.abs(current_connection_absolute_value) > Math.abs(farthest_absolute_value)) {
|
||||
farthest_absolute_value = current_connection_absolute_value;
|
||||
farthest_absolute_value_value_shift = current_connection_value_shift;
|
||||
farthest_result_total_offset = current_connection_total_offset_value;
|
||||
}
|
||||
return resolved_offset_wrappers.push(OffsetNode.create({
|
||||
record: workflow_action_offset,
|
||||
value_shift: current_connection_value_shift,
|
||||
total_offset: current_connection_total_offset_value,
|
||||
resulting_absolute_value: current_connection_absolute_value
|
||||
}));
|
||||
});
|
||||
if (resolved_offset_wrappers.length) {
|
||||
record_wrapper = RecordNode.create({
|
||||
record: working_workflow_action_definition,
|
||||
record_id: working_workflow_action_definition.get('id'),
|
||||
offset_wrappers: resolved_offset_wrappers,
|
||||
value_shift: farthest_absolute_value_value_shift,
|
||||
absolute_value: farthest_absolute_value,
|
||||
date: date,
|
||||
resolved: true,
|
||||
resolve_level: resolve_level,
|
||||
resolve_type: 'with-non-rooted-offsets'
|
||||
});
|
||||
processed_workflow_action_definitions.push(record_wrapper);
|
||||
return working_indices_to_be_removed.push(working_index);
|
||||
}
|
||||
});
|
||||
if (working_indices_to_be_removed.length) {
|
||||
while (working_indices_to_be_removed.length) {
|
||||
this.get('working_workflow_action_definitions').splice(working_indices_to_be_removed.pop(), 1);
|
||||
}
|
||||
return this.run_critical_path_resolve_loop();
|
||||
} else {
|
||||
return this.run_offset_forwarding_loop();
|
||||
}
|
||||
},
|
||||
run_offset_forwarding_loop: function() {
|
||||
var active_scenario_identifier, get_dynamic_offset_for_target, get_offset_for_target, processed_workflow_action_definitions, resolve_level, scope_workflow_action_definition_ids, working_indices_to_be_removed;
|
||||
working_indices_to_be_removed = [];
|
||||
active_scenario_identifier = this.get('active_project_scenario.identifier');
|
||||
processed_workflow_action_definitions = this.get('processed_workflow_action_definitions');
|
||||
scope_workflow_action_definition_ids = this.get('scope_workflow_action_definition_ids');
|
||||
get_offset_for_target = this.get('get_offset_for_target').bind(this);
|
||||
get_dynamic_offset_for_target = this.get('get_dynamic_offset_for_target').bind(this);
|
||||
resolve_level = this.get('iteration_context_counter');
|
||||
this.get('working_workflow_action_definitions').forEach(function(working_workflow_action_definition, working_index) {
|
||||
var date, farthest_absolute_value, farthest_absolute_value_value_shift, farthest_result_total_offset, record_wrapper, resolved_offset_wrappers;
|
||||
farthest_absolute_value = 0;
|
||||
farthest_absolute_value_value_shift = 0;
|
||||
farthest_result_total_offset = 0;
|
||||
date = null;
|
||||
resolved_offset_wrappers = [];
|
||||
working_workflow_action_definition.get('dependent_workflow_action_offsets').forEach(function(workflow_action_offset) {
|
||||
var current_connection_absolute_value, current_connection_total_offset_value, current_connection_value_shift, offset_date, processed_absolute_value, processed_base_workflow_action_definition_wrapper, ref, ref1, ref2, working_offset_value;
|
||||
if (active_scenario_identifier && workflow_action_offset.get('project_scenario.identifier') && workflow_action_offset.get('project_scenario.identifier') !== active_scenario_identifier) {
|
||||
return;
|
||||
}
|
||||
if (ref = workflow_action_offset.get('workflow_action_definition.id'), indexOf.call(scope_workflow_action_definition_ids, ref) < 0) {
|
||||
return;
|
||||
}
|
||||
if (!(processed_base_workflow_action_definition_wrapper = processed_workflow_action_definitions.findBy('record_id', workflow_action_offset.get('workflow_action_definition.id')))) {
|
||||
return;
|
||||
}
|
||||
processed_absolute_value = processed_base_workflow_action_definition_wrapper.get('absolute_value');
|
||||
ref1 = get_offset_for_target(workflow_action_offset, processed_absolute_value), offset_date = ref1[0], working_offset_value = ref1[1];
|
||||
ref2 = get_dynamic_offset_for_target(workflow_action_offset, processed_absolute_value + working_offset_value), date = ref2[0], current_connection_value_shift = ref2[1];
|
||||
current_connection_total_offset_value = current_connection_value_shift + working_offset_value;
|
||||
current_connection_absolute_value = processed_absolute_value - current_connection_total_offset_value;
|
||||
if (Math.abs(current_connection_absolute_value) > Math.abs(farthest_absolute_value)) {
|
||||
farthest_absolute_value = current_connection_absolute_value;
|
||||
farthest_absolute_value_value_shift = current_connection_value_shift;
|
||||
farthest_result_total_offset = current_connection_total_offset_value;
|
||||
}
|
||||
return resolved_offset_wrappers.push(OffsetNode.create({
|
||||
record: workflow_action_offset,
|
||||
value_shift: current_connection_value_shift,
|
||||
total_offset: current_connection_total_offset_value,
|
||||
resulting_absolute_value: current_connection_absolute_value
|
||||
}));
|
||||
});
|
||||
if (resolved_offset_wrappers.length) {
|
||||
record_wrapper = RecordNode.create({
|
||||
record: working_workflow_action_definition,
|
||||
record_id: working_workflow_action_definition.get('id'),
|
||||
offset_wrappers: resolved_offset_wrappers,
|
||||
value_shift: farthest_absolute_value_value_shift,
|
||||
absolute_value: farthest_absolute_value,
|
||||
date: date,
|
||||
resolved: true,
|
||||
resolve_level: resolve_level,
|
||||
resolve_type: 'offset-lookup-inversion'
|
||||
});
|
||||
processed_workflow_action_definitions.push(record_wrapper);
|
||||
return working_indices_to_be_removed.push(working_index);
|
||||
}
|
||||
});
|
||||
if (working_indices_to_be_removed.length) {
|
||||
while (working_indices_to_be_removed.length) {
|
||||
this.get('working_workflow_action_definitions').splice(working_indices_to_be_removed.pop(), 1);
|
||||
}
|
||||
return this.run_critical_path_resolve_loop();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export default WorkflowActionDefinitionOffsetNodes;
|
||||
Reference in New Issue
Block a user