Virtonomica: раскраска строк на складе в зависимости от запасов и расхода

Сравниваются текущий приход (реально обеспеченный запасами поставщиков), текущий объем заказов и запасы на самом складе. Если, например, при текущий объемах отгрузки/закупок/запасов товара станет не хватать через 10 пересчетов, то строка товара подсвечивается желтым цветом, если через 2 - оранжевым, если уже недопоставка - красным. И наоборот, если на складе запасов более чем на 30 пересчетов - подсвечивается зеленым.

当前为 2016-08-29 提交的版本,查看 最新版本

// ==UserScript==
// @name           Virtonomica: раскраска строк на складе в зависимости от запасов и расхода
// @version        1.1
// @include        http://*virtonomic*.*/*/main/unit/view/*
// @description    Сравниваются текущий приход (реально обеспеченный запасами поставщиков), текущий объем заказов и запасы на самом складе. Если, например, при текущий объемах отгрузки/закупок/запасов товара станет не хватать через 10 пересчетов, то строка товара подсвечивается желтым цветом, если через 2 - оранжевым, если уже недопоставка - красным. И наоборот, если на складе запасов более чем на 30 пересчетов - подсвечивается зеленым. 
// @author         cobra3125
// @namespace      virtonomica
// ==/UserScript==

var run = function() {

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

  function toNumber(spSum){
    return parseFloat(spSum.replace('$','').replace(/\s+/g,''),10);
  }
  var src = $('#unitImage > img').attr('src');
  
  if (/http:\/\/\w*virtonomic\w*\.\w+\/\w+\/main\/unit\/view\/\d+$/.test(window.location)) {
    if(src.indexOf("warehouse") > 0){
      $('table.grid > tbody > tr:has(td)').each(function() {
        var row = $(this);
        //На складе
        var stock = toNumber($('> td:nth-child(2)', row).text());
        //Отгрузки по контрактам
        var sell = toNumber($('> td:nth-child(6)', row).text());
        //Закупки по контрактам
        var buy = toNumber($('> td:nth-child(7)', row).text());


        if (stock + (buy - sell) < 0){
          //если уже недопоставка - красным
          row.attr('style', 'background-color:HotPink');
        } else if (stock + (buy - sell) * 2 < 0){
          //если через 2 - оранжевым
          row.attr('style', 'background-color:GoldenRod');
        } else if (stock + (buy - sell) * 30 > 0){
          //если на складе запасов более чем на 30 пересчетов - подсвечивается зеленым.
          row.attr('style', 'background-color:LightGreen');
        } else {
          //Если станет не хватать через 10 пересчетов, то строка товара подсвечивается желтым цветом
          row.attr('style', 'background-color:Yellow');
        }
      });
    }
  }
}

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