import React, { useState } from 'react' import { WmWarehouse, WarehouseTypeEnum, WmZone, WmLocation } from '../../../types/wm' import { FaPlus, FaSearch, FaEdit, FaTrash, FaBuilding, FaMapMarkerAlt, FaLayerGroup, FaExclamationCircle, FaCheckCircle, FaEye, FaTh, FaList, } from 'react-icons/fa' import { WarehouseModal, ZoneModal, LocationModal } from './modals' import { mockWarehouses } from '../../../mocks/mockWarehouses' import { mockZones } from '../../../mocks/mockZones' import { mockLocations } from '../../../mocks/mockLocations' import { getWarehouseTypeColor, getWarehouseTypeText, getZoneTypeText, getLocationTypeText, } from '../../../utils/erp' import { Container } from '@/components/shared' const WarehouseDefinitions: React.FC = () => { const [searchTerm, setSearchTerm] = useState('') const [selectedType, setSelectedType] = useState('') const [activeTab, setActiveTab] = useState<'warehouses' | 'zones' | 'locations'>('warehouses') const [selectedWarehouse, setSelectedWarehouse] = useState('') const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid') // Modal states const [warehouseModal, setWarehouseModal] = useState<{ isOpen: boolean mode: 'create' | 'edit' | 'view' warehouse: WmWarehouse | null }>({ isOpen: false, mode: 'create', warehouse: null, }) const [zoneModal, setZoneModal] = useState<{ isOpen: boolean mode: 'create' | 'edit' | 'view' zone: WmZone | null }>({ isOpen: false, mode: 'create', zone: null, }) const [locationModal, setLocationModal] = useState<{ isOpen: boolean mode: 'create' | 'edit' | 'view' location: WmLocation | null }>({ isOpen: false, mode: 'create', location: null, }) // Data states (in a real app, these would come from an API) const [warehouses, setWarehouses] = useState(mockWarehouses) const [zones, setZones] = useState(mockZones) const [locations, setLocations] = useState(mockLocations) // Modal handlers const handleWarehouseAction = (mode: 'create' | 'edit' | 'view', warehouse?: WmWarehouse) => { setWarehouseModal({ isOpen: true, mode, warehouse: warehouse || null, }) } const handleZoneAction = (mode: 'create' | 'edit' | 'view', zone?: WmZone) => { setZoneModal({ isOpen: true, mode, zone: zone || null, }) } const handleLocationAction = (mode: 'create' | 'edit' | 'view', location?: WmLocation) => { setLocationModal({ isOpen: true, mode, location: location || null, }) } const handleWarehouseSave = (warehouseData: Partial) => { if (warehouseModal.mode === 'create') { const newWarehouse: WmWarehouse = { ...warehouseData, id: Date.now().toString(), locations: [], zones: [], creationTime: new Date(), lastModificationTime: new Date(), } as WmWarehouse setWarehouses([...warehouses, newWarehouse]) } else if (warehouseModal.mode === 'edit' && warehouseModal.warehouse) { setWarehouses( warehouses.map((w) => w.id === warehouseModal.warehouse!.id ? ({ ...w, ...warehouseData, lastModificationTime: new Date(), } as WmWarehouse) : w, ), ) } } const handleZoneSave = (zoneData: Partial) => { if (zoneModal.mode === 'create') { const newZone: WmZone = { ...zoneData, id: Date.now().toString(), locations: [], } as WmZone setZones([...zones, newZone]) } else if (zoneModal.mode === 'edit' && zoneModal.zone) { setZones( zones.map((z) => (z.id === zoneModal.zone!.id ? ({ ...z, ...zoneData } as WmZone) : z)), ) } } const handleLocationSave = (locationData: Partial) => { if (locationModal.mode === 'create') { const newLocation: WmLocation = { ...locationData, id: Date.now().toString(), stockItems: [], } as WmLocation setLocations([...locations, newLocation]) } else if (locationModal.mode === 'edit' && locationModal.location) { setLocations( locations.map((l) => l.id === locationModal.location!.id ? ({ ...l, ...locationData } as WmLocation) : l, ), ) } } const handleDelete = (type: 'warehouse' | 'zone' | 'location', id: string) => { if ( window.confirm( `Bu ${ type === 'warehouse' ? 'depo' : type === 'zone' ? 'bölge' : 'lokasyon' }u silmek istediğinizden emin misiniz?`, ) ) { switch (type) { case 'warehouse': setWarehouses(warehouses.filter((w) => w.id !== id)) break case 'zone': setZones(zones.filter((z) => z.id !== id)) break case 'location': setLocations(locations.filter((l) => l.id !== id)) break } } } // Filtered data const filteredWarehouses = warehouses.filter((warehouse) => { const matchesSearch = warehouse.name.toLowerCase().includes(searchTerm.toLowerCase()) || warehouse.code.toLowerCase().includes(searchTerm.toLowerCase()) const matchesType = selectedType === '' || warehouse.warehouseType === selectedType return matchesSearch && matchesType }) const filteredZones = zones.filter( (zone) => selectedWarehouse === '' || zone.warehouseId === selectedWarehouse, ) const filteredLocations = locations.filter( (location) => selectedWarehouse === '' || location.warehouseId === selectedWarehouse, ) // Warehouse Components const WarehousesGridView = () => (
{filteredWarehouses.map((warehouse) => (

{warehouse.name}

{warehouse.code}

{warehouse.isMainWarehouse && ( Ana Depo )}
{getWarehouseTypeText(warehouse.warehouseType)}
{warehouse.address?.city}, {warehouse.address?.state}

{warehouse.description}

{/* Capacity */}
Kapasite Kullanımı {warehouse.currentUtilization} / {warehouse.capacity}
%{Math.round((warehouse.currentUtilization / warehouse.capacity) * 100)} dolu
{warehouse.isActive ? ( <> Aktif ) : ( <> Pasif )}
))}
) const WarehousesListView = () => (
{filteredWarehouses.map((warehouse) => { const utilizationPercentage = (warehouse.currentUtilization / warehouse.capacity) * 100 return ( ) })}
Depo Tip Adres Kapasite Kullanım Durum İşlemler
{warehouse.name} {warehouse.isMainWarehouse && ( Ana Depo )}
{warehouse.code}
{getWarehouseTypeText(warehouse.warehouseType)}
{warehouse.address?.city}, {warehouse.address?.state}
{warehouse.address?.street}
{warehouse.capacity.toLocaleString()} birim
90 ? 'bg-red-500' : utilizationPercentage > 70 ? 'bg-yellow-500' : 'bg-blue-500' }`} style={{ width: `${utilizationPercentage}%` }} >
%{Math.round(utilizationPercentage)}
{warehouse.currentUtilization.toLocaleString()} /{' '} {warehouse.capacity.toLocaleString()}
{warehouse.isActive ? ( Aktif ) : ( Pasif )}
) const WarehousesTab = () => (
{/* 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 based on view mode */} {viewMode === 'grid' ? : }
) // Zone Components const ZonesGridView = () => (
{filteredZones.map((zone) => { const warehouse = warehouses.find((w) => w.id === zone.warehouseId) return (

{zone.name}

{zone.zoneCode}

{getZoneTypeText(zone.zoneType)}

Depo: {warehouse?.name}

Kod: {warehouse?.code}

{zone.description}

{(zone.temperature || zone.humidity) && (

Çevresel Koşullar

{zone.temperature &&
Sıcaklık: {zone.temperature}°C
} {zone.humidity &&
Nem: %{zone.humidity}
}
)}
{zone.isActive ? ( <> Aktif ) : ( <> Pasif )}
) })}
) const ZonesListView = () => (
{filteredZones.map((zone) => { const warehouse = warehouses.find((w) => w.id === zone.warehouseId) return ( ) })}
Bölge Depo Tip Sıcaklık Nem Durum İşlemler
{zone.name}
{zone.zoneCode}
{warehouse?.name}
{warehouse?.code}
{getZoneTypeText(zone.zoneType)} {zone.temperature ? `${zone.temperature}°C` : '-'} {zone.humidity ? `%${zone.humidity}` : '-'} {zone.isActive ? ( Aktif ) : ( Pasif )}
) const ZonesTab = () => (
{/* Warehouse Filter */}
{/* Content based on view mode */} {viewMode === 'grid' ? : }
) // Location Components const LocationsGridView = () => (
{filteredLocations.map((location) => { const warehouse = warehouses.find((w) => w.id === location.warehouseId) const zone = zones.find((z) => z.id === location.zoneId) const utilizationPercentage = (location.currentStock / location.capacity) * 100 return (
{location.name}

{location.locationCode}

{getLocationTypeText(location.locationType)}

Depo: {warehouse?.name}

{zone && (

Bölge: {zone.name}

)}

{location.description}

{/* Dimensions */} {location.dimensions && (

Boyutlar

Uzunluk: {location.dimensions.length}m
Genişlik: {location.dimensions.width}m
Yükseklik: {location.dimensions.height}m
Maks. Ağırlık: {location.dimensions.weight} {location.dimensions.unit}
)} {/* Capacity */}
Kapasite Kullanımı {location.currentStock} / {location.capacity}
90 ? 'bg-red-500' : utilizationPercentage > 70 ? 'bg-yellow-500' : 'bg-green-500' }`} style={{ width: `${utilizationPercentage}%` }} >
%{Math.round(utilizationPercentage)} dolu
{/* Restrictions */} {location.restrictions && location.restrictions.length > 0 && (

Kısıtlamalar

{location.restrictions.map((restriction, index) => ( {restriction} ))}
)}
{location.isActive ? ( <> Aktif ) : ( <> Pasif )}
) })}
) const LocationsListView = () => (
{filteredLocations.map((location) => { const warehouse = warehouses.find((w) => w.id === location.warehouseId) const zone = zones.find((z) => z.id === location.zoneId) const utilizationPercentage = (location.currentStock / location.capacity) * 100 return ( ) })}
Lokasyon Depo Bölge Tip Kapasite Kullanım Durum İşlemler
{location.name}
{location.locationCode}
{warehouse?.name}
{warehouse?.code}
{zone?.name || '-'}
{zone?.zoneCode || '-'}
{getLocationTypeText(location.locationType)} {location.capacity} birim
90 ? 'bg-red-500' : utilizationPercentage > 70 ? 'bg-yellow-500' : 'bg-green-500' }`} style={{ width: `${utilizationPercentage}%` }} >
%{Math.round(utilizationPercentage)}
{location.currentStock} / {location.capacity}
{location.isActive ? ( Aktif ) : ( Pasif )}
) const LocationsTab = () => (
{/* Warehouse Filter */}
{/* Content based on view mode */} {viewMode === 'grid' ? : }
) return (

Depo Tanımları

Depolar, bölgeler ve lokasyonları yönetin

{/* View Toggle Buttons */} {(activeTab === 'warehouses' || activeTab === 'zones' || activeTab === 'locations') && (
)}
{/* Tabs */}
{/* Tab Content */} {activeTab === 'warehouses' && } {activeTab === 'zones' && } {activeTab === 'locations' && }
{/* Modals */} setWarehouseModal({ ...warehouseModal, isOpen: false })} onSave={handleWarehouseSave} warehouse={warehouseModal.warehouse} mode={warehouseModal.mode} /> setZoneModal({ ...zoneModal, isOpen: false })} onSave={handleZoneSave} zone={zoneModal.zone} mode={zoneModal.mode} warehouses={warehouses} /> setLocationModal({ ...locationModal, isOpen: false })} onSave={handleLocationSave} location={locationModal.location} mode={locationModal.mode} warehouses={warehouses} zones={zones} />
) } export default WarehouseDefinitions