feat: per-task work hours table, notes, and read-only work order data in PDF page
Backend: - Added service_report_note TextField to Task model (migration 0012) - Exposed service_report_note in TaskSerializer - task_service_context: fixed service record filter from work_order.vehicle_id -> task.vehicle_id (bug: cross-crane work orders returned wrong records for non-primary crane) - task_service_context: include service_report_note in each task payload - _build_work_order_service_records_docx_bytes: use per-task service_report_note (fallback: work_order.notes); fix service records query to use task vehicle ids for cross-crane support - PDF generator: same per-task notes and cross-crane vehicle fix Frontend: - WorkOrderInvoicesPdfPage: removed global 'Uredi tablicu radnih sati' / 'Uredi tekst napomene' buttons that always opened tasks[0]; replaced with per-task buttons inside each task article - WorkOrderInvoicesPdfPage: separate editingTaskNote state / handler that calls updateTaskServiceReportNote (PATCH task.service_report_note) - WorkOrderServiceNotesModal: now receives task prop instead of workOrder; reads/writes task.service_report_note; shows task title in header - TaskWorkHoursTableModal: added workOrder prop; renders read-only amber info block with travel dates, mileage, and servicer vehicle data - fleetDashboardStore: added updateTaskServiceReportNote() function - WorkOrderInvoicesPdfPage: show saved service_report_note inline on each task card for quick reference Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -771,6 +771,17 @@ export async function updateTaskWorkHoursTable(taskId, data) {
|
||||
return payload;
|
||||
}
|
||||
|
||||
export async function updateTaskServiceReportNote(taskId, note) {
|
||||
if (!taskId) {
|
||||
throw new Error('Task ID je obavezan.');
|
||||
}
|
||||
const payload = await api.patch(`tasks/tasks/${encodeURIComponent(taskId)}/`, {
|
||||
service_report_note: String(note ?? ''),
|
||||
});
|
||||
showToast('Napomena servisnog izvještaja je uspješno spremljena.', 'success');
|
||||
return payload;
|
||||
}
|
||||
|
||||
export async function createWorkOrderInvoice(workOrderId, data = {}, signal = null) {
|
||||
if (!workOrderId) {
|
||||
throw new Error('Work order ID je obavezan.');
|
||||
|
||||
Reference in New Issue
Block a user