namespace :bulk_update do desc "Update nocharge with household_charge for current logs" task update_current_logs_nocharges: :environment do updated_logs_count = 0 status_changed_logs = [] logs = LettingsLog.where(startdate: Time.zone.local(2024, 4, 1)...Time.zone.local(2026, 4, 1)).where.not("nocharge = household_charge") puts "Updating logs with startdate between 2024-04-01 and 2026-04-01" puts "Total logs to update: #{logs.count}" logs.find_each do |log| status_pre_change = log.status log.nocharge = log.household_charge if log.save(validate: false) updated_logs_count += 1 Rails.logger.info "Updated nocharge for log #{log.id}" else Rails.logger.error "Failed to update log #{log.id}: #{log.errors.full_messages.join(', ')}" end status_post_change = log.status status_changed_logs << log.id if status_pre_change != status_post_change end puts "#{updated_logs_count} logs were updated." puts "Logs with changed status: [#{status_changed_logs.join(', ')}]" end desc "Update nocharge with household_charge for older logs" task update_older_logs_nocharges: :environment do updated_logs_count = 0 status_changed_logs = [] logs = LettingsLog.where("startdate < ?", Time.zone.local(2024, 4, 1)).where.not("nocharge = household_charge") logs.find_each do |log| status_pre_change = log.status log.skip_update_status = true log.nocharge = log.household_charge if log.save updated_logs_count += 1 Rails.logger.info "Updated nocharge for log #{log.id}" else Rails.logger.error "Failed to update log #{log.id}: #{log.errors.full_messages.join(', ')}" end status_post_change = log.status status_changed_logs << log.id if status_pre_change != status_post_change end puts "#{updated_logs_count} logs were updated." puts "Logs with changed status: [#{status_changed_logs.join(', ')}]" end end