orbit4-5/app/models/member_profile.rb

96 lines
2.7 KiB
Ruby

class MemberProfile
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Tree
include Mongoid::Tree::Ordering
field :first_name, type: String, localize: true
field :last_name, type: String, localize: true
field :sex
field :sid
field :office_tel
field :birthday, type: DateTime
field :address
field :personal_website
field :autobiography, type: String, localize: true
field :email, type: String
field :position, type: Integer
VALID_EMAIL_FORMAT = /\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z/
validates :email, uniqueness: true, format: { with: VALID_EMAIL_FORMAT }, if: :email_present?
validates :position, uniqueness: true
has_one :user
has_and_belongs_to_many :roles
has_and_belongs_to_many :role_statuses
has_many :member_profile_field_values
accepts_nested_attributes_for :member_profile_field_values
before_save :assign_default_position, :if => :assign_default_position?
mount_uploader :avatar, AvatarUploader
paginates_per 10
def name
if self.first_name || self.last_name
"#{self.first_name} #{self.last_name}"
end
end
def disable_role=(var)
var[:id].each do |id,val|
if (val=="true")
self.role_ids.reject!{|t| t.to_s == id}
elsif(val=="false")
self.role_ids += Array(id)
end
end
end
def new_attribute_values=(fields)
fields.each do |key,field|
self.member_profile_field_values.build(field)
end
end
def get_attribute_value(attribute_field)
MemberProfileFieldValue.find_by(member_profile_field_id: attribute_field.id.to_s)
end
def get_attribute_values
@attribute_values ||= self.member_profile_field_values rescue nil
end
def get_value_from_field_id(field_id)
values = get_attribute_values
value = values.detect {|value| value.member_profile_field_id == field_id} rescue nil
value ? value : nil
end
def self.get_member_list_attribute_field(field_key)
MemberProfileField.find_by(key: field_key)
end
def self.get_member_list_attribute_value(member_profile_id,field_id)
MemberProfileFieldValue.find_by(member_profile_id: member_profile_id, member_profile_field_id: field_id)
end
def self.get_role_member_data_by_sort(field_key, role_status_id)
a = Array.new
attribute_field_data = get_member_list_attribute_field(field_key)
self.where(role_status_ids: role_status_id).desc(:_id).collect{|t| a << [ get_member_list_attribute_value(t.id,attribute_field_data.id)['val'].to_i, t ] }
member_data = a.sort
member_data_tmp = member_data.collect {|v| v[1] }
end
def assign_default_position?
self.position.nil? || self.parent_id_changed?
end
def email_present?
self.email.present?
end
end