Newer
Older
dmpopidor / app / models / question.rb
@Marta Ribeiro Marta Ribeiro on 3 Jun 2016 2 KB DMPonline4 - RAILS 4.0 (#4)
class Question < ActiveRecord::Base

  #associations between tables
  has_many :answers, :dependent => :destroy
  has_many :options, :dependent => :destroy
  has_many :suggested_answers, :dependent => :destroy
  has_many :guidances
  has_many :comments
  
  has_and_belongs_to_many :themes, join_table: "questions_themes"  
  

  belongs_to :section
  belongs_to :question_format

  accepts_nested_attributes_for :answers, :reject_if => lambda {|a| a[:text].blank? },  :allow_destroy => true
  accepts_nested_attributes_for :section
  accepts_nested_attributes_for :question_format
  accepts_nested_attributes_for :options, :reject_if => lambda {|a| a[:text].blank? },  :allow_destroy => true
  accepts_nested_attributes_for :suggested_answers,  :allow_destroy => true
  accepts_nested_attributes_for :themes
  
  attr_accessible :theme_ids, :as => [:default, :admin]

  attr_accessible :default_value, :dependency_id, :dependency_text, :guidance,:number, :parent_id, :suggested_answer, :text, :section_id,:question_format_id,:options_attributes,:suggested_answers_attributes, :option_comment_display, :as => [:default, :admin]

	def to_s
        "#{text}"
    end

    amoeba do
        include_field :options
        include_field :suggested_answers
        clone [:themes]
    end

	#def question_type?
	#	type_label = {}
	#	if self.is_text_field?
	#	  type_label = 'Text field'
	#	elsif self.multiple_choice?
	#		type_label = 'Multiple choice'
	#	else
	#		type_label = 'Text area'
	#	end
	#	return type_label
	#end

	def question_themes?
		themes_label = {}
		i = 1
		themes_quest = self.themes

		themes_quest.each do |tt|
			themes_label = tt.title

			if themes_quest.count > i then
				themes_label +=	','
				i +=1
			end
		end

		return themes_label
	end

	# guidance for question in the org admin
	def guidance_for_question(question, org_admin)
        # pulls together guidance from various sources for question
        guidances = {}
        theme_ids = question.theme_ids

        GuidanceGroup.where("organisation_id = ?", org_admin.id).each do |group|
            group.guidances.each do |g|
                g.themes.where("id IN (?)", theme_ids).each do |gg|
                   guidances["#{group.name} guidance on #{gg.title}"] = g
                end
            end
        end

	  	# Guidance link to directly to a question
        question.guidances.each do |g_by_q|
            g_by_q.guidance_groups.each do |group|
                if group.organisation == org_admin
                    guidances["#{group.name} guidance for this question"] = g_by_q
                end
            end
	  	end

		return guidances
 	end

    
    
    
    
 	#get suggested answer belonging to the currents user for this question
 	def get_suggested_answer(org_id)
 		suggested_answer = suggested_answers.find_by_organisation_id(org_id)
 		return suggested_answer
 	end



end