Skip to content
Snippets Groups Projects
Select Git revision
  • 09190d05790ca16ed4d3974fff58eb827aef3c2a
  • master default
  • renovate/django-split-settings-1.x
  • renovate/djangorestframework-3.x
  • main
  • 520-improve-trackmanager
  • 520-fix-scheduling
  • 520-akowner
  • 520-status
  • 520-message-resolved
  • 520-improve-scheduling-2
  • renovate/django-bootstrap5-24.x
  • 520-improve-submission
  • 520-improve-scheduling
  • 520-improve-wall
  • 520-fix-event-wizard-datepicker
  • 520-upgrades
  • renovate/tzdata-2023.x
  • renovate/django-5.x
  • renovate/fontawesomefree-6.x
  • renovate/sphinx-rtd-theme-2.x
  • renovate/sphinxcontrib-apidoc-0.x
22 results

environment.py

Blame
  • Forked from KIF / AKPlanning
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    WorkerDeparture.js 4.12 KiB
    importScripts('AJAX.js');
    importScripts('check.js');
    
    self.interval = 360000;
    
    self.tick = function(callback) {
    	var config = self.config;
    	if (isObject(config) && isArrayNotEmpty(config['stops_converted'])) {
    		AJAX.request(config['stops_converted']).then(function(results) {
    			if (results.length == 0) return;
    			var
    				result = {
    					vrrf_version: {
    						actual: '0.0.0.0',
    						expected: '0.0.0.0'
    					},
    					errors: {},
    					info: {},
    					lines: {},
    					raw: {}
    				},
    				rawLines = {};
    			for (var i = 0; i < results.length; ++i) {
    				if (!results[i].success) continue;
    				var data = JSON.parse(results[i].response);
    				var stopName = config['stops'][i].split(':').join(' - ');
    				result['vrrf_version']['actual'] = data['version'];
    				result['vrrf_version']['expected'] = '0.0.0.0';
    				result['errors'][stopName] = data['error'];
    				result['info'][stopName] = '';
    				result['raw'][stopName] = data['raw'];
    				for (var j = 0; j < data['raw'].length; ++j) {
    					var entry = data['raw'][j];
    					// filter
    					if (isObjectNotEmpty(config['filter']) && !passFilter(config['filter'], entry)) continue;
    					// interprete
    					var
    						reftime = new Date(),
    						schedDate = entry['sched_date'].split('.'),
    						schedTime = entry['sched_time'].split(':'),
    						deptime = calcDateValue(schedDate[0], schedTime[0], schedTime[1]);
    					reftime = calcDateValue(reftime.getDate(), reftime.getHours(), reftime.getMinutes());
    					if (deptime + parseInt(entry['delay']) - reftime) {
    						var ident = entry['lineref']['operator']+'|'+entry['lineref']['type']+'|'+entry['line']+'|'+entry['lineref']['identifier']+'|'+entry['key'];
    						if (!isObjectNotEmpty(result['lines'][ident])) {
    							result['lines'][ident] = {
    								timeValue: deptime,
    								line: entry['line'],
    								destination: entry['destination'],
    								type: entry['type'],
    								stops: [{
    									timeValue: deptime,
    									time: entry['sched_time'],
    									delay: entry['delay'],
    									cancel: entry['is_cancelled'],
    									name: stopName,
    									info: entry['info']
    								}]
    							};
    						} else {
    							result['lines'][ident]['stops'].push({
    									timeValue: deptime,
    									time: entry['sched_time'],
    									delay: entry['delay'],
    									cancel: entry['is_cancelled'],
    									name: stopName,
    									info: entry['info']
    								});
    						}
    					}
    				}
    			}
    			result['lines'] = sortData(Object.values(result['lines']));
    			if (isNumber(config.max)) {
    				result['lines'] = result['lines'].slice(0, config.max);
    			}
    			callback(result);
    		});	
    	}
    }
    
    function passFilter(filter, entry) {
    	if (isObjectNotEmpty(filter['bl'])) {
    		if (isArrayNotEmpty(filter['bl']['line'])
    		&&  arrayContains(filter['bl']['line'], entry['line'])) {
    			return false;
    		}
    		if (isArrayNotEmpty(filter['bl']['type'])
    		&&  arrayContains(filter['bl']['type'], entry['type'])) {
    			return false;
    		}
    		if (isArrayNotEmpty(filter['bl']['platform'])
    		&&  arrayContains(filter['bl']['platform'], entry['platform'])) {
    			return false;
    		}
    		if (isArrayNotEmpty(filter['bl']['destination'])
    		&&  arrayContains(filter['bl']['destination'], entry['destination'])) {
    			return false;
    		}
    	}
    	if (isObjectNotEmpty(filter['wl'])) {
    		if (isArrayNotEmpty(filter['wl']['line'])
    		&&  !arrayContains(filter['wl']['line'], entry['line'])) {
    				return false;
    		}
    		if (isArrayNotEmpty(filter['wl']['type'])
    		&&  !arrayContains(filter['wl']['type'], entry['type'])) {
    				return false;
    		}
    		if (isArrayNotEmpty(filter['wl']['platform'])
    		&&  !arrayContains(filter['wl']['platform'], entry['platform'])) {
    				return false;
    		}
    		if (isArrayNotEmpty(filter['wl']['destination'])
    		&&  !arrayContains(filter['wl']['destination'], entry['destination'])) {
    				return false;
    		}
    	}
    	return true;
    }
    
    function sortData(data) {
    	for (var i = 0; i < data.length; ++i) {
    		data[i]['stops'] = data[i]['stops'].sort(sortFn);
    		data[i]['timeValue'] = data[i]['stops'][0]['timeValue'];
    	}
    	return data.sort(sortFn);
    }
    
    function sortFn(a,b) {
    	return a['timeValue'] > b['timeValue'];
    }
    
    function calcDateValue(day, hour, minute) {
    	return parseInt(day) * 24 * 60 + parseInt(hour) * 60 + parseInt(minute);
    }
    
    importScripts('Worker.js');