Chrysostomos for scheduler
[unfold.git] / plugins / scheduler2 / static / js / scheduler2.js
index 4fe2feb..8c4c49f 100755 (executable)
@@ -34,7 +34,7 @@ var schedulerTblId = "scheduler-reservation-table";
 var schedulerTblFirstColWidth = 150;\r
 //Some Data\r
 var schedulerSlotsPerHour = 6;\r
-var schedulerMaxRows = 25;\r
+var schedulerMaxRows = 12;\r
 var SchedulerData = [];\r
 var SchedulerSlots = [];\r
 var SchedulerDataViewData = [];\r
@@ -46,7 +46,7 @@ var _schedulerCurrentCellPosition = 0;
 var _leasesDone = false;\r
 var _resourcesDone = false;\r
 //Enable Debug\r
-var schedulerDebug = false;\r
+var schedulerDebug = true;\r
 //tmp to delete\r
 var tmpSchedulerLeases = [];\r
 \r
@@ -64,6 +64,9 @@ var tmpSchedulerLeases = [];
             this.classname="scheduler2";\r
             // Call the parent constructor, see FAQ when forgotten\r
             this._super(options, element);\r
+            // We need to remember the active filter for datatables filtering
+            this.filters = Array();\r
+\r
 \r
             SchedulerSlots = schedulerGetSlots(60/schedulerSlotsPerHour);\r
             //selection from table \r
@@ -84,7 +87,9 @@ var tmpSchedulerLeases = [];
 \r
             if (schedulerDebug) console.time("Listening_to_queries");\r
             /* Listening to queries */\r
-            this.listen_query(options.query_uuid, 'all_ev');\r
+
+            this.listen_query(options.query_uuid);
+            this.listen_query(options.query_all_uuid, 'all');\r
             this.listen_query(options.query_all_resources_uuid, 'all_resources');\r
             this.listen_query(options.query_lease_uuid, 'lease');\r
             //this.listen_query(options.query_lease_uuid, 'lease');\r
