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' import { Container } from '@/components/shared' import { ROUTES_ENUM } from '@/routes/route.constant' import { getQuotationStatusText, getRequestTypeText } from '@/utils/erp' import { mockCurrencies } from '@/mocks/mockCurrencies' 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, ) => { 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(ROUTES_ENUM.protected.supplychain.quotations) } const handleCancel = () => { navigate(ROUTES_ENUM.protected.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