Files
growstuff/lib/tasks/growstuff.rake
google-labs-jules[bot] 4b9763e1da feat: Add problem tracking feature
This commit introduces a new `Problem` model, analogous to `Crop`, to allow users to track problems they have on their plantings (e.g., aphids on tomatoes).

Key features:
- A new `Problem` model that can be curated by admins (`problem_wranglers`).
- Users can associate problems with their plantings and upload photos of the problems.
- Aggregated problem information is displayed on the crop detail page (e.g., "Problems: aphids (27), blight (13)").
- Users can mention problems in posts (e.g., `[aphids](problem)`), which automatically links to the problem's page.
- Admin functionality for reviewing and approving new problem suggestions.

Resolves merge conflict in app/controllers/plantings_controller.rb
2025-09-07 11:47:53 +00:00

57 lines
1.6 KiB
Ruby

# frozen_string_literal: true
namespace :growstuff do
desc "Add an admin user, by name"
# usage: rake growstuff:admin_user name=skud
task admin_user: :environment do
add_role_to_member! ENV.fetch('name', nil), 'Admin'
end
desc "Add a crop wrangler user, by name"
# usage: rake growstuff:cropwrangler_user name=skud
task cropwrangler_user: :environment do
add_role_to_member! ENV.fetch('name', nil), 'Crop Wrangler'
end
def add_role_to_member!(login_name, role_name)
unless login_name && role_name
raise "Usage: rake growstuff:[rolename] name=[username] " \
"\n (login name is case-sensitive)\n"
end
member = Member.find_by!(login_name:)
role = Role.find_by!(name: role_name)
member.roles << role
end
desc "Upload crops from a CSV file"
# usage: rake growstuff:import_crops file=filename.csv
task import_crops: :environment do
require 'csv'
(@file = ENV.fetch('file', nil)) || raise("Usage: rake growstuff:import_crops file=file.csv")
puts "Loading crops from #{@file}..."
CSV.foreach(@file) do |row|
CsvImporter.new.import_crop(row)
end
Rails.cache.delete('full_crop_hierarchy')
puts "Finished loading crops"
end
desc "Send planting reminder email"
# usage: rake growstuff:send_planting_reminder
task send_planting_reminder: :environment do
# Heroku scheduler only lets us run things daily, so this checks
# Send on Monday
if Time.zone.today.wday == 1
Member.confirmed.wants_reminders.each do |m|
Notifier.planting_reminder(m).deliver_now! unless m.plantings.active.empty?
end
end
end
end