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"; 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< HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement > ) => { 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("/admin/supplychain/orders"); }; const handleCancel = () => { navigate("/admin/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