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

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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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);
}