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:
@@ -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) => (
|
||||||
|
|||||||
Reference in New Issue
Block a user