您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Добавляет кнопки автоматического выставления количества заказываемого товара
// ==UserScript== // @name Virtonomica:GosSnab // @namespace virtonomica // @version 1.73 // @include https://*virtonomic*.*/*/main/unit/view/*/supply // @include https://igra.aup.ru/*/main/unit/view/*/supply // @description Добавляет кнопки автоматического выставления количества заказываемого товара // ==/UserScript== var run = function() { // Версия минимального снабжения (прописать цифру 1) var minimal = 0; // особые условия закупки при занятии данной доли рынка var limit = 10; // Заводы: запас комплектующих впересчетах var factory_store = 2; // минимальная закупка при старте продаж с нуля var start_shtuk = 100; var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window); $ = win.$; //--------------------------------------------------------------------- // работа с локальным хранилищем //--------------------------------------------------------------------- /** * записать данные в локальнео хранилище, с проверкой ошибок */ function ToStorage(name, val) { try { window.localStorage.setItem( name, JSON.stringify( val ) ); } catch(e) { out = "Ошибка добавления в локальное хранилище"; //console.log(out); } } function getFromStorage(obj, id_shop) { if (obj[id_shop] == null) return ''; return JSON.stringify(obj[id_shop]); } /** * Добавить заметку к предприятию */ function addNotes( msg ){ // объект для хранения сообщений notes = JSON.parse( window.localStorage.getItem('notes') ); if ( notes == null ) notes = new Object(); // Идентификатор подразделения var id = /(\d+)/.exec(location.href)[0]; // дизайно 16.10.2017 var title = $("div.title h1").text(); var type = $.trim( $('ul.tabu li').eq(1).text() ); if ( notes[id] == null ) notes[id] = new Object(); var d = new Date(); if ( notes[id]['text'] != null) { // сообщение для этого подраздления уже есть msg = notes[id]['text'] + "<br>" + msg; } notes[id]['text'] = msg; // Количество миллисекунд notes[id]['time'] = d.getTime(); notes[id]['name'] = title; notes[id]['type'] = type; ToStorage('notes', notes); } function SetAmount( up) { var n_row = 0; var change = 0; var up_count = 0; var down_count = 0; var prc_count = 0; $("tr.product_row").each( function() { var el_info = $("td:eq(3)", this); img = $("img[src*='/img/products']", this); //alert(" !!! " + img.attr("src") + "("+market[ img.attr("src") ] + ")" ); // на складе var col = parseInt ( $("tr td:contains('Количество')", this).next().text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); //продано в магазине var sale = parseInt ( $("tr td:contains('Продано')", this).next().text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); // зауплено в этот ход var amount = parseInt ( $("td:eq(15)", this).text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); // Свободно на складе var free = parseInt ( $("tr td:contains('Свободно')", this).next().text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); console.log("COL= " +col + " SALE = "+ sale + " AMOUNT = " + amount + " free = " +free); // поле для ввода количества заказываемого товара var input = $("input[name^='supplyContractData']:eq(1)", this); // если больше одного поставщика, то пропускаем var test = $("td[id^='name']",this).attr('id'); pos = test.indexOf('_'); pos2 = test.indexOf('_', pos+1); var id = test.substr(pos+1, pos2-pos -1); if ( gaMaterialProduct[ id ]['subRowCount'] > 1) { //нашли несколько строк return; } set = sale; // закупить то, что было продано console.log ("1.set = "+ set); // если нет двухкратного запаса if ( col/2 < sale) { set = Math.round( sale*1.2); } if ( col < sale ) { set = sale * up; }else if ( col > sale*14) { // если продажи не существенные set = 0; } else if ( col > sale*8) { // если продажи не существенные set = Math.round( sale /4); } else if ( col > sale*4) { // если запасы слишком большие set = Math.round( sale /2); } else if ( col > sale*3) { set = Math.round( sale *0.8); } else if ( col > sale*2) { set = Math.round( sale *0.95); } else if ( col > sale*1.5) { set = Math.round( sale *up / (col/ sale ) ); } else if ( col > sale ) { set = Math.round( (up+1)*sale - col ); } console.log ("2.set = "+ set); // попробовать пробную партию if ( (sale == 0) && (col == 0) && (amount==0) ){ // пробная закупка set = 1; console.log ("new.set = "+ set); } if( !( (sale == 0) && (amount==0) ) ) { // если на складе запас равен закупке, то значит, все что было продано, уменьшать нельзя if ( amount == col) { set = amount; if ( sale > amount) set = sale * up ; // если продали больше чем купили, то делаем запас на будущее if ( sale <= amount) set = amount * up; } // первая закупка if ((sale == 0) && (col == amount)){ set = amount; } console.log ("3.set = "+ set); // Версия минимального снабжения if (minimal == 1){ if ( sale == col) { if (sale <= amount) set = sale; if (sale > amount) set = Math.round(amount*1.25); } if (amount > sale) { if (col <= sale) { set = Math.round(sale*1.25); //alert("2 sale = " + sale); } } if (sale < col*0.8) { set1 = Math.round(sale*0.8); set2 = Math.round(set*0.8); if (set1 > set2) set = set2; else set = set1; } if (sale < col*0.5) { set1 = Math.round(sale*0.2); set2 = Math.round(set*0.2); if (set1 > set2) set = set2; else set = set1; } if ( amount == col) { set = Math.round(sale*1.25); } } console.log ("4.set = "+ set + " limit = "+ limit); if ( (sale == 0) && (amount < start_shtuk) ){ // пробная закупка set = start_shtuk; console.log ("new.set.2 = "+ set); } if (limit > 0) { prc = market[ img.attr("src") ]; if (prc > 50) addNotes('<img src=' + img.attr("src")+ ' width=16px>' + 'Доля рынка: ' + prc + "%"); var sum = price[ img.attr("src") ]; var s2; var s1 = my_price[ img.attr("src") ] ; if (prc < 100) { s2 = (100*sum - prc*s1)/(100 - prc); } else { s2 = s1; } if (s2 > s1 ){ addNotes('<img src=' + img.attr("src")+ ' width=16px>' + ' проверить цену'); } console.log ("6.set = "+ set); if (prc > limit) { prc_count++; all = Math.round(100*sale/prc); // Не закупать больше рынка if (set > all*1.1) { set = Math.round(all*1.1); } else if ( (col+set -sale) > all*1.1 ) { // прогноз тгго, что будет на складе через персчет new_sklad = col+set - sale; if (new_sklad > all*14) {// ух ты запасов хватит еще на 2 недели торговли set = 0; } else if (new_sklad > all*8) { set = Math.round( sale /4); } else if (new_sklad > all*4) { set = Math.round( sale /2); } else if (new_sklad > all*2) { set = Math.round( sale *0.75); } else if (new_sklad > all) { set = Math.round( sale *0.9); } else { // не держать запасов больше рынка set = Math.round(all*1.1 - col +sale); if (set <0) set = 0; } } // уменьшить прирост закупок до 25% если превышен лимит рынка if ( amount != col) { if ( set/sale > 1.25) { set = Math.round(sale*1.25); } } else { set = Math.round(amount*1.25); } } } console.log ("5.set = "+ set); } if (set != input.attr("value") ) { change++; if ( set > input.attr("value") ){ up_count ++; } else { down_count ++; } } if (set > free) { //console.log(img.attr("src")); if ( !(free==0 && set ==1) ) { addNotes("<img width=16px src="+ img.attr("src") + "> Нехватка товара у поставщика ("+ free +" вместо "+ set + ")" ); } } input.attr("value", set) ; // пишем новое значение n_row++; }); $("#gossnab").append("Обработано строк: " + n_row + ", изменено: "+ change+ " (up:" + up_count + "; down:" + down_count+ ")"); if ( (limit > 0) && (prc_count >0) ){ $("#gossnab").append("<br>Больших долей рынка: " + prc_count+ ""); } } function ClearAmount( ) { var n_row = 0; $("tr[id^='product_']").each( function() { var input = $("input[name^='supplyContractData']:eq(1)", this); input.attr("value", 0); n_row++; }); $("#gossnab").append("Обнулили: " + n_row ); } function SetFactory( mode ) { var n_row = 0; $("tr[id^='product_row']").each( function() { // Требуется var require = parseInt ( $("tr td:contains('Требуется')", this).next().text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); var warehouse = parseInt ( $("tr td:contains('Количество')", this).next().text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); // поле для ввода количества заказываемого товара var input = $("input[name^='supplyContractData']:eq(1)", this); // если больше одного поставщика, то пропускаем var test = $("td[id^='name']",this).attr('id'); pos = test.indexOf('_'); pos2 = test.indexOf('_', pos+1); var id = test.substr(pos+1, pos2-pos -1); if ( gaMaterialProduct[ id ]['subRowCount'] > 1) { //нашли несколько строк return; } k_zak = 0; switch ( mode ) { case 1: set = require; // закупить то, что требуется break; case 2: k_zak = 1; set = 2 * require - warehouse; if (set < 0) set =0; if (warehouse < require) set = require; break; case 3: k_zak = 2; break; case 4: k_zak = 2.5; break; } if (k_zak > 0){ set = (k_zak +1) * require - warehouse; if (set < 0) set =0; if (warehouse < require) set = k_zak * require; } set = Math.round( set ); input.attr("value", set) ; // пишем новое значение n_row++; }); $("#gossnab").append("Обработано строк: " + n_row ); } var out = '<td><span id=gossnab style="color:yellow"></span>'; var input_clear = $('<button id=b_clear>Clear</button>').click(function() { ClearAmount(); }); // данные Для магазинов var tr; // здесь будет список товаров var table; // таблица с товарами // данные по одному товару var col; // на складе //var col = parseInt ( $("tr td:contains('Количество')", this).next().text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); var sale; //продано в магазине //var sale = parseInt ( $("tr td:contains('Продано')", this).next().text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); var amount; // зауплено в этот ход //var amount = parseInt ( $("td:eq(15)", this).text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ); var item_name; // название товара var item_img; // картинка товара var free; // количство свободного товара var input_item; //оля для ввода заказ var error_str = ""; // строка с описанием ошибки var prc_count = 0; //====================================== // Shop // а также базовые функции для выборки данных //====================================== // Контрол для магазинов var wc_shop = $("<li><div id=shop_supply style='float:left;cursor:pointer; color: white;'> <img width=32px title='Рассчитать снабжение' alt='Расчет снабжения' src=https://cdn4.iconfinder.com/data/icons/48x48-free-object-icons/48/Lorry.png> </div>"); // Получить список товаров function getItemList() { table = $("table.list"); // список товаров на заказ tr = $("tr[id^='product_row']", table); console.log("product_row = " + tr.length); } // Получить имя и картинку товара // @param row - строка с данными по товару function getItemName( row ) { // название товара и его картинка img = $("img[src^='/img/products']", row ); item_name = img.attr('alt') ; item_img = img.attr('src') ; //console.log( item_name + ": " + item_img ); } // Получить данные о продажах или о том, сколько товара требуется // @param row - строка с данными по товару function getItemCol( row ) { table2 = $("td:contains('Количество')", row ); td = $("td:contains('Количество')", table2 ).next(); // сколько есть на складе col = parseInt( td.text().replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "") ); //console.log("col = " + col); } // Выделить данные о продажах товара // @param row - строка с данными по товару function getItempSale( row, pattern ) { table2 = $("td:contains('" + pattern + "')", row ); td = $("td:contains('" + pattern + "')", table2 ).next(); // сколько было продано sale = parseInt( td.text().replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "") ); //console.log("sale = " + sale); } // Получить идентификаторы заказов // @param row - строка с данными по товару function getSubId( row ) { tr_id = row.attr('id') ; console.log( "tr_id = " + tr_id); tr_sub_id = tr_id.replace("product_row", "product_sub_row"); console.log( "tr_sub_id = " + tr_sub_id); return "tr[id^='" + tr_sub_id + "']"; } function getInput( row ) { input_item = $("input[name^='supplyContractData[party_quantity]']", row ); } // Получить данные о том сколько можнот заказать // @param row - строка с данными по товару // @partam add - сколько товара надо заказать // @return false - наличие ошибок function getFree( row, add ) { console.log( "-----getFree" ); error_str = ""; free = 0; // по умолчанию считаем что свободного ничего нет //free = $("td[id^='free']", row ); free_td = $("td:contains('Свободно')", row).next(); console.log( "FREE = " + free_td.text() ); if ( free_td.text() == "Не огр."){ free = -1; // очень много } else { free = parseInt( free_td.text().replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","") ); } if ( isNaN(free) ) { error_str = "<img src=" + item_img + " width=16> Отсутствует поставщик"; //addNotes( "<font color=red>" + error_str +"</font>" ); console.log( error_str ); return false; } console.log( "FREE = " + free); // независимый поставщик if ( free == -1 ) return true; // ограничение про заказу со склада max = 0; max_info = $("span:contains('Max:')", row ); if (max_info.length > 0) { // Выбираем минимум из свободного и огранияения по поставке if ( max > free ) free = max; max = parseInt( max_info.text().replace("Max:","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","") ); console.log( "max_info = " + max ); if ( max > free ) free = max; } if ( (add > free) || ( (add > max) && (max > 0) ) ) { error_str = "<img src=" + item_img + " width=16> Недостаточно свободного товара у поставщика"; //addNotes( "<font color=red>" + error_str +"</font>" ); console.log( error_str ); return false; } return true; } // Получить число свобонго товара, прописав 0 - если поставщика нет function getFreeExt( row, add ) { getFree( row, add ); out = free; if (free < 0) out = 0; return out; } // Вычислить сколько надо заказывать function calculateAdd( up ) { set = sale; // закупить то, что было продано console.log ("1.set = "+ set); // если нет двухкратного запаса if ( col/2 < sale) { set = Math.round( sale*1.2); } if ( col < sale ) { set = sale * up; }else if ( col > sale*14) { // если продажи не существенные set = 0; } else if ( col > sale*8) { // если продажи не существенные set = Math.round( sale /4); } else if ( col > sale*4) { // если запасы слишком большие set = Math.round( sale /2); } else if ( col > sale*3) { set = Math.round( sale *0.8); } else if ( col > sale*2) { set = Math.round( sale *0.95); } else if ( col > sale*1.5) { set = Math.round( sale *up / (col/ sale ) ); } else if ( col > sale ) { set = Math.round( (up+1)*sale - col ); } console.log ("2.set = "+ set); // попробовать пробную партию if ( (sale == 0) && (col == 0) && (amount==0) ){ // пробная закупка set = 1; console.log ("new.set = "+ set); } if( !( (sale == 0) && (amount==0) ) ) { // если на складе запас равен закупке, то значит, все что было продано, уменьшать нельзя if ( amount == col) { set = amount; if ( sale > amount) set = sale * up ; // если продали больше чем купили, то делаем запас на будущее if ( sale <= amount) set = amount * up; } // первая закупка if ((sale == 0) && (col == amount)){ set = amount; } console.log ("3.set = "+ set); // Версия минимального снабжения if (minimal == 1){ if ( sale == col) { if (sale <= amount) set = sale; if (sale > amount) set = Math.round(amount*1.25); } if (amount > sale) { if (col <= sale) { set = Math.round(sale*1.25); //alert("2 sale = " + sale); } } if (sale < col*0.8) { set1 = Math.round(sale*0.8); set2 = Math.round(set*0.8); if (set1 > set2) set = set2; else set = set1; } if (sale < col*0.5) { set1 = Math.round(sale*0.2); set2 = Math.round(set*0.2); if (set1 > set2) set = set2; else set = set1; } if ( amount == col) { set = Math.round(sale*1.25); } } // Версия минимального снабжения console.log ("4.set = "+ set); if (limit > 0) { prc = market[ img.attr("src") ]; if (prc > limit) { prc_count++; all = Math.round(100*sale/prc); // Не закупать больше рынка if (set > all*1.1) { set = Math.round(all*1.1); } else if ( (col+set -sale) > all*1.1 ) { // прогноз тгго, что будет на складе через персчет new_sklad = col+set - sale; if (new_sklad > all*14) {// ух ты запасов хватит еще на 2 недели торговли set = 0; } else if (new_sklad > all*8) { set = Math.round( sale /4); } else if (new_sklad > all*4) { set = Math.round( sale /2); } else if (new_sklad > all*2) { set = Math.round( sale *0.75); } else if (new_sklad > all) { set = Math.round( sale *0.9); } else { // не держать запасов больше рынка set = Math.round(all*1.1 - col +sale); if (set <0) set = 0; } } console.log ("6.set = "+ set + ", sale=" + sale); // уменьшить прирост закупок до 25% если превышен лимит рынка if ( amount != col) { if ( set/sale > 1.25) { set = Math.round(sale*1.25); } } else if ( sale < amount ){ set = Math.round(amount*1.25); } } } console.log ("5.set = "+ set); } //input.attr("value", set) ; // пишем новое значение //n_row++; return set; } // Обработка многократных заказов // @param row - строка с данными по товару function processMulti( row, sr_tr, add ) { console.log("processMulti(" + add + ")"); // несколько поставщиков var stat = new Array(); // массив с данными поставщика stat[0] = new Object(); //var inp = new Array(); // массив с полями для ввода данных stat[0]['add'] = 0; // сколько надо заказать stat[0]['free'] = getFreeExt( row, add ); getInput( row ); stat[0]['inp'] = input_item; amount = input_item.val(); //inp[0] = input_item; //console.log(inp[0].val() + " = " + inp[0].length); // цикл по поставщикам for(j=0; j<sr_tr.length; j++){ //console.log( "--- J=" +j + "----"); stat[j+1] = new Object(); stat[j+1]['add'] = 0; // сколько надо заказать stat[j+1]['free'] = getFreeExt( sr_tr.eq(j), add ); getInput( sr_tr.eq(j) ); stat[j+1]['inp'] = input_item; //inp[0] = input_item; } // цикл по поставщикам //console.log( JSON.stringify(stat) ); // простейший вариант - первый попавшийся поставщик выбирается по максимуму штук add_left = add ; for(j=0; j<stat.length; j++) { if ( add_left <= stat[j]['free'] ) { stat[j]['add'] = add_left; add_left = 0; break; } stat[j]['add'] = stat[j]['free']; add_left -= stat[j]['free']; } //console.log( JSON.stringify(stat) + " = " + add_left); // выставляем цифры в интерфейс for(j=0; j<stat.length; j++) { stat[j]['inp'].val( stat[j]['add'] ); console.log( stat[j]['inp'].attr("name") ); } if ( add_left > 0) { error_str = "<img src=" + item_img + " width=16> Нехватка товара у поставщиков (мультизаказ) "; //addNotes( "<font color=red>" + error_str +"</font>" ); } } //================ wc_shop.click( function() { getItemList(); for(i=0; i<tr.length; i++) { getItemName( tr.eq(i) ); getItemCol( tr.eq(i) ); getItempSale( tr.eq(i), "Продано" ); console.log("-----------------"); console.log( item_name + ": " + item_img ); console.log("col = " + col + " sale = " + sale ); // сколько надо заказать товара var add = sale; getInput( tr.eq(i) ); amount = parseInt( input_item.parent().prev().prev().text().replace(" ", '').replace(" ", '').replace(" ", '').replace(" ", '').replace(" ", '').replace(" ", '') ); console.log("amount = " + amount ); add = calculateAdd( 2 ); sr_tr = $( getSubId( tr.eq(i) ), table ); if (sr_tr.length == 0) { // У нас только один поставщик // проверить свободные if ( getFree( tr.eq(i), add ) == false) continue; console.log("add = " + add ); input_item.val(add); continue; } console.log("много поставщиков"); processMulti( tr.eq(i), sr_tr, add ); }// цикл по товарам (компонентам) }); function checkShop( ) { // кривой способ определения типа юнита по названию вкладки var title = $.trim( $('ul.tabu li').eq(1).text() ); //console.log( title ); if ( title == 'Магазин' ) return true; //if ( img =='<img src="/img/v2/units/shop') return true; //if ( img =='<img src="/img/v2/units/fuel') return true; return false; } //var img = $("#unitImage").html(); //img = img.substr(0,img.length-8); // Проверить, что это магазин //if ( img =='<img src="/img/v2/units/shop') { if ( checkShop( ) ) { // кнопки var input_2 = $('<button id=b2>1:1 up2</button>').click(function() { SetAmount(2); }); var input_5 = $('<button id=b5>1:1 up4</button>').click(function() { SetAmount(4); }); var container = $('div.metro_header'); container.append( $('<table><tr>').append('<td>').append(input_2).append('<td>').append(input_5).append('<td>').append(input_clear).append( out) ); container = $('ul.tabu'); container = $("li:last", container).prev().parent(); container.append(wc_shop) ; //$("table.infoblock").before("<span id=factory_supply_info></span>"); // найти "свободно" $("td[id^='free']").attr('title','Закупить весь остаток').live('dblclick', function(){ var free = $(this).text().replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '').replace(' ', '') ; var td = $("td[id^='quantityField']", $(this).parent().parent().parent().parent().parent() ) ; var input = $("input[name^='supplyContractData']:eq(0)", td ); input.attr("value", free) ; }); var market = new Array(); var price = new Array(); var my_price = new Array(); if (limit > 0) { // Формируем ссылку на торговый зал var url = /^https:\/\/virtonomic[as]\.(\w+)\/\w+\//.exec(location.href)[0]; //var id = /\/unit\/view\/(\d+)/.exec(location.href)[0]; var id = /\/unit\/view\/(\d+)/.exec(location.href)[0]; url = url + "main" + id + "/trading_hall"; //alert(url); $.get(url, function(data) { //alert("read"); var td = $("td:contains('%')", data); for (i=1; i< td.length; i++) { td_pr = td.eq(i); tr = td_pr.parent(); img = $("img[src*='/img/products']", tr); // Наша доля на рынке market[ img.attr('src') ] = parseFloat( td_pr.text().replace('%', '') ); //Цена продажи в магазинах города price[ img.attr('src') ] = parseFloat( td_pr.next().text().replace('$', '').replace(' ','').replace(' ','').replace(' ','').replace(' ','').replace(' ','') ); //console.log(price[ img.attr('src') ]); // моя цена продажи } var inp = $("input[name^='productData[price]']", data); console.log("inp = "+ inp.length); for(var i=0; i<inp.length; i++){ img = $("img[src*='/img/products']", inp.eq(i).parent().parent() ); //console.log( img.attr('src') + "===" + inp.eq(i).val() ); my_price[ img.attr('src') ]= parseFloat( inp.eq(i).val() ); } }); //alert('post read'); } } // Проверить не завод ли это function checkType() { // кривой способ определения типа юнита по названию вкладки var title = $.trim( $('ul.tabu li').eq(1).text() ); //console.log( title ); if ( title == 'Завод' ) return true; if ( title == 'Мельница' ) return true; if ( title == 'Ферма' ) return true; if ( title == 'Предприятие дошкольного образования' ) return true; if ( title == 'Ресторан' ) return true; if ( title == 'Авторемонтная мастерская' ) return true; if ( title == 'Оператор мобильной связи' ) return true; if ( title == 'Медицинский центр' ) return true; /* var head = $("#unitImage"); var img = $("img", head); link = img.attr('src'); n = link.indexOf('workshop'); if (n > 0) return true; n = link.indexOf('mill'); if (n > 0) return true; n = link.indexOf('animalfarm'); if (n > 0) return true; */ return false; } //====================================== // Factory //====================================== // Вычислить сколько надо заказывать // @param k - Коэффициент заказа function calculateFactoryAdd( k ) { return sale * k - col; } var wc_factory = $("<li><div id=factory_supply style='float:left;cursor:pointer; color: white;'> <img width=32px title='Рассчитать снабжение' alt='Расчет снабжения' src=https://cdn4.iconfinder.com/data/icons/48x48-free-object-icons/48/Lorry.png> </div>"); // Обработчик для завода- wc_factory.click( function() { getItemList(); // аналогично магазину for(i=0; i<tr.length; i++) { getItemName( tr.eq(i) ); getItemCol( tr.eq(i) ); getItempSale( tr.eq(i), "Требуется" ); console.log("-------w----------"); console.log( item_name + ": " + item_img ); console.log("col = " + col + " sale = " + sale ); getInput( tr.eq(i) ); // сколько надо заказать товара var add = add = calculateFactoryAdd( factory_store );; console.log("add=" +add); sr_tr = $( getSubId( tr.eq(i) ), table ); if (sr_tr.length == 0) { // У нас только один поставщик // проверить свободные if ( getFree( tr.eq(i), add ) == false) continue; add = calculateFactoryAdd( factory_store ); console.log("add = " + add ); input_item.val(add); continue; } console.log("--------много поставщиков"); processMulti( tr.eq(i), sr_tr, add ); }// цикл по товарам (компонентам) $("input[name='applyChanges']").click(); }); if ( checkType() == true ){ // кнопки var input_100 = $('<button id=b100>1:1</button>').click(function() { SetFactory(1); }); var input_200 = $('<button id=b200>х1</button>').click(function() { SetFactory(2); }); var input_х2 = $('<button id=bх2>х2</button>').click(function() { SetFactory(3); }); var input_х25 = $('<button id=bх25>х2.5</button>').click(function() { SetFactory(4); }); var container = $('div.metro_header'); container.append( $('<table><tr>').append('<td>').append(input_100) .append('<td>').append(input_200).append('<td>').append(input_х2).append('<td>').append(input_х25).append('<td>').append(input_clear).append( out) ); container = $("li:last", $("ul.tabu")).prev().parent(); container.append(wc_factory) ; $("table.infoblock").before("<span id=factory_supply_info></span>"); } // склады var wc_warehouse = $("<li><div id=factory_supply style='float:left;cursor:pointer; color: white;'> <img width=32px title='Рассчитать снабжение' alt='Расчет снабжения' src=https://cdn4.iconfinder.com/data/icons/48x48-free-object-icons/48/Lorry.png> </div>").click( function() { var table = $("table.list"); // список товаров на заказ var tr = $("tr.p_title, tr.odd, tr.even", table); console.log("TR = " + tr.length); var all = 0; var require = 0; var left = 0; // осталось for(i=0; i<tr.length; i++) { row = tr.eq(i); //console.log("row = " + row.html() ); if (row.hasClass('p_title') ) { // Начало нового товра console.log("----------\nNEW" ); title = $("td.p_title_l", row); all = $("td:contains('На складе:')", title ).next().text(); all = parseInt( all.replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","") ); console.log("all = " + all ); require = $("td:contains('по контрактам')", title ).next().text(); require = parseInt( require.replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","") ); console.log("require = " + require ); left = require; continue; } td = $("td.num:last", row); str = $("span" , td); n = str.html().indexOf("<br>"); // такого быть не должно if (n ==0 ) continue; free = parseInt( str.html().substring(0, n).replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","").replace(" ","") ); console.log("free = " + free ); // поле для ввода input = $("input", row); add = free; if (left < free) add = left; input.val(add); left -= add; } }); // warehouse head = $("#unitImage"); img = $("img", head); link = img.attr('src'); n = link.indexOf('warehouse'); if (n > 0) { container = $('#topblock').next(); container = $("li:last", container).prev().parent(); container.append(wc_warehouse) ; } }; // Хак, что бы получить полноценный доступ к DOM >:] var script = document.createElement("script"); script.textContent = '(' + run.toString() + ')();'; document.documentElement.appendChild(script);