diff --git a/frontend/src/components/Applications/ApplicationPlanModal.js b/frontend/src/components/Applications/ApplicationPlanModal.js index 2c8c34b..0c2ff1f 100644 --- a/frontend/src/components/Applications/ApplicationPlanModal.js +++ b/frontend/src/components/Applications/ApplicationPlanModal.js @@ -93,7 +93,10 @@ const ApplicationPlanModal = ({ console.log('ApplicationPlanModal - selectedPropertyDetails:', selectedPropertyDetails); console.log('ApplicationPlanModal - mapCenter:', mapCenter); console.log('ApplicationPlanModal - sections:', selectedPropertyDetails?.sections); - }, [selectedPropertyDetails, mapCenter]); + console.log('ApplicationPlanModal - equipment:', equipment); + console.log('ApplicationPlanModal - products:', products); + console.log('ApplicationPlanModal - nozzles:', nozzles); + }, [selectedPropertyDetails, mapCenter, equipment, products, nozzles]); // Handle area selection on map const handleAreaClick = (area) => { @@ -179,6 +182,10 @@ const ApplicationPlanModal = ({ toast.error('Please select a planned date'); return; } + if (applicationType === 'liquid' && !selectedNozzleId) { + toast.error('Please select a nozzle for liquid applications'); + return; + } // Validate products have required fields for (const product of selectedProducts) { @@ -256,47 +263,6 @@ const ApplicationPlanModal = ({ - {/* Equipment Selection */} -
- - -
- - {/* Nozzle Selection (for sprayers) */} - {selectedEquipmentId && equipment.find(eq => eq.id == selectedEquipmentId)?.type === 'sprayer' && ( -
- - -
- )} {/* Planned Date */}
@@ -312,35 +278,93 @@ const ApplicationPlanModal = ({ />
- {/* Application Type */} -
- -
- - + {/* Application Type & Equipment */} +
+
+ {/* Application Type */} +
+ +
+ + +
+
+ + {/* Equipment Selection - Required for all */} +
+ + +
+ + {/* Nozzle Selection - Required for liquid applications */} + {applicationType === 'liquid' && selectedEquipmentId && ( +
+ + +
+ )}
@@ -374,9 +398,26 @@ const ApplicationPlanModal = ({ updateProduct(index, 'productId', selectedProduct.isShared ? selectedProduct.id : null); updateProduct(index, 'userProductId', !selectedProduct.isShared ? selectedProduct.id : null); updateProduct(index, 'isUserProduct', !selectedProduct.isShared); - updateProduct(index, 'productName', selectedProduct.name); - updateProduct(index, 'productBrand', selectedProduct.brand); - updateProduct(index, 'productType', selectedProduct.productType); + updateProduct(index, 'productName', selectedProduct.product_name || selectedProduct.name); + updateProduct(index, 'productBrand', selectedProduct.product_brand || selectedProduct.brand); + updateProduct(index, 'productType', selectedProduct.product_type || selectedProduct.productType); + + // Pre-populate application rate if available + if (selectedProduct.applicationRate) { + updateProduct(index, 'rateAmount', selectedProduct.applicationRate); + } else if (selectedProduct.application_rate) { + updateProduct(index, 'rateAmount', selectedProduct.application_rate); + } else if (selectedProduct.recommendedRate) { + updateProduct(index, 'rateAmount', selectedProduct.recommendedRate); + } + + // Set appropriate rate unit based on product type + const productType = selectedProduct.product_type || selectedProduct.productType; + if (productType === 'granular') { + updateProduct(index, 'rateUnit', 'lb/1000sqft'); + } else if (productType === 'liquid') { + updateProduct(index, 'rateUnit', 'oz/1000sqft'); + } } }} className="border border-gray-300 rounded px-3 py-2" @@ -384,10 +425,13 @@ const ApplicationPlanModal = ({ > {products - .filter(prod => !applicationType || prod.productType === applicationType) + .filter(prod => !applicationType || prod.productType === applicationType || prod.product_type === applicationType) .map(prod => ( ))}