@@ -121,9 +126,22 @@ var tmpSchedulerLeases = [];
         },\r
         on_all_resources_new_record: function (data) {\r
             //alert(data.toSource());\r
-            if (SchedulerData.length < schedulerMaxRows)\r
-                SchedulerData.push({ id: data.urn, index: SchedulerData.length, name: data.hrn, granularity: data.granularity, leases: schedulerGetLeases(60 / schedulerSlotsPerHour), type: data.type });\r
+            if (data.exclusive == true){\r
+                SchedulerData.push({\r
+                    id: data.urn,\r
+                    index: SchedulerData.length,\r
+                    name: data.hrn,\r
+                    granularity: data.granularity,\r
+                    leases: schedulerGetLeases(60 / schedulerSlotsPerHour),\r
+                    type: data.type,\r
+                    org_resource: data\r
+                });\r
+                if (schedulerDebug && SchedulerData[SchedulerData.length - 1].org_resource.network_hrn == 'omf') {\r
+                    SchedulerData[SchedulerData.length - 1].granularity = 30;\r
+                }\r
+            }\r
             //alert(data.toSource());\r
+\r
         },\r
         on_all_resources_query_done: function (data) {\r
             _resourcesDone = true;\r
@@ -144,7 +162,8 @@ var tmpSchedulerLeases = [];
                 status: 'reserved',\r
                 resource: data.resource,\r
                 network: data.network,\r
-                start_time: data.start_time,\r
+                start_time: new Date(data.start_time * 1000),\r
+                start_time_unixtimestamp: data.start_time,\r
                 lease_type: data.lease_type,\r
                 granularity: data.granularity,\r
                 duration: data.duration\r
@@ -162,9 +181,55 @@ var tmpSchedulerLeases = [];
 \r
 \r
         // no prefix\r
-\r
         on_filter_added: function (filter) {\r
-\r
+            this.filters.push(filter);\r
+            this._SetFiletredResources(this.filters);\r
+            //angular and UI\r
+            var tmpScope = angular.element(document.getElementById('SchedulerCtrl')).scope();\r
+            if (SchedulerDataViewData.length == 0) {\r
+                $("#plugin-scheduler").hide();\r
+                $("#plugin-scheduler-empty").show();\r
+                tmpScope.clearStuff();\r
+            } else {\r
+                $("#plugin-scheduler-empty").hide();\r
+                $("#plugin-scheduler").show();\r
+                tmpScope.initSchedulerResources(schedulerMaxRows < SchedulerDataViewData.length ? schedulerMaxRows : SchedulerDataViewData.length);\r
+            }\r
+        },
+
+        on_filter_removed: function (filter) {
+            // Remove corresponding filters
+            this.filters = $.grep(this.filters, function (x) {\r
+                return x == filter;\r
+            });\r
+            this._SetFiletredResources(this.filters);\r
+            //angular and UI\r
+            var tmpScope = angular.element(document.getElementById('SchedulerCtrl')).scope();\r
+            if (SchedulerDataViewData.length == 0) {\r
+                $("#plugin-scheduler").hide();\r
+                $("#plugin-scheduler-empty").show();\r
+                tmpScope.clearStuff();\r
+            } else {\r
+                $("#plugin-scheduler-empty").hide();\r
+                $("#plugin-scheduler").show();\r
+                tmpScope.initSchedulerResources(schedulerMaxRows < SchedulerDataViewData.length ? schedulerMaxRows : SchedulerDataViewData.length);\r
+            }\r
+        },
+
+        on_filter_clear: function () {\r
+            this.filters = [];\r
+            this._SetFiletredResources(this.filters);\r
+            //angular and UI\r
+            var tmpScope = angular.element(document.getElementById('SchedulerCtrl')).scope();\r
+            if (SchedulerDataViewData.length == 0) {\r
+                $("#plugin-scheduler").hide();\r
+                $("#plugin-scheduler-empty").show();\r
+                tmpScope.clearStuff();\r
+            } else {\r
+                $("#plugin-scheduler-empty").hide();\r
+                $("#plugin-scheduler").show();\r
+                tmpScope.initSchedulerResources(schedulerMaxRows < SchedulerDataViewData.length ? schedulerMaxRows : SchedulerDataViewData.length);\r
+            }\r
         },\r
 \r
         // ... be sure to list all events here\r
@@ -184,13 +249,15 @@ var tmpSchedulerLeases = [];
         _initScheduler: function () {\r
             if (_resourcesDone && _leasesDone)\r
             {\r
+                SchedulerDataViewData = SchedulerData;\r
                 /* GUI setup and event binding */\r
                 this._FixLeases();\r
                 this._initUI();\r
             }\r
         },\r
 \r
-        _initUI : function () {\r
+        _initUI: function () {\r
+            //alert(1);\r
             if (schedulerDebug) console.time("_initUI");\r
             //init DatePicker Start\r
             $("#DateToRes").datepicker({\r
@@ -211,15 +278,18 @@ var tmpSchedulerLeases = [];
             //init Slider\r
             $('#tblSlider').slider({\r
                 min: 0,\r
-                max: SchedulerTotalCells - SchedulerTotalVisibleCells - 1,\r
+                max: SchedulerTotalCells - SchedulerTotalVisibleCells,\r
                 value: 0,\r
                 slide: function (event, ui) {\r
                     //$("#amount").val("$" + ui.values[0] + " - $" + ui.values[1]);\r
                     //console.log(ui.value);\r
-                    if (_schedulerCurrentCellPosition > ui.value)\r
-                        angular.element(document.getElementById('SchedulerCtrl')).scope().moveBackSlot(ui.value, ui.value + SchedulerTotalVisibleCells);\r
-                    else if (_schedulerCurrentCellPosition < ui.value)\r
-                        angular.element(document.getElementById('SchedulerCtrl')).scope().moveFrontSlot(ui.value, ui.value + SchedulerTotalVisibleCells);\r
+                    var angScope = angular.element(document.getElementById('SchedulerCtrl')).scope();\r
+                    if (_schedulerCurrentCellPosition > ui.value) {\r
+                        angScope.moveBackSlot(ui.value, ui.value + SchedulerTotalVisibleCells);\r
+                    }\r
+                    else if (_schedulerCurrentCellPosition < ui.value) {\r
+                        angScope.moveFrontSlot(ui.value, ui.value + SchedulerTotalVisibleCells);\r
+                    }\r
                     _schedulerCurrentCellPosition = ui.value;\r
                 }\r
             });\r
@@ -247,7 +317,7 @@ var tmpSchedulerLeases = [];
         _FixTable: function () {\r
             var colWidth = 50;\r
             SchedulerTotalCells = SchedulerSlots.length;\r
-            $('#' + schedulerTblId + ' thead tr th:eq(0)').css("width", schedulerTblFirstColWidth);\r
+            $('#' + schedulerTblId + ' thead tr th:eq(0)').css("width", schedulerTblFirstColWidth); //.css("display", "block");\r
             //this get width might need fix depending on the template \r
             var tblwidth = $('#scheduler-tab').parent().outerWidth();\r
             SchedulerTotalVisibleCells = parseInt((tblwidth - schedulerTblFirstColWidth) / colWidth);\r
@@ -259,8 +329,58 @@ var tmpSchedulerLeases = [];
             //    SchedulerData.push({ name: 'xyz+ccc', leases: schedulerGetLeases(60 / schedulerSlotsPerHour), urn: 'xyz+ccc', type: 'node' });\r
             //    SchedulerData.push({ name: 'nitos1', leases: schedulerGetLeases(60 / schedulerSlotsPerHour), urn: 'nitos1', type: 'node' });\r
             //}\r
-            angular.element(document.getElementById('SchedulerCtrl')).scope().initSlots(0, SchedulerTotalVisibleCells);\r
+            var tmpScope = angular.element(document.getElementById('SchedulerCtrl')).scope();\r
+            tmpScope.initSchedulerResources(schedulerMaxRows < SchedulerDataViewData.length ? schedulerMaxRows : SchedulerDataViewData.length);\r
+\r
         },\r
+\r
+        _SetFiletredResources : function (filters) {\r
+            if (filters.length > 0) {\r
+                SchedulerDataViewData = new Array();\r
+                var tmpAddIt = true;\r
+                for (var i = 0; i < SchedulerData.length; i++) {\r
+                    loopfilters:\r
+                    for (var f = 0; f < filters.length; f++) {\r
+                        tmpAddIt = this._FilterResource(SchedulerData[i], filters[f]);\r
+                        if (tmpAddIt == false) break loopfilters;\r
+                    }\r
+                    if (tmpAddIt) {\r
+                        SchedulerDataViewData.push(SchedulerData[i]);\r
+                    }\r
+                }\r
+            } else {\r
+                SchedulerDataViewData = SchedulerData;\r
+            }\r
+        },\r
+\r
+        _FilterResource: function (resource, filter) {\r
+            var key = filter[0];\r
+            var op = filter[1];\r
+            var value = filter[2];\r
+            var colValue = resource.org_resource[key];\r
+            var ret = true;\r
+            if (schedulerDebug &&  colValue == 'omf') colValue = 'nitos';\r
+\r
+            if (op == '=' || op == '==') {\r
+                if (colValue != value || colValue == null || colValue == "" || colValue == "n/a")
+                    ret = false;\r
+            } else if (op == 'included') {\r
+                $.each(value, function (i, x) {\r
+                    if (x == colValue) {\r
+                        ret = true;\r
+                        return false;\r
+                    } else {\r
+                        ret = false;\r
+                    }\r
+                });\r
+            } else if (op == '!=') {\r
+                if (colValue == value || colValue == null || colValue == "" || colValue == "n/a")
+                    ret = false;\r
+            }\r
+\r
+            return ret;\r
+        },\r
+\r
         _SetPeriodInPage: function (start, end) {\r
         }\r
     });\r