import React from 'react' import { useFormik } from 'formik' import * as Yup from 'yup' import { FaSave, FaTimes } from 'react-icons/fa' import { QualityStatusEnum, MmLotNumber, MmUnit, MmMaterial } from '../../../types/mm' import { BusinessParty } from '../../../types/common' const validationSchema = Yup.object({ materialId: Yup.string().required('Malzeme seçimi zorunlu'), lotNumber: Yup.string().required('Lot numarası zorunlu'), quantity: Yup.number().min(0, "Miktar 0'dan büyük olmalıdır"), }) interface LotFormProps { isOpen: boolean onClose: () => void onSave: (lot: MmLotNumber) => void onUpdate?: (lot: MmLotNumber) => void materials: MmMaterial[] suppliers?: BusinessParty[] units?: MmUnit[] initial?: MmLotNumber | null mode?: 'create' | 'edit' | 'view' } const LotForm: React.FC = ({ isOpen, onClose, onSave, onUpdate, materials, suppliers = [], units = [], initial = null, mode = 'create', }) => { const formik = useFormik({ initialValues: { materialId: '', lotNumber: '', productionDate: '', expiryDate: '', quantity: 0, unitId: 'KG', supplierId: suppliers.length ? suppliers[0].id : '', qualityStatus: QualityStatusEnum.Pending, isActive: true, }, validationSchema, onSubmit: async (values) => { const newLot: MmLotNumber = { id: (initial && initial.id) || Date.now().toString(), materialId: values.materialId, lotNumber: values.lotNumber, productionDate: values.productionDate ? new Date(values.productionDate) : new Date(), expiryDate: values.expiryDate ? new Date(values.expiryDate) : undefined, quantity: Number(values.quantity), unitId: values.unitId, supplierId: values.supplierId || undefined, qualityStatus: values.qualityStatus, isActive: !!values.isActive, } // simulate API await new Promise((r) => setTimeout(r, 300)) if (mode === 'edit' && onUpdate) { onUpdate(newLot) } else { onSave(newLot) } onClose() }, }) // sync initial values when editing/viewing React.useEffect(() => { if (initial) { const src = initial formik.setValues({ materialId: src.materialId || '', lotNumber: src.lotNumber || '', productionDate: src.productionDate ? new Date(src.productionDate).toISOString().slice(0, 10) : '', expiryDate: src.expiryDate ? new Date(src.expiryDate).toISOString().slice(0, 10) : '', quantity: src.quantity || 0, unitId: src.unitId || (units.length ? units[0].id : ''), supplierId: src.supplierId || (suppliers.length ? suppliers[0].id : ''), qualityStatus: src.qualityStatus || QualityStatusEnum.Pending, isActive: !!src.isActive, }) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [initial]) if (!isOpen) return null return (

{mode === 'create' ? 'Yeni Lot Kaydı' : mode === 'edit' ? 'Lot Düzenle' : 'Lot Detayı'}

{mode === 'create' ? 'Lot bilgilerini girin' : mode === 'edit' ? 'Mevcut lot bilgilerini güncelleyin' : 'Lot bilgileri (sadece gösterim)'}

{mode !== 'view' && ( )}
) } export default LotForm