Отчет

Обобщение Финансовый отчёт->По статьям, Финансовый отчёт->По подразделениям

目前为 2015-05-26 提交的版本。查看 最新版本

// ==UserScript==
// @name        Отчет
// @namespace   virtonomica
// @description Обобщение  Финансовый отчёт->По статьям, Финансовый отчёт->По подразделениям
// @include     http://*virtonomica*.*/*/main/company/view/*/finance_report/by_units*
// @include     http://*virtonomica*.*/*/main/company/view/*/finance_report/by_item
// @include     http://*virtonomica.*/*/main/unit/view/*/finans_report/by_item
// @version     1.25
// ==/UserScript==

///////////
// Функции
var fun = function() {
    var myModule = {
        'floatP': function (val){
            return ( parseFloat( val.replace(/\s+/g, '').replace(/\$/g, '') ) )
        },
        'int_str': function (val){
            return ('<td class="nowrap' + (val<0?' moneySmallerZero':'') + '" align="right">' + val.toFixed(2).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ') + ' $</td>')
        }
    }
    return myModule;
}

//////////////
// По статьям
var run = function() {
    var str = [
        [ // Доходы
            "Возвращение аукционного залога",
            "Прочие доходы",
            "Продажа товаров",
            "Оказание ремонтных услуг",
            "Продажа технологий",
            "Продажа имущества",
            "Продажа электроэнергии потребителям",
        
            "Продажа ценных бумаг",
            "Доход от купленных облигаций"
        ],
        [ // Расходы
            "Аукционный залог",
            "Ликвидация предприятий",
            "Налог на продажу имущества",
            "Остальные",
            "Сборы рынка технологий",
            "Покупка товаров",
            "Покупка сырья и материалов",
            "Покупка технологий",
            "Внедрение технологий",
            "Расходы на транспортировку",
            "Таможенные пошлины",
            "Заработная плата",
            "Топливо, энергия",
            "Реклама",
            "Расходы на персонал",
            "Складские расходы",
            "Брак, потери",
            "Налог на прибыль",
            "Налог на продажу технологий и технологических лицензий",
        
            "Общепроизводственные расходы",
            "Аренда помещений",
            "Управленческие расходы",
            "Выплаты по инновациям",
        
            "Покупка имущества",
            "Строительство и модернизация",
            "Закупка и ремонт оборудования",
            "Внедрение инноваций",
        
            "Покупка ценных бумаг",
            "Комиссия за выпуск ценных бумаг",
            "Погашение облигаций"
        ]
    ];

    for(var y in str) {
        for(var s in str[y]) {
            var i = 0;
            $("tr:contains(" + str[y][s] + ") > td.nowrap").each(function() {
                n[y][i] +=  funFinReport.floatP( $(this).html() );
                i++;
            });
        }
    }

    // Выведем результат
    $( "#mainContent > table" ).append( '<tr><td class="title" colspan="6">Всего</td></tr>'
                                       +'<tr class="odd" onmouseout="this.className = \'odd\'" onmouseover="this.className = \'selected\'">'
                                       +'<td style="padding-left: 30px">Доходы</td>'
                                       + funFinReport.int_str(n[0][0])
                                       + funFinReport.int_str(n[0][1])
                                       + funFinReport.int_str(n[0][2])
                                       + funFinReport.int_str(n[0][3])
                                       + funFinReport.int_str(n[0][4])
                                       +'</tr>'
                                       +'<tr class="even" onmouseout="this.className = \'even\'" onmouseover="this.className = \'selected\'">'
                                       +'<td style="padding-left: 30px">Расходы</td>'
                                       + funFinReport.int_str(n[1][0])
                                       + funFinReport.int_str(n[1][1])
                                       + funFinReport.int_str(n[1][2])
                                       + funFinReport.int_str(n[1][3])
                                       + funFinReport.int_str(n[1][4])
                                       +'</tr>'
                                       +'<tr class="odd" onmouseout="this.className = \'odd\'" onmouseover="this.className = \'selected\'">'
                                       +'<td style="padding-left: 30px">Сумма</td>'
                                       + funFinReport.int_str(n[0][0]-n[1][0])
                                       + funFinReport.int_str(n[0][1]-n[1][1])
                                       + funFinReport.int_str(n[0][2]-n[1][2])
                                       + funFinReport.int_str(n[0][3]-n[1][3]) 
                                       + funFinReport.int_str(n[0][4]-n[1][4])
                                       +'</tr>');
}

/////////////////////
// По подразделениям
var run1 = function(){
    $('#mainContent > table.grid > tbody > tr').each(function() {
        if( $(this).hasClass('odd') || $(this).hasClass('even') ) {
            n[1][0]++;
            n[1][1] = 0;
            $(this).find('td.nowrap').each(function() {
                n[0][ n[1][1] ] += funFinReport.floatP( $(this).html() );
                n[1][1]++;
            });
            n[0][3] = n[0][0]-n[0][1]-n[0][2];
        }
    }).find('td > table.paging').parent().parent().before(
        '<tr style="background: #EEFACA"> <td colspan="3">Итого:</td>'
        +'<td class="nowrap" align="center">' + n[1][0] + '</td>'
        + funFinReport.int_str(n[0][0])
        + funFinReport.int_str(n[0][1])
        + funFinReport.int_str(n[0][2])
        + funFinReport.int_str(n[0][3])
        +'<td class="nowrap"  align="right">' + Math.round(n[0][3]/(n[0][1]+n[0][2])*100).toFixed(2) + ' %</td> </tr>'
    );
}

window.onload = function()
{
    var url = window.location.href,
        script = document.createElement("script");
    script.textContent = 'var n = [[0,0,0,0,0],[0,0,0,0,0]]; funFinReport = (' + fun.toString() + ')();';
    document.documentElement.appendChild(script);
    
    script = document.createElement("script");
    if( url.indexOf('by_units') + 1 )
        script.textContent = '(' + run1.toString() + ')();';
    else
        script.textContent = '(' + run.toString() + ')();';
    
    document.documentElement.appendChild(script);
}