Chrysostomos for scheduler
[myslice.git] / plugins / scheduler2 / static / js / scheduler2.js
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