greeting_card/app/models/greeting_card_record.rb

184 lines
5.6 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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