From f4ab66df011e251a09286c17962bab0227a0f540 Mon Sep 17 00:00:00 2001 From: Jake Kasper Date: Thu, 28 Aug 2025 07:51:40 -0500 Subject: [PATCH] asdf --- .../Applications/ApplicationPlanModal.js | 128 +++++++++++++++--- 1 file changed, 112 insertions(+), 16 deletions(-) diff --git a/frontend/src/components/Applications/ApplicationPlanModal.js b/frontend/src/components/Applications/ApplicationPlanModal.js index 4662e1c..d858c37 100644 --- a/frontend/src/components/Applications/ApplicationPlanModal.js +++ b/frontend/src/components/Applications/ApplicationPlanModal.js @@ -26,6 +26,18 @@ const ApplicationPlanModal = ({ const [spreaderSettings, setSpreaderSettings] = useState({}); const [showSpreaderSettingsForm, setShowSpreaderSettingsForm] = useState(false); const [currentProductForSettings, setCurrentProductForSettings] = useState(null); + const [spreaderFormData, setSpreaderFormData] = useState({ + setting1: '', + setting2: '', + setting3: '', + setting4: '', + setting5: '', + setting6: '', + setting7: '', + setting8: '', + setting9: '', + setting10: '' + }); // Calculate map center from property or sections const mapCenter = React.useMemo(() => { @@ -262,6 +274,51 @@ const ApplicationPlanModal = ({ } }; + // Save spreader settings + const saveSpreaderSettings = async () => { + try { + const payload = { + productId: currentProductForSettings.isShared ? currentProductForSettings.id : null, + userProductId: !currentProductForSettings.isShared ? currentProductForSettings.id : null, + equipmentId: parseInt(selectedEquipmentId), + setting1: parseFloat(spreaderFormData.setting1) || null, + setting2: parseFloat(spreaderFormData.setting2) || null, + setting3: parseFloat(spreaderFormData.setting3) || null, + setting4: parseFloat(spreaderFormData.setting4) || null, + setting5: parseFloat(spreaderFormData.setting5) || null, + setting6: parseFloat(spreaderFormData.setting6) || null, + setting7: parseFloat(spreaderFormData.setting7) || null, + setting8: parseFloat(spreaderFormData.setting8) || null, + setting9: parseFloat(spreaderFormData.setting9) || null, + setting10: parseFloat(spreaderFormData.setting10) || null + }; + + const response = await fetch('/api/product-spreader-settings', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${localStorage.getItem('authToken')}` + }, + body: JSON.stringify(payload) + }); + + if (response.ok) { + toast.success('Spreader settings saved successfully'); + setShowSpreaderSettingsForm(false); + setCurrentProductForSettings(null); + setSpreaderFormData({ + setting1: '', setting2: '', setting3: '', setting4: '', setting5: '', + setting6: '', setting7: '', setting8: '', setting9: '', setting10: '' + }); + } else { + throw new Error('Failed to save spreader settings'); + } + } catch (error) { + console.error('Failed to save spreader settings:', error); + toast.error('Failed to save spreader settings'); + } + }; + // Calculate application amounts const calculateApplicationAmounts = () => { if (!selectedPropertyDetails?.sections || selectedAreas.length === 0) return null; @@ -563,12 +620,30 @@ const ApplicationPlanModal = ({ updateProduct(index, 'productType', selectedProduct.productType); // Pre-populate application rate if available + console.log('Selected product for rate population:', selectedProduct); + + let rateSet = false; + + // Check for rates array if (selectedProduct.rates && selectedProduct.rates.length > 0) { const defaultRate = selectedProduct.rates[0]; updateProduct(index, 'rateAmount', defaultRate.amount); updateProduct(index, 'rateUnit', defaultRate.unit); - } else { - // Set default rate unit based on product type + rateSet = true; + } + // Check for applicationRate field (custom products might use this) + else if (selectedProduct.applicationRate) { + updateProduct(index, 'rateAmount', selectedProduct.applicationRate); + rateSet = true; + } + // Check for recommendedRate field + else if (selectedProduct.recommendedRate) { + updateProduct(index, 'rateAmount', selectedProduct.recommendedRate); + rateSet = true; + } + + // Set default rate unit if no rate was found or if unit wasn't set + if (!rateSet || !selectedProduct.rates?.[0]?.unit) { if (selectedProduct.productType === 'granular') { updateProduct(index, 'rateUnit', 'lb/1000sqft'); } else if (selectedProduct.productType === 'liquid') { @@ -590,8 +665,8 @@ const ApplicationPlanModal = ({ .filter(prod => !applicationType || prod.productType === applicationType) .map(prod => ( ))} @@ -780,19 +855,45 @@ const ApplicationPlanModal = ({ {/* Spreader Settings Form Modal */} {showSpreaderSettingsForm && currentProductForSettings && ( -
-
+
+

Add Spreader Settings

- No spreader settings found for "{currentProductForSettings.name}". - Please add the spreader setting for accurate calculations. + No spreader settings found for "{currentProductForSettings.name}" with the selected equipment. + Please add the spreader settings for accurate calculations.

-
+ +
+ {Array.from({ length: 10 }, (_, i) => i + 1).map(num => ( +
+ + setSpreaderFormData(prev => ({ + ...prev, + [`setting${num}`]: e.target.value + }))} + className="w-full border border-gray-300 rounded px-3 py-2" + placeholder={`Setting ${num} value`} + /> +
+ ))} +
+ +