import React, { useState } from "react"; import { FaSearch, FaMapMarkerAlt, FaExclamationTriangle, FaCheckCircle, FaEye, FaTh, FaList, } from "react-icons/fa"; import { mockWarehouses } from "../../../mocks/mockWarehouses"; import { mockLocations } from "../../../mocks/mockLocations"; import { mockStockItems } from "../../../mocks/mockStockItems"; import { getStockStatusColor, getStockStatusText } from "../../../utils/erp"; const LocationTracking: React.FC = () => { const [searchTerm, setSearchTerm] = useState(""); const [selectedWarehouse, setSelectedWarehouse] = useState(""); const [selectedLocation, setSelectedLocation] = useState(""); const [viewMode, setViewMode] = useState<"grid" | "list">("grid"); const getLocationUtilization = (locationId: string) => { const location = mockLocations.find((l) => l.id === locationId); if (!location) return 0; return (location.currentStock / location.capacity) * 100; }; const getLocationStockItems = (locationId: string) => { return mockStockItems.filter((item) => item.locationId === locationId); }; const filteredLocations = mockLocations.filter((location) => { const matchesSearch = location.name.toLowerCase().includes(searchTerm.toLowerCase()) || location.locationCode.toLowerCase().includes(searchTerm.toLowerCase()); const matchesWarehouse = selectedWarehouse === "" || location.warehouseId === selectedWarehouse; return matchesSearch && matchesWarehouse; }); const GridView = () => (
{filteredLocations.map((location) => { const warehouse = mockWarehouses.find( (w) => w.id === location.warehouseId ); const locationStockItems = getLocationStockItems(location.id); const utilization = getLocationUtilization(location.id); return (

{location.name}

{location.locationCode}

Depo: {warehouse?.name}

{location.description}

{/* Utilization */}
Doluluk Oranı %{Math.round(utilization)}
90 ? "bg-red-500" : utilization > 70 ? "bg-yellow-500" : "bg-green-500" }`} style={{ width: `${utilization}%` }} />
{location.currentStock} / {location.capacity} birim
{/* Stock Items Summary */}

Malzemeler

{locationStockItems.length} çeşit
{locationStockItems.length > 0 ? (
{locationStockItems.slice(0, 3).map((item) => (
{item.material?.code || "N/A"}
{item.quantity} {getStockStatusText(item.status)}
))} {locationStockItems.length > 3 && (
+{locationStockItems.length - 3} malzeme daha
)}
) : (
Malzeme bulunmuyor
)}
{/* Restrictions */} {location.restrictions && location.restrictions.length > 0 && (

Kısıtlamalar

{location.restrictions .slice(0, 2) .map((restriction, index) => ( {restriction} ))} {location.restrictions.length > 2 && ( +{location.restrictions.length - 2} )}
)}
{location.isActive ? ( <> Aktif ) : ( <> Pasif )}
Son hareket:{" "} {locationStockItems.length > 0 ? new Date( Math.max( ...locationStockItems.map((item) => item.lastMovementDate.getTime() ) ) ).toLocaleDateString("tr-TR") : "N/A"}
); })}
); const ListView = () => (
{filteredLocations.map((location) => { const warehouse = mockWarehouses.find( (w) => w.id === location.warehouseId ); const locationStockItems = getLocationStockItems(location.id); const utilization = getLocationUtilization(location.id); return ( ); })}
Lokasyon Depo Doluluk Malzeme Çeşidi Son Hareket Durum İşlemler
{location.name}
{location.locationCode}
{warehouse?.name}
{warehouse?.code}
90 ? "bg-red-500" : utilization > 70 ? "bg-yellow-500" : "bg-green-500" }`} style={{ width: `${utilization}%` }} />
%{Math.round(utilization)}
{location.currentStock} / {location.capacity}
{locationStockItems.length} çeşit {locationStockItems.length > 0 ? new Date( Math.max( ...locationStockItems.map((item) => item.lastMovementDate.getTime() ) ) ).toLocaleDateString("tr-TR") : "N/A"} {location.isActive ? ( Aktif ) : ( Pasif )}
); const LocationDetailModal = () => { const location = mockLocations.find((l) => l.id === selectedLocation); const locationStockItems = getLocationStockItems(selectedLocation); if (!selectedLocation || !location) return null; return (
setSelectedLocation("")} />

{location.name} - Detaylar

{/* Location Info */}

Lokasyon Bilgileri

Kod: {location.locationCode}
Açıklama: {location.description}
Tip: {location.locationType}
Kapasite: {location.capacity} birim
Mevcut Stok: {location.currentStock}{" "} birim
{location.dimensions && (
Boyutlar: {location.dimensions.length}x {location.dimensions.width}x{location.dimensions.height} m
)}
{/* Stock Items */}

Stok Malzemeleri ({locationStockItems.length})

{locationStockItems.map((item) => (
{item.material?.code}
{item.material?.code}
{getStockStatusText(item.status)}
Miktar: {item.quantity} {item.unitId}
Mevcut: {item.availableQuantity} {item.unitId}
Rezerve: {item.reservedQuantity} {item.unitId}
Lot: {item.lotNumber || "N/A"}
Son hareket:{" "} {item.lastMovementDate.toLocaleDateString("tr-TR")}
))} {locationStockItems.length === 0 && (
Bu lokasyonda malzeme bulunmuyor
)}
); }; return (

Raf/Lokasyon Bazlı Takip

Lokasyonlardaki stok durumunu takip edin

{/* Filters */}
setSearchTerm(e.target.value)} className="pl-10 pr-4 py-1.5 text-sm w-full border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
{/* Content */} {viewMode === "grid" ? : } {/* Location Detail Modal */}
); }; export default LocationTracking;