spreader stuff

This commit is contained in:
Jake Kasper
2025-08-24 13:41:12 -04:00
parent 3ad4782021
commit 229454c466
10 changed files with 616 additions and 17 deletions

View File

@@ -0,0 +1,31 @@
-- Add spreader settings for granular applications
-- This allows storing different spreader settings for various equipment brands
CREATE TABLE IF NOT EXISTS spreader_settings (
id SERIAL PRIMARY KEY,
spreader_brand VARCHAR(100) NOT NULL,
spreader_model VARCHAR(100),
setting_value VARCHAR(10) NOT NULL,
application_rate_description VARCHAR(200),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Add some common spreader settings from the LESCO example
INSERT INTO spreader_settings (spreader_brand, spreader_model, setting_value, application_rate_description) VALUES
('LESCO', 'All Rotary Models', '#14', '1 lb nitrogen per 1000 sq ft'),
('PermaGreen', NULL, '14', '1 lb nitrogen per 1000 sq ft'),
('Cyclone', NULL, '4', '1 lb nitrogen per 1000 sq ft'),
('Spyker', NULL, '4', '1 lb nitrogen per 1000 sq ft'),
('Z-Spray', NULL, '4', '1 lb nitrogen per 1000 sq ft'),
('Vicon', 'LESCO Pendulum', '20', '1 lb nitrogen per 1000 sq ft');
-- Add spreader setting field to user equipment for spreaders
ALTER TABLE user_equipment
ADD COLUMN IF NOT EXISTS spreader_setting VARCHAR(10),
ADD COLUMN IF NOT EXISTS spreader_brand VARCHAR(100);
-- Create index for better performance
CREATE INDEX IF NOT EXISTS idx_spreader_settings_brand ON spreader_settings(spreader_brand);
CREATE INDEX IF NOT EXISTS idx_user_equipment_spreader ON user_equipment(spreader_brand);
SELECT 'Added spreader settings support successfully!' as migration_status;

View File

@@ -0,0 +1,56 @@
-- Update user equipment for better spreader support
-- Note: we already have 'manufacturer' and 'model' columns, so let's use those
-- Add brand as alias for manufacturer for consistency with new API
ALTER TABLE user_equipment
ADD COLUMN IF NOT EXISTS brand VARCHAR(100),
ADD COLUMN IF NOT EXISTS notes TEXT;
-- Copy existing manufacturer data to brand field for consistency
UPDATE user_equipment SET brand = manufacturer WHERE brand IS NULL AND manufacturer IS NOT NULL;
-- Create table to store product-specific spreader settings
-- This links products to specific spreader settings
CREATE TABLE IF NOT EXISTS product_spreader_settings (
id SERIAL PRIMARY KEY,
product_id INTEGER REFERENCES products(id) ON DELETE CASCADE,
user_product_id INTEGER REFERENCES user_products(id) ON DELETE CASCADE,
spreader_brand VARCHAR(100) NOT NULL,
spreader_model VARCHAR(100),
setting_value VARCHAR(20) NOT NULL,
rate_description VARCHAR(200), -- e.g., "1 lb nitrogen per 1000 sq ft"
notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- Ensure we have either product_id or user_product_id, but not both
CHECK (
(product_id IS NOT NULL AND user_product_id IS NULL) OR
(product_id IS NULL AND user_product_id IS NOT NULL)
)
);
-- Create indexes for better performance
CREATE INDEX IF NOT EXISTS idx_product_spreader_settings_product ON product_spreader_settings(product_id);
CREATE INDEX IF NOT EXISTS idx_product_spreader_settings_user_product ON product_spreader_settings(user_product_id);
CREATE INDEX IF NOT EXISTS idx_product_spreader_settings_brand ON product_spreader_settings(spreader_brand);
CREATE INDEX IF NOT EXISTS idx_user_equipment_brand_model ON user_equipment(brand, model);
-- Add trigger to update updated_at timestamp
CREATE OR REPLACE FUNCTION update_product_spreader_settings_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
DROP TRIGGER IF EXISTS update_product_spreader_settings_updated_at_trigger ON product_spreader_settings;
CREATE TRIGGER update_product_spreader_settings_updated_at_trigger
BEFORE UPDATE ON product_spreader_settings
FOR EACH ROW
EXECUTE PROCEDURE update_product_spreader_settings_updated_at();
-- Drop the old spreader_settings table since we're using a different approach
DROP TABLE IF EXISTS spreader_settings;
SELECT 'Updated spreader system for user-defined spreaders and product settings!' as migration_status;