import React, { useState } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { FaArrowLeft, FaSave, FaTimes, FaFileAlt, FaCalendar, FaDollarSign, FaPlus, FaTrash, FaPaperclip, } from "react-icons/fa"; import { MmQuotation, QuotationStatusEnum, RequestTypeEnum, MmQuotationItem, MmAttachment, } from "../../../types/mm"; import { mockMaterials } from "../../../mocks/mockMaterials"; import { mockBusinessParties } from "../../../mocks/mockBusinessParties"; const QuotationForm: React.FC = () => { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const isEdit = id !== undefined && id !== "new"; const isView = window.location.pathname.includes("/view/"); const [formData, setFormData] = useState>({ quotationNumber: isEdit ? `TEK-2024-${id}` : "", requestId: "", requestTitle: "", requestType: RequestTypeEnum.Material, supplierId: "", quotationDate: new Date(), validUntil: new Date(), status: QuotationStatusEnum.Draft, totalAmount: 0, currency: "TRY", paymentTerms: "", deliveryTerms: "", items: [], attachments: [], notes: "", }); 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 addQuotationItem = () => { const newItem: MmQuotationItem = { id: `item-${Date.now()}`, materialCode: "", materialName: "", description: "", quantity: 0, unit: "", unitPrice: 0, totalPrice: 0, specifications: [], }; setFormData((prev) => ({ ...prev, items: [...(prev.items || []), newItem], })); }; const removeQuotationItem = (index: number) => { setFormData((prev) => ({ ...prev, items: prev.items?.filter((_, i) => i !== index) || [], })); calculateTotal(); }; const updateQuotationItem = ( index: number, field: keyof MmQuotationItem, value: string | number | string[] | undefined ) => { setFormData((prev) => { const updatedItems = prev.items?.map((item, i) => { if (i === index) { const updatedItem = { ...item, [field]: value }; // Auto-calculate total price when quantity or unit price changes if (field === "quantity" || field === "unitPrice") { updatedItem.totalPrice = (updatedItem.quantity || 0) * (updatedItem.unitPrice || 0); } return updatedItem; } return item; }) || []; return { ...prev, items: updatedItems, }; }); // Recalculate total amount setTimeout(calculateTotal, 0); }; const calculateTotal = () => { const total = formData.items?.reduce((sum, item) => sum + (item.totalPrice || 0), 0) || 0; setFormData((prev) => ({ ...prev, totalAmount: total, })); }; const handleSpecificationsChange = (index: number, value: string) => { const specifications = value .split("\n") .filter((spec) => spec.trim() !== ""); updateQuotationItem(index, "specifications", specifications); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); // TODO: Implement save logic console.log("Saving quotation:", formData); navigate("/admin/supplychain/quotations"); }; const handleCancel = () => { navigate("/admin/supplychain/quotations"); }; const isReadOnly = isView; const pageTitle = isEdit ? "Teklifi Düzenle" : isView ? "Teklif Detayları" : "Yeni Teklif"; return (
{/* Header */}

{pageTitle}

{!isView && ( )}
{/* Ana İçerik */}
{/* Temel Bilgiler */}

Teklif Bilgileri