cubensosgmail.com / Bankmanagergame - Kreditrating

// ==UserScript==
// @name          Bankmanagergame - Kreditrating
// @namespace     http://scripte.georglink.de/
// @description	  Fuegt bei den Krediten ein Rating ein.
// @author        Georg J.P. Link
// @include       http://bankmanagergame.de/index.php?section=kredite*
// @include       http://www.bankmanagergame.de/index.php?section=kredite*
// ==/UserScript==

var $;

// Add jQuery
(function(){
	if (typeof unsafeWindow.jQuery == 'undefined') {
		var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement,
			GM_JQ = document.createElement('script');

		GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
		GM_JQ.type = 'text/javascript';
		GM_JQ.async = true;

		GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
	}
	GM_wait();
})();

// Check if jQuery's loaded
function GM_wait() {
	if (typeof unsafeWindow.jQuery == 'undefined') {
		window.setTimeout(GM_wait, 100);
	} else {
		$1 = unsafeWindow.jQuery;
		rating();
	 }
}

// calculate Rating and insert into Table
function rating() {


$1('#listOfCredits thead tr').append('<th class="header scripttresorbilanz">Rating</th>');

	// formatiert die Ertragsaussicht mit Tausender Trennzeichen
	function Trenner(number) {
		// Info: Die '' sind zwei Hochkommas
		number = '' + number;
		teile = number.split(".");
		ganze = teile[0];
		if (teile[1]){
			komma = teile[1];
		} else {
			komma = "00";
		}
		while(komma.length <2) {
			komma += "0";
		}
		komma = komma.substr(0,2);
		if (ganze.length > 3) {
			var mod = ganze.length % 3;
			var output = (mod > 0 ? (ganze.substring(0,mod)) : '');
			for (i=0 ; i < Math.floor(ganze.length / 3); i++) {
				if ((mod == 0) && (i == 0))
					output += ganze.substring(mod+ 3 * i, mod + 3 * i + 3);
				else
					// hier wird das Trennzeichen festgelegt mit '.'
					output+= '.' + ganze.substring(mod + 3 * i, mod + 3 * i + 3);
			}
			return (output+','+komma);
		}
		else return teile[0]+','+komma;
	}

	// Adding Heading for Rating column
	$1('#listOfCredits thead tr').append('<th class="scriptRating">Rating</th>');
	
	//Allgemeine Daten, Max-Tresorlimit, Max-Kredite
	// var all_content = $1('#content').text();

	//Max-Tresorlimit
	// var maxtresor_regex1 = /\(max\..*[0-9]{1,3}(\.[0-9]{3})*.*\)/;
	// if (maxtresor_regex1.test(all_content)){
		// var maxtresor_1 = '' + all_content.match(maxtresor_regex1)[0];		
		// var maxtresor_regex2 = /[0-9]{1,3}(\.[0-9]{3})*/;
		// if (maxtresor_regex2.test(maxtresor_1)){
			// var maxtresor_2 = '' + maxtresor_1.match(maxtresor_regex2,$1)[0];		
			// var maxtresor_2 = parseFloat(maxtresor_2.replace(/\./g, ""));
		// } else {
			// var maxtresor_2 = -1;
		// }		
		// max_tresor = maxtresor_2;
	// } else {
		// max_tresor = -1;
	// }
	
	// Aktueller Geldbestand
	// var geldaktuell_regex1 = /[0-9]{1,3}(\.[0-9]{3})*,[0-9]{2}/;
	// if (geldaktuell_regex1.test(all_content)){
		// var geldaktuell_1 = all_content.match(geldaktuell_regex1)[0] + '';		
		// geldaktuell = parseFloat(geldaktuell_1.replace(/\./g, "").replace(/,/, "."));
	// } else {
		// geldaktuell = -1;
	// }
	 
	 
	// Noch zu vergebende Kredite
	// var kreditnum_regex = /([0-9]+) \/ ([0-9]+) Kredite vergeben/;
	// if (kreditnum_regex.test(all_content)){
		// var kreditnum = all_content.match(kreditnum_regex);		
		// kreditnum_max = parseInt(kreditnum[2]);
		// kreditnum_weg = parseInt(kreditnum[1]);
	// } else {
		// kreditnum = -1;
	// }
	 //alert(kreditnum_weg +" von " +kreditnum_max+" Krediten");
	
	// berechner fuer jeden Kredit
	$1('#listOfCredits tbody tr').each(function ( ) {
		
		// extrahiere alle Werte aus Tabelle
		werte = new Array;
		i=0;
		$1(this).children().each(function () {
			werte[i] = $1(this).text();
			i++
		});
		
		// Aufbereitung der Werte
		var volume = parseFloat(werte[1].replace(" k","000").replace(/\./g, "").replace(/,/, "."));
        
		var interest_rate = parseFloat(werte[2].replace(/,/, "."))/100;
		var end_time = werte[3]
		var days_regex = /(\d+) Tage/;
		if (days_regex.test(end_time)){
			var days = parseInt(end_time.match(days_regex,$1)[1]);		
		} else {
			var days = 0;
		}		
		var hours_regex = /(\d+) Std/;
		if (hours_regex.test(end_time)){
			var hours = parseInt(end_time.match(hours_regex,$1)[1]);		
		} else {
			var hours = 0;
		}
		var minutes_regex = /(\d+) Min/;
		if (minutes_regex.test(end_time)){
			var minutes = parseInt(end_time.match(minutes_regex,$1)[1]);		
		} else {
			var minutes = 0;
		}
		var seconds_regex = /(\d+) Sek/;
		if (seconds_regex.test(end_time)){
			var seconds = parseInt(end_time.match(seconds_regex,$1)[1]);		
		} else {
			var seconds = 0;
		}
		var durance = days +hours/24 + minutes/(24*60) + seconds/(24*60*60);
		var gewinn_total = parseFloat(werte[4].replace(/\./g, "").replace(/,/, "."));
		var gewinn_perhour = parseFloat(werte[5].replace(/\./g, "").replace(/,/, "."));
		var risk_rate = parseFloat(werte[6].replace(/,/, "."))/100;
		
		// Errechne das Grund-Rating
		var rating = ((1-risk_rate)*(volume+gewinn_total) - risk_rate * volume - volume) / (volume * durance) * 100;
		// Adjustierung
		rating = rating + (0.10 - Math.max(0.10, risk_rate))*50;
		if(risk_rate < 0.7) {
			rating = rating + (interest_rate)*10;
		}
		rating = Math.round(rating*1000)/1000
		
		rating = '' + rating;
		teile = rating.split(".");
		ganze = teile[0];
		if (teile[1]){
			komma = teile[1];
		} else {
			komma = "000";
		}
		while(komma.length <3) {
			komma += "0";
		}		
		rating = ganze + "," + komma;
		//trage Rating in tabelle ein.
		$1(this).append('<td class="scriptRating">'+rating+'</td>');
		
	});
		
		
	// Summe aller Kredite und erwarteter Gewinne
	gesamt_kreditvolumen = new Array;
	gesamt_kreditvolumen[0] = 0;
	gesamt_kreditvolumen[1] = 0;
	gesamt_kreditvolumen[2] = 0;
	// hole Werte aller vergebenen Kredite
	$1('#tablesorter tbody tr').each(function ( ) {
		// extrahiere alle Werte aus Tabelle
		werte = new Array;
		i=0;
		$1(this).children().each(function () {
			werte[i] = $1(this).text();
			i++
		});
		// Aufbereitung der Werte
		gesamt_kreditvolumen[1] += parseFloat(werte[0].replace(/\./g, "").replace(/,/, "."));
		gesamt_kreditvolumen[2] += parseFloat(werte[3].replace(/\./g, "").replace(/,/, "."));
	});
	
	gesamt_kreditvolumen[0] = gesamt_kreditvolumen[1] + gesamt_kreditvolumen[2];
	gesamt_kreditvolumen[0] = Math.round(gesamt_kreditvolumen[0]*100)/100;
	gesamt_kreditvolumen[1] = Math.round(gesamt_kreditvolumen[1]*100)/100;
	gesamt_kreditvolumen[2] = Math.round(gesamt_kreditvolumen[2]*100)/100;
		
	// Ausgabe
	var newNode = document.createElement("div");
	newNode.textContent = "tt"; //;	
	newNode.setAttribute("style" , "margin: 5px 0;");
	newNode.setAttribute("id" , "gesamtertrag");
	var beforeMe = document.getElementById("tablesorter");
	beforeMe.parentNode.insertBefore( newNode, beforeMe )
	$1("#gesamtertrag").html('<table><tr><td>Gesamtkreditvolumen:</td><td><span style="color:green;">' + Trenner(gesamt_kreditvolumen[1]) + ' &euro;</span></td></tr><tr><td>erwarteter Gewinn</td><td><span style="color:green;">' + Trenner(gesamt_kreditvolumen[2]) + ' &euro;</span></td></tr><tr><td>SUMME:</td><td><span style="color:green;font-weight:bold;">' + Trenner(gesamt_kreditvolumen[0]) + ' &euro;</span></td></tr></table> ');

		
}

$1('#listOfCredits th:contains("Zinzsatz (pro Tag)")').text("Zinsen");
$1('#listOfCredits th:contains("Gew. pro 24h")').text("gpd");