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"; 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;