{ "custom": { "tabData": [ { "chartNamedQuery": "Statistics/Gaylords/DetailsChart", "dataNamedQuery": "Statistics/Gaylords/Details", "idField": "gaylord", "isAdmin": false, "isBar": false, "isVisible": true, "title": "Gaylord Details", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/AR/InductDetailsChart", "dataNamedQuery": "Statistics/AR/InductDetails", "idField": "induct", "isAdmin": false, "isBar": false, "isVisible": true, "title": "AR Induct Details", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/AR/RobinDetailsChart", "dataNamedQuery": "Statistics/AR/RobinDetails", "idField": "chute", "isAdmin": false, "isBar": false, "isVisible": true, "title": "Robin MEP Volume", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/AR/SorterDetailsChart", "dataNamedQuery": "Statistics/AR/SorterDetails", "idField": "sorter", "isAdmin": true, "isBar": false, "isVisible": true, "title": "AR Sorter Details", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/AR/LaneDetailsChart", "dataNamedQuery": "Statistics/AR/LaneDetails", "idField": "lane", "isAdmin": true, "isBar": false, "isVisible": true, "title": "AR Lane Details", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/AR/HourlyLaneChart", "dataNamedQuery": "Statistics/AR/HourlyLane", "idField": "lane", "isAdmin": false, "isBar": true, "isVisible": true, "title": "Hourly AR Induct", "uniqueNamedQuery": "Statistics/AR/UniqueInducts" }, { "chartNamedQuery": "Statistics/AR/HourlyLaneChart", "dataNamedQuery": "Statistics/AR/HourlyLane", "idField": "lane", "isAdmin": false, "isBar": true, "isVisible": true, "title": "Hourly Robin Volume", "uniqueNamedQuery": "Statistics/AR/UniqueRobins" }, { "chartNamedQuery": "Statistics/AR/HourlySorterChart", "dataNamedQuery": "Statistics/AR/HourlySorter", "idField": "sorter", "isAdmin": true, "isBar": true, "isVisible": true, "title": "Hourly AR Sorter", "uniqueNamedQuery": "Statistics/AR/UniqueSorters" }, { "chartNamedQuery": "Statistics/AR/HourlyLaneChart", "dataNamedQuery": "Statistics/AR/HourlyLane", "idField": "lane", "isAdmin": true, "isBar": true, "isVisible": true, "title": "Hourly AR Lane", "uniqueNamedQuery": "Statistics/AR/UniqueLanes" }, { "chartNamedQuery": "Statistics/Sorter/InductDetailsChart", "dataNamedQuery": "Statistics/Sorter/InductDetails", "idField": "induct", "isAdmin": false, "isBar": false, "isVisible": true, "title": "Induct Details", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/Sorter/ScannerDetailsChart", "dataNamedQuery": "Statistics/Sorter/ScannerDetails", "idField": "scanner", "isAdmin": false, "isBar": false, "isVisible": true, "title": "Scanner Details", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/Sorter/SorterSummaryChart", "dataNamedQuery": "Statistics/Sorter/SorterSummary", "idField": "sorter", "isAdmin": false, "isBar": false, "isVisible": true, "title": "Sorter Summary", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/Sorter/SorterDetailsChart", "dataNamedQuery": "Statistics/Sorter/SorterDetails", "idField": "sorter", "isAdmin": false, "isBar": false, "isVisible": true, "title": "Sorter Details", "uniqueNamedQuery": "" }, { "chartNamedQuery": "Statistics/Sorter/LaneDetailsChart", "dataNamedQuery": "Statistics/Sorter/LaneDetails", "idField": "lane", "isAdmin": false, "isBar": false, "isVisible": true, "title": "Lane Details", "uniqueNamedQuery": "" } ], "timewidget": { "endDate": { "$": [ "ts", 192, 1637031280586 ], "$ts": 1637107200000 }, "mode": "currentDay", "startDate": { "$": [ "ts", 192, 1637031280586 ], "$ts": 1637020800000 }, "update": { "$": [ "ts", 192, 1637031280586 ], "$ts": 1637031280585 } }, "titleExtra": "0 rows" }, "params": {}, "propConfig": { "custom.tabData": { "binding": { "config": { "struct": { "auth": "{session.props.auth.user.roles}", "tabs": "{[default]Gateway/StatisticsTabs}" }, "waitOnAll": true }, "transforms": [ { "code": "\troles \u003d [\"Administrator\", \"Developer\"]\n\tauth \u003d value.auth\n\ttabs \u003d value.tabs\n\tisNotAuth \u003d (auth \u003d\u003d None or len(auth) \u003d\u003d 0 or len([i for i in auth if i in roles]) \u003d\u003d 0)\n\treturn [v for v in utils.datasetToJSON(tabs) if v[\"isVisible\"] and not (v[\"isAdmin\"] and isNotAuth)]", "type": "script" } ], "type": "expr-struct" }, "persistent": true }, "custom.tabDataAdmin": { "persistent": true }, "custom.tabDataOperator": { "persistent": true }, "custom.timewidget": { "binding": { "config": { "path": "session.custom.timewidget" }, "type": "property" }, "onChange": { "enabled": null, "script": "\tif self.custom.tabData \u003c\u003e None and len(self.custom.tabData) \u003e 0:\n\t\troot \u003d self.getChild(\"root\")\n\t\troot.getChild(\"Table\").forceRefresh()\n\t\troot.getChild(\"LineChart\").forceRefresh()\n\t\troot.getChild(\"BarChart\").forceRefresh()" }, "persistent": true }, "custom.titleExtra": { "persistent": true } }, "props": { "defaultSize": { "height": 525, "width": 1600 } }, "root": { "children": [ { "meta": { "name": "Label" }, "position": { "height": 40, "width": "100%" }, "propConfig": { "props.text": { "binding": { "config": { "expression": "try(\r\n\t property(\"../TabContainer.props.tabs[\"+{../TabContainer.props.currentTabIndex}+\"]\")\r\n\t+if(len({view.custom.titleExtra})\u003e0,\r\n\t\t\" (\" + {view.custom.titleExtra} + \")\",\r\n\t\t\"\"\r\n\t),\r\n\t\"No Statistics\"\r\n)" }, "type": "expr" } } }, "props": { "style": { "backgroundColor": "#1A4A5E", "borderBottomColor": "#000000", "borderBottomStyle": "solid", "borderBottomWidth": "2px", "color": "#fff", "fontFamily": "Helvetica", "fontSize": 20, "fontWeight": "bold", "textAlign": "center" } }, "type": "ia.display.label" }, { "events": { "component": { "onActionPerformed": { "config": { "script": "\ttable \u003d self.getSibling(\"Table\")\n\tlines \u003d self.getSibling(\"LineChart\")\n\tbars \u003d self.getSibling(\"BarChart\")\n\tdropdown \u003d self.getSibling(\"Dropdown\")\n\ttabContainer \u003d self.getSibling(\"TabContainer\")\n\ttabData \u003d self.view.custom.tabData[tabContainer.props.currentTabIndex]\n\t# Create title:\n\ttitle \u003d tabData.title\n\tif len(dropdown.props.options) \u003e 0:\n\t\ttitle \u003d dropdown.props.value + \" \" + title\n\t# Force CSV download:\n\tutils.downloadCSV(table, title)\n\tif lines.meta.visible:\n\t\tutils.downloadCSV(lines.props.series[0].data, title + \" Chart\")\n\tif bars.meta.visible:\n\t\tutils.downloadCSV(bars.props.dataSources.example, title + \" Chart\")" }, "scope": "G", "type": "script" } } }, "meta": { "name": "Button" }, "position": { "height": 30, "width": 100, "x": "calc(100% - 105px)", "y": 5 }, "props": { "style": { "classes": "Buttons/Grey" }, "text": "Export" }, "type": "ia.input.button" }, { "meta": { "name": "TimeWidget" }, "position": { "height": 40, "width": 600 }, "props": { "params": { "endDate": "2021-02-11 00:00:00", "startDate": "2021-02-10 00:00:00" }, "path": "Templates/Widget/TimeWidget" }, "type": "ia.display.view" }, { "meta": { "name": "TabContainer" }, "position": { "height": "calc(100% - 40px)", "width": "100%", "y": 40 }, "propConfig": { "props.currentTabIndex": { "onChange": { "enabled": null, "script": "\t# Reset components:\n\tlines \u003d self.getSibling(\"LineChart\")\n\tlines.meta.visible \u003d False\n\tlines.props.series[0].data \u003d system.dataset.clearDataset(lines.props.series[0].data)\n\tbars \u003d self.getSibling(\"BarChart\")\n\tbars.meta.visible \u003d False\n\tbars.props.dataSources.example \u003d system.dataset.clearDataset(bars.props.dataSources.example)\n\ttable \u003d self.getSibling(\"Table\")\n\ttable.props.data \u003d system.dataset.clearDataset(table.props.data)\n\ttable.props.selection.selectedColumn \u003d None\n\ttable.props.selection.selectedRow \u003d None\n\t#table.props.selection.data \u003d []\n\tself.getSibling(\"Dropdown\").props.value \u003d \"\"\n\t# Now update the current tab data:\n\tif len(self.props.tabs) \u003e 0:\n\t\tself.getSibling(\"Table\").forceRefresh()" } }, "props.tabs": { "binding": { "config": { "path": "view.custom.tabData" }, "transforms": [ { "code": "\t# Return tab list:\n\treturn [val.title for val in value]", "type": "script" } ], "type": "property" } } }, "props": { "menuStyle": { "backgroundColor": "#225E77" }, "tabSize": { "width": 160 }, "tabStyle": { "active": { "backgroundColor": "#2D7D9F", "color": "#FFF", "fontWeight": "bold" }, "inactive": { "backgroundColor": "#389CC7", "color": "#FFF" } } }, "type": "ia.container.tab" }, { "events": { "component": { "onSelectionChange": { "config": { "script": "\tlines \u003d self.getSibling(\"LineChart\")\n\tbars \u003d self.getSibling(\"BarChart\")\n\ttabIndex \u003d self.getSibling(\"TabContainer\").props.currentTabIndex\n\ttabData \u003d self.view.custom.tabData[tabIndex]\n\tif len(event.data) \u003e 0 and \"chartNamedQuery\" in tabData:\n\t\tif tabData[\"isBar\"]:\n\t\t\tlines.meta.visible \u003d False\n\t\t\tbars.meta.visible \u003d True\n\t\t\t# Apply:\n\t\t\tbars.forceRefresh()\n\t\telse:\n\t\t\tbars.meta.visible \u003d False\n\t\t\tlines.meta.visible \u003d True\n\t\t\t# Apply:\n\t\t\tlines.forceRefresh()\n\telse:\n\t\tlines.meta.visible \u003d False\n\t\tbars.meta.visible \u003d False\n\t\tlines.props.series[0].data \u003d system.dataset.clearDataset(lines.props.series[0].data)\n\t\tbars.props.dataSources.example \u003d system.dataset.clearDataset(bars.props.dataSources.example)" }, "scope": "G", "type": "script" } }, "dom": { "onKeyDown": { "config": { "script": "\tif event.key \u003d\u003d \"Escape\": # Escape key\n\t\tself.props.selection.selectedColumn \u003d None\n\t\tself.props.selection.selectedRow \u003d None" }, "scope": "G", "type": "script" } } }, "meta": { "name": "Table" }, "position": { "height": "calc(100% - 75px)", "width": "100%", "y": 75 }, "propConfig": { "position.height": { "binding": { "config": { "expression": "{../LineChart.meta.visible} || {../BarChart.meta.visible}" }, "transforms": [ { "fallback": "calc(100% - 75px)", "inputType": "scalar", "mappings": [ { "input": true, "output": "calc(40% - 75px/2)" } ], "outputType": "scalar", "type": "map" } ], "type": "expr" }, "persistent": true } }, "props": { "cells": { "style": { "borderBottomColor": "#D5D5D5", "borderBottomStyle": "solid", "borderBottomWidth": "1px", "borderRightColor": "#D5D5D5", "borderRightStyle": "solid", "borderRightWidth": "1px", "color": "#000", "fontFamily": "Helvetica", "fontSize": "14px" } }, "columns": [ { "align": "center", "boolean": "checkbox", "dateFormat": "YYYY-MM-DD HH:mm:ss", "editable": false, "field": "start_timestamp", "header": { "align": "center", "justify": "center", "style": { "classes": "table/column-header" }, "title": "Start Timestamp" }, "justify": "center", "number": "value", "numberFormat": "none", "render": "auto", "resizable": false, "sortable": true, "strictWidth": true, "visible": true, "width": 150 }, { "align": "center", "boolean": "checkbox", "dateFormat": "YYYY-MM-DD HH:mm:ss", "editable": false, "field": "end_timestamp", "header": { "align": "center", "justify": "center", "style": { "classes": "table/column-header" }, "title": "End Timestamp" }, "justify": "center", "number": "value", "numberFormat": "none", "render": "auto", "resizable": false, "sortable": true, "strictWidth": true, "visible": true, "width": 150 }, { "align": "center", "boolean": "checkbox", "dateFormat": "YYYY-MM-DD HH:mm:ss", "editable": false, "field": "gaylord", "header": { "align": "center", "justify": "center", "style": { "classes": "table/column-header" }, "title": "Gaylord" }, "justify": "center", "number": "value", "numberFormat": "none", "render": "auto", "resizable": true, "sortable": true, "visible": true }, { "align": "center", "boolean": "checkbox", "dateFormat": "YYYY-MM-DD HH:mm:ss", "editable": false, "field": "cycles_count", "header": { "align": "center", "justify": "center", "style": { "classes": "table/column-header" }, "title": "Cycles (#)" }, "justify": "center", "number": "value", "numberFormat": "none", "render": "auto", "resizable": true, "sortable": true, "visible": true } ], "data": { "$": [ "ds", 192, 1637031280591 ], "$columns": [ { "data": [], "name": "start_timestamp", "type": "Date" }, { "data": [], "name": "end_timestamp", "type": "Date" }, { "data": [], "name": "gaylord", "type": "String" }, { "data": [], "name": "cycles_count", "type": "Double" }, { "data": [], "name": "cycles_cph", "type": "Double" }, { "data": [], "name": "cycles_percent", "type": "Double" } ] }, "filter": { "enabled": true }, "pager": { "bottom": false }, "rows": { "highlight": { "enabled": false }, "striped": { "enabled": false }, "style": { "classes": "table/highlight" } }, "style": { "fontFamily": "Helvetica", "fontSize": "14px", "fontWeight": "bold", "zoom": 1 } }, "scripts": { "customMethods": [ { "name": "forceRefresh", "params": [], "script": "\t# Collect data:\n\tcurrentTabIndex \u003d self.getSibling(\"TabContainer\").props.currentTabIndex\n\ttabData \u003d self.view.custom.tabData[currentTabIndex]\n\tstartDate \u003d self.session.custom.timewidget.startDate\n\tendDate \u003d self.session.custom.timewidget.endDate\n\tid \u003d self.getSibling(\"Dropdown\").props.value\n\t\n\t# Apply:\n\t#system.perspective.print(\"Table Check: \" + tabData.title)\n\tif (tabData.uniqueNamedQuery \u003d\u003d \"\" or id \u003c\u003e \"\"):\n\t\t#system.perspective.print(\"Table Refresh: \" + tabData.title)\n\t\tparams \u003d {\n\t\t\t\"startDate\": startDate,\n\t\t\t\"endDate\": endDate\n\t\t}\n\t\tif id \u003c\u003e \"\":\n\t\t\tparams[tabData.idField] \u003d id\n\t\tdata \u003d system.db.runNamedQuery(tabData.dataNamedQuery, params)\n\t\t# Create title:\n\t\tcou \u003d utils.getRowCount(data)\n\t\tast \u003d \"*\" if cou \u003e\u003d 1000 else \"\"\n\t\tself.view.custom.titleExtra \u003d \"{:n}{} rows\".format(cou, ast)\n\t\t# Update columns:\n\t\tcolumns \u003d []\n\t\tfilterColumns \u003d self.getSibling(\"Mode\").props.value\n\t\tfor name in data.getColumnNames():\n\t\t\tif name.split(\"_\")[-1] not in filterColumns:\n\t\t\t\textra \u003d {}\n\t\t\t\tif name in [\"start_timestamp\", \"end_timestamp\"]:\n\t\t\t\t\textra[\"resizable\"] \u003d False\n\t\t\t\t\textra[\"strictWidth\"] \u003d True\n\t\t\t\t\textra[\"width\"] \u003d 150\n\t\t\t\telif name in [\"induct\", \"scanner\", \"sorter\", \"lane\"]:\n\t\t\t\t\textra[\"resizable\"] \u003d False\n\t\t\t\t\textra[\"strictWidth\"] \u003d True\n\t\t\t\t\textra[\"width\"] \u003d 80\n\t\t\t\tcolumns.append(reports.generateColumn(name, extra))\n\t\tself.props.columns \u003d columns\n\t\t# Return data\n\t\tself.props.data \u003d data" } ], "extensionFunctions": null, "messageHandlers": [] }, "type": "ia.display.table" }, { "meta": { "name": "Dropdown", "visible": null }, "position": { "height": 36, "width": 200, "x": "calc(100% - 205px)", "y": 80 }, "propConfig": { "meta.visible": { "binding": { "config": { "expression": "{../TabContainer.props.currentTabIndex}" }, "transforms": [ { "code": "\ttabData \u003d self.view.custom.tabData[value]\n\treturn tabData.uniqueNamedQuery not in [None, \"\"]", "type": "script" } ], "type": "expr" }, "persistent": true }, "props.options": { "binding": { "config": { "path": "../TabContainer.props.currentTabIndex" }, "transforms": [ { "code": "\ttabData \u003d self.view.custom.tabData[value]\n\tquery \u003d tabData.uniqueNamedQuery\n\tif query not in [None, \"\"]:\n\t\tdata \u003d system.db.runNamedQuery(query)\n\t\tvalues \u003d [data.getValueAt(row, 0) for row in range(data.getRowCount())]\n\t\toptions \u003d []\n\t\tfor val in values:\n\t\t\toptions.append({\n\t\t\t\t\"value\": val,\n\t\t\t\t\"label\": val\n\t\t\t})\n\t\t# Select the first one if no value is selected:\n\t\tif self.props.value not in values and len(values) \u003e 0:\n\t\t\tself.props.value \u003d values[0]\n\t\t# Return list:\n\t\treturn options\n\telse:\n\t\tself.props.value \u003d \"\"\n\t\treturn []", "type": "script" } ], "type": "property" } }, "props.value": { "onChange": { "enabled": null, "script": "\tif currentValue.value \u003c\u003e \"\":\n\t\t# Apply\n\t\tself.getSibling(\"Table\").forceRefresh()\n\t\ttabIndex \u003d self.getSibling(\"TabContainer\").props.currentTabIndex\n\t\tif self.view.custom.tabData[tabIndex][\"isBar\"]:\n\t\t\tself.getSibling(\"BarChart\").forceRefresh()\n\t\telse:\n\t\t\tself.getSibling(\"LineChart\").forceRefresh()" } } }, "type": "ia.input.dropdown" }, { "events": { "component": { "onActionPerformed": { "config": { "script": "\tfilterColumns \u003d self.props.value\n\t# Update columns:\n\ttable \u003d self.getSibling(\"Table\")\n\tcolumns \u003d []\n\tfor name in table.props.data.getColumnNames():\n\t\tif name.split(\"_\")[-1] not in filterColumns:\n\t\t\textra \u003d {}\n\t\t\tif name in [\"start_timestamp\", \"end_timestamp\"]:\n\t\t\t\textra[\"resizable\"] \u003d False\n\t\t\t\textra[\"strictWidth\"] \u003d True\n\t\t\t\textra[\"width\"] \u003d 150\n\t\t\telif name in [\"induct\", \"scanner\", \"sorter\", \"lane\"]:\n\t\t\t\textra[\"resizable\"] \u003d False\n\t\t\t\textra[\"strictWidth\"] \u003d True\n\t\t\t\textra[\"width\"] \u003d 80\n\t\t\tcolumns.append(reports.generateColumn(name, extra))\n\ttable.props.columns \u003d columns\n\t# Update columns:\n\tlines \u003d self.getSibling(\"LineChart\")\n\tdata \u003d lines.props.series[0].data\n\tcolumns \u003d [{\"key\": name} for name in data.getColumnNames() if name.split(\"_\")[-1] not in filterColumns]\n\tlines.props.plots[0].trends[0].columns \u003d columns\n\t# Update columns:\n\tbars \u003d self.getSibling(\"BarChart\")\n\tdata \u003d bars.props.dataSources.example\n\tcolumns \u003d []\n\tfor name in data.getColumnNames():\n\t\tif name.split(\"_\")[-1] not in filterColumns and name not in [\"time\", \"hour\"]:\n\t\t\textra \u003d {\n\t\t\t\t\"xAxis\": \"hour\",\n\t\t\t\t\"yAxis\": \"count\",\n\t\t\t\t\"render\": \"column\"\n\t\t\t}\n\t\t\tseries \u003d reports.generateSeries(name, extra)\n\t\t\tseries[\"data\"][\"source\"] \u003d \"example\"\n\t\t\tseries[\"data\"][\"x\"] \u003d \"hour\"\n\t\t\tseries[\"column\"][\"appearance\"][\"stacked\"] \u003d True\n\t\t\tcolumns.append(series)\n\tbars.props.series \u003d columns" }, "scope": "G", "type": "script" } } }, "meta": { "name": "Mode" }, "position": { "height": 20, "width": 120, "x": "calc(100% - 230px)", "y": 10 }, "props": { "options": [ { "label": "Count", "value": [ "pph", "cph", "percent" ] }, { "label": "Percent", "value": [ "count", "pph", "cph" ] }, { "label": "Rate", "value": [ "count", "percent" ] } ], "search": { "enabled": false }, "style": { "fontSize": "14px" }, "value": [ "pph", "cph", "percent" ] }, "type": "ia.input.dropdown" }, { "meta": { "name": "ModeLabel" }, "position": { "height": 20, "width": 120, "x": "calc(100% - 355px)", "y": 10 }, "props": { "style": { "color": "#fff", "fontSize": "14px", "textAlign": "right" }, "text": "Aggregate Mode:" }, "type": "ia.display.label" }, { "meta": { "name": "DropdownLabel", "visible": null }, "position": { "height": 20, "width": 120, "x": "calc(100% - 330px)", "y": 88 }, "propConfig": { "meta.visible": { "binding": { "config": { "expression": "{../TabContainer.props.currentTabIndex}" }, "transforms": [ { "code": "\ttabData \u003d self.view.custom.tabData[value]\n\treturn tabData.uniqueNamedQuery not in [None, \"\"]", "type": "script" } ], "type": "expr" }, "persistent": true }, "props.text": { "binding": { "config": { "path": "../TabContainer.props.currentTabIndex" }, "transforms": [ { "code": "\ttabData \u003d self.view.custom.tabData[value]\n\tvalue \u003d tabData.uniqueNamedQuery\n\tif value not in [None, \"\"]:\n\t\treturn tabData.idField.title() + \":\"\n\telse:\n\t\treturn \"\"", "type": "script" } ], "type": "property" } } }, "props": { "style": { "color": "#000", "fontSize": "14px", "textAlign": "right" } }, "type": "ia.display.label" }, { "meta": { "name": "LineChart", "visible": false }, "position": { "height": "calc(60% - 75px/2)", "width": "100%" }, "propConfig": { "position.y": { "binding": { "config": { "expression": "if({this.meta.visible},\r\n\t\"calc(40% + 75px/2)\",\r\n\t\"200%\"\r\n)" }, "type": "expr" } }, "props.xTrace.infoBox.dataFormat": { "binding": { "config": { "path": "../Mode.props.value" }, "transforms": [ { "code": "\tif \"percent\" not in value:\n\t\treturn \"0.##%\"\n\telse:\n\t\treturn \"0,0.##\"", "type": "script" } ], "type": "property" } } }, "props": { "defaultStyles": { "colorScheme": "Spectral", "normal": { "stroke": { "width": 2 } } }, "legend": { "position": "right", "visible": true }, "plots": [ { "axes": [], "markers": [], "trends": [ { "axis": "", "baselines": [], "breakLine": false, "columns": [ { "key": "time" }, { "key": "total_count" }, { "key": "single_carrier_count" }, { "key": "double_carrier_count" } ], "interpolation": "curveLinear", "radius": 2, "series": "Boiler", "stack": true, "type": "line", "visible": true } ] } ], "series": [ { "data": { "$": [ "ds", 192, 1636690363196 ], "$columns": [ { "data": [], "name": "time", "type": "Date" }, { "data": [], "name": "total_count", "type": "Integer" }, { "data": [], "name": "single_carrier_count", "type": "Integer" }, { "data": [], "name": "double_carrier_count", "type": "Integer" }, { "data": [], "name": "total_pph", "type": "Double" }, { "data": [], "name": "single_carrier_pph", "type": "Double" }, { "data": [], "name": "double_carrier_pph", "type": "Double" }, { "data": [], "name": "single_carrier/sorter_percent", "type": "Double" }, { "data": [], "name": "double_carrier/sorter_percent", "type": "Double" } ] }, "name": "Boiler" } ], "style": { "backgroundColor": "#FFF", "borderTopColor": "#000", "borderTopStyle": "solid", "borderTopWidth": "2px" }, "timeRange": { "dateFormat": "YYYY-MM-DD", "timeFormat": "HH:mm:ss" }, "xTrace": { "infoBox": { "dateFormat": "YYYY-MM-DD", "timeFormat": "HH:mm", "width": 200 } } }, "scripts": { "customMethods": [ { "name": "forceRefresh", "params": [], "script": "\tif self.meta.visible:\n\t\t# Generate tabData\n\t\tcurrentTabIndex \u003d self.getSibling(\"TabContainer\").props.currentTabIndex\n\t\ttabData \u003d self.view.custom.tabData[currentTabIndex]\n\t\tstartDate \u003d self.session.custom.timewidget.startDate\n\t\tendDate \u003d self.session.custom.timewidget.endDate\n\t\tselected \u003d self.getSibling(\"Table\").props.selection.data\n\t\tidField \u003d tabData[\"idField\"]\n\t\tid \u003d selected[0][idField]\n\t\t\n\t\t# Apply:\n\t\t#system.perspective.print(\"Chart Check: \" + tabData.title + \"|\" + id)\n\t\tif not tabData.isBar:\n\t\t\t#system.perspective.print(\"Chart Refresh: \" + tabData.title + \"|\" + id)\n\t\t\tparams \u003d {\n\t\t\t\t\"startDate\": startDate,\n\t\t\t\t\"endDate\": endDate,\n\t\t\t\tidField: id\n\t\t\t}\n\t\t\tdata \u003d system.db.runNamedQuery(tabData.chartNamedQuery, params)\n\t\t\t# Add breaks:\n\t\t\tbreaks \u003d []\n\t\t\tfor row in range(data.getRowCount()-1):\n\t\t\t\tcurTime \u003d system.date.parse(data.getValueAt(row, \"time\"), \u0027yyyy-MM-dd HH:mm:ss\u0027)\n\t\t\t\tnextTime \u003d system.date.parse(data.getValueAt(row+1, \"time\"), \u0027yyyy-MM-dd HH:mm:ss\u0027)\n\t\t\t\tminBetween \u003d system.date.minutesBetween(curTime, nextTime)\n\t\t\t\tif minBetween \u003e 1:\n\t\t\t\t\tb \u003d []\n\t\t\t\t\tfor col in data.getColumnNames():\n\t\t\t\t\t\tif col \u003c\u003e \"time\":\n\t\t\t\t\t\t\tb.append(0)\n\t\t\t\t\t\telse:\n\t\t\t\t\t\t\tnewTime \u003d system.date.addMinutes(curTime, 1)\n\t\t\t\t\t\t\tb.append(system.date.format(newTime, \u0027yyyy-MM-dd HH:mm:ss\u0027))\n\t\t\t\t\tbreaks.append(b)\n\t\t\t\tif minBetween \u003e 2:\n\t\t\t\t\tb \u003d []\n\t\t\t\t\tfor col in data.getColumnNames():\n\t\t\t\t\t\tif col \u003c\u003e \"time\":\n\t\t\t\t\t\t\tb.append(0)\n\t\t\t\t\t\telse:\n\t\t\t\t\t\t\tnewTime \u003d system.date.addMinutes(nextTime, -1)\n\t\t\t\t\t\t\tb.append(system.date.format(newTime, \u0027yyyy-MM-dd HH:mm:ss\u0027))\n\t\t\t\t\tbreaks.append(b)\n\t\t\tdata \u003d system.dataset.addRows(data, breaks)\n\t\t\tdata \u003d system.dataset.sort(data, \"time\", True)\n\t\t\t# Update columns:\n\t\t\tfilterColumns \u003d [col for col in self.getSibling(\"Mode\").props.value]\n\t\t\tcolumns \u003d [{\"key\": name} for name in data.getColumnNames() if name.split(\"_\")[-1] not in filterColumns]\n\t\t\tself.props.plots[0].trends[0].columns \u003d columns\n\t\t\t# Return data\n\t\t\tself.props.series[0].data \u003d data" } ], "extensionFunctions": null, "messageHandlers": [] }, "type": "ia.chart.timeseries" }, { "meta": { "name": "BarChart", "visible": false }, "position": { "height": "calc(60% - 75px/2)", "width": "100%", "y": "calc(40% + 75px/2)" }, "propConfig": { "props.yAxes[0].label.text": { "binding": { "config": { "path": "../Mode.props.value" }, "transforms": [ { "code": "\tif \"percent\" not in value:\n\t\treturn \"Percent\"\n\telif \"pph\" not in value:\n\t\treturn \"PPH\"\n\telse:\n\t\treturn \"Count\"", "type": "script" } ], "type": "property" } }, "props.yAxes[0].value.format": { "binding": { "config": { "path": "../Mode.props.value" }, "transforms": [ { "code": "\tif \"percent\" not in value:\n\t\treturn \"###.##%\"\n\telse:\n\t\treturn \"#,###.##\"", "type": "script" } ], "type": "property" } } }, "props": { "dataSources": { "example": { "$": [ "ds", 192, 1636690363197 ], "$columns": [ { "data": [], "name": "time", "type": "String" }, { "data": [], "name": "hour", "type": "String" }, { "data": [], "name": "diverted", "type": "Double" }, { "data": [], "name": "lane_disabled", "type": "Double" }, { "data": [], "name": "lane_full", "type": "Double" }, { "data": [], "name": "lane_jam", "type": "Double" } ] } }, "series": [ { "candlestick": { "appearance": { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "stroke": { "color": "", "opacity": "", "width": "" } }, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": "", "min": "" }, "stacked": false, "stroke": { "color": "", "opacity": 1, "width": 1 } }, "high": { "x": "", "y": "" }, "low": { "x": "", "y": "" }, "open": { "x": "", "y": "" } }, "column": { "appearance": { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "stroke": { "color": "", "opacity": "", "width": "" } }, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": "", "min": "" }, "height": null, "stacked": true, "stroke": { "color": "", "opacity": 1, "width": 1 }, "width": null }, "open": { "x": "", "y": "" } }, "data": { "source": "example", "x": "hour", "y": "diverted" }, "defaultState": { "visible": true }, "hiddenInLegend": false, "label": { "text": "Diverted" }, "line": { "appearance": { "bullets": [ { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "rotation": "", "stroke": { "color": "", "opacity": "", "width": "" } }, "enabled": false, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": 100, "min": 2 }, "height": 10, "label": { "position": { "dx": 0, "dy": 0 }, "text": "{value}" }, "render": "circle", "rotation": 0, "stroke": { "color": "", "opacity": 1, "width": 1 }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "width": 10 } ], "connect": true, "fill": { "color": "", "opacity": 0 }, "minDistance": 0.5, "stroke": { "color": "", "dashArray": "", "opacity": 1, "width": 3 }, "tensionX": 1, "tensionY": 1 }, "open": { "x": "", "y": "" } }, "name": "diverted", "render": "column", "stepLine": { "appearance": { "bullets": [ { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "rotation": "", "stroke": { "color": "", "opacity": "", "width": "" } }, "enabled": true, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": 100, "min": 2 }, "height": 10, "label": { "position": { "dx": 0, "dy": 0 }, "text": "{value}" }, "render": "circle", "rotation": 0, "stroke": { "color": "", "opacity": 1, "width": 1 }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "width": 10 } ], "connect": true, "fill": { "color": "", "opacity": 0 }, "minDistance": 0.5, "stroke": { "color": "", "dashArray": "", "opacity": 1, "width": 3 }, "tensionX": 1, "tensionY": 1 }, "open": { "x": "", "y": "" } }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "visible": true, "xAxis": "hour", "yAxis": "count", "zIndex": 0 }, { "candlestick": { "appearance": { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "stroke": { "color": "", "opacity": "", "width": "" } }, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": "", "min": "" }, "stacked": false, "stroke": { "color": "", "opacity": 1, "width": 1 } }, "high": { "x": "", "y": "" }, "low": { "x": "", "y": "" }, "open": { "x": "", "y": "" } }, "column": { "appearance": { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "stroke": { "color": "", "opacity": "", "width": "" } }, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": "", "min": "" }, "height": null, "stacked": true, "stroke": { "color": "", "opacity": 1, "width": 1 }, "width": null }, "open": { "x": "", "y": "" } }, "data": { "source": "example", "x": "hour", "y": "lane_disabled" }, "defaultState": { "visible": true }, "hiddenInLegend": false, "label": { "text": "Lane Disabled" }, "line": { "appearance": { "bullets": [ { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "rotation": "", "stroke": { "color": "", "opacity": "", "width": "" } }, "enabled": false, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": 100, "min": 2 }, "height": 10, "label": { "position": { "dx": 0, "dy": 0 }, "text": "{value}" }, "render": "circle", "rotation": 0, "stroke": { "color": "", "opacity": 1, "width": 1 }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "width": 10 } ], "connect": true, "fill": { "color": "", "opacity": 0 }, "minDistance": 0.5, "stroke": { "color": "", "dashArray": "", "opacity": 1, "width": 3 }, "tensionX": 1, "tensionY": 1 }, "open": { "x": "", "y": "" } }, "name": "lane_disabled", "render": "column", "stepLine": { "appearance": { "bullets": [ { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "rotation": "", "stroke": { "color": "", "opacity": "", "width": "" } }, "enabled": true, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": 100, "min": 2 }, "height": 10, "label": { "position": { "dx": 0, "dy": 0 }, "text": "{value}" }, "render": "circle", "rotation": 0, "stroke": { "color": "", "opacity": 1, "width": 1 }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "width": 10 } ], "connect": true, "fill": { "color": "", "opacity": 0 }, "minDistance": 0.5, "stroke": { "color": "", "dashArray": "", "opacity": 1, "width": 3 }, "tensionX": 1, "tensionY": 1 }, "open": { "x": "", "y": "" } }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "visible": true, "xAxis": "hour", "yAxis": "count", "zIndex": 0 }, { "candlestick": { "appearance": { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "stroke": { "color": "", "opacity": "", "width": "" } }, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": "", "min": "" }, "stacked": false, "stroke": { "color": "", "opacity": 1, "width": 1 } }, "high": { "x": "", "y": "" }, "low": { "x": "", "y": "" }, "open": { "x": "", "y": "" } }, "column": { "appearance": { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "stroke": { "color": "", "opacity": "", "width": "" } }, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": "", "min": "" }, "height": null, "stacked": true, "stroke": { "color": "", "opacity": 1, "width": 1 }, "width": null }, "open": { "x": "", "y": "" } }, "data": { "source": "example", "x": "hour", "y": "lane_full" }, "defaultState": { "visible": true }, "hiddenInLegend": false, "label": { "text": "Lane Full" }, "line": { "appearance": { "bullets": [ { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "rotation": "", "stroke": { "color": "", "opacity": "", "width": "" } }, "enabled": false, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": 100, "min": 2 }, "height": 10, "label": { "position": { "dx": 0, "dy": 0 }, "text": "{value}" }, "render": "circle", "rotation": 0, "stroke": { "color": "", "opacity": 1, "width": 1 }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "width": 10 } ], "connect": true, "fill": { "color": "", "opacity": 0 }, "minDistance": 0.5, "stroke": { "color": "", "dashArray": "", "opacity": 1, "width": 3 }, "tensionX": 1, "tensionY": 1 }, "open": { "x": "", "y": "" } }, "name": "lane_full", "render": "column", "stepLine": { "appearance": { "bullets": [ { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "rotation": "", "stroke": { "color": "", "opacity": "", "width": "" } }, "enabled": true, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": 100, "min": 2 }, "height": 10, "label": { "position": { "dx": 0, "dy": 0 }, "text": "{value}" }, "render": "circle", "rotation": 0, "stroke": { "color": "", "opacity": 1, "width": 1 }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "width": 10 } ], "connect": true, "fill": { "color": "", "opacity": 0 }, "minDistance": 0.5, "stroke": { "color": "", "dashArray": "", "opacity": 1, "width": 3 }, "tensionX": 1, "tensionY": 1 }, "open": { "x": "", "y": "" } }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "visible": true, "xAxis": "hour", "yAxis": "count", "zIndex": 0 }, { "candlestick": { "appearance": { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "stroke": { "color": "", "opacity": "", "width": "" } }, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": "", "min": "" }, "stacked": false, "stroke": { "color": "", "opacity": 1, "width": 1 } }, "high": { "x": "", "y": "" }, "low": { "x": "", "y": "" }, "open": { "x": "", "y": "" } }, "column": { "appearance": { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "stroke": { "color": "", "opacity": "", "width": "" } }, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": "", "min": "" }, "height": null, "stacked": true, "stroke": { "color": "", "opacity": 1, "width": 1 }, "width": null }, "open": { "x": "", "y": "" } }, "data": { "source": "example", "x": "hour", "y": "lane_jam" }, "defaultState": { "visible": true }, "hiddenInLegend": false, "label": { "text": "Lane Jam" }, "line": { "appearance": { "bullets": [ { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "rotation": "", "stroke": { "color": "", "opacity": "", "width": "" } }, "enabled": false, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": 100, "min": 2 }, "height": 10, "label": { "position": { "dx": 0, "dy": 0 }, "text": "{value}" }, "render": "circle", "rotation": 0, "stroke": { "color": "", "opacity": 1, "width": 1 }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "width": 10 } ], "connect": true, "fill": { "color": "", "opacity": 0 }, "minDistance": 0.5, "stroke": { "color": "", "dashArray": "", "opacity": 1, "width": 3 }, "tensionX": 1, "tensionY": 1 }, "open": { "x": "", "y": "" } }, "name": "lane_jam", "render": "column", "stepLine": { "appearance": { "bullets": [ { "deriveFieldsFromData": { "fill": { "color": "", "opacity": "" }, "rotation": "", "stroke": { "color": "", "opacity": "", "width": "" } }, "enabled": true, "fill": { "color": "", "opacity": 1 }, "heatRules": { "dataField": "", "enabled": false, "max": 100, "min": 2 }, "height": 10, "label": { "position": { "dx": 0, "dy": 0 }, "text": "{value}" }, "render": "circle", "rotation": 0, "stroke": { "color": "", "opacity": 1, "width": 1 }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "width": 10 } ], "connect": true, "fill": { "color": "", "opacity": 0 }, "minDistance": 0.5, "stroke": { "color": "", "dashArray": "", "opacity": 1, "width": 3 }, "tensionX": 1, "tensionY": 1 }, "open": { "x": "", "y": "" } }, "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "{name}: [bold]{valueY}[/]" }, "visible": true, "xAxis": "hour", "yAxis": "count", "zIndex": 0 } ], "style": { "backgroundColor": "#FFF", "borderTopColor": "#000", "borderTopStyle": "solid", "borderTopWidth": "2px" }, "xAxes": [ { "appearance": { "font": { "size": "", "weight": 500 }, "grid": { "color": "", "dashArray": "", "minDistance": 60, "opacity": 1, "position": 0.5 }, "inside": false, "labels": { "color": "", "opacity": 1, "rotation": 0, "wrap": true }, "opposite": false }, "category": { "break": { "enabled": false, "endCategory": "", "size": 0.05, "startCategory": "" } }, "date": { "baseInterval": { "count": 1, "enabled": false, "skipEmptyPeriods": false, "timeUnit": "hour" }, "break": { "enabled": false, "endDate": "", "size": 0.05, "startDate": "" }, "format": "kk", "inputFormat": "yyyy-MM-dd kk:mm:ss", "range": { "max": "", "min": "", "useStrict": false } }, "inversed": false, "label": { "color": "", "enabled": true, "text": "Hour" }, "name": "hour", "render": "category", "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "" }, "value": { "break": { "enabled": false, "endValue": 100, "size": 0.05, "startValue": 0 }, "format": "#,###.##", "logarithmic": false, "range": { "max": "", "min": "", "useStrict": false } }, "visible": true } ], "yAxes": [ { "appearance": { "font": { "size": "", "weight": 500 }, "grid": { "color": "", "dashArray": "", "minDistance": null, "opacity": 1, "position": 0.5 }, "inside": false, "labels": { "color": "", "opacity": 1, "rotation": 0, "wrap": true }, "opposite": false }, "category": { "break": { "enabled": false, "endCategory": "", "size": 0.05, "startCategory": "" } }, "date": { "baseInterval": { "count": 1, "enabled": false, "skipEmptyPeriods": false, "timeUnit": "hour" }, "break": { "enabled": false, "endDate": "", "size": 0.05, "startDate": "" }, "format": "M/d/yyyy HH:mm:ss", "inputFormat": "yyyy-MM-dd kk:mm:ss", "range": { "max": "", "min": "", "useStrict": false } }, "inversed": false, "label": { "color": "", "enabled": true }, "name": "count", "render": "value", "tooltip": { "background": { "color": "", "opacity": 1 }, "cornerRadius": 3, "enabled": true, "pointerLength": 4, "text": "" }, "value": { "break": { "enabled": false, "endValue": 100, "size": 0.05, "startValue": 0 }, "logarithmic": false, "range": { "max": "", "min": "", "useStrict": false } }, "visible": true } ] }, "scripts": { "customMethods": [ { "name": "forceRefresh", "params": [], "script": "\tif self.meta.visible:\n\t\t# Generate tabData\n\t\tcurrentTabIndex \u003d self.getSibling(\"TabContainer\").props.currentTabIndex\n\t\ttabData \u003d self.view.custom.tabData[currentTabIndex]\n\t\tstartDate \u003d self.session.custom.timewidget.startDate\n\t\tendDate \u003d self.session.custom.timewidget.endDate\n\t\tidField \u003d tabData.idField\n\t\tid \u003d self.getSibling(\"Dropdown\").props.value\n\t\t\n\t\t# Apply:\n\t\t#system.perspective.print(\"Chart Check: \" + tabData.title + \"|\" + id)\n\t\tif id \u003c\u003e \"\" and tabData.isBar:\n\t\t\t#system.perspective.print(\"Chart Refresh: \" + tabData.title + \"|\" + id)\n\t\t\tparams \u003d {\n\t\t\t\t\"startDate\": startDate,\n\t\t\t\t\"endDate\": endDate,\n\t\t\t\tidField: id\n\t\t\t}\n\t\t\tdata \u003d system.db.runNamedQuery(tabData.chartNamedQuery, params)\n\t\t\t# Update columns:\n\t\t\tfilterColumns \u003d [col for col in self.getSibling(\"Mode\").props.value]\n\t\t\tcolumns \u003d []\n\t\t\tfor name in data.getColumnNames():\n\t\t\t\tif name.split(\"_\")[-1] not in filterColumns and name not in [\"time\", \"hour\"]:\n\t\t\t\t\textra \u003d {\n\t\t\t\t\t\t\"xAxis\": \"hour\",\n\t\t\t\t\t\t\"yAxis\": \"count\",\n\t\t\t\t\t\t\"render\": \"column\"\n\t\t\t\t\t}\n\t\t\t\t\tseries \u003d reports.generateSeries(name, extra)\n\t\t\t\t\tseries[\"data\"][\"source\"] \u003d \"example\"\n\t\t\t\t\tseries[\"data\"][\"x\"] \u003d \"hour\"\n\t\t\t\t\tseries[\"column\"][\"appearance\"][\"stacked\"] \u003d True\n\t\t\t\t\tcolumns.append(series)\n\t\t\tself.props.series \u003d columns\n\t\t\t# Return data\n\t\t\tself.props.dataSources.example \u003d data" } ], "extensionFunctions": null, "messageHandlers": [] }, "type": "ia.chart.xy" } ], "meta": { "name": "root" }, "props": { "style": { "min-width": "1000px", "overflow": "hidden" } }, "type": "ia.container.coord" } }