122 lines
3.4 KiB
Ruby
122 lines
3.4 KiB
Ruby
class AskQuestion
|
|
include Mongoid::Document
|
|
include Mongoid::Timestamps
|
|
# include ActiveModel::Validations
|
|
include OrbitCategory::Categorizable
|
|
include OrbitTag::Taggable
|
|
|
|
# 欄位定義
|
|
field :serial_number, type: Integer
|
|
field :ip, type: String
|
|
field :name, type: String
|
|
field :identity, type: String
|
|
field :mail, type: String
|
|
field :phone, type: String
|
|
field :fax, type: String
|
|
field :title, type: String
|
|
field :content, type: String
|
|
field :appointment, type: DateTime
|
|
field :sex
|
|
|
|
field :reply, type: String
|
|
field :comment, type: String
|
|
field :situation, type: String, default: "is_email_not_confirmed" # 預設email未驗證
|
|
field :send_email, type: Integer, default: 0
|
|
field :email_id
|
|
field :verify_email_id
|
|
field :custom_values, type: Hash, default: {}
|
|
field :agree_show, type: Boolean, default: false
|
|
field :agree_usage, type: Boolean, default: false
|
|
field :is_hidden, type: Boolean
|
|
|
|
field :review_time, type: DateTime
|
|
belongs_to :reviewer, class_name: "MemberProfile", foreign_key: :reviewer_id
|
|
has_many :ask_status_histories
|
|
|
|
index({situation: 1, identity: 1, is_hidden: -1}, { unique: false, background: true })
|
|
|
|
attr_accessor :release_comment, :release_file, :user
|
|
|
|
before_create do
|
|
last_serial_number = AskSetting.update_last_serial_number
|
|
self.serial_number = last_serial_number
|
|
end
|
|
|
|
before_save :create_ask_status_history
|
|
|
|
def release_comment=(v)
|
|
@changed = true
|
|
@release_comment = v
|
|
end
|
|
|
|
def release_file=(v)
|
|
@changed = true
|
|
@release_file = v
|
|
end
|
|
|
|
def email
|
|
mail = Email.where(:id=>self.email_id).first
|
|
end
|
|
|
|
def verify_email
|
|
verify_email = Email.where(:id=>self.verify_email_id).first
|
|
end
|
|
|
|
def reviewer_emails
|
|
email_address = AskAdmin.or(:category_ids.in => [self.category_id, [], nil]).pluck(:email).select { |s| s.present? }.uniq rescue []
|
|
authorizes = Authorization.where(module_app_id: ModuleApp.where(key: 'ask').first.id).to_a rescue []
|
|
authorizes.each do |a|
|
|
if a.category_id
|
|
next if a.category_id != self.category_id
|
|
end
|
|
if a.user_id
|
|
u = a.user
|
|
email_address << u.email if u && u.email
|
|
elsif a.role_id
|
|
email_address = email_address + MemberProfile.where(role_ids: a.role_id).pluck(:email).select { |s| s.present? }.uniq
|
|
else
|
|
a.destroy
|
|
end
|
|
end
|
|
email_address = email_address.flatten
|
|
email_address.uniq
|
|
end
|
|
|
|
def get_serial_number(last_serial_number=nil, display_length=nil)
|
|
if display_length.nil? && last_serial_number.nil?
|
|
can_update_shared_hash = (defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash)
|
|
last_serial_number = (can_update_shared_hash ? OrbitHelper::SharedHash["ask"][:last_serial_number] : AskSetting.pluck(:last_serial_number)[0].to_i)
|
|
end
|
|
display_length = [last_serial_number.to_s.length + 1, 4].max if display_length.nil?
|
|
display_format_string(self.serial_number, display_length)
|
|
end
|
|
|
|
def display_format_string(num, str_length)
|
|
format("%0#{str_length}d", num)
|
|
end
|
|
|
|
def send_email?
|
|
self.send_email == 1
|
|
end
|
|
|
|
def new_history
|
|
@new_history
|
|
end
|
|
|
|
private
|
|
|
|
def create_ask_status_history
|
|
if changed? || @changed
|
|
@new_history = AskStatusHistory.create(
|
|
ask_question: self,
|
|
status: self.situation,
|
|
comment: @release_comment,
|
|
file: @release_file,
|
|
user: @user
|
|
)
|
|
else
|
|
@new_history = nil
|
|
end
|
|
end
|
|
end
|