Files
fonsi_app/utils/dashboardCharts.ts
2026-09-10 14:08:41 +02:00

119 lines
3.3 KiB
TypeScript

export const CHART_ENDPOINTS = {
costiRicavi: '/dashboard/costi-ricavi',
fatturatoCliente: '/dashboard/fatturato-cliente',
aperteChiuseCliente: '/dashboard/aperte-chiuse-cliente',
aperteChiuseFornitore: '/dashboard/aperte-chiuse-fornitore',
apertoCliente: '/dashboard/partite-cliente',
chiusoCliente: '/dashboard/partite-cliente',
};
export const CHART_DATA_KEY: Record<string, string> = {
apertoCliente: 'partiteCliente',
chiusoCliente: 'partiteCliente',
};
export const formatEuro = (val: string | number): string => {
const num = parseFloat(val as string);
return (isNaN(num) ? 0 : num).toLocaleString('it-IT', {
style: 'currency',
currency: 'EUR'
});
};
const TOOLTIP_BASE = {
renderMode: 'richText',
confine: true,
textStyle: { fontSize: 10 }
};
export const buildPieOption = (data: any) => ({
legend: {
type: 'plain',
top: 190,
left: 'center',
itemGap: 8,
itemWidth: 14,
itemHeight: 10,
textStyle: { fontSize: 12 }
},
series: [
{
name: 'Fatturato',
type: 'pie',
radius: [45, 80],
center: ['50%', 95],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 5,
borderColor: '#fff',
borderWidth: 2
},
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: 11,
fontWeight: 'bold',
formatter: (params: any) => {
const val = (typeof params.value === 'number') ? params.value : 0;
return `${params.name}\n${val.toLocaleString('it-IT', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 })}`;
}
}
},
labelLine: {
show: false
},
data: data
}
]
});
export const buildAperteChiuseOption = (d: any) => ({
tooltip: {
...TOOLTIP_BASE,
trigger: 'axis',
valueFormatter: formatEuro
},
legend: {
bottom: 0,
itemGap: 10,
itemWidth: 14,
itemHeight: 10,
textStyle: { fontSize: 12 },
data: [
`Aperto(${d.current_year})`,
`Chiuso(${d.current_year})`,
`Aperto(${d.prev_year})`,
`Chiuso(${d.prev_year})`
],
selected: {
[`Aperto(${d.prev_year})`]: false,
[`Chiuso(${d.prev_year})`]: false
},
},
grid: {
left: '3%',
right: '4%',
top: '10%',
bottom: 75,
containLabel: true
},
xAxis: {
type: 'category',
data: d.mesi
},
yAxis: {
type: 'value'
},
series: [
{ name: `Aperto(${d.current_year})`, type: 'bar', stack: 'one', data: d.aperto },
{ name: `Chiuso(${d.current_year})`, type: 'bar', stack: 'one', data: d.chiuso },
{ name: `Aperto(${d.prev_year})`, type: 'bar', stack: 'one', itemStyle: { color: '#b3b3b3' }, data: d.aperto_prev },
{ name: `Chiuso(${d.prev_year})`, type: 'bar', stack: 'one', itemStyle: { color: '#d9d9d9' }, data: d.chiuso_prev }
]
});