16 lines
1.7 KiB
JavaScript
16 lines
1.7 KiB
JavaScript
document.addEventListener('DOMContentLoaded',()=>{
|
|
if(location.pathname!=='/accounting')return;
|
|
const filterForm=document.querySelector('form[action="/accounting"]');
|
|
const invoiceForm=document.querySelector('form[action="/accounting/save"]');
|
|
if(filterForm&&invoiceForm)invoiceForm.closest('.card')?.after(filterForm);
|
|
const structuresTitle=[...document.querySelectorAll('.card-title')].find(node=>node.textContent.trim()==='Coût et paiements par structure');
|
|
structuresTitle?.closest('.col-xl-7')?.classList.add('accounting-dashboard-structures');
|
|
const canvas=document.getElementById('accountingAnnualChart');
|
|
if(canvas&&window.Chart){const rows=JSON.parse(canvas.dataset.series||'[]');new Chart(canvas,{type:'bar',data:{labels:rows.map(r=>r.year),datasets:[{label:'Payé',data:rows.map(r=>(r.billed-r.due)/100),backgroundColor:'rgba(47,179,68,.72)'},{label:'Reste dû',data:rows.map(r=>r.due/100),backgroundColor:'rgba(245,159,0,.75)'}]},options:{responsive:true,maintainAspectRatio:false,scales:{x:{stacked:true},y:{stacked:true,beginAtZero:true,ticks:{callback:v=>v.toLocaleString('fr-FR')+' €'}}},plugins:{tooltip:{callbacks:{label:c=>c.dataset.label+' : '+c.parsed.y.toLocaleString('fr-FR',{minimumFractionDigits:2})+' €'}}}}});}
|
|
document.querySelectorAll('.table tbody tr').forEach(row=>{
|
|
const reference=row.cells[1]?.textContent.trim();if(!reference)return;
|
|
row.classList.add('cursor-pointer');row.tabIndex=0;
|
|
const open=event=>{if(event.target.closest('a,button,input,select'))return;if(event.type==='keydown'&&!['Enter',' '].includes(event.key))return;location.href='/accounting/edit-by-reference?reference='+encodeURIComponent(reference);};
|
|
row.addEventListener('click',open);row.addEventListener('keydown',open);
|
|
});
|
|
});
|