import React, { useMemo } from 'react'
import { useParams, useNavigate } from 'react-router-dom'
import { useQuery } from '@tanstack/react-query'
import { mockProductionOrders } from '../../../mocks/mockProductionOrders'
import { MrpProductionOrder, MrpProductionOrderMaterial } from '../../../types/mrp'
import {
FaCog,
FaCalendarAlt,
FaClipboardList,
FaTruck,
FaMoneyBillWave,
FaArrowLeft,
FaExclamationTriangle,
} from 'react-icons/fa'
import StatusBadge from '../../../components/common/StatusBadge'
import { getPriorityColor } from '../../../utils/erp'
import { Container } from '@/components/shared'
const ProductionOrderView: React.FC = () => {
const { id } = useParams()
const navigate = useNavigate()
const { data: productionOrder, isLoading } = useQuery({
queryKey: ['production-order', id],
queryFn: async () => {
await new Promise((r) => setTimeout(r, 200))
return mockProductionOrders.find((p) => p.id === id) as MrpProductionOrder | undefined
},
enabled: !!id,
})
const materials: MrpProductionOrderMaterial[] = useMemo(
() => productionOrder?.materials || [],
[productionOrder],
)
if (isLoading) {
return (
Üretim emri yükleniyor...
)
}
if (!productionOrder) {
return (
Üretim Emri Bulunamadı
İstenen üretim emri mevcut değil veya silinmiş olabilir.
)
}
const getProgressPercentage = () => {
if (productionOrder.plannedQuantity === 0) return 0
return Math.round((productionOrder.confirmedQuantity / productionOrder.plannedQuantity) * 100)
}
return (
{/* Header */}
Üretim Emri Detayları
{productionOrder.orderNumber} - Detaylı bilgiler
{/* Order Header Card */}
Üretim Emri No
{productionOrder.orderNumber}
Öncelik
{productionOrder.priority}
Tür
{productionOrder.orderType}
İlerleme
{getProgressPercentage()}%
{/* Progress Bar */}
Üretim İlerlemesi
{productionOrder.confirmedQuantity} / {productionOrder.plannedQuantity} adet
{productionOrder.customerRequirement && (
{productionOrder.customerRequirement}
)}
{/* Info Cards Grid */}
{/* Quantities Card */}
Planlanan:
{productionOrder.plannedQuantity}
Üretilen:
{productionOrder.confirmedQuantity}
Gereken:
{productionOrder.requiredQuantity}
Fire:
{productionOrder.scrapQuantity}
{/* Schedule Card */}
Plan Başlangıç
{new Date(productionOrder.plannedStartDate).toLocaleDateString('tr-TR', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
})}
Plan Bitiş
{new Date(productionOrder.plannedEndDate).toLocaleDateString('tr-TR', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
})}
{productionOrder.actualStartDate && (
Gerçek Başlangıç
{new Date(productionOrder.actualStartDate).toLocaleDateString('tr-TR', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
})}
)}
{productionOrder.actualEndDate && (
Gerçek Bitiş
{new Date(productionOrder.actualEndDate).toLocaleDateString('tr-TR', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
})}
)}
{/* Costs Card */}
Planlanan Maliyet
{new Intl.NumberFormat('tr-TR', {
style: 'currency',
currency: productionOrder.currency,
}).format(productionOrder.plannedCost)}
Gerçekleşen Maliyet
{new Intl.NumberFormat('tr-TR', {
style: 'currency',
currency: productionOrder.currency,
}).format(productionOrder.actualCost)}
Para Birimi
{productionOrder.currency}
{/* Metadata Card */}
Oluşturulma
{new Date(productionOrder.creationTime).toLocaleDateString('tr-TR', {
year: 'numeric',
month: 'short',
day: 'numeric',
})}
Son Güncelleme
{new Date(productionOrder.lastModificationTime).toLocaleDateString('tr-TR', {
year: 'numeric',
month: 'short',
day: 'numeric',
})}
{/* Materials List */}
Malzemeler
Üretim emrine bağlı malzeme satırları
{materials.length}
Malzeme
{materials.length === 0 ? (
Bu üretim emrine bağlı malzeme bulunmamaktadır.
) : (
{materials.map((m: MrpProductionOrderMaterial) => (
{m.salesOrder?.orderNumber || m.salesOrder?.id}
{m.material?.code || m.materialId}
{' - '}
{m.material?.name || 'Malzeme adı bulunamadı'}
{m.customerRequirement && (
"{m.customerRequirement}"
)}
Planlanan
{m.plannedQuantity}
Üretilen
{m.confirmedQuantity}
Gereken
{m.requiredQuantity}
))}
)}
)
}
export default ProductionOrderView