Commit 1ea9782c authored by Jérome Perrin's avatar Jérome Perrin

update static version

parent ad912437
......@@ -22,8 +22,8 @@
_id: gadget.props.jio_key,
_attachment: "body.json"
}).push(function(result_json) {
var jsonTextArea = gadget.props.element.querySelector(".json"), document = JSON.parse(result_json);
jsonTextArea.textContent = JSON.stringify(document, undefined, " ");
var jsonTextArea = gadget.props.element.querySelector(".json");
jsonTextArea.textContent = result_json;
gadget.props.codemirror = CodeMirror.fromTextArea(jsonTextArea, {
lineNumbers: true,
mode: {
......
......@@ -3,188 +3,63 @@
/*jslint nomen: true, unparam: true */
(function(window, rJS, RSVP, $, gantt, initGadgetMixin) {
"use strict";
gantt.templates.task_class = function(start, end, obj) {
return obj.parent ? "sub_task" : "";
};
function gantt_widget(all_data, gadget) {
// XXX: use dhx_gantt zoom level feature (
// http://dhtmlx.com/docs/products/dhtmlxGantt/02_features.html )
var now = new Date(), start_date = all_data.general.currentDate, input_data = all_data.input, graph_data = all_data.graph, output_data = all_data.result.result_list[gadget.props.result], config = all_data.application_configuration.output[gadget.props.action].configuration, gantt_data;
// temporary hack
now.setHours(0);
now.setMinutes(0);
now.setSeconds(0);
if (start_date !== undefined && start_date !== "") {
start_date = new Date(start_date);
} else {
start_date = new Date(now.getTime());
}
gantt_data = {
data: [ {
id: "by_operator",
text: "By Operator",
start_date: start_date,
duration: 0,
project: 1,
open: true
}, {
id: "by_station",
text: "By Station",
start_date: start_date,
duration: 0,
project: 1,
open: true
} ],
link: []
};
console.log("gantt gadget method");
console.log(config);
console.log(input_data);
console.log(graph_data);
console.log(output_data);
function isVisibleStation(station) {
var i;
// we should be able to define in the backend which
// station is visible
for (i = 0; i <= output_data.elementList.length - 1; i += 1) {
if (output_data.elementList[i].id === station) {
return output_data.elementList[i].family !== "Buffer" && output_data.elementList[i].family !== "Exit" && output_data.elementList[i].family !== "Operator" && output_data.elementList[i].family !== "Entry";
}
}
}
$.each(output_data.elementList.sort(function(a, b) {
return a.id < b.id ? -1 : 1;
}), function(idx, obj) {
var duration = 0;
if (obj.family === "Operator") {
gantt_data.data.push({
id: obj.id,
text: obj.id,
project: 1,
open: false,
parent: "by_operator"
});
console.log("operator");
console.log(obj.id);
if (obj.results.schedule) {
$.each(obj.results.schedule, function(i, schedule) {
var task_start_date;
// Filter intermediate steps in part job shop
if (isVisibleStation(schedule.stationId)) {
if (schedule.exitTime) {
duration = 24 * (schedule.exitTime - schedule.entranceTime);
} else {
if (obj.results.schedule[i + 1]) {
duration = obj.results.schedule[i + 1].entranceTime - schedule.entranceTime;
} else {
// XXX completion time not provided
duration = obj.results.completionTime - schedule.entranceTime;
}
}
if (duration > 0) {
console.log("..");
console.log("step");
console.log(i);
console.log("duration");
console.log(duration);
task_start_date = new Date(start_date.getTime());
// for simulation time unit as days
// task_start_date.setDate(task_start_date.getDate() +
// schedule['entranceTime']);
// for simulation time unit as days hours
task_start_date.setTime(task_start_date.getTime() + schedule.entranceTime * 1e3 * 60);
console.log("start date");
console.log(task_start_date);
console.log(schedule.entranceTime);
console.log(schedule.entranceTime * 1e3 * 60);
gantt_data.data.push({
id: obj.id + "." + schedule.stationId + "." + i,
text: schedule.stationId,
start_date: task_start_date,
duration: duration,
parent: obj.id
});
gantt_data.data.push({
id: "operator." + obj.id + "." + idx + "_" + i,
text: obj.id + "-" + schedule.stationId,
start_date: task_start_date,
duration: duration,
parent: schedule.stationId,
by_station: 1
});
}
}
});
}
} else {
if (isVisibleStation(obj.id)) {
gantt_data.data.push({
id: obj.id,
text: obj.id,
project: 1,
open: false,
parent: "by_station"
});
}
}
});
// gantt_output_height = 35 * (gantt_data.data.length + 1) + 1;
gantt_data.data.sort(function(a, b) {
// sort gantt data in a chronological order
var result;
if (a.start_date === undefined && b.start_date !== undefined) {
result = 1;
} else if (a.start_date !== undefined && b.start_date === undefined) {
result = -1;
} else if (a.start_date === undefined && b.start_date === undefined) {
result = 0;
} else if (a.start_date > b.start_date) {
result = 1;
} else if (a.start_date < b.start_date) {
result = -1;
} else {
result = 0;
}
return result;
});
console.log("Returning the Gantt Data");
console.log(gantt_data);
return gantt_data;
}
/*
GANTT widget
Gantt expect data in the following format:
time_unit: one of minute, hour, day, week, month or year
task_list: [
{
id: "project_1", # an unique id, different than "0" which is a reserved id
text: "First Project", # the text to display
start_date: '2015-03-02 08:54',
# The date in '%d-%m-%Y %H:%M' format, optionnal for projects
# XXX it would be better to use ISO8601 / http://www.w3.org/TR/NOTE-datetime
duration: 100, # the duration in time unit, optionnal for projects
type: 'project',
open: true
},
{
id: "project_1_task_1",
text: "A Task",
start_date: start_date,
stop_date: stop_date,
duration: 100,
parent: "project_1", # id of the parent
open: false
}
]
XXX both stop & start date are required for compatibility with dxhtmlscheduler
TODOs:
- make a really reusable gadget
- handle links (prerequisites)
*/
var gadget_klass = rJS(window);
initGadgetMixin(gadget_klass);
gadget_klass.declareAcquiredMethod("aq_getAttachment", "jio_getAttachment").declareMethod("render", function(options) {
var jio_key = options.id, gadget = this;
gadget.props.jio_key = jio_key;
gadget.props.result = options.result;
gadget.props.action = options.action;
return gadget.aq_getAttachment({
_id: gadget.props.jio_key,
_attachment: "body.json"
}).push(function(simulation_json) {
var json_data = JSON.parse(simulation_json);
gadget.props.result = gantt_widget(json_data, gadget);
gadget.props.result = json_data.result.result_list[options.result][options.action_definition.configuration.output_id];
});
}).declareMethod("startService", function() {
$(this.props.element).find(".gant_container").dhx_gantt({
data: this.props.result,
readonly: true,
/* for days has simulation time unit
scale_unit: 'day',
step: 7
*/
// for hours has simulation time unit
scale_unit: "day",
duration_unit: 60 * 1e3,
// date_grid: "%H:%i",
date_scale: "%M/%d",
step: 1,
subscales: [ {
unit: "hour",
step: 1,
date: "%H:%i"
} ]
});
var gantt_tasks = {
data: this.props.result.task_list,
links: []
};
gantt.config.duration_unit = this.props.result.time_unit;
gantt.init($(this.props.element).find(".gant_container")[0]);
gantt.parse(gantt_tasks);
return new RSVP.Queue().push(function() {
// Infinite wait, until cancelled
return new RSVP.defer().promise;
......
......@@ -258,7 +258,20 @@
}).push(function(result) {
var data;
if (result) {
data = JSON.parse(result);
try {
data = JSON.parse(result);
} catch (error) {
portal_type = "Input";
options.action = "debug";
portal_types.Input = {
debug: {
gadget: "Input_viewDebugJson",
type: "object_view",
title: "Emergency Mode, JSON cannot be parsed"
}
};
return gadget.declareGadget("Input_viewDebugJson.html");
}
gadget.props.data = data;
portal_types.Input = data.application_configuration.input;
portal_types.Output = data.application_configuration.output;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment