Greasy Fork is available in English.

iks: virtonomica юнит/снабжение

Показывает средний кач и цену закупаемого сырья.

Устаревшая версия на 27.05.2015. Перейти к последней версии.

// ==UserScript==
// @name        iks: virtonomica юнит/снабжение
// @namespace   virtonomica
// @description Показывает средний кач и цену закупаемого сырья.
// @include     http://*virtonomica*.*/*/main/unit/view/*/supply
// @version     1.15
// @grant       none
// ==/UserScript==

var fun = function() {
  return ({
    'p': 0,
    'p1': false,
    'n': 0,
    'summa': [0,0],
    'kach': [0,0],
    'zakaz': [0,0],
    'idTr': false,
    'id': false,
    'span': {
      'a': function(s, c){ return ('<span title="' + s + '" style="color:' + c + '">') },
      'b': '</span>'
    }
  });
}

var run = function() {
  var o = iksSupplyOptions,
      funZero = function() {
        o.p = 0;
        o.p1 = false;
        o.n = 0;
        o.summa = [0,0];
        o.kach = [0,0];
        o.zakaz = [0,0];
        o.idTr = false;
        o.id = false;
      };

      $('div#mainContent > form > table.list > tbody > tr[id]').each(function() {
        o.id = $(this).attr('id');
        if( o.id.indexOf('product_') + 1 ) {
          if( o.id.indexOf('product_row_') + 1 ) {
            o.p = parseInt( $(this).find('th[rowspan]').attr('rowspan') );
            o.idTr = $(this).find('table td:contains("Заказ")').parent();
        
            o.zakaz[0] = $(this).find('table td:contains("Заказ")').next().html().replace(/\s+/g, '');
            o.zakaz[0] = parseFloat( o.zakaz[0] );
          }
      
          var n1 = $(this).find('table tr:nth-child(2) > td:nth-child(1):contains("Стоимость")').next().next().html().replace(/\s+/g, '').replace(/\$/g, '');
          if(n1) sum = n1.split('/');
          else sum = [0,0];
          o.summa[0] += parseFloat(sum[0]);

          n1 = $(this).find('table tr:nth-child(3) > td:nth-child(1):contains("Качество")').next().html().replace(/\s+/g, '');
          if(n1) n1 = parseFloat( n1 );
          else n1 = 0;
          var n2 = parseFloat( $(this).find('input[type="type"]').val() );
          if(!n2) n2 = 0;
          o.kach[0] += n1 * n2;

          var z = $(this).find('table tr:nth-child(2) > td:nth-child(1):contains("Свободно")').next().html().replace(/\s+/g, '');
          if(!z) z = 0;
          else if(z == 'Неогр.') z = n2;
          else z = parseFloat( z );

          if(n2 > z) {
            o.zakaz[1] += z;
            o.kach[1] += n1 * z;
            o.summa[1] += o.summa[0]/n2 * z;
          } else {
            o.zakaz[1] += n2;
            o.kach[1] += n1 * n2;
            o.summa[1] += parseFloat(sum[0]);
          }

          o.n++;
          if(o.n==o.p) {
            var s = '';
            if(o.zakaz[0] > o.zakaz[1]) {
              o.p1 = true;
              s = o.span.a('Значение при сделаном заказе', 'red');
              
              var strZakaz = $(o.idTr).find('td:contains("Заказ")').next();
              strZakaz.html( s+strZakaz.html()+o.span.b+'<br>'+o.span.a('Значение реально свободного сырья', 'green')+o.zakaz[1].toString().replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')+o.span.b );
            }
            var k = o.kach[0]/o.zakaz[0];
            if(k) k = k.toFixed(2);
            else  k = '0.00';
            var s1 = o.summa[0]/o.zakaz[0];
            if(s1) s1 = s1.toFixed(2);
            else s1 = '0.00';
            if(o.summa[0]) o.summa[0] = o.summa[0].toFixed(2);
            else  o.summa[0] = '0.00';
            
            var str = '<tr><td nowrap="">Стоимость</td><td nowrap="" align="right">&nbsp;$'+s+o.summa[0].replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
            if(o.p1) str += o.span.b+'&nbsp;/&nbsp;$'+o.span.a('Стоимость реально свободного сырья', 'green')+o.summa[1].toFixed(2).toString().replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')+o.span.b;
            str += '</td></tr>';
            
            str += '<tr><td nowrap="">Качество</td><td nowrap="" align="right">'+s+k;
            if(o.p1) str += o.span.b+'&nbsp;/&nbsp;'+o.span.a('Качесто ед. реально свободного сырья', 'green')+(o.kach[1]/o.zakaz[1]).toFixed(2)+o.span.b;
            str += '</td></tr>';

            str += '<tr><td nowrap="">Себестоимость</td><td nowrap="" align="right">&nbsp;$'+s+s1;
            if(o.p1) str += o.span.b+'&nbsp;/&nbsp;$'+o.span.a('Цена ед. реально свободного сырья', 'green')+(o.summa[1]/o.zakaz[1]).toFixed(2)+o.span.b;
            str += '</td></tr>';

            str += '<tr><td nowrap="">Цена ед. кач.</td><td nowrap="" align="right">&nbsp;$'+s+(o.summa[0]/o.zakaz[0]/(o.kach[0]/o.zakaz[0])).toFixed(2);
            if(o.p1) str += o.span.b+'&nbsp;/&nbsp;$'+o.span.a('Реально свободного сырья', 'green')+(o.summa[1]/o.zakaz[1]/(o.kach[1]/o.zakaz[1])).toFixed(2)+o.span.b;
            str += '</td></tr>';
            
            o.idTr.after( str );

            funZero();
          }
        }
      });
      
}

var run1 = function() {
  $('div#mainContent > form > table.list').css('min-width', '100%');
  
  var o = iksSupplyOptions,
      endT = function() {
        if(o.id) {
          var sumId = $(o.id).find('>td:nth-child(2) strong');
          $(o.id).find('td:nth-child(6) strong').append('&nbsp;<span title="Цена за единицу качества">($'+(o.summa[0]/o.zakaz[0]/(o.kach[0]/o.zakaz[0])).toFixed(2)+')'+o.span.b);
          if( o.zakaz[0] > o.zakaz[1] ) {
            sumId.append('<br><span title="Значение реально свободного сырья" style="color:green">'+o.zakaz[1].toString().replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')+o.span.b);
            $(o.id).find('td:nth-child(4) strong').append('<br>$<span title="Цена с учётом оценки запасов сырья" style="color:green">'+(o.summa[1]/o.zakaz[1]).toFixed(2)+o.span.b);
            $(o.id).find('td:nth-child(8) strong').append('<br>$<span title="С учётом оценки запасов сырья" style="color:green">'
                                                          +o.summa[1].toFixed(2).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')+o.span.b);
            o.kach[1] = o.kach[1]/o.zakaz[1];
            $(o.id).find('td:nth-child(6) strong').append('<br><span style="color:green"><span title="Качество с учётом оценки запасов сырья">'+o.kach[1].toFixed(2)+o.span.b
                                                          +'&nbsp;<span title="Цена за единицу качества с учётом запасов сырья">($'+(o.summa[1]/o.zakaz[1]/o.kach[1]).toFixed(2)+')'+o.span.b+o.span.b);
          }
        }
        o.p = 0, o.n = 0, o.summa = [0,0], o.kach = [0,0], o.zakaz = [0,0], o.idTr = false, o.id = false;
      }

  $('div#mainContent > form > table.list > tbody > tr').each(function() {
    var z, t, c, k, s;
    switch ( $(this).attr('class') ) {
      case 'p_title': // Титульная строка покупки товара
        endT();
        o.id = this;
        break;
      case 'odd':
      case 'even': // Строки покупки ресурсов
        // количество заказа
        z = parseFloat( $(this).find('td:nth-child(2) > input[type=text]').val() );
        o.zakaz[0] += z;
        // остаток на складе продавца
        t = $(this).find('td:nth-child(9)');
        if( $(t).html().replace(/\s+/g, '') == 'Неогр.' ) t = z;
        else {
          t = $(t).find('span').html().replace('<br>','-').replace(/\s+/g, '').split('-');
          t = parseFloat( t[0] );
        }
        // общая стоимость заказа
        c = $(this).find('td:nth-child(8)').html().replace(/\s+/g, '').replace(/\$/g, '');
        c = parseFloat( c );
        o.summa[0] += c;
        // качество
        k = $(this).find('td:nth-child(6)').html();
        k = parseFloat( k );
        o.kach[0] += z * k;
        if(t < z) {
          o.zakaz[1] += t;
          o.summa[1] += c/z*t;
          o.kach[1] += t * k;
        } else {
          o.zakaz[1] += z;
          o.summa[1] += c;
          o.kach[1] += z * k;
        }

        break;
      default:
        break;
    }// end switch
  });
  endT();

  //////////////////////////////
  // Скрыть/показать поставщиков
  $('div#mainContent > form > table.list > tbody > tr:nth-child(1) > th:nth-child(1)').html('<div style="width:100%; text-align:center; color:blue; cursor:pointer"><strong name="showSeller"><span>Скрыть</span> поставщиков</strong></div>');
  $('strong[name=showSeller]').click(function() {
    s = $(this).find('span');
    $('div#mainContent > form > table.list > tbody > tr[class]').each(function() {
      if( $(this).hasClass('odd') || $(this).hasClass('even') ) { // Строки покупки ресурсов
          if(s.html() == 'Скрыть') $(this).css('display', 'none');
          else $(this).removeAttr('style');
      }// end switch
    });
    var sButton = $('div#mainContent > form > table.list > tbody > tr > td[colspan=9] > input.button160').parent().parent();
    if( s.html() == 'Скрыть' ) {
      s.html('Показать');
      $(sButton).css('display', 'none');
    } else {
      s.html('Скрыть');
      $(sButton).removeAttr('style');
    }
  });

}

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

  var img = $('div#unitImage > img').attr('src');
  
  script = document.createElement("script");
  switch ( img.substr(0,img.length-6) ) {
    case '/img/v2/units/warehouse':
      script.textContent = '(' + run1.toString() + ')();';
      break;
    default:
      script.textContent = '(' + run.toString() + ')();';
  }
  document.documentElement.appendChild(script);
}