Greasy Fork is available in English.

animals_sell

групповое перемещение животных на склад и закупка питания

// ==UserScript==
// @name        animals_sell
// @namespace   virtonomica
// @description групповое перемещение животных на склад и закупка питания
// @version     1.02
// @author      ctsigma
// @include     http*://virtonomic*.*/*/main/company/view/*/unit_list/animals
// @include     http*://virtonomic*.*/*/window/unit/equipment_animal/*/move_to_storage
// @include     http*://virtonomic*.*/*/main/unit/view/*/supply
// @grant       none
// ==/UserScript==

var run = function(){

    var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
    $ = win.$;

    function doit (arr,data) {
        if (data === undefined) data = '';
        var total = arr.length-1;
        try {

            $('<div id="js-wall" style="position: fixed; top: 0px; left: 0px; background-color: black; z-index: 100000; opacity: 0.2;" />').height($(window).height()).width($(window).width()).prependTo('body');
            $('<div id="js-progress" style="color: black; top: ' + $(window).height() / 2 + 'px; position: fixed; z-index: 10000; font-size: 40pt; text-align: center;" >Выполнено: <span id="js-curr"></span>/' + total + '</div>').width($(window).width()).prependTo('body');

            var num = 1;
            handle = function() {
                if (num >= arr.length) {
                    $('#js-progress').remove();
                    $('#js-wall').remove();
                    alert('Операция выполнена для предприятий: ' + (num-1));
                    history.back();
                    return;
                }

                $('#js-curr').text(num);
                var obj = arr[0].replace('%id%',arr[num]);
                num++;
                $.post(obj,data,handle);
            };

            setCookie('units', 0, -1);
            handle();

        } catch(ex) {
            alert(ex);
        }

    }
    var redirect = function (event) {
        var realm = readCookie('last_realm');
        var arr = [];
        var url = event.target.name.replace('%realm%', realm);
        arr[arr.length] = url;
        $('table.list>tbody>tr:gt(0):has(:checkbox) input:checked').each(function(){
            var id = $(this).attr('id').replace('unit_','');
            //        arr[arr.length] = url.replace('%id%',id);
            arr[arr.length] = id;
        });
        var units = arr.join(',');
        if (units.length > 4090 ) {alert('Выбрано слишком много подразделений. (l='+units.length+'). Операция прервана.');return false;} //размер cookie не больше 4К
        setCookie('units', arr.join(','));
        if (arr.length>0) {
            url = arr[0].replace('%id%',arr[1]);
            try {
                window.location = url;
            } catch (ex) {
                alert('Error: ' + ex);
            }
        }
    };

    function moveToStorage(){
        var arr = readCookie('units');
        if (arr === null) {return false;}
        arr = arr.split(',');
        $('.button205').unbind().click(function() {
            var data = $('form[name=unitEquipmentTerminate]').serialize();
            doit(arr, data);
            return false;
        });
    }

    function SupplyFeed(){
        var realm = readCookie('last_realm');
        var vendorID = parseInt($( '#vendorID' ).prop('value'));
        var productID = parseInt($( '#productID' ).prop('value'));
        var Qty = parseInt($( '#productQty' ).prop('value'));
        var params = "";
        $('table.list>tbody>tr:gt(0):has(:checkbox) input:checked').each(function(){
            var id = $(this).attr('id').replace('unit_','');
            params = params + "unit["+id+"]=on&unit["+id+"][qty]="+Qty+"&";
        });

        if (params.length === 0) {alert('Не выбраны подразделения.');return;}
        params = params + "contractit=Заказать";
        var SupplyURL = location.origin+"/%realm%/window/unit/supply/multiple/vendor:%vendorid%/product:%productid%/brandname:0";
        SupplyURL = SupplyURL.replace('%realm%', realm).replace('%vendorid%', vendorID).replace('%productid%', productID);

        $.ajax({ //отправляем форму на сервер
            type:"POST",
            async: false,
            url:SupplyURL,
            data:params
        });
        alert('ok');
    }

    var MoveToStorageURL = /window\/unit\/equipment_animal\/\d+\/move_to_storage$/;
    var SupplyFeedURL = /main\/unit\/view\/\d+\/supply$/;
    if (MoveToStorageURL.test(document.location.href)) {moveToStorage();}
    //else if (SupplyFeedURL.test(document.location.href)) {SupplyFeed();}
    else {
        var bId = 0;
        $('legend:contains("Операции с животными выбранных ферм")').next().children().children().each(function() {
            var b1 = $('<td><input value="Продажа животных" id="moveStorage_'+bId+'" class="button130" type="button" name="/%realm%/window/unit/equipment_animal/%id%/move_to_storage"></td>').click(redirect);
            var b2 = $('<td><input value="Корм для животных" id="supplyFeed_'+bId+'" class="button130" type="button" name="http://virtonomica.ru/%realm%/main/unit/view/%id%/supply"></td>').click(SupplyFeed);
            $(this)
                .append($('<td width="5"><img width="1" border="0" height="1" alt="" src="/img/1.gif"></td>'))
                .append(b1)
                .append($('<td width="5"><img width="1" border="0" height="1" alt="" src="/img/1.gif"></td>'))
                .append(b2)
                .append($('<td width="5"><img width="1" border="0" height="1" alt="" src="/img/1.gif"></td>'))
                .append($('<td>vendorID:<input id="vendorID" title="Код подразделения" type="text" value="5959683" style="width:100px"></td>'))
                .append($('<td width="5"><img width="1" border="0" height="1" alt="" src="/img/1.gif"></td>'))
                .append($('<td>productID:<input id="productID" title="Код продукта" type="text" value="15746" style="width:100px"></td>'))
                .append($('<td width="5"><img width="1" border="0" height="1" alt="" src="/img/1.gif"></td>'))
                .append($('<td>Qty:<input id="productQty" title="Количество" type="text" value="" style="width:100px"></td>'))
            ;
            ++bId;
        });
    }
};

var script = document.createElement("script");
script.textContent = '(' + run.toString() + ')();';
document.documentElement.appendChild(script);