Newer
Older
dmpopidor / app / models / dmptemplate.rb
@Marta Ribeiro Marta Ribeiro on 3 Jun 2016 3 KB DMPonline4 - RAILS 4.0 (#4)
class Dmptemplate < ActiveRecord::Base
    
    attr_accessible :organisation_id, :description, :published, :title, :user_id, :locale, :is_default, :guidance_group_ids, :as => [:default, :admin] 
  
    #associations between tables
    has_many :phases
    has_many :versions, :through => :phases
    has_many :sections, :through => :versions
    has_many :questions, :through => :sections
    has_many :projects
    
    #has_many :guidances                needs to be removed and checked
    
    belongs_to :organisation
      
	has_and_belongs_to_many :guidance_groups, join_table: "dmptemplates_guidance_groups"
	
    accepts_nested_attributes_for :guidance_groups
    accepts_nested_attributes_for :phases
    accepts_nested_attributes_for :organisation
    accepts_nested_attributes_for :projects

    
  has_settings :export, class_name: 'Settings::Dmptemplate' do |s|
    s.key :export, defaults: Settings::Dmptemplate::DEFAULT_SETTINGS
  end
    
  def to_s
    "#{title}"
  end
  
  def self.templates_org_type(ot)
    new_org_obejcts = OrganisationType.find_by_name(ot).organisations
    
    org_templates = Array.new
    new_org_obejcts.each do |neworg|
       org_templates += neworg.dmptemplates.where("published = ?", true)
    end
    
    return org_templates
  end 

	#returns all funders templates
	def self.funders_templates
		new_org_obejcts = OrganisationType.find_by_name(I18n.t("helpers.org_type.funder")).organisations
	  org_templates = Array.new
   	
   	new_org_obejcts.each do |neworg|
       	org_templates += neworg.dmptemplates
    end
    
    return org_templates	
	end
	
	
	#returns all institutional templates bellowing to the current user's org
	def self.own_institutional_templates(org_id)
		new_templates = self.where("organisation_id = ?", org_id)
		return new_templates
	end
	
	#returns an array with all funders and own institutional templates
	def self.funders_and_own_templates(org_id)
		funders_templates = self.funders_templates
	
        #verify if org type is not a funder
        current_org = Organisation.find(org_id)
        if current_org.organisation_type.name != I18n.t("helpers.org_type.funder") then 
            own_institutional_templates = self.own_institutional_templates(org_id)
		else
            own_institutional_templates = []
        end    
            
		templates_list = Array.new
		templates_list += own_institutional_templates
		templates_list += funders_templates
		templates_list = templates_list.sort_by { |f| f['title'].downcase }
				
		return templates_list
	end
	
	def org_type
		org_type = organisation.organisation_type.name
		return org_type
	end
	
	#verify if a template has customisation by current user's org
	def has_customisations?(org_id, temp)
		if temp.organisation_id != org_id then
			temp.phases.each do |phase|
				phase.versions.each do |version|
					version.sections.each do |section|
						return true if section.organisation_id == org_id 
											
					end	
				end
				return false 
			end
		else
			return false 	
		end	
	end
	
	
	# verify if there are any publish version for the template
	def has_published_versions?
		phases.each do |phase|
			return true if !phase.latest_published_version.nil?
		end
		return false 
	end

end