// Dataservice view 01.10.2024 v1.3.4
// Piter Gavrinev
const _root = document.location.origin + "/dataservice";
const _publications = '/dataservice/publications';
const _datasets = '/dataservice/datasets';
const _measures = '/dataservice/measures';
const _years = '/dataservice/years';
const _data = '/dataservice/data';
const _datasetDescription = '/dataservice/DatasetDescription';
const chartId = "linear-chart";
var IsEng = false;
var selObject = {
PubId: -1,
Pubtitle: null,
DsId: -1,
MeasId: -1,
MeasTitle: null,
Year1: -1,
Year2: -1,
data: null,
datasetsData: null,
metLink: null,
units: null,
currentType: 1,
currentName: "", // название показателя
currentFullName: "", // полное название показателя
comparedData: [],
reporting: "", // тип показателя
currentLink: "", // ссылка на источник
range_end: null,
updated_time: null,
// range_start: null,
pubs: null,
datasts: null,
measrs: null,
yearsCalendarObj: null,
btnReload: null
};
$(function () {
Highcharts.setOptions({
lang: {
decimalPoint: ",",
thousandsSep: " ",
}
});
var lang = $("meta[name='zoom:lang']").attr("content");
moment.locale(lang);
IsEng = (lang === 'en');
$("#GrafZone").hide();
InitControls();
fillPublications();
$("#log_switch1").change(function () {
PaintChartForComparedData();
});
$("#compareTab").click(function () {
RollComparedData();
PaintChartForComparedData();
});
$("#clearCompare").click(function () {
ClearAllComparedData();
});
$("#copyScriptArea").on('click', function () {
CopyScript();
});
$("#dataTab").on('click', function () {
$('[data-table]').floatThead('reflow');
});
});
var pub_description_arr = [];
function btnDisable(btn, IsDisable) {
if (IsDisable) {
btn.attr("disabled", "disabled");
} else {
btn.removeAttr("disabled");
}
}
function LoadDescription(id) {
$.ajax({
url: _datasetDescription,
data: { datasetId: id },
cache: false
}).done(function (data) {
$("#metDescription").html(data[0].description);
});
}
function InitControls() {
selObject.pubs = new AIC_LevelControl(false, "Категория", "Категории");
selObject.pubs._rootEl.addClass("service");
selObject.pubs.Disable(true);
selObject.pubs.AppendTo($("#Widgets"));
selObject.datasts = new AIC_LevelControl(false, "Показатели", "Показатели");
selObject.datasts._rootEl.addClass("service");
selObject.datasts.Disable(true);
selObject.datasts.AppendTo($("#Widgets"));
selObject.measrs = new AIC_LevelControl(false, "Разрез", "Разрез");
selObject.measrs.Disable(true);
selObject.measrs._rootEl.addClass("service");
selObject.measrs.AppendTo($("#Widgets"));
selObject.yearsCalendarObj = new AIC_YearToYearCalendarControl(null, null, false, "Годы");
selObject.yearsCalendarObj.Disable(true);
selObject.yearsCalendarObj._rootEl.addClass("service");
selObject.yearsCalendarObj.AppendTo($("#Widgets"));
var ReloadButton = div("filters_submit service");
selObject.btnReload = $("Применить ");
selObject.btnReload.click(function () {
selObject.Year1 = selObject.Year1;
selObject.Year2 = selObject.Year2;
fillDataTable();
});
ReloadButton.append(selObject.btnReload);
$("#Widgets").append(ReloadButton);
selObject.datasts.click(function (id) {
selObject.measrs.Disable(true);
selObject.yearsCalendarObj.Disable(true);
btnDisable(selObject.btnReload, true);
selObject.DsId = id;
selObject.MeasId = -1;
selObject.MeasTitle = null;
var sel_pok_obj = selObject.datasetsData.find(function (stype) { return stype.id == id });
selObject.reporting = sel_pok_obj.reporting;
selObject.currentType = sel_pok_obj.type;
selObject.currentName = sel_pok_obj.name;
selObject.currentFullName = sel_pok_obj.full_name;
selObject.currentLink = sel_pok_obj.link;
selObject.updated_time = sel_pok_obj.updated_time;
LoadDescription(id);
if (selObject.currentType == 2 || selObject.currentType == 3 || selObject.currentType == 4) {
selObject.MeasId = null;
selObject.MeasTitle = null;
FillYearsPeriod();
return;
}
if (id != -1) {
fillMeasures();
}
});
selObject.measrs.click(function (id, title) {
btnDisable(selObject.btnReload, true);
selObject.MeasId = id;
selObject.MeasTitle = title;
if (id != -1) {
FillYearsPeriod();
}
});
selObject.yearsCalendarObj.click(function (FromY, ToY) {
selObject.Year1 = FromY;
selObject.Year2 = ToY;
btnDisable(selObject.btnReload, false);
fillDataTable();
});
}
function fillPublications() {
selObject.pubs.SetLoadding(true);
$.ajax({
url: _publications,
cache: false
}).done(function (data) {
$.each(data, function (id, item) {
selObject.pubs.AddLevel(item.id, item.parent_id, item.category_name, item.NoActive);
pub_description_arr.push({
id: item.id,
category_name: item.category_name,
desc: item.pub_description,
//updated_time: item.updated_time,
//range_start: item.range_start,
range_end: item.range_end
});
});
selObject.pubs.Disable(false);
selObject.pubs.SetLoadding(false);
selObject.pubs.click(function (id) {
selObject.measrs.Clear();
selObject.measrs.Disable(true);
selObject.yearsCalendarObj.Disable(true);
btnDisable(selObject.btnReload, true);
selObject.PubId = id;
selObject.DsId = -1;
selObject.MeasId = -1;
selObject.Pubtitle = null;
$("#part_description_text").text('');
if (id != -1) {
fillDatasets(id);
var part_description = pub_description_arr.find(function (item) {
return item.id == id;
});
if (typeof (part_description) != "undefined" && part_description != 'NULL') {
selObject.Pubtitle = part_description.category_name;
selObject.metLink = part_description.desc;
}
} else {
selObject.datasts.Clear();
selObject.datasts.Disable(true);
};
});
selObject.pubs.ReInit();
}).fail(function () {
alert("error load...");
}).always(function () {
selObject.pubs.SetLoadding(false);
});
}
function fillDatasets() {
selObject.datasts.SetLoadding(true);
$.ajax({
url: _datasets,
data: { publicationId: selObject.PubId },
cache: false
}).done(function (data) {
selObject.datasetsData = data;
selObject.datasts.Clear();
$.each(data, function (id, item) {
selObject.datasts.AddLevel(item.id, item.parent_id, item.name);
});
selObject.datasts.Disable(false);
selObject.datasts.ReInit();
}).fail(function () {
alert("error load...");
}).always(function () {
selObject.datasts.SetLoadding(false);
});
}
function fillMeasures() {
selObject.measrs.SetLoadding(true);
$.ajax({
url: _measures,
data: { datasetId: selObject.DsId },
cache: false
}).done(function (data) {
selObject.measrs.Clear();
$.each(data.measure, function (id, item) {
selObject.measrs.AddLevel(item.id, item.parent_id, item.name);
});
selObject.measrs.Disable(false);
selObject.measrs.ReInit();
}).fail(function () {
alert("error load...");
}).always(function () {
selObject.measrs.SetLoadding(false);
});
}
function FillYearsPeriod() {
selObject.yearsCalendarObj.SetLoadding(true);
$.ajax({
url: _years,
data: { measureId: selObject.MeasId, datasetId: selObject.DsId },
cache: false
}).done(function (data) {
selObject.yearsCalendarObj.Disable(false);
if (selObject.comparedData.length > 0) {
if (data[0].FromYear > selObject.Year1 || data[0].ToYear < selObject.Year2) {
selObject.yearsCalendarObj.SetMxMinYears(data[0].FromYear, data[0].ToYear);
selObject.yearsCalendarObj.SetYears(data[0].ToYear, data[0].ToYear);
selObject.Year1 = data[0].ToYear;
selObject.Year2 = data[0].ToYear;
} else {
selObject.yearsCalendarObj.SetMxMinYears(data[0].FromYear, data[0].ToYear);
selObject.yearsCalendarObj.SetYears(selObject.Year1, selObject.Year2);
}
} else {
selObject.yearsCalendarObj.SetMxMinYears(data[0].FromYear, data[0].ToYear);
selObject.yearsCalendarObj.SetYears(data[0].ToYear, data[0].ToYear);
selObject.Year1 = data[0].ToYear;
selObject.Year2 = data[0].ToYear;
}
btnDisable(selObject.btnReload, false);
selObject.yearsCalendarObj.ReInit();
}).fail(function () {
alert("error load...");
}).always(function () {
selObject.yearsCalendarObj.SetLoadding(false);
});
}
function fillDataTable() {
$("#dataset_fullname").text(selObject.currentFullName);
var $chart = $('#' + chartId);
$chart.empty();
selObject.btnReload.addClass("_loading");
$.ajax({
url: _data,
data: { y1: selObject.Year1, y2: selObject.Year2, publicationId: selObject.PubId, datasetId: selObject.DsId, measureId: selObject.MeasId },
cache: false
}).done(function (data) {
//tbl.removeClass("_loading");
selObject.data = data;
selObject.units = data.units;
$("#MetaZone").show();
$("#GrafZone").hide();
ShowMetadata(data);
RollTable(data);
selObject.btnReload.removeClass("_loading");
});
}
function AppendToCompare(id, name, DataType) {
comp_id = DataType + "_" + selObject.DsId + "_" + selObject.MeasId + "_" + id;
var indexToRemove = selObject.comparedData.findIndex(function (selObj) {
return selObj.id == comp_id;
});
if (indexToRemove > -1) {
selObject.comparedData.splice(indexToRemove, 1);
$("#comparedCounter").text("(" + selObject.comparedData.length + ")");
if (selObject.comparedData.length == 0) {
HideCompare();
return;
} else {
PopperOnCompare("Удалено из сравнения");
}
return;
}
var SelectedData = selObject.data.RawData.filter(function (item) {
if (DataType == 4) return true;
if (DataType == 3 && item.measure_id == id) return true;
if ((DataType == 1 || DataType == 2) && item.element_id == id) return true;
return false;
});
if (SelectedData.length == 0) {
return false;
}
var compaeObj = {
id: comp_id,
name: name,
DataType: DataType,
data: SelectedData,
unit: SelectedData[0].unit_id,
unit_name: selObject.units.find(function (stype) { return stype.id == SelectedData[0].unit_id }).val
};
selObject.comparedData.push(compaeObj);
$("#comparedCounter").text("(" + selObject.comparedData.length + ")");
PopperOnCompare("Добавлено к сравнению");
return comp_id;
}
function RollTable(data) {
var root_tbl_load = $("#ResultTBLLoad");
var root_tbl_wrapper = $("#ResultTBL");
root_tbl_load.show();
root_tbl_wrapper.empty();
var arr_left = div("table-arrow table-arrow-left hide");
arr_left.append(div("table-arrow_icon"));
root_tbl_wrapper.append(arr_left);
var arr_right = div("table-arrow table-arrow-right");
arr_right.append(div("table-arrow_icon"));
root_tbl_wrapper.append(arr_right);
var root_tbl = div("table-inner");
root_tbl_wrapper.append(root_tbl);
var scroll_tbl = div("table");
root_tbl.append(scroll_tbl);
scroll_tbl.attr("id", "scroll");
var tbl = $("
");
scroll_tbl.append(tbl);
var thead = $(" ");
var tbody = $(" ");
tbl.append(thead);
tbl.append(tbody);
var srcLinkDiv = $("Источник данных:
");
var linkSource = $(" ");
linkSource.attr("href", selObject.currentLink);
linkSource.text(linkSource.prop('hostname'));
srcLinkDiv.append(linkSource);
root_tbl.append(srcLinkDiv);
var tr = $("");
if (selObject.reporting == "date") {
tr.append($("Данные на "));
} else if (selObject.reporting == "period") {
tr.append($("Данные за "));
} else {
tr.append($("Отчетный период "));
}
thead.append(tr);
var tr_controls = $(" ");
tr_controls.append($(" "));
thead.append(tr_controls);
var headerData = data.headerData;
// make header
$.each(headerData, function (id, item) {
var th = $(" ");
th.text(item.elname);
tr.append(th);
var th_sub = $(" ");
var size_switch = div("size-switch");
var size_switch_icon = div("size-switch_icon");
var comp_id = selObject.currentType + "_" + selObject.DsId + "_" + selObject.MeasId + "_" + item.id;
var indexEl = selObject.comparedData.findIndex(function (selObj) {
return selObj.id == comp_id;
});
if (indexEl > -1) {
size_switch_icon.addClass("active");
}
size_switch_icon.attr("data-tooltip", "data-tooltip");
size_switch_icon.attr("data-tooltip-type", "black");
size_switch_icon.attr("data-tooltip-content", "Добавить в сравнение");
size_switch_icon.attr("id", item.id);
size_switch_icon.data("id", item.id);
size_switch_icon.data("title", item.elname);
size_switch.append(size_switch_icon);
size_switch.on("click", function (e) {
e.preventDefault();
var title = selObject.Pubtitle + " / " + selObject.currentName;
if (selObject.MeasTitle != null) {
title += " / " + selObject.MeasTitle;
}
if (selObject.currentName !== item.elname) {
title += " / " + item.elname;
}
var cmp_id = AppendToCompare(item.id, title, selObject.currentType);
size_switch_icon.attr("compareid", cmp_id);
});
var size_switch_compare = div("size-switch_compare");
size_switch_compare.attr("data-tooltip", "data-tooltip");
size_switch_compare.attr("data-tooltip-type", "black");
size_switch_compare.attr("data-tooltip-content", "Показать график");
size_switch_compare.attr("data-popup-open", "graph");
size_switch.append(size_switch_compare);
th_sub.append(size_switch);
tr_controls.append(th_sub);
size_switch_compare.on("click", function (e) {
e.preventDefault();
var title = selObject.Pubtitle + " / " + selObject.currentName;
if (selObject.MeasTitle != null) {
title += " / " + selObject.MeasTitle;
}
if (selObject.currentName !== item.elname) {
title += " / " + item.elname;
}
$("#graf_Title").text("Динамика показателя «" + title + "»");
PaintChart(data, item.id, "");
});
});
// data write
var lastrowid = -1;
var Tbldates = [];
$.each(data.RawData, function (id, item) {
if (item.rowId != lastrowid) {
lastrowid = item.rowId;
Tbldates.push({ rowId: lastrowid, text: item.dt });
}
});
$.each(Tbldates, function (id, curdate) {
tr = $(" ");
tr.append($("" + curdate.text + " "));
$.each(headerData, function (id, item) {
var valrow = data.RawData.find(function (el, i) {
return ((el.colId == item.id) && (el.rowId == curdate.rowId));
});
if (typeof (valrow) == "undefined") {
tr.append($(" - "));
}
else {
if (valrow.obs_val == null) {
tr.append($(" - "))
}
else {
tr.append($("" + number_format(valrow.obs_val, valrow.digits) + " "));
}
}
});
tbody.append(tr);
});
root_tbl_load.hide();
root_tbl_wrapper.show();
$("#buttonsResultTBL").show();
$(".table-copy_text").click(function () {
CopyToClipboard($(this).data("boundid"));
});
tbl.floatThead('reflow');
$("#data-area-result").trigger('new-html');
$("div.size-switch_button").on('click', function () {
$('[data-table]').floatThead('reflow');
});
}
function ClearAllComparedData() {
$(".size-switch_icon").each(function (i) {
if (typeof ($(this).data('compareid')) != undefined) {
$(this).removeClass("active");
$(this).removeData('compareid');
};
});
selObject.comparedData = [];
HideCompare();
}
function CopyScript() {
$("#ScriptArea").focus();
$("#ScriptArea").select();
document.execCommand("copy");
}
function CopyToClipboard(tableId) {
var el = $("#" + tableId).find("table").not(".clone");
var csvsrc = CreateCSVfromTable(el);
var tmpar = $("");
$("body").append(tmpar);
tmpar.val(csvsrc).select();
document.execCommand("copy");
tmpar.remove();
}
function CreateCSVfromTable(tbl) {
var csvBuff = "";
var ths = tbl.children("thead").children("tr").first().children("th");
var elements = [];
ths.each(function (index) {
if ($(this).children("span").length != 0) {
elements.push($(this).children("span").text() + " " + $(this).children("div").text());
} else {
elements.push($(this).text());
}
});
csvBuff = elements.join('\t') + "\r\n";
var rows = tbl.children("tbody").children("tr");
rows.each(function (idx) {
var elements = [];
$(this).children("td").each(function (vidx) {
elements.push($(this).text());
});
csvBuff += elements.join('\t') + "\r\n";
});
return csvBuff;
}
function GetCorrectPeriods(rowElement) {
var _citems = [];
$.each(selObject.comparedData, function (id, item) {
var fitems = item.data.filter(function (tditem) {
return (tditem.rowId == rowElement.rowId);
});
if (fitems.length > 0) {
_citems.push(...fitems);
}
});
if (_citems.length > 0) {
var mnth = _citems.find(function (item, i) {
return (item.periodicity == "month");
});
if (typeof (mnth) !== "undefined") return mnth;
var qq = _citems.find(function (item, i) {
return (item.periodicity == "quarter");
});
if (typeof (qq) !== "undefined") return qq;
var yy = _citems.find(function (item, i) {
return (item.periodicity == "year");
});
if (typeof (yy) !== "undefined") return yy;
} else {
return rowElement;
}
}
function HideCompare() {
var root_tbl_wrapper = $("#ComparedTBL");
root_tbl_wrapper.empty();
$("#comparedCounter").text("");
$("#compareChartZone").hide();
$("#buttonComparedTBL").hide();
$("#ComparedNone").show();
$("#clearCompare").hide();
}
function RollComparedData() {
var root_tbl_wrapper = $("#ComparedTBL");
root_tbl_wrapper.empty();
if (selObject.comparedData.length == 0) return;
var arr_left = div("table-arrow table-arrow-left hide");
arr_left.append(div("table-arrow_icon"));
root_tbl_wrapper.append(arr_left);
var arr_right = div("table-arrow table-arrow-right");
arr_right.append(div("table-arrow_icon"));
root_tbl_wrapper.append(arr_right);
var root_tbl = div("table-inner");
root_tbl_wrapper.append(root_tbl);
if (selObject.comparedData.length == 0) {
HideCompare();
return;
}
$("#clearCompare").show();
var scroll_tbl = div("table");
root_tbl.append(scroll_tbl);
scroll_tbl.attr("id", "scroll");
var tbl = $("");
scroll_tbl.append(tbl);
var thead = $(" ");
var tbody = $(" ");
tbl.append(thead);
tbl.append(tbody);
var tr = $("");
var trCmd = $(" ");
tr.append($("Отчетный период "));
trCmd.append($(" "));
thead.append(tr);
thead.append(trCmd);
var Tbldates = [];
var headerData = selObject.comparedData;
$.each(headerData, function (id, item) {
var th = $("" + item.name + " " + item.unit_name + "
");
var thdel = $("
");
thdel.children(".close-column").data("delId", item.id);
trCmd.append(thdel);
tr.append(th);
$.each(item.data, function (id, dataitem) {
var tdlast = Tbldates.find(function (tditem, i) {
return (tditem.rowId == dataitem.rowId);
});
if (typeof (tdlast) == "undefined") {
var di = GetCorrectPeriods(dataitem);
Tbldates.push({ rowId: di.rowId, text: di.dt });
}
});
});
// sort by date
Tbldates.sort(DateSortFn);
$.each(Tbldates, function (id, curdate) {
tr = $(" ");
tr.append($("" + curdate.text + " "));
$.each(headerData, function (id, data) {
var valrow = data.data.find(function (el, i) {
return (el.rowId == curdate.rowId);
});
if (typeof (valrow) == "undefined") {
tr.append($(" - "));
}
else {
if (valrow.obs_val == null) {
tr.append($(" - "))
}
else {
tr.append($("" + number_format(valrow.obs_val, valrow.digits) + " "));
}
}
});
tbody.append(tr);
});
root_tbl_wrapper.find(".close-column").click(function (e) {
// need remove column
var item_id = $(this).data("delId");
selObject.comparedData = selObject.comparedData.filter(function (cel) {
return cel.id !== item_id;
});
$(".size-switch_icon").each(function (i) {
if ($(this).attr('compareid') == item_id) {
$(this).removeClass("active");
};
});
RollComparedData();
$("#comparedCounter").text("(" + selObject.comparedData.length + ")");
if (selObject.comparedData.length == 0) {
root_tbl.empty();
HideCompare();
return;
} else {
$("#ComparedNone").hide();
}
PopperOnCompare("Удалено из сравнения");
PaintChartForComparedData();
return;
});
$("#buttonComparedTBL").show();
$("#ComparedNone").hide();
// $("#buttonComparedTBL").trigger('new-html');
$(".table-copy_text").click(function () {
CopyToClipboard($(this).data("boundid"));
});
tbl.floatThead('reflow');
$("#compare-area-result").trigger('new-html');
}
function ShowMetadata(data) {
$("#updated_time").text(moment(selObject.updated_time).format("DD.MM.YYYY"));
$("#_updated_time").text(moment(selObject.updated_time).format("DD.MM.YYYY"));
$("#range").text("c " + data.DTRange[0].FromY + " по " + data.DTRange[0].ToY + " год");
$("#_range").text("c " + data.DTRange[0].FromY + " по " + data.DTRange[0].ToY + " год");
$("#meas_unit").text(DecodingUnits(data.RawData));
$("#_meas_unit").text(DecodingUnits(data.RawData));
// var title = "Методология «" + selObject.Pubtitle + "»";
$("#_metLink").off("click").click(function () {
window.open(selObject.metLink, '_blank');
});
$("#periodicity").text(Decodeperiodicity(data.RawData));
$("#_periodicity").text(Decodeperiodicity(data.RawData));
$("#ScriptArea").val(GenerateScriptVBA(selObject.Year1, selObject.Year2, selObject.PubId, selObject.DsId, selObject.MeasId));
}
function DecodingUnits(rangeData) {
var units = [];
var result = "";
$.each(rangeData, function (id, rdata) {
var rf = units.find(function (unititem, i) {
return (unititem == rdata.unit_id);
});
if (typeof (rf) == "undefined") {
var unitval = selObject.units.find(function (stype) { return stype.id == rdata.unit_id }).val;
if (units.length == 0) {
result = unitval;
} else {
result += ", " + unitval;
}
units.push(rdata.unit_id);
};
});
return result;
}
function Decodeperiodicity(rangeData) {
var periodicity = [];
var result = "";
$.each(rangeData, function (id, rdata) {
var rf = periodicity.find(function (rdatatem, i) {
return (rdatatem.periodicity == rdata.periodicity);
});
if (typeof (rf) == "undefined") {
var rangeval = rdata.periodicity;
switch (rdata.periodicity) {
case "month":
rangeval = "месячная";
break;
case "quarter":
rangeval = "квартальная";
break;
case "year":
rangeval = "годовая";
break;
default:
break;
}
if (periodicity.length == 0) {
result = rangeval;
} else {
result += ", " + rangeval;
}
periodicity.push({ periodicity: rdata.periodicity, text: rangeval });
}
});
return result;
}
function PaintChart(data, elementId, ElementName) {
$("#GrafZone").show();
//$("#MetaZone").hide();
var $chart = $('#' + chartId);
$chart.show();
var Tbldates = [];
var lastrowid = -1;
$.each(data.RawData, function (id, item) {
if (item.rowId != lastrowid) {
lastrowid = item.rowId;
Tbldates.push({ rowId: lastrowid, text: item.dt });
}
});
// узнаем размерность величины
var unit_name = "";
if (Tbldates.length > 0) {
var curdate = Tbldates[0];
var valrow = data.RawData.find(function (el, i) {
return ((el.colId == elementId) && (el.rowId == curdate.rowId));
});
unit_name = selObject.units.find(function (stype) { return stype.id == valrow.unit_id }).val;
}
var settings = {
"chart": {},
"xAxis": { "type": "category", "categories": [], "title": {} },
"yAxis": [{
"tickAmount": 5,
"title": { "text": unit_name },
"labels": { "format": "{value:,.f}" }
}],
"legend": { "enabled": false },
"title": { "text": ElementName },
"subtitle": {},
"series": [{
"dataLabels": { "format": "{point.y:,.f}" },
"tooltip": {},
"type": "line",
"lineWidth": 2,
"marker": { "enabled": false, "symbol": "circle" },
"data": [],
"color": "#0088cc",
"id": "s0",
"name": ElementName
}],
"tooltip": {
"headerFormat": "",
formatter: function () {
return "";
}
}
};
$.each(Tbldates, function (id, curdate) {
settings.xAxis.categories.push(curdate.text);
var valrow = data.RawData.find(function (el, i) {
return ((el.colId == elementId) && (el.rowId == curdate.rowId));
});
if (typeof (valrow) != ("undefined")) {
settings.series[0].data.push({ y: valrow.obs_val, digit: valrow.digits });
}
});
var patch = $chart.data('highchartsPatch');
settings = typeof (patch) === 'function' ? patch(settings) : $.extend(true, settings, patch);
$chart.trigger('cms:loadHighchart', [settings]);
var chart = Highcharts.chart(chartId, settings);
app.chartLegendDataHighlighter(chartId, chart);
app.chartsPrint(chart);
}
// получение списка измерений
function GetUnits(inpData) {
var Units = [];
$.each(inpData, function (id, item) {
var unit = Units.find(function (unititem, i) {
return (unititem == item.unit);
});
if (typeof (unit) == "undefined") {
Units.push(item.unit);
}
});
return Units;
}
function PaintChartForComparedData() {
var container = $('#chartContainer');
container.empty();
var unitsArr = GetUnits(selObject.comparedData);
for (i = 0; i < unitsArr.length; i += 2) {
var unit1 = unitsArr[i];
var unit2 = undefined;
if (i + 1 < unitsArr.length) {
unit2 = unitsArr[i + 1];
}
var chart = $("
");
chart.uniqueId();
container.append(chart)
PaintChartForComparedDataByUnits(unit1, unit2, chart);
}
}
function PaintChartForComparedDataByUnits(unit1, unit2, $chart) {
var chartCompId = $chart.attr("id");
var Islogarithmic = $("#log_switch1").is(":checked");
if (selObject.comparedData.length == 0) return;
$("#compareChartZone").show();
var Tbldates = [];
var series = [];
var headerData = selObject.comparedData.filter(function (rwitem) {
return (rwitem.unit == unit1 || rwitem.unit == unit2);
});
$.each(headerData, function (id, item) {
var serie = {
"dataLabels": {
formatter: function () {
return number_format(this.point.y, this.point.digit);
}
},
"tooltip": {},
"type": "line",
"lineWidth": 2,
"connectNulls": true,
"marker": { "enabled": false, "symbol": "circle" },
"data": [],
//"color": "#0088cc",
"id": "s" + id,
"name": item.name,
"units": " " + selObject.units.find(function (stype) { return stype.id == item.unit }).val
};
if (item.unit == unit2) {
serie.yAxis = 1;
}
series.push(serie);
$.each(item.data, function (id, dataitem) {
var tdlast = Tbldates.find(function (tditem, i) {
return (tditem.text == dataitem.dt);
});
if (typeof (tdlast) == "undefined") {
var di = GetCorrectPeriods(dataitem);
Tbldates.push({ rowId: di.rowId, text: di.dt });
}
});
});
// sort by id
//Tbldates.sort(function (a, b) {
// if (a.rowId > b.rowId) return 1;
// if (a.rowId < b.rowId) return -1;
// if (a.rowId == b.rowId) return 0;
//});
// sort by date
Tbldates.sort(DateSortFn);
var uint1name = selObject.units.find(function (stype) { return stype.id == unit1 }).val;
var settings = {
"chart": {},
"xAxis": { "type": "category", "categories": [], "title": {} },
"yAxis": [{
"tickAmount": 5,
"title": { "text": uint1name },
"labels": { "format": "{value:,.f}" }
}],
"legend": { "enabled": true },
"title": { "text": "" },
"subtitle": {},
"series": [],
"tooltip": {
"headerFormat": "",
formatter: function () {
return "";
}
}
};
if (typeof (unit2) != "undefined") {
var unit2name = selObject.units.find(function (stype) { return stype.id == unit2 }).val;
settings.yAxis.push({
"tickAmount": 5,
"title": { "x": 0, "margin": 20, "text": unit2name },
"labels": { "format": "{value:,.f}" },
opposite: true
});
}
if (Islogarithmic) {
settings.yAxis[0].type = "logarithmic";
settings.yAxis[0].minorTickInterval = 0.1;
if (typeof (unit2) != "undefined") {
settings.yAxis[1].type = "logarithmic";
settings.yAxis[1].minorTickInterval = 0.1;
}
}
settings.series = series;
$.each(Tbldates, function (id, curdate) {
settings.xAxis.categories.push(curdate.text);
});
$.each(headerData, function (serieid, data) {
$.each(Tbldates, function (datesid, curdate) {
var valrow = data.data.find(function (el, i) {
return (el.rowId == curdate.rowId);
});
if (typeof (valrow) == "undefined") {
settings.series[serieid].data.push(null);
} else {
settings.series[serieid].data.push({ y: valrow.obs_val, digit: valrow.digits });
}
});
});
try {
var patch = $chart.data('highchartsPatch');
settings = typeof (patch) === 'function' ? patch(settings) : $.extend(true, settings, patch);
$chart.trigger('cms:loadHighchart', [settings]);
var chart = Highcharts.chart(chartCompId, settings);
app.chartLegendDataHighlighter(chartCompId, chart);
app.chartsPrint(chart);
} catch (e) {
console.log("ChartErr:", e);
return;
}
}
function PopperOnCompare(showText) {
$(document).scrollTop($("#compareTab").offset().top - 180);
var btn1 = tippy(document.querySelector('#comparedCounter'));
btn1.setProps({
placement: 'right'
});
btn1.setContent(showText);
btn1.show();
setTimeout(function () {
btn1.hide(); //close the tooltip
}, 2000); //but invoke me after 3 secs
}
function DateSortFn(a, b) {
var a_dt = moment(a.date)
var b_dt = moment(b.date)
if (a_dt > b_dt) return 1;
if (a_dt < b_dt) return -1;
if (a_dt == b_dt) return 0;
}
function GenerateScriptVBA(y1, y2, publicationId, datasetId, measureId) {
if (measureId == "NULL" || measureId == null) measureId = "";
var genUrl = _root + "/data?y1=" + y1 + "&y2=" + y2 + "&publicationId=" + publicationId + "&datasetId=" + datasetId + "&measureId=" + measureId;
return genUrl;
}
function number_format(number, decimals, dec_point, separator) {
var snumber = number;
try {
number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
if (typeof decimals === 'undefined' || decimals < 0) {
if (number.toString().indexOf('.') > -1) {
decimals = number.toString().split('.')[1].length;
} else {
decimals = 0;
}
}
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof separator === 'undefined') ? ' ' : separator,
dec = (typeof dec_point === 'undefined') ? ',' : dec_point,
s = '',
toFixedFix = function (vn, prec) {
var k = Math.pow(10, prec);
if (vn >= 0.0) {
return '' + (Math.round(vn * k) / k).toFixed(prec);
} else {
var nn = Math.abs(vn);
return '-' + (Math.round(nn * k) / k).toFixed(prec);
}
};
s = toFixedFix(n, prec).split('.');
if (s[0].length > 3) {
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
}
if ((s[1] || '')
.length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1)
.join('0');
}
return s.join(dec);
} catch {
return snumber;
}
}