Chrysostomos for scheduler
authorChrysostomos Kolovos <xrklvs@gmail.com>
Wed, 2 Apr 2014 17:24:47 +0000 (20:24 +0300)
committerChrysostomos Kolovos <xrklvs@gmail.com>
Wed, 2 Apr 2014 17:24:47 +0000 (20:24 +0300)
plugins/scheduler2/static/js/scheduler-helpers.js
plugins/scheduler2/static/js/scheduler2.js
plugins/scheduler2/templates/scheduler.html

index baddd8d..9a93d26 100755 (executable)
@@ -66,14 +66,38 @@ function schedulerGetLeases(slotSpan) {
     var d = new Date(2014, 1, 1, 0, 0, 0, 0);\r
     var i = 0;\r
     while (d.getDate() == 1) {\r
-        //var tmpTime = schedulerPadStr(d.getHours()) + schedulerPadStr(d.getMinutes());\r
-        slots.push({ id: i, status: getRandomStatus() });\r
+        //slots.push({ id: i, status: getRandomStatus() });\r
+        slots.push({ id: i, status: "free" });\r
         d = schedulerAddMinutes(d, slotSpan);\r
         i++;\r
     }\r
     return slots;\r
 }\r
 \r
+//\r
+//GetSlotId from time\r
+function schedulerGetSlotId(startTime, duration, granularity) {\r
+    startTime = parseInt(startTime);\r
+    var d = new Date(startTime * 1000);\r
+    var timespan = 60 / schedulerSlotsPerHour;\r
+    var slotid = 0;\r
+    slotid += d.getHours() * schedulerSlotsPerHour;\r
+    slotid += d.getMinutes() / timespan;\r
+    return slotid;\r
+}\r
+//\r
+//Find Resource By Id\r
+function schedulerFindResourceById(Resources, id) {\r
+\r
+    for (var i = 0, len = Resources.length; i < len; i++) {\r
+        if (Resources[i].id == id)\r
+            return Resources[i]; // Return as soon as the object is found\r
+    }\r
+    return null; // The object was not found\r
+}\r
+\r
+//\r
+//for testing\r
 function getRandomStatus() {\r
     var randint = Math.floor(Math.random() * (10 - 0 + 1) + 0);\r
     switch (randint) {\r
index 07c81aa..cf3742b 100755 (executable)
@@ -43,8 +43,12 @@ var SchedulerTotalCells;
 var SchedulerTotalVisibleCells;\r
 //Help Variables\r
 var _schedulerCurrentCellPosition = 0;\r
+var _leasesDone = false;\r
+var _resourcesDone = false;\r
 //Enable Debug\r
-var schedulerDebug = true;\r
+var schedulerDebug = false;\r
+//tmp to delete\r
+var tmpSchedulerLeases = [];\r
 \r
 (function ($) {\r
     var scheduler2 = Plugin.extend({\r
@@ -72,7 +76,7 @@ var schedulerDebug = true;
                     schedulerCtrlPressed = false;\r
                 }\r
             });\r
-            //$("#" + schedulerTblId).on('mousedown', 'td', rangeMouseDown).on('mouseup', 'td', rangeMouseUp).on('mousemove', 'td', rangeMouseMove);\r
+            $("#" + schedulerTblId).on('mousedown', 'td', rangeMouseDown).on('mouseup', 'td', rangeMouseUp).on('mousemove', 'td', rangeMouseMove);\r
 \r
             // Explain this will allow query events to be handled\r
             // What happens when we don't define some events ?\r
@@ -116,14 +120,14 @@ var schedulerDebug = true;
             //data is empty on load\r
         },\r
         on_all_resources_new_record: function (data) {\r
+            //alert(data.toSource());\r
             if (SchedulerData.length < schedulerMaxRows)\r
-                SchedulerData.push({ name: data.hrn, leases: schedulerGetLeases(schedulerSlotsPerHour), urn: data.urn, type: data.type });\r
+                SchedulerData.push({ id: data.urn, name: data.hrn, leases: schedulerGetLeases(60 / schedulerSlotsPerHour), type: data.type });\r
             //alert(data.toSource());\r
         },\r
         on_all_resources_query_done: function (data) {\r
-            /* GUI setup and event binding */\r
-            this._initUI();\r
-            //this.loadWithDate();\r
+            _resourcesDone = true;\r
+            this._initScheduler();\r
         },\r
         //another plugin has modified something, that requires you to update your display. \r
         on_all_resources_field_state_changed: function (data) {\r
@@ -133,8 +137,25 @@ var schedulerDebug = true;
         /* lease QUERY HANDLERS Start */\r
         on_lease_clear_records: function (data) { console.log('clear_records'); },\r
         on_lease_query_in_progress: function (data) { console.log('lease_query_in_progress'); },\r
-        on_lease_new_record: function (data) { alert(data.toSource()); console.log('lease_new_record'); },\r
-        on_lease_query_done: function (data) { console.log('lease_query_done'); },\r
+        on_lease_new_record: function (data) {\r
+            tmpSchedulerLeases.push({\r
+                id: schedulerGetSlotId(data.start_time, data.duration, data.granularity),\r
+                slice: data.slice,\r
+                status: 'reserved',\r
+                resource: data.resource,\r
+                network: data.network,\r
+                start_time: data.start_time,\r
+                lease_type: data.lease_type,\r
+                granularity: data.granularity,\r
+                duration: data.duration\r
+            });\r
+            //console.log(data.toSource()); console.log('lease_new_record');\r
+        },\r
+        on_lease_query_done: function (data) {\r
+            _leasesDone = true;\r
+            this._initScheduler();\r
+            // console.log('lease_query_done');\r
+        },\r
         //another plugin has modified something, that requires you to update your display. \r
         on_lease_field_state_changed: function (data) { console.log('lease_field_state_changed'); },\r
         /* lease QUERY HANDLERS End */\r
@@ -160,7 +181,16 @@ var schedulerDebug = true;
         },\r
 \r
         /* INTERNAL FUNCTIONS */\r
-        _initUI: function () {\r
+        _initScheduler: function () {\r
+            if (_resourcesDone && _leasesDone)\r
+            {\r
+                /* GUI setup and event binding */\r
+                this._FixLeases();\r
+                this._initUI();\r
+            }\r
+        },\r
+\r
+        _initUI : function () {\r
             if (schedulerDebug) console.time("_initUI");\r
             //init DatePicker Start\r
             $("#DateToRes").datepicker({\r
@@ -200,6 +230,18 @@ var schedulerDebug = true;
             //$("#" + schedulerTblId + " td:not([class])").addClass("free");\r
             if (schedulerDebug) console.timeEnd("_initUI");\r
         },\r
+\r
+        _FixLeases  : function () {\r
+            for (var i = 0; i < tmpSchedulerLeases.length; i++) {\r
+                var tmpLea = tmpSchedulerLeases[i];\r
+                var tmpRes = schedulerFindResourceById(SchedulerData, tmpLea.resource);\r
+                if (tmpRes != null) {\r
+                    alert(tmpLea.id + '-' + tmpLea.start_time);\r
+                    tmpRes.leases[tmpLea.id] = tmpLea;\r
+                }\r
+            }\r
+        },\r
+\r
         _FixTable: function () {\r
             var colWidth = 50;\r
             SchedulerTotalCells = SchedulerSlots.length;\r
@@ -208,13 +250,13 @@ var schedulerDebug = true;
             var tblwidth = $('#scheduler-tab').parent().outerWidth();\r
             SchedulerTotalVisibleCells = parseInt((tblwidth - schedulerTblFirstColWidth) / colWidth);\r
 \r
-            if (SchedulerData.length == 0) {\r
-                //puth some test data\r
-                SchedulerData.push({ name: 'xyz+aaa', leases: schedulerGetLeases(60 / schedulerSlotsPerHour), urn: 'xyz+aaa', type: 'node' });\r
-                SchedulerData.push({ name: 'xyz+bbb', leases: schedulerGetLeases(60 / schedulerSlotsPerHour), urn: 'xyz+bbb', type: 'node' });\r
-                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
+            //if (SchedulerData.length == 0) {\r
+            //    //puth some test data\r
+            //    SchedulerData.push({ name: 'xyz+aaa', leases: schedulerGetLeases(60 / schedulerSlotsPerHour), urn: 'xyz+aaa', type: 'node' });\r
+            //    SchedulerData.push({ name: 'xyz+bbb', leases: schedulerGetLeases(60 / schedulerSlotsPerHour), urn: 'xyz+bbb', type: 'node' });\r
+            //    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
         },\r
         _SetPeriodInPage: function (start, end) {\r
index d32a565..4e58fcd 100755 (executable)
                 <thead>\r
                     <tr>\r
                         <th>#</th>\r
-                        <th ng-repeat="slot in slots">\r
+                        <th ng-repeat="slot in slots" >\r
                             {[{ slot.time }]}\r
                         </th>\r
                     </tr>\r
                 </thead>\r
                 <tbody>\r
                     <tr ng-repeat="resource in resources" ng-class-odd="''" ng-class-even="'even'">\r
-                        <th>{[{ resource.name }]}</th>\r
+                        <th data-resourceid="{[{ resource.id }]}">{[{ resource.name }]}</th>\r
                         <td ng-repeat="lease in resource.leases" data-slotid="{[{ lease.id }]}" ng-class="{{ 'lease.status' }}"></td>\r
                     </tr>\r
                 </tbody>\r