asdfsafa
This commit is contained in:
@@ -139,6 +139,104 @@ const Applications = () => {
|
||||
);
|
||||
}
|
||||
|
||||
// Load spreader recommendations when granular product and spreader are selected
|
||||
const loadSpreaderRecommendation = async (product, equipmentId, selectedAreas) => {
|
||||
if (!product || !equipmentId || !selectedAreas.length || product.productType !== 'granular') {
|
||||
setSpreaderRecommendation(null);
|
||||
return;
|
||||
}
|
||||
|
||||
setLoadingRecommendation(true);
|
||||
try {
|
||||
// Find the selected equipment details
|
||||
const selectedEquipment = equipment.find(eq => eq.id === parseInt(equipmentId));
|
||||
if (!selectedEquipment) {
|
||||
setSpreaderRecommendation(null);
|
||||
return;
|
||||
}
|
||||
|
||||
// Load spreader settings for this product
|
||||
const productApiId = product.isShared ? product.id : product.id; // Use the actual product ID
|
||||
const endpoint = product.isShared
|
||||
? `/api/product-spreader-settings/product/${productApiId}`
|
||||
: `/api/product-spreader-settings/user-product/${productApiId}`;
|
||||
|
||||
const response = await fetch(endpoint, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${localStorage.getItem('authToken')}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
setSpreaderRecommendation(null);
|
||||
return;
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
const settings = data.data?.settings || [];
|
||||
|
||||
// Find a matching setting for this equipment
|
||||
let matchingSetting = null;
|
||||
|
||||
// First try to find exact equipment match
|
||||
matchingSetting = settings.find(setting =>
|
||||
setting.equipmentId === selectedEquipment.id
|
||||
);
|
||||
|
||||
// If no exact match, try to find by equipment brand/manufacturer
|
||||
if (!matchingSetting && selectedEquipment.manufacturer) {
|
||||
matchingSetting = settings.find(setting =>
|
||||
setting.spreaderBrand &&
|
||||
setting.spreaderBrand.toLowerCase().includes(selectedEquipment.manufacturer.toLowerCase())
|
||||
);
|
||||
}
|
||||
|
||||
// If still no match, use any available setting as fallback
|
||||
if (!matchingSetting && settings.length > 0) {
|
||||
matchingSetting = settings[0];
|
||||
}
|
||||
|
||||
if (matchingSetting) {
|
||||
// Calculate total area and product amount needed
|
||||
const totalArea = selectedAreas.reduce((sum, areaId) => {
|
||||
const area = selectedPropertyDetails?.sections?.find(s => s.id === areaId);
|
||||
return sum + (area?.area || 0);
|
||||
}, 0);
|
||||
|
||||
// Calculate product amount based on rate
|
||||
const rateAmount = product.customRateAmount || product.rateAmount || 1;
|
||||
const rateUnit = product.customRateUnit || product.rateUnit || 'lbs/1000 sq ft';
|
||||
|
||||
let productAmountLbs = 0;
|
||||
if (rateUnit.includes('1000')) {
|
||||
// Rate per 1000 sq ft
|
||||
productAmountLbs = (rateAmount * totalArea) / 1000;
|
||||
} else if (rateUnit.includes('acre')) {
|
||||
// Rate per acre (43,560 sq ft)
|
||||
productAmountLbs = (rateAmount * totalArea) / 43560;
|
||||
} else {
|
||||
// Assume rate per sq ft
|
||||
productAmountLbs = rateAmount * totalArea;
|
||||
}
|
||||
|
||||
setSpreaderRecommendation({
|
||||
setting: matchingSetting,
|
||||
equipment: selectedEquipment,
|
||||
totalArea,
|
||||
productAmountLbs: Math.round(productAmountLbs * 100) / 100, // Round to 2 decimal places
|
||||
isExactMatch: settings.some(s => s.equipmentId === selectedEquipment.id)
|
||||
});
|
||||
} else {
|
||||
setSpreaderRecommendation(null);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to load spreader recommendation:', error);
|
||||
setSpreaderRecommendation(null);
|
||||
} finally {
|
||||
setLoadingRecommendation(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="p-6">
|
||||
<div className="flex justify-between items-center mb-6">
|
||||
@@ -374,104 +472,6 @@ const Applications = () => {
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
|
||||
// Load spreader recommendations when granular product and spreader are selected
|
||||
const loadSpreaderRecommendation = async (product, equipmentId, selectedAreas) => {
|
||||
if (!product || !equipmentId || !selectedAreas.length || product.productType !== 'granular') {
|
||||
setSpreaderRecommendation(null);
|
||||
return;
|
||||
}
|
||||
|
||||
setLoadingRecommendation(true);
|
||||
try {
|
||||
// Find the selected equipment details
|
||||
const selectedEquipment = equipment.find(eq => eq.id === parseInt(equipmentId));
|
||||
if (!selectedEquipment) {
|
||||
setSpreaderRecommendation(null);
|
||||
return;
|
||||
}
|
||||
|
||||
// Load spreader settings for this product
|
||||
const productApiId = product.isShared ? product.id : product.id; // Use the actual product ID
|
||||
const endpoint = product.isShared
|
||||
? `/api/product-spreader-settings/product/${productApiId}`
|
||||
: `/api/product-spreader-settings/user-product/${productApiId}`;
|
||||
|
||||
const response = await fetch(endpoint, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${localStorage.getItem('authToken')}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
setSpreaderRecommendation(null);
|
||||
return;
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
const settings = data.data?.settings || [];
|
||||
|
||||
// Find a matching setting for this equipment
|
||||
let matchingSetting = null;
|
||||
|
||||
// First try to find exact equipment match
|
||||
matchingSetting = settings.find(setting =>
|
||||
setting.equipmentId === selectedEquipment.id
|
||||
);
|
||||
|
||||
// If no exact match, try to find by equipment brand/manufacturer
|
||||
if (!matchingSetting && selectedEquipment.manufacturer) {
|
||||
matchingSetting = settings.find(setting =>
|
||||
setting.spreaderBrand &&
|
||||
setting.spreaderBrand.toLowerCase().includes(selectedEquipment.manufacturer.toLowerCase())
|
||||
);
|
||||
}
|
||||
|
||||
// If still no match, use any available setting as fallback
|
||||
if (!matchingSetting && settings.length > 0) {
|
||||
matchingSetting = settings[0];
|
||||
}
|
||||
|
||||
if (matchingSetting) {
|
||||
// Calculate total area and product amount needed
|
||||
const totalArea = selectedAreas.reduce((sum, areaId) => {
|
||||
const area = selectedPropertyDetails?.sections?.find(s => s.id === areaId);
|
||||
return sum + (area?.area || 0);
|
||||
}, 0);
|
||||
|
||||
// Calculate product amount based on rate
|
||||
const rateAmount = product.customRateAmount || product.rateAmount || 1;
|
||||
const rateUnit = product.customRateUnit || product.rateUnit || 'lbs/1000 sq ft';
|
||||
|
||||
let productAmountLbs = 0;
|
||||
if (rateUnit.includes('1000')) {
|
||||
// Rate per 1000 sq ft
|
||||
productAmountLbs = (rateAmount * totalArea) / 1000;
|
||||
} else if (rateUnit.includes('acre')) {
|
||||
// Rate per acre (43,560 sq ft)
|
||||
productAmountLbs = (rateAmount * totalArea) / 43560;
|
||||
} else {
|
||||
// Assume rate per sq ft
|
||||
productAmountLbs = rateAmount * totalArea;
|
||||
}
|
||||
|
||||
setSpreaderRecommendation({
|
||||
setting: matchingSetting,
|
||||
equipment: selectedEquipment,
|
||||
totalArea,
|
||||
productAmountLbs: Math.round(productAmountLbs * 100) / 100, // Round to 2 decimal places
|
||||
isExactMatch: settings.some(s => s.equipmentId === selectedEquipment.id)
|
||||
});
|
||||
} else {
|
||||
setSpreaderRecommendation(null);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to load spreader recommendation:', error);
|
||||
setSpreaderRecommendation(null);
|
||||
} finally {
|
||||
setLoadingRecommendation(false);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Application Planning Modal Component
|
||||
|
||||
Reference in New Issue
Block a user