Chrysostomos for scheduler
authorChrysostomos Kolovos <xrklvs@gmail.com>
Fri, 2 May 2014 18:46:26 +0000 (21:46 +0300)
committerChrysostomos Kolovos <xrklvs@gmail.com>
Fri, 2 May 2014 18:46:26 +0000 (21:46 +0300)
plugins/scheduler2/static/js/scheduler-SchedulerCtrl.js
plugins/scheduler2/static/js/scheduler-helpers.js
plugins/scheduler2/static/js/scheduler2.js

index 90288ab..d89d8c0 100755 (executable)
@@ -75,6 +75,9 @@ myApp.factory('$exceptionHandler', function () {
                 $scope.resources[j].leases = [];\r
                 j++;\r
             }\r
+            //fix slider\r
+            $('#tblSlider').slider('value', 0);\r
+            //init Slots\r
             $scope.initSlots(0, SchedulerTotalVisibleCells);\r
         };\r
 \r
index 54c665f..5de21cb 100755 (executable)
@@ -60,15 +60,22 @@ function schedulerGetSlots(slotSpan) {
     return slots;\r
 }\r
 \r
-function schedulerGetLeases(slotSpan) {\r
+function schedulerGetLeases(slotSpan, granularity) {\r
     if (slotSpan == 0) slotSpan = 10;\r
     var slots = [];\r
     var d = new Date(2014, 1, 1, 0, 0, 0, 0);\r
-    var i = 0;\r
+    var i = 0; var j = 0; var g = 0;\r
+    var maxg = granularity / slotSpan;\r
     while (d.getDate() == 1) {\r
         //slots.push({ id: i, status: getRandomStatus() });\r
-        slots.push({ id: i, status: "free" });\r
+        slots.push({ id: i, status: "free", groupid: j, groupIndex: g });\r
         d = schedulerAddMinutes(d, slotSpan);\r
+        //fix counters\r
+        g++;\r
+        if (maxg == g) {\r
+            g = 0;\r
+            j++;\r
+        }\r
         i++;\r
     }\r
     return slots;\r
@@ -122,4 +129,17 @@ function schedulerPadStr(i) {
 \r
 function schedulerAddMinutes(date, minutes) {\r
     return new Date(date.getTime() + minutes * 60000);\r
+}\r
+\r
+function schedulerCompareOnDay(dateOne, dateTwo) {\r
+    if (dateOne.getYear() == dateTwo.getYear() &&\r
+        dateOne.getMonth() == dateTwo.getMonth() &&\r
+        dateOne.getDate() == dateTwo.getDate()) {\r
+        return 0;\r
+    } else if (dateOne > dateTwo) {\r
+        return -1;\r
+    } else {\r
+        return 0;\r
+    }\r
+\r
 }
\ No newline at end of file
index 8c4c49f..8f786de 100755 (executable)
@@ -27,6 +27,8 @@
 */\r
 \r
 /* some params */\r
+var scheduler2;\r
+var scheduler2Instance;\r
 //is ctrl keyboard button pressed\r
 var schedulerCtrlPressed = false;\r
 //table Id\r
@@ -37,6 +39,7 @@ var schedulerSlotsPerHour = 6;
 var schedulerMaxRows = 12;\r
 var SchedulerData = [];\r
 var SchedulerSlots = [];\r
+var SchedulerDateSelected = new Date();\r
 var SchedulerDataViewData = [];\r
 var SchedulerSlotsViewData = [];\r
 var SchedulerTotalCells;\r
@@ -51,7 +54,7 @@ var schedulerDebug = true;
 var tmpSchedulerLeases = [];\r
 \r
 (function ($) {\r
-    var scheduler2 = Plugin.extend({\r
+    scheduler2 = Plugin.extend({\r
 \r
         /** XXX to check\r
          * @brief Plugin constructor\r
@@ -64,6 +67,7 @@ var tmpSchedulerLeases = [];
             this.classname="scheduler2";\r
             // Call the parent constructor, see FAQ when forgotten\r
             this._super(options, element);\r
+            scheduler2Instance = this;\r
             // We need to remember the active filter for datatables filtering
             this.filters = Array();\r
 \r
@@ -132,12 +136,12 @@ var tmpSchedulerLeases = [];
                     index: SchedulerData.length,\r
                     name: data.hrn,\r
                     granularity: data.granularity,\r
-                    leases: schedulerGetLeases(60 / schedulerSlotsPerHour),\r
+                    leases: schedulerGetLeases(60 / schedulerSlotsPerHour, data.granularity),\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
+                    SchedulerData[SchedulerData.length - 1].granularity = 1800;\r
                 }\r
             }\r
             //alert(data.toSource());\r
@@ -156,18 +160,23 @@ var tmpSchedulerLeases = [];
         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) {\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: 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
-            });\r
+            if (data.resource.indexOf("nitos")>-1){\r
+                tmpSchedulerLeases.push({\r
+                    id: schedulerGetSlotId(data.start_time, data.duration, data.granularity),\r
+                    end_id: schedulerGetSlotId(data.end_time, data.duration, data.granularity),\r
+                    slice: data.slice,\r
+                    status: 'reserved',\r
+                    resource: data.resource,\r
+                    network: data.network,\r
+                    start_time: new Date(data.start_time * 1000),\r
+                    start_time_unixtimestamp: data.start_time,\r
+                    end_time: new Date(data.end_time * 1000),\r
+                    end_time_unixtimestamp: data.end_time,\r
+                    lease_type: data.lease_type,\r
+                    granularity: data.granularity,\r
+                    duration: data.duration\r
+                });\r
+            }\r
             //console.log(data.toSource()); console.log('lease_new_record');\r
         },\r
         on_lease_query_done: function (data) {\r
@@ -266,9 +275,22 @@ var tmpSchedulerLeases = [];
                 numberOfMonths: 3\r
             }).change(function () {\r
                 //Scheduler2.loadWithDate();\r
-            }).click(function () {\r
+                SchedulerDateSelected = $("#DateToRes").datepicker("getDate");\r
+                if (SchedulerDateSelected != null && SchedulerDateSelected != '') {\r
+                    for (var i=0; i < SchedulerData.length; i++) {\r
+                        SchedulerData[i].leases = schedulerGetLeases(60 / schedulerSlotsPerHour, SchedulerData[i].granularity);\r
+                    }\r
+                    scheduler2Instance._FixLeases();\r
+                    $('#tblSlider').slider('value', 0);\r
+                    var tmpScope = angular.element(document.getElementById('SchedulerCtrl')).scope();\r
+                    tmpScope.initSchedulerResources(schedulerMaxRows < SchedulerDataViewData.length ? schedulerMaxRows : SchedulerDataViewData.length);\r
+                } else {\r
+                    alert("Please select a date, so the scheduler can reserve leases.");\r
+                }\r
+            }).datepicker('setDate', SchedulerDateSelected);\r
+            /*.click(function () {\r
                 $("#ui-datepicker-div").css("z-index", 5);\r
-            });\r
+            })*/\r
             //End init DatePicker\r
             \r
             //init Table\r
@@ -306,14 +328,57 @@ var tmpSchedulerLeases = [];
         _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
+                if ((schedulerCompareOnDay(tmpLea.start_time, SchedulerDateSelected) == 0) ||\r
+                                (tmpLea.start_time <= SchedulerDateSelected && SchedulerDateSelected <= tmpLea.end_time) || \r
+                                (schedulerCompareOnDay(tmpLea.end_time, SchedulerDateSelected) == 0)) {\r
+                    var tmpRes = schedulerFindResourceById(SchedulerData, tmpLea.resource);\r
+                    if (tmpRes != null) {\r
+                        //Replace Lease with current lease from the manifold\r
+                        var orgLease = tmpRes.leases[tmpLea.id];\r
+                        tmpLea['groupid'] = orgLease.groupid;\r
+                        tmpLea['groupIndex'] = orgLease.groupIndex;\r
+                        if (orgLease.groupIndex != 0) {\r
+                            if (!window.console) {\r
+                                console.warn('there is an error with the leases of the resource :' + tmpRes.name + '\n The lease start in the middle of the granularity!' + '\n The Scheduler plugin might not work!');\r
+                            }\r
+                        }\r
+                        tmpRes.leases[tmpLea.id] = tmpLea;\r
+                        this._ExtractLeaseSlots(tmpRes, tmpRes.leases[tmpLea.id]);\r
+                    }\r
                 }\r
             }\r
         },\r
 \r
+        _ExtractLeaseSlots: function (tmpRes, lease) {\r
+            var tmpStartDate = lease.start_time;\r
+            var tmpEndDate = lease.end_time;\r
+            var startLoop; var toLoop;\r
+            if (schedulerCompareOnDay(lease.start_time,lease.end_time) == 0) {\r
+                //in the same date\r
+                startLoop = lease.id;\r
+                toLoop = lease.end_id;\r
+            } else if (lease.start_time < SchedulerDateSelected && SchedulerDateSelected < lease.end_time) {\r
+                //one hole day (more than 3days)\r
+                startLoop = 0;\r
+                toLoop = tmpRes.leases.length;\r
+            } else if (schedulerCompareOnDay(lease.start_time, SchedulerDateSelected) == 0) {\r
+                //the same day and extends\r
+                startLoop = lease.id;\r
+                toLoop = tmpRes.leases.length;\r
+            } else if (schedulerCompareOnDay(lease.end_time, SchedulerDateSelected) == 0) {\r
+                //extends to the last say\r
+                startLoop = 0;\r
+                toLoop = lease.end_id;\r
+            }\r
+            //var minutGran = tmpRes.granularity * 60;\r
+            for (var li = lease.id; li < toLoop; li++) {\r
+                tmpRes.leases[li].status = 'reserved';\r
+            }\r
+            \r
+            //reserved\r
+            //tmpRes.leases[tmpLea.id\r
+        },\r
+\r
         _FixTable: function () {\r
             var colWidth = 50;\r
             SchedulerTotalCells = SchedulerSlots.length;\r