oms-SalesAnalysis/Controller/Controller.js
Dennis Eichhorn 479fd5b055 update
2024-01-02 23:34:18 +00:00

74 lines
2.2 KiB
JavaScript
Executable File

import { jsOMS } from '../../../jsOMS/Utils/oLib.js';
import { Autoloader } from '../../../jsOMS/Autoloader.js';
Autoloader.defineNamespace('omsApp.Modules');
omsApp.Modules.SalesAnalysis = class {
/**
* @constructor
*
* @since 1.0.0
*/
constructor (app)
{
this.app = app;
};
bind (id)
{
const charts = typeof id === 'undefined' ? document.getElementsByTagName('canvas') : [document.getElementById(id)];
let length = charts.length;
for (let i = 0; i < length; ++i) {
if (charts[i].getAttribute('data-chart') === null
&& charts[i].getAttribute('data-chart') !== 'undefined'
) {
continue;
}
this.bindChart(charts[i]);
}
};
bindChart (chart)
{
if (typeof chart === 'undefined' || !chart) {
jsOMS.Log.Logger.instance.error('Invalid chart: ' + chart, 'ClientManagement');
return;
}
const self = this;
const data = JSON.parse(chart.getAttribute('data-chart'));
if (data.type === 'choropleth') {
const parts = data.mapurl.split('/');
const fileName = parts[parts.length - 1];
const mapName = fileName.replace('.topo.json', '');
fetch(data.mapurl).then((r) => r.json()).then((d) => {
const countries = ChartGeo.topojson.feature(d, d.objects[mapName]).features;
data.data.labels = countries.map((c) => c.properties.name);
const vals = {};
const length = data.data.datasets[0].data.length;
for (let i = 0; i < length; ++i) {
vals[data.data.datasets[0].data[i].id] = data.data.datasets[0].data[i].value;
}
data.data.datasets[0].data = countries.map((c) => (
{feature: c, value: (vals.hasOwnProperty(c.id) ? vals[c.id] : null)}
));
const myChart = new Chart(chart.getContext('2d'), data);
});
} else {
const myChart = new Chart(chart.getContext('2d'), data);
}
};
};
window.omsApp.moduleManager.get('SalesAnalysis').bind();