184 lines
5.6 KiB
Ruby
184 lines
5.6 KiB
Ruby
class GreetingCardRecord
|
||
include Mongoid::Document
|
||
include Mongoid::Timestamps
|
||
# include ActiveModel::Validations
|
||
include OrbitCategory::Categorizable
|
||
include OrbitTag::Taggable
|
||
|
||
#https://stackoverflow.com/questions/378887/how-do-i-calculate-a-strings-width-in-ruby
|
||
mount_uploader :image, ImageUploader
|
||
|
||
# 欄位定義
|
||
field :serial_number, type: Integer
|
||
field :ip, type: String
|
||
field :title, type: String
|
||
field :name, type: String
|
||
field :sender_mail, type: String
|
||
field :recipients, type: String
|
||
field :greetings, type: String
|
||
field :sending_time, type: DateTime
|
||
|
||
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
|
||
belongs_to :card_image, class_name: "GreetingCardImage", foreign_key: :card
|
||
has_many :greeting_card_status_histories
|
||
|
||
index({situation: 1, is_hidden: -1}, { unique: false, background: true })
|
||
|
||
attr_accessor :release_comment, :release_file, :user
|
||
|
||
before_create do
|
||
unless self.is_hidden
|
||
last_serial_number = GreetingCardSetting.update_last_serial_number
|
||
self.serial_number = last_serial_number
|
||
end
|
||
self.generate_image(false)
|
||
end
|
||
|
||
before_save :create_greeting_card_status_history
|
||
|
||
def self.get_fonts
|
||
["Arial", "Calibri", "Times New Roman", "微軟正黑體", "標楷體", "新細明體"]
|
||
end
|
||
|
||
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 = GreetingCardAdmin.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: 'greeting_card').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["greeting_card"][:last_serial_number] : GreetingCardSetting.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) if self.serial_number
|
||
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
|
||
|
||
def generate_image(saved=true)
|
||
if self.card_image
|
||
layout_design = GreetingCardLayoutDesign.where(:category_id=> self.category_id.to_s).first
|
||
if layout_design.nil?
|
||
layout_design = GreetingCardLayoutDesign.where(:category_id=> nil).first
|
||
if layout_design.nil?
|
||
puts "Layout Design not exist!"
|
||
return false
|
||
end
|
||
end
|
||
data = {
|
||
title: self.title,
|
||
name: self.name,
|
||
sender_mail: self.sender_mail,
|
||
recipients: self.recipients,
|
||
greetings: self.greetings
|
||
}
|
||
|
||
layout_design.generate_image(self, self.card_image.file.path, data, saved)
|
||
end
|
||
end
|
||
|
||
def build_email(site, host_url, current_user, module_app, locale, email=nil, extra_data={})
|
||
if email.nil?
|
||
email = Email.new
|
||
email.save
|
||
self.email_id = email.id
|
||
self.save
|
||
end
|
||
|
||
group_mail = self.recipients
|
||
manager_emails = self.sender_mail
|
||
mail_sentdate = self.sending_time
|
||
|
||
mail_from = site.title_translations[locale]
|
||
mail_subject = mail_from + " #{I18n.t('greeting_card.new_card')}:"
|
||
template_data = {
|
||
"greeting_card_record_id" => self.id.to_s,
|
||
"site_host" => host_url
|
||
}
|
||
template_data.merge!(extra_data) if extra_data.present?
|
||
email.update_attributes(
|
||
:mail_lang=> locale,
|
||
:create_user=> current_user,
|
||
:mail_sentdate=> mail_sentdate,
|
||
:module_app=> module_app,
|
||
:mail_to=>group_mail,
|
||
:mail_subject=>mail_subject,
|
||
:template=>'greeting_cards/email',
|
||
:template_data=> template_data,
|
||
:mail_reply_to => (manager_emails.empty? ? nil : manager_emails)
|
||
)
|
||
|
||
email
|
||
end
|
||
|
||
private
|
||
|
||
def create_greeting_card_status_history
|
||
if !@skip_callback && (changed? || @changed)
|
||
@new_history = GreetingCardStatusHistory.create(
|
||
greeting_card_record: self,
|
||
status: self.situation,
|
||
comment: @release_comment,
|
||
file: @release_file,
|
||
user: @user
|
||
)
|
||
else
|
||
@new_history = nil
|
||
end
|
||
end
|
||
end
|