diff --git a/db/migrate/20170421170849_add_dirty_to_templates.rb b/db/migrate/20170421170849_add_dirty_to_templates.rb new file mode 100644 index 0000000..e4d89a0 --- /dev/null +++ b/db/migrate/20170421170849_add_dirty_to_templates.rb @@ -0,0 +1,5 @@ +class AddDirtyToTemplates < ActiveRecord::Migration + def change + add_column :templates, :dirty, :boolean, default: false + end +end diff --git a/lib/tasks/templates.rake b/lib/tasks/templates.rake new file mode 100644 index 0000000..6bc07bf --- /dev/null +++ b/lib/tasks/templates.rake @@ -0,0 +1,88 @@ +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 \ No newline at end of file