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' import { Container } from '@/components/shared' 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