namespace :templates do
desc "Initializes the dirty flag on templates"
task set_dirty_flags: :environment do
Org.all.each do |org|
Template.dmptemplate_ids(org).each do |id|
current = Template.current(org, id)
live = Template.live(org, id)
# If its been published or the current date is greater than the live date then it has outstanding changes
if !live.nil?
if live.updated_at.strftime("%Y-%m-%d %H:%M") <
current.updated_at.strftime("%Y-%m-%d %H:%M")
current.dirty = true
current.save!
end
end
end
end
end
desc "Cleanup published flags"
task clean_up_published_flags: :environment do
Org.all.each do |org|
Template.dmptemplate_ids(org).each do |id|
live = Template.live(org, id)
# If its been published or the current date is greater than the live date then it has outstanding changes
if !live.nil?
Template.where("updated_at < ? AND published = ?",
live.updated_at, true).each do |template|
template.published = false
template.save!
end
end
end
end
end
desc "Cleanup excess versions"
task clean_up_excess_versions: :environment do
Org.all.each do |org|
Template.dmptemplate_ids(org).each do |id|
versions = Template.where(org: org, dmptemplate_id: id).pluck(:version).uniq
# Only keep the latest record for each version
versions.each do |ver|
templates = Template.where(org: org, dmptemplate_id: id, version: ver).order(published: :desc, updated_at: :desc)
# If there is more than one record with the same version then delete it
if templates.count > 1
templates[1..templates.count].each do |t|
if t.plans.count <= 0
# Cycle through all of this template's dependencies first
t.phases.each do |p|
p.sections.each do |s|
s.questions.each do |q|
q.suggested_answers do |sa|
sa.destroy
end
q.question_options do |qo|
qo.destroy
end
q.destroy
end
s.destroy
end
p.destroy
end
t.destroy
else
puts "UNABLE to delete #{t.id} because it has a plan"
end
end
end
end
end
end
end
end