import React, { useState, useEffect } from 'react'; import { X, Calculator, FileText } from 'lucide-react'; export default function MaterialDetailsModal({ isOpen, onClose, item, onSave }) { const [measurement, setMeasurement] = useState(item?.baseMeasurement || 0); const [wastePercent, setWastePercent] = useState(item?.wastePercent || 0); const [conversionFactor, setConversionFactor] = useState(item?.conversionFactor || 1); const [unitCost, setUnitCost] = useState(item?.unitCost || 0); const [marginPercent, setMarginPercent] = useState(item?.marginPercent || 30); const [pricePerUnitOverride, setPricePerUnitOverride] = useState(false); const [manualPricePerUnit, setManualPricePerUnit] = useState(0); const [calculatedQuantity, setCalculatedQuantity] = useState(0); const [finalTotalUnits, setFinalTotalUnits] = useState(0); const [totalCost, setTotalCost] = useState(0); const [clientPrice, setClientPrice] = useState(0); useEffect(() => { if (item) { setMeasurement(item.baseMeasurement || 0); setWastePercent(item.wastePercent || 0); setConversionFactor(item.conversionFactor || 1); setUnitCost(item.unitCost || 0); setMarginPercent(item.marginPercent || 30); } }, [item]); useEffect(() => { const withWaste = measurement * (1 + (wastePercent / 100)); const computedQty = conversionFactor > 0 ? (withWaste / conversionFactor) : withWaste; setCalculatedQuantity(computedQty); const finalUnits = Math.ceil(computedQty); setFinalTotalUnits(finalUnits); const cost = finalUnits * unitCost; setTotalCost(cost); if (marginPercent < 100) { setClientPrice(cost / (1 - (marginPercent / 100))); } else { setClientPrice(cost); } }, [measurement, wastePercent, conversionFactor, unitCost, marginPercent]); const computedPricePerUnit = finalTotalUnits > 0 ? clientPrice / finalTotalUnits : 0; const handleSave = () => { onSave({ ...item, baseMeasurement: measurement, wastePercent, conversionFactor, unitCost, marginPercent, qty: finalTotalUnits, clientPrice }); onClose(); }; if (!isOpen || !item) return null; const measurementUomLabel = item.measurementUom || item.uom; const showConversion = conversionFactor > 1 || (item.measurementUom && item.measurementUom !== item.uom); const conversionNote = showConversion ? `${conversionFactor} ${measurementUomLabel} = 1 ${item.uom}` : `1 ${item.uom} = 1 ${item.uom}`; return (
{item.desc}
{conversionNote}
{/* Editable conversion factor (small, subtle) */}