Virtonomica:FactoryInfo

Оценка вклада в качество и цену комплектующих

// ==UserScript==
// @name           Virtonomica:FactoryInfo
// @namespace      virtonomica
// @description    Оценка вклада в качество и цену комплектующих
// @version        2.04
// @author         UnclWish
// @include        http*://*virtonomic*.*/*/main/unit/view/*/manufacture
// ==/UserScript==

var run = function() {

    var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
    $ = win.$;
    var new_interface = $("div.unit_button").length;

    function numberFormat (number) {
        number += '';
        var parts = number.split('.');
        var int = parts[0];
        var dec = parts.length > 1 ? '.' + parts[1] : '';
        var regexp = /(\d+)(\d{3}(\s|$))/;
        while (regexp.test(int)) {
            int = int.replace(regexp, '$1 $2');
        }
        return int + dec;
    }

	if (new_interface) // новый интерфейс
        var el = $('div#mainContent > div.unit_box-container > div.unit_box-row > div.unit_box > h2:contains(" Снабжение")').next($("table.unit_table:eq(0)"));
    else var el = $("table.list:eq(1)");
	var tr = $("tr", el);
	var col = new Array();
    //var colz = new Array();
	var qv= new Array();
	var money= new Array();
	mm = 0;
	cc = 0;

    if (new_interface) {
	for (i = 2; i< tr.length; i++){
		td = $("td", tr.eq(i) );

		// требуется
        col[i-2] = td.eq(1).text().replace(" ", "").replace(" ", "").replace(" ", "");
        		
		// качество
        qv[i-2] = td.eq(5).text(); 
        if (qv[i-2]==="") qv[i-2] = 0;
        //console.log (qv[i-2]);

		// себестоимость
		cc+= col[i-2] * qv[i-2];
        i=i+2;
	}

	for(i=0; i< col.length; i++){
		td = $("td", tr.eq(i+2) );

		str = Math.round(1000*col[i]*qv[i]/cc)/10;
        if (!isNaN(str)) td.eq(5).append("<br><font color=grey>"+str + "%</font>");

	}
    var exp = [];
	for (var j in prime_cost)
	{
		exp.push([prime_cost[j].name, parseFloat(prime_cost[j].percent)]);
	}
    var l = -1;
    for (k=0; l!==0; k++) {
        var l = exp[k].indexOf('Стоимость сырья');
        var m = k;}
    var m = exp [m];
    //alert (m[1])
    el = $('div#mainContent > div.unit_box-container > div.unit_box-row > div.unit_box > h2:contains(" Произведено в пересчёт")').next($("table.unit_table:eq(1)"));
	tr = $("tr", el);
    //console.log (tr.length);
    for(i=3; i<tr.length-10; i++){
        //if (i==4 || i==5 || i==6 || i==7) continue;
        td = $("td", tr.eq(i));
		td2 = $("td", td.eq(0));

        //out = td2.eq(0).text().replace(" ", "").replace(" ", "").replace(" ", "");
        mm = td.eq(1).text().replace("©", "").replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "");
        //console.log (mm);
        //if (i = tr.length-1) continue;
		td.eq(0).append("<br><font color=grey>Себестоимость по сырью:</font>");
        td.eq(1).append("<br><font color=grey>©"+ numberFormat( Math.round(mm*m[1])/100 ) + "</font>");
        i = i+4;
	}}
    else { // старый интерфейс

	for (i = 2; i< tr.length; i++){
		td = $("td", tr.eq(i) );

		// требуется
        col[i-2] = td.eq(3).text().replace(" ", "").replace(" ", "").replace(" ", "");
        
        // закуплено
        //colz[i-2] = td.eq(4).text().replace(" ", "").replace(" ", "").replace(" ", "");
        		
		// качество
        qv[i-2] = td.eq(7).text(); 
        if (qv[i-2]=="---") qv[i-2] = 0;
        //console.log (qv[i-2]);

		// себестоимость
		money[i-2] = td.eq(8).text().replace("©", "").replace(" ", "").replace(" ", "").replace(" ", "");
		if (money[i-2]=="---") money[i-2] = 0;
		//alert(i + ". = "+ td.length);
		mm+= col[i-2] * money[i-2];
		cc+= col[i-2] * qv[i-2];
    }

	for(i=0; i< col.length; i++){
		td = $("td", tr.eq(i+2) );
		str = Math.round(1000*col[i]*money[i]/mm)/10;
        if (!isNaN(str)) td.eq(8).append("<br><font color=grey>"+str + "%</font>");

		str = Math.round(1000*col[i]*qv[i]/cc)/10;
        if (!isNaN(str)) td.eq(7).append("<br><font color=grey>"+str + "%</font>");

		str = numberFormat( Math.round(col[i]*money[i]) );
        if (!isNaN(str)) td.eq(3).append("<br><font color=grey>©"+str + "</font>");
	}

    el = $("table.grid:eq(0)");
	tr = $("tr", el);
    //var out2=0;
    var k=0;
	for(i=1; i<tr.length; i++){
		td = $("td", tr.eq(i) );
		if (td.length < 5) continue;
		//console.log(td.length);
        indx = 3;
        if (td.length < 21 ) indx = 2;
        else {if (td.length == 21) {
              if ($("div", td.eq(2)).length) indx = 2;}}
		td2 = $("td", td.eq(indx));
                        
		out = td2.eq(1).text().replace(" ", "").replace(" ", "").replace(" ", "");
        //console.log (out);
		if (out == "---") {out=0; continue;}
		if (out === "") {out=0; continue;}
        //out2+=parseInt(out);
        //console.log (out2);
        k= k + 1;
		//td.eq(indx).append("<td align=left><font color=grey align=left>Себестоимость по сырью:</font></td><td align=right class=nowrap><font color=grey>$"+ numberFormat( Math.round(100*mm/out2)/100 ) + "</font></td>");
	}
	for(i=1; i<tr.length; i++){
		td = $("td", tr.eq(i) );
		if (td.length < 5) continue;
		indx = 3;
        if (td.length < 21 ) indx = 2;
        else {if (td.length == 21) {
              if ($("div", td.eq(2)).length) indx = 2;}}
		td2 = $("td", td.eq(indx));
                
		out = td2.eq(1).text().replace(" ", "").replace(" ", "").replace(" ", "");
        //console.log (out);
		if (out == "---") continue;
		if (out === "") continue;
        //console.log (out2);
		td.eq(indx).append("<td align=left><font color=grey align=left>Себестоимость по сырью:</font></td><td align=right class=nowrap><font color=grey>©"+ numberFormat( Math.round(100*mm/k/out)/100 ) + "</font></td>");
	}
    }


};

// Хак, что бы получить полноценный доступ к DOM >:]
var script = document.createElement("script");
script.textContent = '(' + run.toString() + ')();';
document.documentElement.appendChild(script);