Закупка с учетом объема рынка by ctsigma

расчет контрактов на основе емкости рынка

// ==UserScript==
// @name           Закупка с учетом объема рынка by ctsigma
// @namespace      virtonomica
// @description  расчет контрактов на основе емкости рынка
// @version        1.01
// @include       http*://*virtonomic*.*/*/main/unit/view/*/supply
// @grant       none

// ==/UserScript==
var run = function(){

    var win = (typeof (unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
    var $ = win.$;
    var realm = getRealm(location.href);
    var loc = {origin:location.origin,realm:realm};
    var geo = APIget_geo(location.href);
    var geoinfo = geo.country_id+'/'+geo.region_id+'/'+geo.city_id;

    var FldVol = $('<input id="market_percent" type="text" value="30" style="width:34px">');
    var BtnSet = $('<input type="button" value="Заказать" title="Установить объем контрактов в размере доли рынка"/>').click(function() {
        var market_percent= parseFloat($( '#market_percent' ).prop('value'));
        if(confirm('Расчитать поставку '+market_percent+'% от текущей емкости рынка для всех контрактов?')) {
            SetContractData(geoinfo, market_percent/100);
        }
    });
    var panel = $('div.metro_header');
    panel.append($('<table><tr>').append('<td>').append(BtnSet).append('<td> доля рынка(%) </td>').append(FldVol));

    function getRealm(href){
        var matches = href.match(/\/(\w+)\/main\/unit\/view\//);
        return matches[1];
    }

    function APIget_geo(href){
        var reg = new RegExp('(\\S+\\/)('+loc.realm+')\\/.+?(\\d+)');
        reg.exec(href);
        var id = RegExp.$3;
        var apiGeoURL= loc.origin + '/api/%realm%/main/geo/city/browse'.replace('%realm%',loc.realm);
        var apiSummaryUrl = loc.origin + '/api/%realm%/main/unit/summary'.replace('%realm%',loc.realm);
        var city_id = '';
        $.ajax({
            url: apiSummaryUrl,
            dataType: 'json',
            async: false,
            data: {id:id},
            success: function(data){city_id = data.city_id;}
        })
        var geo = {};
        $.ajax({
            url: apiGeoURL,
            dataType: 'json',
            async: false,
            success: function(data){ for(var k in data){if(data[k].city_id==city_id)geo = data[k];}}
        })
        return geo;
    }

    function APIget_market(product_id,geo){
        var apiMetricsURL = loc.origin + '/api/%realm%/main/marketing/report/retail/metrics'.replace('%realm%',loc.realm);
        var metrics = {};
        $.ajax({
            url: apiMetricsURL,
            dataType: 'json',
            async: false,
            data: {product_id:product_id,geo:geo},
            success: function(data){ metrics = data;}
        })
        return metrics;
    }

    function SetContractData(geoinfo,prct){
        $('.list .product_row').each(function(){
            var product_id = /product_row_(\d+).+/.exec($(this).attr('id'))[1];
            var vol=APIget_market(product_id,geoinfo).local_market_size;
            console.log(product_id+'->'+vol);
            if (vol != 0) {
                vol = parseInt(vol * prct);
                $('input[name^="supplyContractData[party_quantity]"]',this).val(vol);
            }
        })
    }
};

if(window.top == window) {
    var script = document.createElement("script");
    script.textContent = '(' + run.toString() + ')();';
    document.documentElement.appendChild(script);
}