tank mix 1

This commit is contained in:
Jake Kasper
2025-08-26 06:58:21 -05:00
parent 2e41a42092
commit 054f743e2d
2 changed files with 306 additions and 96 deletions

View File

@@ -89,44 +89,59 @@ router.get('/plans', async (req, res, next) => {
queryParams
);
// Get spreader settings for each plan
// Get spreader settings and product details for each plan
const plansWithSettings = await Promise.all(
result.rows.map(async (plan) => {
let spreaderSetting = null;
let productDetails = [];
// Get all products for this plan
const productsResult = await pool.query(
`SELECT app.*,
COALESCE(p.name, up.custom_name) as product_name,
COALESCE(p.brand, up.custom_brand) as product_brand,
COALESCE(p.product_type, up.custom_product_type) as product_type,
p.name as shared_name,
up.custom_name as user_name
FROM application_plan_products app
LEFT JOIN products p ON app.product_id = p.id
LEFT JOIN user_products up ON app.user_product_id = up.id
WHERE app.plan_id = $1`,
[plan.id]
);
productDetails = productsResult.rows.map(product => ({
name: product.product_name,
brand: product.product_brand,
type: product.product_type,
rateAmount: parseFloat(product.rate_amount || 0),
rateUnit: product.rate_unit,
calculatedAmount: parseFloat(product.calculated_product_amount || 0),
isShared: !!product.shared_name
}));
// Only get spreader settings for granular applications with equipment
if (plan.equipment_name) {
// Get the first product for this plan to determine if it's granular
const productResult = await pool.query(
`SELECT app.product_id, app.user_product_id, p.product_type as shared_type, up.custom_product_type as user_type
FROM application_plan_products app
LEFT JOIN products p ON app.product_id = p.id
LEFT JOIN user_products up ON app.user_product_id = up.id
WHERE app.plan_id = $1
LIMIT 1`,
[plan.id]
);
if (plan.equipment_name && productsResult.rows.length > 0) {
const firstProduct = productsResult.rows[0];
const productType = firstProduct.shared_name ?
(await pool.query('SELECT product_type FROM products WHERE id = $1', [firstProduct.product_id])).rows[0]?.product_type :
firstProduct.custom_product_type;
if (productResult.rows.length > 0) {
const product = productResult.rows[0];
const productType = product.shared_type || product.user_type;
if (productType === 'granular') {
// Get equipment ID
const equipmentResult = await pool.query(
'SELECT id FROM user_equipment WHERE custom_name = $1 AND user_id = $2',
[plan.equipment_name, req.user.id]
);
if (productType === 'granular') {
// Get equipment ID
const equipmentResult = await pool.query(
'SELECT id FROM user_equipment WHERE custom_name = $1 AND user_id = $2',
[plan.equipment_name, req.user.id]
if (equipmentResult.rows.length > 0) {
const equipmentId = equipmentResult.rows[0].id;
spreaderSetting = await getSpreaderSettingsForEquipment(
equipmentId,
firstProduct.product_id,
firstProduct.user_product_id,
req.user.id
);
if (equipmentResult.rows.length > 0) {
const equipmentId = equipmentResult.rows[0].id;
spreaderSetting = await getSpreaderSettingsForEquipment(
equipmentId,
product.product_id,
product.user_product_id,
req.user.id
);
}
}
}
}
@@ -146,6 +161,7 @@ router.get('/plans', async (req, res, next) => {
totalWaterAmount: parseFloat(plan.total_water_amount || 0),
avgSpeedMph: parseFloat(plan.avg_speed_mph || 0),
spreaderSetting: spreaderSetting?.setting_value || null,
productDetails: productDetails,
createdAt: plan.created_at,
updatedAt: plan.updated_at
};