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