diff --git a/app/models/concerns/predict_planting.rb b/app/models/concerns/predict_planting.rb index da8b0e230..ef0508e89 100644 --- a/app/models/concerns/predict_planting.rb +++ b/app/models/concerns/predict_planting.rb @@ -77,6 +77,17 @@ module PredictPlanting finish_predicted_at <= Time.zone.today end + # Deactivate any plantings over time_limit that are super late in small batches. + def self.archive!(time_limit: 3.years.ago, limit: 100) + active_plantings = Planting.annual.active.where("planted_at < ?", time_limit).order(planted_at: :asc).limit(limit) + active_plantings.each do |planting| + if planting.finish_is_predicatable? && planting.super_late? + planting.finished = true + planting.save + end + end + end + private def calculate_percentage_grown diff --git a/app/models/garden.rb b/app/models/garden.rb index b0be0f03c..13d424b49 100644 --- a/app/models/garden.rb +++ b/app/models/garden.rb @@ -78,6 +78,16 @@ class Garden < ApplicationRecord def reindex(refresh: false); end + # Deactivate any gardens with no active plantings + def self.archive!(time_limit: 3.years.ago, limit: 100) + Garden.active.where("updated_at < ?", time_limit).order(updated_at: :asc).limit(limit).each do |active_garden| + unless active_garden.plantings.active.any? + garden.active = false + garden.save + end + end + end + protected def strip_blanks diff --git a/lib/tasks/gardens.rake b/lib/tasks/gardens.rake new file mode 100644 index 000000000..605173363 --- /dev/null +++ b/lib/tasks/gardens.rake @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +namespace :gardens do + + desc "Mark old gardens inactive" + task archive: :environment do + Planting.archive! + Garden.archive! + end +end