iks: virtonomica оптовое строительство (+getNextUnits)

Автоматический запуск постройки нескольких подразделений одного типа, кроме офисов

As of 2016-09-04. See the latest version.

// ==UserScript==
// @name        iks: virtonomica оптовое строительство (+getNextUnits)
// @namespace   virtonomica
// @description Автоматический запуск постройки нескольких подразделений одного типа, кроме офисов
// @include     http://*virtonomic*.*/*/main/unit/create/*
// @include     http://*virtonomic*.*/*/main/unit/view/*
// @include     http://*virtonomic*.*/*/main/company/view/*/*
// @version     10.31
// @grant       none
// ==/UserScript==

var cookie = function() {
  return ({
    // Установить куки
    'setCookie': function(name, val) {
      var expires = new Date(); // получаем текущую дату
      expires.setTime(expires.getTime() + (60 * 60 * 1000)); // срок - 1 час, но его можно изменить
      document.cookie = name + "=" + val + "; expires=" + expires.toGMTString() +  "; path=/";
    },
    
    // Получить куки
    'getCookie': function(name) {
      var cookie_name = name + "=";
      var cookie_length = document.cookie.length;
      var cookie_begin = 0;

      while (cookie_begin < cookie_length) {
        value_begin = cookie_begin + cookie_name.length;
        if (document.cookie.substring(cookie_begin, value_begin) == cookie_name) {
          var value_end = document.cookie.indexOf (";", value_begin);
          if (value_end == -1) {
            value_end = cookie_length;
          }
          return unescape(document.cookie.substring(value_begin, value_end));
        }
        cookie_begin = document.cookie.indexOf(" ", cookie_begin) + 1;
        if (cookie_begin == 0) {
          break;
        }
      }
      return false;
    },
    
    // Удалить куки
    'deleteCookie': function(name) {
      document.cookie = name + "=" + "; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/";
    }
  });
}

