person.rb 881 Bytes
require_dependency 'person'

class Person
  attr_accessible :usp_id, :invitation_code

  SEARCHABLE_FIELDS[:usp_id] = {:label => _('USP Number'), :weight => 5}

  validates_uniqueness_of :usp_id, :allow_nil => true
  settings_items :invitation_code
  validate :usp_id_or_invitation, :if => lambda { |person| person.environment && person.environment.plugin_enabled?(StoaPlugin)}

  before_validation do |person|
    person.usp_id = nil if person.usp_id.blank?
  end

  def usp_id_or_invitation
    if usp_id.blank? && !is_template && (invitation_code.blank? || !invitation_task)
      errors.add(:usp_id, _("is being used by another user or is not valid"))
    end
  end

  def invitation_task
    Task.pending.find(:first, :conditions => {:code => invitation_code.to_s}) ||
    Task.finished.find(:first, :conditions => {:code => invitation_code.to_s, :target_id => id})
  end
end