fix: filtriraj putne naloge i prosiri servisni zapis modal
Ogranicava prikaz 'Dohvati sve putne naloge' na naloge trenutnog servisera, dok supervisor bez serviser uloge i dalje vidi sve. U detaljima servisnog zapisa dodaje gumb za upload datoteka i povezuje ga s postojecim ServicePhotoUpload modalom. U modalu Novi servisni zapis dodaje polje Naziv servisnog zapisa iznad opisa i salje ga kao service_title. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -91,6 +91,13 @@ function formatCost(value) {
|
||||
return `${numeric.toFixed(2)} EUR`;
|
||||
}
|
||||
|
||||
function normalizeComparableId(value) {
|
||||
if (value && typeof value === 'object') {
|
||||
return value.id ?? value.pk ?? '';
|
||||
}
|
||||
return value ?? '';
|
||||
}
|
||||
|
||||
const PAGE_MODE_TO_SECTION = {
|
||||
dashboard: 'dashboard',
|
||||
'work-orders': 'work-orders',
|
||||
@@ -344,14 +351,31 @@ export default function FleetDashboardShell({ initialSection = 'dashboard', page
|
||||
});
|
||||
const scopedWorkOrders = useMemo(() => {
|
||||
const sorted = [...workOrders].sort((a, b) => String(b.date || '').localeCompare(String(a.date || '')));
|
||||
const isServiserUser = Boolean(user?.is_serviser);
|
||||
const isSupervisorUser = Boolean(user?.is_team_member) && !Boolean(user?.is_serviser);
|
||||
const currentUserId = normalizeComparableId(user?.id);
|
||||
|
||||
const roleScoped = sorted.filter((order) => {
|
||||
if (!isServiserUser || isSupervisorUser) {
|
||||
return true;
|
||||
}
|
||||
if (!currentUserId) {
|
||||
return false;
|
||||
}
|
||||
const creatorCandidates = [order?.creator, order?.creator_id];
|
||||
return creatorCandidates.some((candidate) => (
|
||||
String(normalizeComparableId(candidate)) === String(currentUserId)
|
||||
));
|
||||
});
|
||||
|
||||
if (workOrderScope === 'all') {
|
||||
return sorted;
|
||||
return roleScoped;
|
||||
}
|
||||
if (!hydratedSelectedVehicleId) {
|
||||
return [];
|
||||
}
|
||||
return sorted.filter((order) => String(order.vehicle) === String(hydratedSelectedVehicleId));
|
||||
}, [workOrders, workOrderScope, hydratedSelectedVehicleId]);
|
||||
return roleScoped.filter((order) => String(order.vehicle) === String(hydratedSelectedVehicleId));
|
||||
}, [workOrders, workOrderScope, hydratedSelectedVehicleId, user?.id, user?.is_serviser, user?.is_team_member]);
|
||||
const pageSize = 10;
|
||||
const totalPages = Math.max(1, Math.ceil(scopedWorkOrders.length / pageSize));
|
||||
const latestWorkOrders = useMemo(
|
||||
@@ -1214,6 +1238,13 @@ export default function FleetDashboardShell({ initialSection = 'dashboard', page
|
||||
setSelectedServiceRecord(updatedRecord);
|
||||
fetchFleetDashboardData({ silent: true });
|
||||
}}
|
||||
onOpenPhotoUpload={(record) => {
|
||||
const targetId = record?.id ?? selectedServiceRecord?.id;
|
||||
if (!targetId) return;
|
||||
setSelectedServiceRecord(null);
|
||||
setServiceRecordBackTask(null);
|
||||
setPhotoUpload({ open: true, serviceRecordId: targetId });
|
||||
}}
|
||||
onBack={serviceRecordBackTask
|
||||
? () => {
|
||||
setSelectedServiceRecord(null);
|
||||
|
||||
Reference in New Issue
Block a user