feat: dodaj mjesecni izvjestaj servisera i troskova u kalendar widget
Some checks failed
ERP CI/CD Pipeline / test (push) Has been cancelled
ERP CI/CD Pipeline / Deploy (server git pull + compose) (push) Has been cancelled

- Dva nova Django API endpointa (GET /api/fleet/reports/monthly-servicer/ i
  /api/fleet/reports/monthly-costs/) koji generiraju DOCX u A4 landscape formatu
- TaskCalendarWidget prosiren s report panelom: dva gumba iznad kalendara
  (Izvjestaj servisera / Izvjestaj troskova) sirenjem drawer-a na 680 px
- Preview tablice s podacima iz postojeceg tasks/workOrders store-a
- downloadMonthlyServiserReport i downloadMonthlyCostsReport u store-u
- TaskCalendarPortal prosljeduje activeWorkOrders prop widgetu

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
mariomitte
2026-07-31 13:31:58 +02:00
parent 8b82481bb4
commit fe739b14c0
5 changed files with 672 additions and 174 deletions

View File

@@ -913,6 +913,34 @@ export async function downloadWorkOrderInvoicesDocx(workOrderId) {
}
}
export async function downloadMonthlyServiserReport(year, month) {
try {
const blob = await api.get(
`fleet/reports/monthly-servicer/?year=${year}&month=${month}`,
{ responseType: 'blob' },
);
saveBlobToFile(blob, `izvjestaj-servisera-${year}-${String(month).padStart(2, '0')}.docx`);
showToast('Izvještaj servisera je preuzet.', 'success');
} catch (err) {
showToast(err?.message || 'Preuzimanje izvještaja servisera nije uspjelo.', 'error');
throw err;
}
}
export async function downloadMonthlyCostsReport(year, month) {
try {
const blob = await api.get(
`fleet/reports/monthly-costs/?year=${year}&month=${month}`,
{ responseType: 'blob' },
);
saveBlobToFile(blob, `troskovi-servisera-${year}-${String(month).padStart(2, '0')}.docx`);
showToast('Izvještaj troškova je preuzet.', 'success');
} catch (err) {
showToast(err?.message || 'Preuzimanje izvještaja troškova nije uspjelo.', 'error');
throw err;
}
}
export async function downloadGeneratedPdfByUrl(downloadUrl, filename = 'document.pdf') {
if (!downloadUrl) {
showToast('Nedostaje URL za preuzimanje PDF-a.', 'error');