/**************************************************/
var run = function() {
  $(document).keydown(function(e) {
    if( e.keyCode === 27 ) {
      cookie.deleteCookie("createUnit");
      cookie.deleteCookie("newUnit");
    }
  });
    
  var cookie = iksCookie,
      cooki = cookie.getCookie("createUnit"),
      nextCreateUnits = cookie.getCookie("nextCreateUnits"),
      o = {};
  
  console.log('cooki = ' + cooki);
  if(nextCreateUnits){
    console.log('nextCreateUnits = ' + nextCreateUnits);
  }
  if (nextCreateUnits) {
    var tmpArr = JSON.parse(nextCreateUnits);
    console.log('tmpArr = ' + tmpArr);
    console.log('tmpArr.length = ' + tmpArr.length);
    
    if (tmpArr.length > 0) {
      //The shift() method removes the first item of an array, and returns that item.
      var nextUnit = tmpArr.shift();
      var getNext = false;
      
      if (cooki) {
        o = JSON.parse(cooki);
        if(parseInt(o["numUnit"]) == 0) {
           getNext = true;
        }
      } else {
        getNext = true;
      }
      if(getNext){
        cooki = JSON.stringify(nextUnit);
        console.log('cooki = ' + cooki);
        cookie.setCookie("createUnit", cooki);
        cookie.setCookie("nextCreateUnits", JSON.stringify( tmpArr ));
      }
    }
  }
  
  if (cooki) {
    o = JSON.parse(cooki);
    
    var n = parseInt(o["numUnit"]),
        timeUpClik = parseInt(o["timeUpClik"]) *1000;
    
    console.log('numUnit = ' + n);
    if(n>0) {
      var prov = 1;
      $("input:radio").each( function() {
        if ( o[ $(this).attr('name') ] ) {
          if ( $(this).val() == o[ $(this).attr('name') ] ) {
            prov = 0;
            $.when(this).then(function(id){
              $(id).prop('checked','checked');
            }).then(function(id){
              if(timeUpClik > 0) setTimeout( function(){ $('input.button250[value="Продолжить >"]').click(); }, timeUpClik);
              else $('input.button250[value="Продолжить >"]').click();
            });
          }
        } else if( window.location.href.indexOf('/main/unit/create/') + 1 ) cookie.deleteCookie("createUnit");
      });

      $('input.button250[value="Создать подразделение"]').each( function() {
        prov = 0;
        o["numUnit"] = n - 1;
        cookie.setCookie("createUnit", JSON.stringify( o ));
        $("div#mainContent > table > tbody > tr > td > form > table.list").append('<th>Количество подразделений</th><td style="color:blue">&nbsp;<b>' + n + '</b></td>');
        // если вы хотите подтверждать вручную создание подразделений
        // при последней стадии то заблокируйте две строки ниже;
        // поставив перед ними две косые //
        if(timeUpClik > 0) setTimeout( $(this).click(), timeUpClik);
        else $(this).click();
      });
      
      $('a:contains("Создать")').each(function() {
        prov = 0;
        if(timeUpClik > 0) setTimeout( this.click(), timeUpClik);
        else this.click();
      });
      if ( prov > 0 ) $('a:contains("Предприятия")').each(function() {
        if(timeUpClik > 0) setTimeout( this.click(), timeUpClik);
        else this.click();
      });
      
    } else {
      cookie.deleteCookie("createUnit");
      $('a:contains("Строящиеся")').each(function() {
        if(timeUpClik > 0) setTimeout( this.click(), timeUpClik);
        else this.click();
      });
    }
  } else {
    // Запомним параметры создаваемых подразделений
    cooki = cookie.getCookie("newUnit");
    if (cooki) o = JSON.parse(cooki);
    
    $("td:contains('образованности')").next().each(function() {
      $('div#mainContent > table > tbody > tr > td > form > table.list > tbody > tr').each(function() {
        if( $(this).find('td > input:radio') ) {
          var n = parseFloat( $(this).find('td:nth-child(4)').html() );
          if(n>0){
            var n1 = $(this).find('td:nth-child(5)').html().replace(/\s+/g, '').replace(/\$/g, '');
            n1 = parseFloat( n1 );
            $(this).find('td:nth-child(4)').append('&nbsp;&nbsp;<span title="цена за единицу образованости" style="font-size:x-small; color:blue">(1<span style="color:#000">/$</span>'+(n1/n).toFixed(2)+')</span>');
          }
        }
      });
    });
                                              
    $("input:radio").click( function() {
      $('table.list > tbody:nth-child(1) > tr:nth-child(1):contains("Технология")').each( function() {
        if( parseFloat( $("input:radio:checked").parent().next().next().text().replace(/\s+/g, '').replace(/\$/, '') ) > 0) alert('Вы хотите купить не изученную вами технологию.');
      });
      if( $(this).attr('name') == "unitCreateData[unit_class]" ) o = {};
    });
  
    // Установим количество создаваемых подразделений
    $('input.button250[value="Создать подразделение"]').each( function() {
      if (o["unitCreateData[unit_class]"] != "1815") {
        var n = 1; 
        if (o["numUnit"] ) n = parseInt(o["numUnit"]);
        else o["numUnit"] = n;
        $("div#mainContent > table > tbody > tr > td > form > table.list").append('<tr><th>Количество подразделений</th><td><input type="text" value="' + n + '" id="impNumUnit" style="width: 100%"></input></td>'
                                                                                 +'<tr><th>Задержка сек. клика при переходах</th><td><input type="text" value="0" id="impTimeUpClik" style="width: 100%"></input></td>');
      }
    });
	  // Пропускаем только цифры
   	var numVal = function(v, v1) {
      var num = $(v).val().replace(/[^0-9]/g, '');
	  	$(v).val( num );
      o[v1] = num;
	  };
   	$('#impNumUnit').bind("change keyup input click", function() { numVal(this, "numUnit") });
   	$('#impTimeUpClik').bind("change keyup input click", function() { numVal(this, "timeUpClik") });
    
    //
    $("input.button250").click( function() {
      if ($(this).val() == "Продолжить >") {
        $("input:radio:checked").each( function() {
          o[ $(this).attr('name') ] = $(this).val();
        });
        cookie.setCookie("newUnit", JSON.stringify( o ));
      } else
      if ($(this).val() == "Создать подразделение") {
        o["numUnit"] = parseInt(o["numUnit"]) - 1;
        cookie.deleteCookie("newUnit");
        cookie.setCookie("createUnit", JSON.stringify( o ));
        alert('Для отмены работы скрипта нажмите клавишу Esc');
      }
    });
  
  }
}

if(window.top == window && ( cookie().getCookie('createUnit') || window.location.href.indexOf('main/unit/create') + 1 ) ) {
    var script = document.createElement('script');
    script.textContent = 'var iksCookie = (' + cookie.toString() + ')();'
                        +' (' + run.toString() + ')();';
    document.documentElement.appendChild(script);
}