Greasy Fork is available in English.

Virtonomica:SaveShopInfo(ShopWarehouse)

Автосохранение данных о ценах магазинов и заправок в локальном хранилище для использования в скрипте ShopWarehouse

// ==UserScript==
// @name           Virtonomica:SaveShopInfo(ShopWarehouse)
// @namespace      Virtonomica
// @description    Автосохранение данных о ценах магазинов и заправок в локальном хранилище для использования в скрипте ShopWarehouse
// @author         UnclWish
// @version        1.08
// @include        http*://*virtonomic*.*/*/main/unit/view/*/trading_hall
// @include        http*://*virtonomic*.*/*/main/unit/view/*/sale
// @include        http*://*virtonomic*.*/*/main/unit/view/*
// ==/UserScript==

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

	/**
	* записать данные в локальнео хранилище, с проверкой ошибок
	*/

	// Если это не нужная страница - выходим
	var title=$('#wrapper > div.metro_header > div > div.picture').attr('class');
	var a1=$('div.title').text().trim();
	var a2=(location.href).slice(-4);
	var href = location.href;

	if (title.search('header-incinerator_power') != -1) return;
	if (title.search('unit-header-cellular') == -1) {
		if (a1.indexOf("Офис") != -1) {
			if (href.indexOf('trading_hall') == -1) {
			if (href.indexOf('sale') == -1) return};}}
	//	if ((href.indexOf('sale') > 0) & (title.search('unit-header-warehouse') == -1)) return
	//	if ((href.indexOf('sale') == -1) & (title.search('unit-header-warehouse') == -1)) return};

	//console.log(a2);
	  if (isNaN(a2) & a2 != "sale" & a2 != "hall") return; //Выход если не главная страница или продажа


	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 Save() {
		out = 'OK';
		//n = shop_time.length;

		var flag_save = false;

		if(title.search('unit-header-shop')!=-1 || title.search('fuel')!=-1){
		var inp_sale = $("input[name*='productData[price]']");
		//console.log(inp_sale.length);
		//var td_sale = $("td:contains('$')");
		var td_sale = $("input[name*='productData[price]']").parent().prev();
		for (var i=0; i<inp_sale.length; i++) {
			var inp = inp_sale.eq(i);
			var td_pr = td_sale.eq(i);
			var tr = inp.parent().parent();

			var href = $("a[href*='globalreport/marketing']", tr);
			if (href.attr('href') == null) continue;
			var id_item = /(\d+)/.exec( href.attr('href') )[0];
			var img = $("a[href*='globalreport/marketing'] > img", tr);
			var img_item = img.attr('src');
			//console.log (img_item);

			if (shop_price[id_shop] == null) shop_price[id_shop] = new Object();

			//console.log( "www " + td_pr.text() );
			//console.log (id_item, id_shop, img_item);
			shop_price[id_shop][ id_item ] = inp.attr('value');
			shop_price[id_shop][ img_item ] = inp.attr('value');

			if ( shop_transport[ id_shop ] == null ) shop_transport[id_shop] = new Object();

			//td_pr = $("td", tr).eq(8);
			//console.log("TD_PR = " + td_pr.text());
			shop_transport[id_shop][ id_item ] = parseFloat( td_pr.text().replace('$', '').replace(' ','').replace(' ','').replace(' ','') );
		}
		if (inp_sale.length>0) {
			ToStorage('shop_price', shop_price);
			ToStorage('shop_transport', shop_transport);
			flag_save = true;
		}
		// Видимо это не нашего магазина
		//if (flag_save == false) return false;
		if (flag_save == false) {
		inp_sale = $("td:contains('%')").prev();
		//var td_sale = $("input[name*='productData[price]']").parent().prev();
		for (i=0; i<inp_sale.length; i++) {
			inp = inp_sale.eq(i);
			//var td_pr = td_sale.eq(i);
			tr = inp.parent();

			//var href = $("a[href*='by_trade_at_cities']", tr);
			//if (href.attr('href') == null) continue;
			//var id_item = /(\d+)/.exec( href.attr('href') )[0];
			img = $("td > img", tr);
			img_item = img.attr('src');
			//console.log (id_item);

			if (shop_price[id_shop] == null) shop_price[id_shop] = new Object();

			//console.log( "www " + td_pr.text() );

			//shop_price[id_shop][ id_item ] = inp.attr('value');
			shop_price[id_shop][ img_item ] = inp.text().replace('$', '').replace(' ','').replace(' ','').replace(' ','');

			//if ( shop_transport[ id_shop ] == null ) shop_transport[id_shop] = new Object();

			//td_pr = $("td", tr).eq(8);
			//console.log("TD_PR = " + td_pr.text());
			//shop_transport[id_shop][ id_item ] = parseFloat( td_pr.text().replace('$', '').replace(' ','').replace(' ','').replace(' ','') );
		}
		}
		if (inp_sale.length>0) {
			ToStorage('shop_price', shop_price);
			ToStorage('shop_transport', shop_transport);
			flag_save = true;
		}

		var td = $("td[align='right'][class='nowrap']:contains('%')");
		for (i=0; i< td.length; i++) {
			td_pr = td.eq(i);
			tr = td_pr.parent();

			//href = $("a[href*='by_trade_at_cities']", tr);
			img = $("img[src*='/img/products']", tr);
			img_item = img.attr('src');
			//if (href.attr('href') == null) continue;
			//id_item = /(\d+)/.exec( href.attr('href') )[0];
			//console.log(id_item);
			//console.log(img_item);

			if (market[ id_shop ] == null) market[ id_shop ] = new Object();

			//market[ id_shop ][ id_item ] = parseFloat( td_pr.text().replace('%', '') );
			market[ id_shop ][ img_item ] = parseFloat( td_pr.text().replace('%', '') );
		}

		if (td.length > 0) {
			ToStorage('market', market);
			flag_save = true;
		}
		}

		if (title.search('unit-header-warehouse')!=-1 || title.search('animalfarm')!=-1 || title.search('mill')!=-1 || title.search('workshop')!=-1 || title.search('mine')!=-1) {
		inp_sale = $("input[name*='[price]']");
		//var td_sale = $("td:contains('$')");
		td_sale = $("input[name*='[price]']").parent().prev().prev().prev();
		//console.log(inp_sale);
		for (i=0; i<inp_sale.length; i++) {
			inp = inp_sale.eq(i);
			td_pr = td_sale.eq(i);
			tr = inp.parent().parent();

			//href = $("a[href*='by_trade_at_cities']", tr);
			//if (href.attr('href') == null) continue;
			//id_item = /(\d+)/.exec( href.attr('href') )[0];
			img = $("img[src*='/img/products']", tr);
			img_item = img.attr('src');
			//console.log (img_item);

			if (shop_price[id_shop] == null) shop_price[id_shop] = new Object();

			//console.log( "www " + td_pr.text() );

			//shop_price[id_shop][ id_item ] = inp.attr('value');
			shop_price[id_shop][ img_item ] = parseFloat(inp.attr('value')).toFixed(2);

			if ( shop_transport[ id_shop ] == null ) shop_transport[id_shop] = new Object();

			//td_pr = $("td", tr).eq(8);
			//console.log("TD_PR = " + td_pr.text());
			td_pr = $("td:contains('Себестоимость')",td_pr).next();
			//console.log (td_pr.text());
			shop_transport[id_shop][ img_item ] = parseFloat(td_pr.text().replace('$', '').replace(' ','').replace(' ','').replace(' ',''));
		}

			if (inp_sale.length>0) {
			ToStorage('shop_price', shop_price);
			ToStorage('shop_transport', shop_transport);
			flag_save = true;
		}
		// Видимо это не наше подразделение
		//if (flag_save == false) return false;
		if (flag_save == false) {
		inp_sale = $("td[align='right'][class='nowrap']:contains('$')");
		//var td_sale = $("input[name*='productData[price]']").parent().prev();
		for (i=0; i<inp_sale.length; i++) {
			inp = inp_sale.eq(i);
			//var td_pr = td_sale.eq(i);
			tr = inp.parent();

			//var href = $("a[href*='by_trade_at_cities']", tr);
			//if (href.attr('href') == null) continue;
			//var id_item = /(\d+)/.exec( href.attr('href') )[0];
			img = $("img[src*='/img/products']", tr);
			img_item = img.attr('src');
			//console.log (id_item);

			if (shop_price[id_shop] == null) shop_price[id_shop] = new Object();

			//console.log( "www " + td_pr.text() );

			//shop_price[id_shop][ id_item ] = inp.attr('value');
			shop_price[id_shop][ img_item ] = inp.text().replace('$', '').replace(' ','').replace(' ','').replace(' ','');

			//if ( shop_transport[ id_shop ] == null ) shop_transport[id_shop] = new Object();

			//td_pr = $("td", tr).eq(8);
			//console.log("TD_PR = " + td_pr.text());
			//shop_transport[id_shop][ id_item ] = parseFloat( td_pr.text().replace('$', '').replace(' ','').replace(' ','').replace(' ','') );
		}
		}
			if (inp_sale.length>0) {
			ToStorage('shop_price', shop_price);
			ToStorage('shop_transport', shop_transport);
			flag_save = true;
		}
		}

		if (title.search('unit-header-network')!=-1) {
		inp_sale = $("input[name*='[price]']");
		//var td_sale = $("td:contains('$')");
		//td_sale = $("input[name*='[price]']").parent().prev().prev().prev();
		//console.log(inp_sale);
		for (i=0; i<inp_sale.length; i++) {
			inp = inp_sale.eq(i);
			//td_pr = td_sale.eq(i);
			//tr = inp.parent().parent();

			//href = $("a[href*='by_trade_at_cities']", tr);
			//if (href.attr('href') == null) continue;
			//id_item = /(\d+)/.exec( href.attr('href') )[0];
			id_item = "Трафик";
			//img = $("img[src*='/img/products']", tr);
			//img_item = img.attr('src');
			//console.log (img_item);

			if (shop_price[id_shop] == null) shop_price[id_shop] = new Object();

			//console.log( "www " + td_pr.text() );

			shop_price[id_shop][ id_item ] = inp.attr('value');
			//shop_price[id_shop][ img_item ] = inp.attr('value');

			//if ( shop_transport[ id_shop ] == null ) shop_transport[id_shop] = new Object();

			//td_pr = $("td", tr).eq(8);
			//console.log("TD_PR = " + td_pr.text());
			//td_pr = $("td:contains('Себестоимость')",td_pr).next();
			//console.log (td_pr.text());
			//shop_transport[id_shop][ img_item ] = parseFloat(td_pr.text().replace('$', '').replace(' ','').replace(' ','').replace(' ',''));
		}
			if (inp_sale.length>0) {
			ToStorage('shop_price', shop_price);
			//ToStorage('shop_transport', shop_transport);
			flag_save = true;
		}
		}

		//if (flag_save == false) return false;
		if (title.search('unit-header-cellular')!=-1) {
		//inp_sale = $("input[name*='servicePrice']");
		inp_sale = $("a[href*='service_history']");
		//var td_sale = $("td:contains('$')");
		//td_sale = $("input[name*='[price]']").parent().prev().prev().prev();
		//console.log(inp_sale);
		for (i=0; i<inp_sale.length; i++) {
			inp = inp_sale.eq(i);
			//td_pr = td_sale.eq(i);
			//tr = inp.parent().parent();

			//href = $("a[href*='by_trade_at_cities']", tr);
			//if (href.attr('href') == null) continue;
			//id_item = /(\d+)/.exec( href.attr('href') )[0];
			id_item = "Трафик";
			//img = $("img[src*='/img/products']", tr);
			//img_item = img.attr('src');
			//console.log (img_item);

			if (shop_price[id_shop] == null) shop_price[id_shop] = new Object();

			//console.log( "www " + td_pr.text() );

			shop_price[id_shop][ id_item ] = inp.text().replace('$', '').replace(' ','').replace(' ','').replace(' ','');
			//shop_price[id_shop][ img_item ] = inp.attr('value');

			//if ( shop_transport[ id_shop ] == null ) shop_transport[id_shop] = new Object();

			//td_pr = $("td", tr).eq(8);
			//console.log("TD_PR = " + td_pr.text());
			//td_pr = $("td:contains('Себестоимость')",td_pr).next();
			//console.log (td_pr.text());
			//shop_transport[id_shop][ img_item ] = parseFloat(td_pr.text().replace('$', '').replace(' ','').replace(' ','').replace(' ',''));
		}
			if (inp_sale.length>0) {
			ToStorage('shop_price', shop_price);
			//ToStorage('shop_transport', shop_transport);
			flag_save = true;
		}

		// Видимо это не наше подразделение
		//if (flag_save == false) return false;
		if (flag_save == false) {
		inp_sale = $("td:contains('$')");
		//console.log(inp_sale);
		//var td_sale = $("input[name*='productData[price]']").parent().prev();
		for (i=0; i<inp_sale.length; i++) {
			inp = inp_sale.eq(i);
			//var td_pr = td_sale.eq(i);
			//tr = inp.parent();

			//var href = $("a[href*='by_trade_at_cities']", tr);
			//if (href.attr('href') == null) continue;
			//var id_item = /(\d+)/.exec( href.attr('href') )[0];
			id_item = "Трафик";
			//img = $("img[src*='/img/products']", tr);
			//img_item = img.attr('src');
			//console.log (id_item);

			if (shop_price[id_shop] == null) shop_price[id_shop] = new Object();

			//console.log( "www " + td_pr.text() );

			//shop_price[id_shop][ id_item ] = inp.attr('value');
			//inp = inp.text().replace(' за минуту разговора','').replace('$', '').replace(' ','').replace(' ','').replace(' ','');
			shop_price[id_shop][ id_item ] = inp.text().replace(' за минуту разговора','').replace('$', '').replace(' ','').replace(' ','').replace(' ','');

			//if ( shop_transport[ id_shop ] == null ) shop_transport[id_shop] = new Object();

			//td_pr = $("td", tr).eq(8);
			//console.log("TD_PR = " + td_pr.text());
			//shop_transport[id_shop][ id_item ] = parseFloat( td_pr.text().replace('$', '').replace(' ','').replace(' ','').replace(' ','') );
		}
			if (inp_sale.length>0) {
			ToStorage('shop_price', shop_price);
			//ToStorage('shop_transport', shop_transport);
			flag_save = true;
		}
		}
		}

		shop_time[ id_shop ] = today ;
		//console.log(flag_save);

		ToStorage('shop_time', shop_time);

		$("#jsinfo").html("Статус: " + out );
		return true;
	}

	function View() {
		out = "LocalStorage:<br>";

		// выводим все что было в локальном хранилище по данному магазину
		out += "id = " + id_shop + "<br>";
		out += "market = " + getFromStorage(market, id_shop) + "<br>";
		out += "shop_price = " + getFromStorage(shop_price, id_shop) + "<br>";
		out += "shop_transport =" + getFromStorage(shop_transport, id_shop) + "<br>";
		out += "shop_time =" + getFromStorage(shop_time, id_shop) ;

		$("#jsinfo").html( out );
	}

	function Clear() {
		out = "Локальное хранилище очищено";
		// выводим все что было в локальном хранилище
		for (var i=0; i<localStorage.length; i++) {
			localStorage.removeItem(localStorage[i]);
		//localStorage.removeItem('market');
		//localStorage.removeItem('shop_price');
		//localStorage.removeItem('shop_transport');
		//localStorage.removeItem('shop_time');
		}
		$("#jsinfo").html( out );
	}

	// Идентификатор подразделения
	var id_shop = /(\d+)/.exec(location.href)[0];

	// Время обнолвения данных о ценах
	var shop_time = JSON.parse( window.localStorage.getItem('shop_time') );
	if (shop_time == null) shop_time = new Object();

	var d = new Date();
	var today = d.getFullYear() + "." + d.getMonth() + "." + d.getDate();

	// Объем рынка
	var market = JSON.parse( window.localStorage.getItem('market') );
	if (market == null) market = new Object();

	// Цена продажи
	var shop_price = JSON.parse( window.localStorage.getItem('shop_price') );
	if (shop_price == null) shop_price =new Object();

	// Цена в магазине
	var shop_transport = JSON.parse( window.localStorage.getItem('shop_transport') );
	if ( shop_transport == null ) shop_transport = new Object();

	//console.log("End main");
	var rc = Save();
	// Если это не магазин, то и кнопки нам не нужны
	// а если и магазин без товара, то кнопки тоже не нужны
	// кнопки
	 var save = $('<button id=bsave>Сохранить</button>').click(function() {
		Save();
	});
	 var view = $('<button id=bview>Просмотр</button>').click(function() {
		View();
	});
	 var clear = $('<button id=bview>Очистка хранилища</button>').click(function() {
		Clear();
	});
	var out = '<td><span id=jsinfo style="color:yellow"></span>';
	//var container = $('#topblock');
	//var container = $('div.metro_header');
	//var container = $('#childMenu');
	//container.append( $('<table><tr><td>').append("<font color=white>Локальное хранилище: </font>").append(save) .append('<td>').append(view) .append('<td>').append(clear).append(out) );

	if (rc == true) return;
	Save();
	//alert("end");
}

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