person.rb 2.3 KB
# encoding: utf-8

require_dependency 'person'

class Person

  settings_items :percentage_incomplete, :type => :string, :default => ""

  attr_accessible :percentage_incomplete

  validate :validate_full_name

  scope :search, lambda { |name="", state="", city="", email=""|
    like_sql = ""
    values = []

    unless name.blank?
      like_sql << "name ILIKE ? OR identifier ILIKE ? AND "
      values << "%#{name}%" << "%#{name}%"
    end

    unless state.blank?
      like_sql << "data ILIKE ? AND "
      values << "%:state: %#{state}%"
    end

    unless city.blank?
      like_sql << "data ILIKE ? AND "
      values << "%:city: %#{city}%"
    end

    unless email.blank?
      like_sql << "email ILIKE ? AND "
      values << "%#{email}%"
    end
    like_sql = like_sql[0..like_sql.length-5]

    { 
      :joins => :user, 
      :conditions=>[like_sql, *values]
    }
  }

  def institutions
    institutions = []
    unless self.user.institutions.nil?
      self.user.institutions.each do |institution|
        institutions << institution.name
      end
    end
    institutions
  end

  def secondary_email
    self.user.secondary_email unless self.user.nil?
  end

  def secondary_email= value
    self.user.secondary_email = value unless self.user.nil?
  end

  def validate_full_name
    full_validation = /([^\w\*\s*])|(^|\s)([a-z]|[0-9])/
    partial_validation = /[^\w\*\s]/
    invalid = false

    return false if self.name.blank?

    validation_name = replace_some_special_chars(self.name)

    validation_name.split(" ").each do |value|
      invalid = if value.length > 3
        full_validation.match(value)
      else
        partial_validation.match(value)
      end
    end

    if invalid
      self.errors.add(:name, _("Should begin with a capital letter and no special characters"))
      return false
    end
    true
  end

  def software?
    false
  end

  private

  def replace_some_special_chars text
    text.gsub(/([áàâãéèêíïóôõöú])/) do |value|
      if( ["á","à","â","ã"].include?(value) )
        "a"
      elsif( ["é","è","ê"].include?(value) )
        "e"
      elsif( ["í","ï"].include?(value) )
        "i"
      elsif ( ["ó","ô","õ","ö"].include?(value) )
        "o"
      elsif( ["ú"].indexOf(value) )
        "u"
      else
        value
      end
    end
  end
end