Year: ' + yearValue;
}
}
}
let rightGaugeOptions = {
title: {
text: dropDownItemTwo.label,
font: {
color: 'black',
size: 25,
opacity: 0.7,
family: '"Helvetica Neue", "Arial"',
weight: 200
},
horizontalAlignment: 'center',
margin: {
bottom: 30,
left: 0,
right: 0,
top: 50
},
verticalAlignment: 'top'
},
relativeInnerRadius: 0.5,
colorScheme: 'customColors',
customColorScheme: {
name: 'customColors',
colors: ['#f5ad89', '#f07c42', '#e35912']
},
width: '48%',
height: '49%',
values: [gaugeDataAdapter.records[0].Subtotal2, gaugeDataAdapter.records[1].Subtotal2, gaugeDataAdapter.records[2].Subtotal2],
max: TotalPersonTwo,
labels: {
indent: 1,
formatFunction: function (value) {
return "$" + value;
}
},
tooltip: {
visible: true, formatFunction: function (value, index) {
var yearValue = gaugeDataAdapter.records[index].OrderDate.substr(0, 4);
return '
Year: ' + yearValue;
}
}
}
this.leftBarGauge = jqwidgets.createInstance('#yearComparisonLeftBarGauge', 'jqxBarGauge', leftGaugeOptions);
this.rightBarGauge = jqwidgets.createInstance('#yearComparisonRightBarGauge', 'jqxBarGauge', rightGaugeOptions);
this.barGaugesCreated = true;
}
initYearSalesChart = () => {
const years = ['1996', '1997', '1998'];
let dropDownItemOne = this.dropDownOne.getSelectedItem();
let dropDownItemTwo = this.dropDownTwo.getSelectedItem();
let chartSource = {
datafields: [
{ name: 'OrderDate' },
{ name: 'Subtotal1' },
{ name: 'Subtotal2' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=yearcomparisonchart&employeeid1=1&employeeid2=2',
datatype: 'json'
}
let chartDataAdapter = new jqx.dataAdapter(chartSource, { async: false, autoBind: true, loadError: function (xhr, status, error) { alert('Error loading "' + chartSource.url + '" : ' + error); } });
let toolTipCustomFormatFn = (value, itemIndex, serie, group, categoryValue) => {
var newValue = value.toString().replace(/[.].*/, '');
if (newValue.length > 3) {
newValue = newValue.substr(0, newValue.length - 3) + ',' + newValue.substr(newValue.length - 3);
}
var yearValue = years[years.indexOf('19' + categoryValue.getYear())];
return '
Sales: $' + newValue +
'Year: ' + yearValue;
};
var chartOptions = {
title: 'Year Sales Comparison',
description: '',
enableAnimations: false,
showBorderLine: false,
showLegend: true,
toolTipFormatFunction: toolTipCustomFormatFn,
padding: { left: 60, top: 5, right: 60, bottom: 5 },
titlePadding: { left: 70, top: 0, right: 0, bottom: 10 },
source: chartDataAdapter,
colorScheme: 'scheme02',
xAxis:
{
dataField: 'OrderDate',
formatFunction: function (value) {
return years[value.getYear() - 96];
},
labels: { class: 'bold' },
type: 'date',
baseUnit: 'year',
valuesOnTicks: true,
minValue: '01-01-1996',
maxValue: '01-01-1998'
},
seriesGroups:
[
{
type: 'spline',
alignEndPointsWithIntervals: false,
valueAxis:
{
labels: {
formatFunction: function (value) {
return '$' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
},
displayValueAxis: true,
description: '',
axisSize: 'auto',
tickMarksColor: '#888888'
},
series: [
{ dataField: 'Subtotal1', displayText: dropDownItemOne.label, opacity: 0.4 },
{ dataField: 'Subtotal2', displayText: dropDownItemTwo.label, opacity: 0.5 }
]
}
]
};
this.yearSalesChart = jqwidgets.createInstance('#yearComparisonChart', 'jqxChart', chartOptions);
this.yearSalesChart.addColorScheme('myScheme', ['#008ae6', '#E35912']);
this.yearSalesChart.setOptions({ colorScheme: 'myScheme' });
}
changeReport(event) {
let reportIndex = event.args.boundIndex;
if (reportIndex === this.selectedReportIndex) {
return;
}
this.selectedReportIndex = reportIndex;
switch (reportIndex) {
case 0: {
this.salesPerMonthTabs.element.style.display = 'block';
this.salesPerMonthDataTable.element.style.display = 'block';
this.expensesPerMonthChart.element.style.display = 'none';
this.expensesPerMonthDataTable.element.style.display = 'none';
this.employeeSalaryChart.element.style.display = 'none';
this.employeeSalaryDataTable.element.style.display = 'none';
if (this.barGaugesCreated) {
this.leftBarGauge.element.style.display = 'none';
this.rightBarGauge.element.style.display = 'none';
}
this.yearSalesChart.element.style.display = 'none';
}
break;
case 1: {
this.expensesPerMonthChart.element.style.display = 'block';
this.expensesPerMonthDataTable.element.style.display = 'block';
this.salesPerMonthTabs.element.style.display = 'none';
this.salesPerMonthDataTable.element.style.display = 'none';
this.employeeSalaryChart.element.style.display = 'none';
this.employeeSalaryDataTable.element.style.display = 'none';
if (this.barGaugesCreated) {
this.leftBarGauge.element.style.display = 'none';
this.rightBarGauge.element.style.display = 'none';
}
this.yearSalesChart.element.style.display = 'none';
}
break;
case 2: {
this.employeeSalaryChart.element.style.display = 'block';
this.employeeSalaryDataTable.element.style.display = 'block';
this.salesPerMonthTabs.element.style.display = 'none';
this.salesPerMonthDataTable.element.style.display = 'none';
this.expensesPerMonthChart.element.style.display = 'none';
this.expensesPerMonthDataTable.element.style.display = 'none';
if (this.barGaugesCreated) {
this.leftBarGauge.element.style.display = 'none';
this.rightBarGauge.element.style.display = 'none';
}
this.yearSalesChart.element.style.display = 'none';
}
break;
case 3: {
if (!this.barGaugesCreated) {
this.initYearSalesGauges();
}
this.leftBarGauge.element.style.display = 'block';
this.rightBarGauge.element.style.display = 'block';
this.yearSalesChart.element.style.display = 'block';
this.leftBarGauge.refresh();
this.rightBarGauge.refresh();
this.salesPerMonthDataTable.element.style.display = 'none';
this.expensesPerMonthChart.element.style.display = 'none';
this.expensesPerMonthDataTable.element.style.display = 'none';
this.salesPerMonthTabs.element.style.display = 'none';
this.employeeSalaryChart.element.style.display = 'none';
this.employeeSalaryDataTable.element.style.display = 'none';
}
break;
}
this.changeEmployees(true, true);
}
closeWindow() {
this.window.close();
}
changeEmployees(dropDownOneChanged, dropDownTwoChanged) {
if (this.dropDownTwo.getSelectedItem().value === this.dropDownOne.getSelectedItem().value) {
this.window.open();
if (dropDownOneChanged) {
this.dropDownOne.selectedIndex(this.selectedEmployeeOne - 1);
} else {
this.dropDownTwo.selectedIndex(this.selectedEmployeeTwo - 1);
}
return false;
}
let dropDownItemOne = this.dropDownOne.getSelectedItem();
let dropDownItemTwo = this.dropDownTwo.getSelectedItem();
let leftEmployeeId = this.dropDownOne.getSelectedItem().value;
let rightEmployeeId = this.dropDownTwo.getSelectedItem().value;
this.selectedEmployeeOne = leftEmployeeId;
this.selectedEmployeeTwo = rightEmployeeId;
switch (this.selectedReportIndex) {
case 0: {
this.updateSalesComparison(dropDownOneChanged, dropDownTwoChanged, dropDownItemOne, dropDownItemTwo, leftEmployeeId, rightEmployeeId);
}
break;
case 1: {
this.updateExpensesComparison(dropDownItemOne, dropDownItemTwo, leftEmployeeId, rightEmployeeId);
}
break;
case 2: {
this.updateSalaryComparison(dropDownItemOne, dropDownItemTwo, leftEmployeeId, rightEmployeeId);
}
break;
case 3: {
this.updateYearSalesComparison(dropDownOneChanged, dropDownTwoChanged, dropDownItemOne, dropDownItemTwo, leftEmployeeId, rightEmployeeId);
}
break;
}
}
updateSalesComparison(dropDownOneChanged, dropDownTwoChanged, dropDownItemOne, dropDownItemTwo, leftEmployeeId, rightEmployeeId) {
if (dropDownOneChanged) {
let leftSalesChartSource = {
datafields: [
{ name: 'OrderDate' },
{ name: 'Subtotal' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=salespermonthchart&employeeid=' + leftEmployeeId,
datatype: 'json'
};
let leftSalesChartDataAdapter = new jqx.dataAdapter(leftSalesChartSource, { loadError: function (xhr, status, error) { alert('Error loading "' + leftSalesChartSource.url + '" : ' + error); } });
this.leftSalesChart.setOptions({ title: dropDownItemOne.label, source: leftSalesChartDataAdapter });
}
if(dropDownTwoChanged) {
let rightSalesChartSource = {
datafields: [
{ name: 'OrderDate' },
{ name: 'Subtotal' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=salespermonthchart&employeeid=' + rightEmployeeId,
datatype: 'json'
};
let rightSalesChartDataAdapter = new jqx.dataAdapter(rightSalesChartSource, { loadError: function (xhr, status, error) { alert('Error loading "' + rightSalesChartSource.url + '" : ' + error); } });
this.rightSalesChart.setOptions({ title: dropDownItemTwo.label, source: rightSalesChartDataAdapter });
}
let dataTableSource = {
datafields: [
{ name: 'OrderDate', type: 'date' },
{ name: 'Subtotal1' },
{ name: 'Subtotal2' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=salespermonthgrid&employeeid1=' + leftEmployeeId + '&employeeid2=' + rightEmployeeId,
datatype: 'json'
};
let dataTableDataAdapter = new jqx.dataAdapter(dataTableSource, { async: true, loadError: function (xhr, status, error) { alert('Error loading "' + dataTableSource.url + '" : ' + error); } });
let dataTableOptions = {
source: dataTableDataAdapter,
columns: [
{
text: '', dataField: 'OrderDate', cellsFormat: 'MMMM', width: '25%', cellsRenderer: function (row, column, value) {
return '
' + value + '';
}
},
{
text: '',
renderer: function () {
return '';
},
dataField: 'Subtotal1', width: '25%', cellsalign: 'right', cellsFormat: 'c0', cellsRenderer: function (row, column, value) {
var valueAsString = value.toString();
return valueAsString.replace(/[.]/g, ',');
}
},
{
text: '',
renderer: function () {
return '';
},
dataField: 'Subtotal2', width: '25%', cellsalign: 'right', cellsFormat: 'c0', cellsRenderer: function (row, column, value) {
var valueAsString = value.toString();
return valueAsString.replace(/[.]/g, ',');
}
},
{
text: '', editable: false, datafield: 'total',
cellsRenderer: function (row, column, value, rowdata) {
var total = parseFloat(rowdata.Subtotal1) + parseFloat(rowdata.Subtotal2);
return '
' + dataTableDataAdapter.formatNumber(total, 'c0').replace(/[.]/g, ',') + '
';
}
}
]
}
this.salesPerMonthDataTable.setOptions(dataTableOptions);
let spiderChartSource = {
datafields: [
{ name: 'OrderDate', type: 'date' },
{ name: 'Subtotal1' },
{ name: 'Subtotal2' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=salespermonthgrid&employeeid1=' + leftEmployeeId + '&employeeid2=' + rightEmployeeId,
datatype: 'json'
}
let spiderChartDataAdapter = new jqx.dataAdapter(spiderChartSource, { loadError: function (xhr, status, error) { alert('Error loading "' + spiderChartSource.url + '" : ' + error); } });
this.spriderChart.seriesGroups[0].series[0].displayText = dropDownItemOne.label;
this.spriderChart.seriesGroups[0].series[1].displayText = dropDownItemTwo.label;
let spiderChartOptions = {
source: spiderChartDataAdapter,
}
this.spriderChart.setOptions(spiderChartOptions);
}
updateExpensesComparison(dropDownItemOne, dropDownItemTwo, leftEmployeeId, rightEmployeeId) {
let chartSource =
{
datafields: [
{ name: 'OrderDate' },
{ name: 'Subtotal1' },
{ name: 'Subtotal2' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=expensespermonthgridchart&employeeid1=' + leftEmployeeId + '&employeeid2=' + rightEmployeeId,
datatype: 'json'
};
let chartDataAdapter = new jqx.dataAdapter(chartSource, { loadError: function (xhr, status, error) { alert('Error loading "' + chartSource.url + '" : ' + error); } });
this.expensesPerMonthChart.seriesGroups[0].series[0].displayText = dropDownItemOne.label;
this.expensesPerMonthChart.seriesGroups[0].series[1].displayText = dropDownItemTwo.label;
let chartOptions = {
source: chartDataAdapter
}
this.expensesPerMonthChart.setOptions(chartOptions);
let dataTableSource =
{
datafields: [
{ name: 'OrderDate', type: 'date' },
{ name: 'Subtotal1' },
{ name: 'Subtotal2' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=expensespermonthgridchart&employeeid1=' + leftEmployeeId + '&employeeid2=' + rightEmployeeId,
datatype: 'json'
};
let dataTableDataAdapter = new jqx.dataAdapter(dataTableSource, { loadError: function (xhr, status, error) { alert('Error loading "' + dataTableSource.url + '" : ' + error); } });
let dataTableOptions = {
source: dataTableDataAdapter,
columns: [
{
text: '', dataField: 'OrderDate', cellsFormat: 'MMMM', width: '25%', cellsRenderer: function (row, column, value) {
return '
' + value + '';
}
},
{
text: '',
renderer: function () {
return '';
},
dataField: 'Subtotal1', width: '25%', cellsalign: 'right', cellsFormat: 'c0', cellsRenderer: function (row, column, value) {
var valueAsString = value.toString();
return valueAsString.replace(/[.]/g, ',');
}
},
{
text: '',
renderer: function () {
return '';
},
dataField: 'Subtotal2', width: '25%', cellsalign: 'right', cellsFormat: 'c0', cellsRenderer: function (row, column, value) {
var valueAsString = value.toString();
return valueAsString.replace(/[.]/g, ',');
}
},
{
text: '', editable: false, datafield: 'total',
cellsRenderer: function (row, column, value, rowdata) {
var total = parseFloat(rowdata.Subtotal1) + parseFloat(rowdata.Subtotal2);
return '
' + dataTableDataAdapter.formatNumber(total, 'c0').replace(/[.]/g, ',') + '
';
}
}
]
}
this.expensesPerMonthDataTable.setOptions(dataTableOptions);
}
updateSalaryComparison(dropDownItemOne, dropDownItemTwo, leftEmployeeId, rightEmployeeId) {
let chartSource =
{
datafields: [
{ name: 'OrderDate' },
{ name: 'Subtotal1' },
{ name: 'Subtotal2' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=salarygridchart&employeeid1=' + leftEmployeeId + '&employeeid2=' + rightEmployeeId,
datatype: 'json'
};
let chartDataAdapter = new jqx.dataAdapter(chartSource, { loadError: function (xhr, status, error) { alert('Error loading "' + chartSource.url + '" : ' + error); } });
this.employeeSalaryChart.seriesGroups[0].series[0].displayText = dropDownItemOne.label;
this.employeeSalaryChart.seriesGroups[0].series[1].displayText = dropDownItemTwo.label;
let chartOptions = {
source: chartDataAdapter
}
this.employeeSalaryChart.setOptions(chartOptions);
let dataTableSource =
{
datafields: [
{ name: 'OrderDate', type: 'date' },
{ name: 'Subtotal1' },
{ name: 'Subtotal2' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=salarygridchart&employeeid1=' + leftEmployeeId + '&employeeid2=' + rightEmployeeId,
datatype: 'json'
};
let dataTableDataAdapter = new jqx.dataAdapter(dataTableSource, { loadError: function (xhr, status, error) { alert('Error loading "' + dataTableSource.url + '" : ' + error); } });
let dataTableOptions = {
source: dataTableDataAdapter,
columns: [
{
text: '', dataField: 'OrderDate', cellsFormat: 'MMMM', width: '25%', cellsRenderer: function (row, column, value) {
return '
' + value + '';
}
},
{
text: '',
renderer: function () {
return '';
},
dataField: 'Subtotal1', width: '25%', cellsalign: 'right', cellsFormat: 'c0', cellsRenderer: function (row, column, value) {
var valueAsString = value.toString();
return valueAsString.replace(/[.]/g, ',');
}
},
{
text: '',
renderer: function () {
return '';
},
dataField: 'Subtotal2', width: '25%', cellsalign: 'right', cellsFormat: 'c0', cellsRenderer: function (row, column, value) {
var valueAsString = value.toString();
return valueAsString.replace(/[.]/g, ',');
}
},
{
text: '', editable: false, datafield: 'total',
cellsRenderer: function (row, column, value, rowdata) {
var total = parseFloat(rowdata.Subtotal1) + parseFloat(rowdata.Subtotal2);
return '
' + dataTableDataAdapter.formatNumber(total, 'c0').replace(/[.]/g, ',') + '
';
}
}
]
}
this.employeeSalaryDataTable.setOptions(dataTableOptions);
}
updateYearSalesComparison(dropDownOneChanged, dropDownTwoChanged, dropDownItemOne, dropDownItemTwo, leftEmployeeId, rightEmployeeId) {
let chartSource = {
datafields: [
{ name: 'OrderDate' },
{ name: 'Subtotal1' },
{ name: 'Subtotal2' }
],
url: 'https://www.jqwidgets.com/jquery-widgets-demo/demos/interactivedemos/salesreport/data.php?usedwidget=yearcomparisonchart&employeeid1=' + leftEmployeeId + '&employeeid2=' + rightEmployeeId,
datatype: 'json'
};
let gaugeDataAdapter = new jqx.dataAdapter(chartSource, { async: false, autoBind: true, loadError: function (xhr, status, error) { alert('Error loading "' + chartSource.url + '" : ' + error); } });
let chartDataAdapter = new jqx.dataAdapter(chartSource, { async: false, loadError: function (xhr, status, error) { alert('Error loading "' + chartSource.url + '" : ' + error); } });
this.yearSalesChart.seriesGroups[0].series[0].displayText = dropDownItemOne.label;
this.yearSalesChart.seriesGroups[0].series[1].displayText = dropDownItemTwo.label;
let chartOptions = {
source: chartDataAdapter
};
this.yearSalesChart.setOptions(chartOptions);
if (dropDownOneChanged) {
const totalPersonOne = gaugeDataAdapter.records[0].Subtotal1 + gaugeDataAdapter.records[1].Subtotal1 + gaugeDataAdapter.records[2].Subtotal1;
const gaugeOptions = {
title: { text: dropDownItemOne.label },
values: [gaugeDataAdapter.records[0].Subtotal1, gaugeDataAdapter.records[1].Subtotal1, gaugeDataAdapter.records[2].Subtotal1],
max: totalPersonOne
}
this.leftBarGauge.setOptions(gaugeOptions);
this.leftBarGauge.refresh();
}
if (dropDownTwoChanged) {
const totalPersonTwo = gaugeDataAdapter.records[0].Subtotal2 + gaugeDataAdapter.records[1].Subtotal2 + gaugeDataAdapter.records[2].Subtotal2;
const gaugeOptions = {
title: { text: dropDownItemTwo.label },
values: [gaugeDataAdapter.records[0].Subtotal2, gaugeDataAdapter.records[1].Subtotal2, gaugeDataAdapter.records[2].Subtotal2],
max: totalPersonTwo
}
this.rightBarGauge.setOptions(gaugeOptions);
this.rightBarGauge.refresh();
}
}
}