// 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 = $(""); tr.append($("")); $.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($("")); } } }); 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 = $("
Данные наДанные заОтчетный период
"); 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 = $("
" + curdate.text + " - - " + number_format(valrow.obs_val, valrow.digits) + "