neemanjabuge / ERVSummary

// ==UserScript==
// @name        ERVSummary
// @namespace   https://web.schneider-electric-dms.com/DMServ/
// @include     https://web.schneider-electric-dms.com/DMServ/*
// @version     1
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js
// ==/UserScript==
console.log('*********************************** start');

var _Report = unsafeWindow.RenderReport;

unsafeWindow.RenderReport = function(data) {
	console.log(data);
	_Report(data);
	try{
	var duration = 0,
		duration_weekend = 0,
		dayname,
		weeks={},
		week = 1,
		days=0, 
		worked_days = 0,
		worked_weekend = 0,
		has_data = false,
		is_weekend = false;
	$('div.reportday').each(function(index) {
		days++;
		dayname = $(this).find('#dayname').html().toLowerCase();
		if(dayname == 'sun' || dayname == 'sat') is_weekend = true;
		else is_weekend = false;
		
		$(this).find('div.downbar1intervalreport').each(function(index){
			var dur = $(this).attr('duration');
			if(dur != '') {
				if(is_weekend) duration_weekend += parseInt(dur?dur:0)
				else duration += parseInt(dur?dur:0);
				has_data = true;
			} 
		});
		
		if(has_data) {
			if(is_weekend)	worked_weekend++;
			else worked_days++;
			has_data = false;
		}
		
		if(dayname == 'sun') {
			weeks[week++] = {
				'duration':	duration,
				'duration_weekend':duration_weekend,
				'days': days,
				'worked_days':worked_days,
				'worked_weekend':worked_weekend
			};
			days = 0;	
			worked_days = 0;
			worked_weekend = 0;
			duration = 0;
			duration_weekend = 0;
		}
	});
	weeks[week] = {
				'duration':	duration,
				'duration_weekend':duration_weekend,
				'days': days,
				'worked_days':worked_days,
				'worked_weekend':worked_weekend
			};

	//console.log(weeks);
	var average;
	var box = $('#ervsummary');
	if(box.length == 0){
		box = $('<div id="ervsummary"></div>')
			.css({
			'position': 'absolute',
			'top': '20px',
			'right': '20px',
			'background-color': 'whitesmoke',
			'border': '3px solid lightblue'
			})
			.appendTo($('body'));
	} else {
		box.empty();
	}
	
	var table = $('<table></table>').css({
		'border-collapse': 'collapse'
	});
	box.append(table);
	
	var header = $('<tr><th>Period</th><th>Days</th><th>Average time</th></tr>');
	table.append(header);
	
	var html = '', min = '', maxTime = '', all_worked_days = 0, all_duration = 0, 
		row = ['<tr><td>', 1, '</td><td>',3,'</td><td>',5,'</td></tr>'];
	for(var v in weeks) {
		if(weeks[v].duration != 0){
			average = Math.floor(weeks[v].duration/weeks[v].worked_days);
			console.log(v+'. week: '+Math.floor(average/60)+':'+average%60);
			min = average%60;
			min = min>9?min:'0'+min;
			row[1] = v+'. week';
			row[3] = weeks[v].worked_days;
			row[5] = Math.floor(average/60)+':'+min;
			all_worked_days += weeks[v].worked_days;
			all_duration += weeks[v].duration;
		}else{
			console.log(v+'. week: 0');
			row[1] = v+'. week';
			row[3] = '-';
			row[5] = '-';
		}
		html += row.join('');
		if(weeks[v].duration_weekend != 0){
			average = Math.floor(weeks[v].duration_weekend/weeks[v].worked_weekend);
			console.log(v+'. weekend: '+Math.floor(average/60)+':'+average%60);
			min = average%60;
			min = min>9?min:'0'+min;
			row[1] = v+'. weekend';
			row[3] = weeks[v].worked_weekend;
			row[5] = Math.floor(average/60)+':'+min;
			html += row.join('');
		}
	}

	min = Math.floor(all_duration/all_worked_days);
	var hoursAverage = Math.floor(min/60);
	min = min%60;
	min = min>9?min:'0'+min;
	html += ':'+min + '</td>';
	row[1] = 'month';
	row[3] = all_worked_days;
	row[5] = hoursAverage+':'+min;
	html += row.join('');
	
	
	table.append(html);
	box.find('th, td').css({
		border: '1px solid lightblue',
		'text-align': 'center',
		'padding': '2px 5px'
	});
	//box.html(html);
	
	$('.reportday').each(function () {
		var min = 0;
		$(this).find('.downbar1intervalreport').each(function(){
			min += parseInt($(this).attr('duration'));
		});
		//var min = $(this).attr('duration');
		var hours = Math.floor(min/60);
		min = min%60;
		min = min>9?min:'0'+min;
		
		$('<div>' + hours +':'+min+ '</div>')
			.css({
				position: 'absolute',
				right: '20px',
				top: '9px'
			})
			.appendTo($(this));
	});
	
	
	}catch(e){
		console.log(e.message);
	}
	
	
};



console.log('*********************************** end');