X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=plugins%2Fscheduler2%2Fstatic%2Fjs%2Fscheduler2.js;h=0b294b472596bfe615320ae8f2f1fe5607a8eaac;hb=d10d7628b324f5be7489da58ed4d34aa5e6eb2a4;hp=862b8a7b2ce20ad3b294c97f5cb474af5599f6dc;hpb=2a9587298ad16d058568d06e82affd8d0b042988;p=unfold.git diff --git a/plugins/scheduler2/static/js/scheduler2.js b/plugins/scheduler2/static/js/scheduler2.js index 862b8a7b..0b294b47 100755 --- a/plugins/scheduler2/static/js/scheduler2.js +++ b/plugins/scheduler2/static/js/scheduler2.js @@ -313,7 +313,7 @@ var SCHEDULER_COLWIDTH = 50; } $scope._create_new_lease(model_resource.urn, start_time, end_time); - model_lease.status = (model_lease.status == 'free') ? 'pendingin' : 'in'; + model_lease.status = (model_lease.status == 'free') ? 'pendingin' : 'selected'; // unless the exact same lease already existed (pending_out status for the lease, not the cell !!) break; @@ -495,6 +495,7 @@ var SCHEDULER_COLWIDTH = 50; do_resize: function() { var scope = this._get_scope(); + var num_hidden_cells, new_max; $('#' + schedulerTblId + ' thead tr th:eq(0)').css("width", SCHEDULER_FIRST_COLWIDTH); //self get width might need fix depending on the template @@ -511,12 +512,15 @@ var SCHEDULER_COLWIDTH = 50; scope.lcm_colspan = this._lcm_colspan; // Slider max value - if ($('#tblSlider').data('slider') != undefined) { - var new_max = (this._all_slots.length - this._num_visible_cells) / this._lcm_colspan; - $('#tblSlider').slider('setAttribute', 'max', new_max); + num_hidden_cells = this._all_slots.length - this._num_visible_cells; + + $('#tblSlider').slider('setAttribute', 'max', num_hidden_cells); + $('#tblSlider').slider('setValue', scope.from, true); + this._get_scope().$apply(); } + }, on_show: function(e) @@ -567,18 +571,23 @@ var SCHEDULER_COLWIDTH = 50; _scope_clear_leases: function() { + var time, now; var self = this; var scope = this._get_scope(); + now = new Date().getTime(); + // Setup leases with a default free status... $.each(this.scope_resources_by_key, function(resource_key, resource) { resource.leases = []; var colspan_lease = resource.granularity / self._granularity; //eg. 3600 / 1800 => 2 cells + time = SchedulerDateSelected.getTime(); for (i=0; i < self._all_slots.length / colspan_lease; i++) { // divide by granularity resource.leases.push({ id: 'coucou', - status: 'free', // 'selected', 'reserved', 'maintenance' XXX pending ?? + status: (time < now) ? 'disabled': 'free', // 'selected', 'reserved', 'maintenance' XXX pending ?? }); + time += resource.granularity * 1000; } }); @@ -586,21 +595,35 @@ var SCHEDULER_COLWIDTH = 50; _scope_set_leases: function() { + var status; var self = this; var scope = this._get_scope(); manifold.query_store.iter_records(this.options.query_lease_uuid, function(lease_key, lease) { - console.log("SET LEASES", lease.resource, new Date(lease.start_time* 1000), new Date(lease.end_time* 1000)); // XXX We should ensure leases are correctly merged, otherwise our algorithm won't work // Populate leases by resource array: this will help us merging leases later + + // let's only put _our_ leases + lease_status = manifold.query_store.get_record_state(self.options.query_lease_uuid, lease_key, STATE_SET); + if (lease_status != STATE_SET_IN) + return true; // ~continue if (!(lease.resource in scope._leases_by_resource)) scope._leases_by_resource[lease.resource] = []; scope._leases_by_resource[lease.resource].push(lease); - self._set_lease_slots(lease_key, lease); + }); + + this._set_all_lease_slots(); + }, + _set_all_lease_slots: function() + { + var self = this; + + manifold.query_store.iter_records(this.options.query_lease_uuid, function(lease_key, lease) { + self._set_lease_slots(lease_key, lease); }); }, @@ -723,11 +746,11 @@ var SCHEDULER_COLWIDTH = 50; lease_success = ''; break; case STATE_SET_OUT_SUCCESS: - lease_class = 'reserved'; // other leases + lease_class = 'free'; // other leases lease_success = 'success'; break; case STATE_SET_IN_FAILURE: - lease_class = 'reserved'; // other leases + lease_class = 'free'; // other leases lease_success = 'failure'; break; case STATE_SET_IN_PENDING: @@ -768,6 +791,9 @@ var SCHEDULER_COLWIDTH = 50; _initUI: function() { var self = this; + var scope = self._get_scope(); + + var num_hidden_cells; $("#DateToRes").datepicker({ onRender: function(date) { @@ -777,24 +803,31 @@ var SCHEDULER_COLWIDTH = 50; SchedulerDateSelected = new Date(ev.date); SchedulerDateSelected.setHours(0,0,0,0); // Set slider to origin - $('#tblSlider').slider('setValue', 0); // XXX + //$('#tblSlider').slider('setValue', 0); // XXX // Refresh leases self._scope_clear_leases(); - self._scope_set_leases(); + self._set_all_lease_slots(); // Refresh display self._get_scope().$apply(); }).datepicker('setValue', SchedulerDateSelected); //.data('datepicker'); //init Slider + num_hidden_cells = self._all_slots.length - self._num_visible_cells; + init_cell = (new Date().getHours() - 1) * 3600 / self._granularity; + if (init_cell > num_hidden_cells) + init_cell = num_hidden_cells; + $('#tblSlider').slider({ min: 0, - max: (self._all_slots.length - self._num_visible_cells) / self._lcm_colspan, - value: 0, + max: num_hidden_cells, // / self._lcm_colspan, + value: init_cell, }).on('slide', function(ev) { var scope = self._get_scope(); scope.from = ev.value * self._lcm_colspan; scope.$apply(); }); + scope.from = init_cell; + scope.$apply(); $("#plugin-scheduler-loader").hide(); $("#plugin-scheduler").show();