fix: prikaži shared putne naloge u kontekstu i filtriraj zatvorene u dropdownu

- scopedWorkOrders: u context modu uključi i putne naloge koji su dodijeljeni
  taskovima kontekstne dizalice (cross-crane shared WO), a ne samo one čiji
  vehicle === hydratedSelectedVehicleId
- selectedTaskWorkOrders: prikaži samo otvorene naloge (status != closed)
  u dropdownu za dodjelu putnog naloga tasku
- Ažuriran emptyMessage tablice da sugerira prebacivanje na 'svi nalozi'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
mariomitte
2026-08-01 08:09:45 +02:00
parent fd8c6d8040
commit 79145c58e4

View File

@@ -423,8 +423,19 @@ export default function FleetDashboardShell({ initialSection = 'dashboard', page
if (!hydratedSelectedVehicleId) { if (!hydratedSelectedVehicleId) {
return []; return [];
} }
return codeSorted.filter((order) => String(order.vehicle) === String(hydratedSelectedVehicleId)); // Collect work order IDs that are directly assigned to tasks of the context crane.
}, [workOrders, workOrderScope, hydratedSelectedVehicleId, user?.id, user?.is_serviser, user?.is_team_member, workOrderCodeSortDirection]); // This covers cross-crane shared work orders: a WO created for crane A can be
// assigned to a task of crane B — it should still appear in crane B's context view.
const contextTaskWorkOrderIds = new Set(
tasks
.filter((t) => String(t.vehicle || '') === String(hydratedSelectedVehicleId) && t.work_order)
.map((t) => String(t.work_order))
);
return codeSorted.filter(
(order) => String(order.vehicle) === String(hydratedSelectedVehicleId)
|| contextTaskWorkOrderIds.has(String(order.id))
);
}, [workOrders, tasks, workOrderScope, hydratedSelectedVehicleId, user?.id, user?.is_serviser, user?.is_team_member, workOrderCodeSortDirection]);
const pageSize = 10; const pageSize = 10;
const totalPages = Math.max(1, Math.ceil(scopedWorkOrders.length / pageSize)); const totalPages = Math.max(1, Math.ceil(scopedWorkOrders.length / pageSize));
const latestWorkOrders = useMemo( const latestWorkOrders = useMemo(
@@ -541,8 +552,11 @@ export default function FleetDashboardShell({ initialSection = 'dashboard', page
}, [serviceRecords, selectedTask?.id]); }, [serviceRecords, selectedTask?.id]);
const selectedTaskWorkOrders = useMemo(() => { const selectedTaskWorkOrders = useMemo(() => {
if (!selectedTask) return []; if (!selectedTask) return [];
// Show ALL work orders — cross-crane sharing is allowed so no vehicle filter. // Only open work orders in the dropdown — closed ones cannot receive new tasks.
return [...workOrders].sort((a, b) => String(b.date || '').localeCompare(String(a.date || ''))); // Cross-crane sharing allowed: no vehicle filter.
return [...workOrders]
.filter((order) => String(order.status || '').toLowerCase() !== 'closed')
.sort((a, b) => String(b.date || '').localeCompare(String(a.date || '')));
}, [selectedTask, workOrders]); }, [selectedTask, workOrders]);
useEffect(() => { useEffect(() => {
@@ -945,7 +959,7 @@ export default function FleetDashboardShell({ initialSection = 'dashboard', page
workOrderScope === 'context' workOrderScope === 'context'
? (!hydratedSelectedVehicleId ? (!hydratedSelectedVehicleId
? 'Odaberite dizalicu za prikaz putnih naloga iz servisnog konteksta.' ? 'Odaberite dizalicu za prikaz putnih naloga iz servisnog konteksta.'
: 'Nema dostupnih putnih naloga za odabrani servisni kontekst.') : 'Nema dostupnih putnih naloga za odabrani servisni kontekst. Možete prebaciti na prikaz svih naloga.')
: 'Nema dostupnih putnih naloga.' : 'Nema dostupnih putnih naloga.'
} }
renderRow={(workOrder) => ( renderRow={(workOrder) => (