import React, { useEffect, useState } from 'react' import { useParams, useNavigate } from 'react-router-dom' import { FaArrowLeft, FaSave, FaTimes, FaShoppingCart, FaCalendar, FaDollarSign, FaPlus, FaTrash, FaMapMarkerAlt, FaUser, } from 'react-icons/fa' import { MmPurchaseOrder, OrderStatusEnum, MmPurchaseOrderItem } from '../../../types/mm' import { mockMaterials } from '../../../mocks/mockMaterials' import { mockBusinessParties } from '../../../mocks/mockBusinessParties' import { mockPurchaseOrders } from '../../../mocks/mockPurchaseOrders' import { Address, PaymentTerms } from '../../../types/common' import { Container } from '@/components/shared' import { ROUTES_ENUM } from '@/routes/route.constant' import { getOrderStatusText, getPaymentTermsText } from '@/utils/erp' import { mockCurrencies } from '@/mocks/mockCurrencies' const OrderManagementForm: React.FC = () => { const { id } = useParams<{ id: string }>() const navigate = useNavigate() const isEdit = id !== undefined && id !== 'new' const isView = window.location.pathname.includes('/view/') // Yeni sipariş için başlangıç şablonu const newOrderDefaults: Partial = { orderNumber: '', supplierId: '', orderDate: new Date(), deliveryDate: new Date(), status: OrderStatusEnum.Draft, paymentTerms: PaymentTerms.Net30, currency: 'TRY', exchangeRate: 1, subtotal: 0, taxAmount: 0, totalAmount: 0, items: [], deliveryAddress: { street: '', city: '', state: '', postalCode: '', country: 'Türkiye', }, terms: '', notes: '', receipts: [], } // İlk state (isEdit vs new) const [formData, setFormData] = useState>(() => { if (isEdit) { const po = mockPurchaseOrders.find((o) => o.id === id) return { ...po } } return { ...newOrderDefaults } }) // id değişirse formu güncelle useEffect(() => { if (isEdit) { const po = mockPurchaseOrders.find((o) => o.id === id) setFormData(po ? { ...po } : { ...newOrderDefaults }) } else { setFormData({ ...newOrderDefaults }) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [id, isEdit]) const handleInputChange = ( e: React.ChangeEvent, ) => { const { name, value, type } = e.target setFormData((prev) => ({ ...prev, [name]: type === 'number' ? parseFloat(value) || 0 : type === 'date' ? new Date(value) : value, })) } const handleAddressChange = (field: keyof Address, value: string) => { setFormData((prev) => ({ ...prev, deliveryAddress: { ...prev.deliveryAddress!, [field]: value, }, })) } const addOrderItem = () => { const newItem: MmPurchaseOrderItem = { id: `item-${Date.now()}`, orderId: formData.id || '', materialId: '', description: '', quantity: 0, unitPrice: 0, totalPrice: 0, deliveryDate: new Date(), receivedQuantity: 0, deliveredQuantity: 0, remainingQuantity: 0, unit: '', } setFormData((prev) => ({ ...prev, items: [...(prev.items || []), newItem], })) } const removeOrderItem = (index: number) => { setFormData((prev) => ({ ...prev, items: prev.items?.filter((_, i) => i !== index) || [], })) calculateTotals() } const updateOrderItem = ( index: number, field: keyof MmPurchaseOrderItem, value: string | number | Date | undefined, ) => { setFormData((prev) => { const updatedItems = prev.items?.map((item, i) => { if (i === index) { const updatedItem = { ...item, [field]: value } // Auto-calculate total amount when quantity or unit price changes if (field === 'quantity' || field === 'unitPrice') { updatedItem.totalPrice = (updatedItem.quantity || 0) * (updatedItem.unitPrice || 0) updatedItem.remainingQuantity = updatedItem.quantity - (updatedItem.receivedQuantity || 0) } return updatedItem } return item }) || [] return { ...prev, items: updatedItems, } }) // Recalculate totals setTimeout(calculateTotals, 0) } const calculateTotals = () => { const subtotal = formData.items?.reduce((sum, item) => sum + (item.totalPrice || 0), 0) || 0 const taxAmount = subtotal * 0.18 // %18 KDV const totalAmount = subtotal + taxAmount setFormData((prev) => ({ ...prev, subtotal, taxAmount, totalAmount, })) } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() // TODO: Implement save logic console.log('Saving purchase order:', formData) navigate(ROUTES_ENUM.protected.supplychain.orders) } const handleCancel = () => { navigate(ROUTES_ENUM.protected.supplychain.orders) } const isReadOnly = isView const pageTitle = isEdit ? 'Satınalma Siparişini Düzenle' : isView ? 'Satınalma Siparişi Detayları' : 'Yeni Satınalma Siparişi' return (
{/* Header */}

{pageTitle}

{!isView && ( )}
{/* Ana İçerik */}
{/* Sipariş Bilgileri */}

Sipariş Bilgileri