diff --git a/frontend/src/components/dashboard/TaskCalendarWidget.jsx b/frontend/src/components/dashboard/TaskCalendarWidget.jsx index 58d7a1c..294eb4a 100644 --- a/frontend/src/components/dashboard/TaskCalendarWidget.jsx +++ b/frontend/src/components/dashboard/TaskCalendarWidget.jsx @@ -1,8 +1,10 @@ import { useEffect, useMemo, useState } from 'preact/hooks'; import { getStatusLabel } from '../../stores/taskStore'; import { + downloadMonthlyServiceTasksArchive, downloadMonthlyCostsReport, downloadMonthlyServiserReport, + downloadMonthlyWorkOrdersArchive, fetchMonthlyCostInvoices, fetchMonthlyServicerEntries, upsertMonthlyServicerEntry, @@ -89,6 +91,9 @@ export default function TaskCalendarWidget({ tasks = [], notes = [], workOrders const [manualEntryDraft, setManualEntryDraft] = useState(null); const [manualEntryError, setManualEntryError] = useState(''); const [savingManualEntry, setSavingManualEntry] = useState(false); + const [bulkDownloadOpen, setBulkDownloadOpen] = useState(false); + const [downloadingAllTasks, setDownloadingAllTasks] = useState(false); + const [downloadingAllWorkOrders, setDownloadingAllWorkOrders] = useState(false); const reportOpen = reportType !== null; const panelWidth = reportOpen ? 920 : 300; @@ -341,6 +346,9 @@ export default function TaskCalendarWidget({ tasks = [], notes = [], workOrders function toggleReport(type) { setReportType((prev) => (prev === type ? null : type)); setManualEntryTarget(null); + if (type !== 'servicer') { + setBulkDownloadOpen(false); + } } async function handleDownload() { @@ -357,6 +365,28 @@ export default function TaskCalendarWidget({ tasks = [], notes = [], workOrders } } + async function handleDownloadAllTasksArchive() { + if (downloadingAllTasks) return; + setDownloadingAllTasks(true); + try { + await downloadMonthlyServiceTasksArchive(viewYear, viewMonth + 1); + setBulkDownloadOpen(false); + } finally { + setDownloadingAllTasks(false); + } + } + + async function handleDownloadAllWorkOrdersArchive() { + if (downloadingAllWorkOrders) return; + setDownloadingAllWorkOrders(true); + try { + await downloadMonthlyWorkOrdersArchive(viewYear, viewMonth + 1); + setBulkDownloadOpen(false); + } finally { + setDownloadingAllWorkOrders(false); + } + } + function handleServicerRowClick(row) { if (!row?.clickable) return; setManualEntryTarget(row); @@ -631,8 +661,17 @@ export default function TaskCalendarWidget({ tasks = [], notes = [], workOrders disabled={downloading} className="rounded-md bg-indigo-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-indigo-700 disabled:opacity-60" > - {downloading ? 'Preuzimanje...' : 'Preuzmi DOCX'} + {downloading ? 'Preuzimanje...' : reportType === 'servicer' ? 'Preuzmi mjesečni izvještaj' : 'Preuzmi DOCX'} + {reportType === 'servicer' && ( + + )}

@@ -825,6 +864,48 @@ export default function TaskCalendarWidget({ tasks = [], notes = [], workOrders )} + + {bulkDownloadOpen && reportType === 'servicer' && ( +

+
+
+
+

Preuzmi ZIP arhivu

+

+ {MONTH_NAMES[viewMonth]} {viewYear} +

+
+ +
+ +
+ + +
+
+
+ )} )}