36 lines
2.6 KiB
JavaScript
36 lines
2.6 KiB
JavaScript
(()=>{
|
|
const F=FuelTrack;
|
|
const text=()=>getComputedStyle(document.body).color;
|
|
const grid=()=>getComputedStyle(document.documentElement).getPropertyValue('--bs-border-color').trim()||'rgba(0,0,0,.1)';
|
|
function destroy(id){if(F.charts[id]){F.charts[id].destroy();delete F.charts[id]}}
|
|
function empty(id,value){F.qs(`#${id}-empty`)?.classList.toggle('d-none',!value);F.qs(`#${id}`)?.classList.toggle('d-none',value)}
|
|
const commonScales=()=>({x:{ticks:{color:text()},grid:{color:grid()}},y:{beginAtZero:true,ticks:{color:text()},grid:{color:grid()}}});
|
|
|
|
F.renderBarChart=(id,data)=>{
|
|
const el=F.qs(`#${id}`);if(!el)return;
|
|
const labels=Object.keys(data||{});destroy(id);empty(id,!labels.length);if(!labels.length)return;
|
|
F.charts[id]=new Chart(el,{type:'bar',data:{labels,datasets:[
|
|
{label:'Detal brutto (zł)',data:labels.map(k=>data[k].retail_gross)},
|
|
{label:'Do zapłaty brutto (zł)',data:labels.map(k=>data[k].invoice_gross)},
|
|
{label:'Różnica brutto (zł)',data:labels.map(k=>data[k].gross_saving)}
|
|
]},options:{responsive:true,maintainAspectRatio:false,plugins:{legend:{labels:{color:text()}}},scales:commonScales()}});
|
|
};
|
|
|
|
F.renderMultiLineChart=(id,series,gross=false)=>{
|
|
const el=F.qs(`#${id}`);if(!el)return;destroy(id);
|
|
const keys=Object.keys(series||{}).filter(k=>(series[k]||[]).length);empty(id,!keys.length);if(!keys.length)return;
|
|
const dates=[...new Set(keys.flatMap(k=>series[k].map(p=>p.date)))].sort();
|
|
F.charts[id]=new Chart(el,{type:'line',data:{labels:dates,datasets:keys.map(k=>{const m=new Map(series[k].map(p=>[p.date,p.value]));return{label:`${k} ${gross?'brutto':'netto'} zł/l`,data:dates.map(d=>m.has(d)?m.get(d):null),spanGaps:true,tension:.2,pointRadius:1.5,borderWidth:2}})},options:{responsive:true,maintainAspectRatio:false,interaction:{mode:'index',intersect:false},plugins:{legend:{labels:{color:text()}}},scales:{x:{ticks:{color:text(),maxTicksLimit:12},grid:{color:grid()}},y:{ticks:{color:text()},grid:{color:grid()}}}}});
|
|
};
|
|
|
|
F.renderCostReportChart=(id,data)=>{
|
|
const el=F.qs(`#${id}`);if(!el)return;
|
|
const labels=Object.keys(data||{});destroy(id);empty(id,!labels.length);if(!labels.length)return;
|
|
F.charts[id]=new Chart(el,{type:'bar',data:{labels,datasets:[
|
|
{label:'Detal brutto (zł)',data:labels.map(k=>data[k].retail_gross)},
|
|
{label:'Do zapłaty brutto (zł)',data:labels.map(k=>data[k].invoice)},
|
|
{label:'Różnica brutto (zł)',data:labels.map(k=>data[k].gross_saving)}
|
|
]},options:{responsive:true,maintainAspectRatio:false,plugins:{legend:{labels:{color:text()}}},scales:commonScales()}});
|
|
};
|
|
})();
|