660 lines
32 KiB
Ruby
660 lines
32 KiB
Ruby
# encoding: utf-8
|
||
class Admin::GreetingCardsController < OrbitAdminController
|
||
helper Admin::GreetingCardsHelper
|
||
include Admin::GreetingCardsHelper
|
||
before_action ->(module_app = @app_title) { set_variables module_app }
|
||
before_action :set_greeting_cardquestion, only: [:edit, :destroy, :update, :print]
|
||
before_action :prepare_category_select, only: [:layout_design, :index, :order_fields]
|
||
layout :compute_layout
|
||
helper_method :greeting_card_thead
|
||
def show
|
||
@greeting_card_status_histories = @greeting_card_record.greeting_card_status_histories.reverse
|
||
end
|
||
def compute_layout
|
||
if action_name=='print'
|
||
false
|
||
else
|
||
'back_end_with_jquery_first'
|
||
end
|
||
end
|
||
def initialize
|
||
super
|
||
@app_title = "greeting_card"
|
||
end
|
||
def layout_design
|
||
category_id = (@category_id.present? ? @category_id : nil)
|
||
@set = GreetingCardLayoutDesign.where(:category_id=> category_id).first
|
||
@set = GreetingCardLayoutDesign.create(:category_id=> category_id) if @set.nil?
|
||
@images = GreetingCardCategorySetting.get_images(@category_id)
|
||
@url = layout_design_save_admin_greeting_cards_path
|
||
end
|
||
def layout_design_save
|
||
locale = I18n.locale
|
||
layout_design_params = params[:greeting_card_layout_design]
|
||
category_id = (layout_design_params[:category_id].present? ? layout_design_params[:category_id] : nil)
|
||
set = GreetingCardLayoutDesign.where(:category_id=> category_id).first
|
||
set = GreetingCardLayoutDesign.create(:category_id=> category_id) if set.nil?
|
||
update_params = {save_name: layout_design_params[:save_name]}
|
||
if layout_design_params[:img_objs_changed] == '1'
|
||
img_objs = layout_design_params[:img_objs].map.with_index do |(k, v), i|
|
||
[i.to_s, v]
|
||
end.to_h
|
||
update_params[:img_objs] = img_objs
|
||
end
|
||
set.update_attributes(update_params)
|
||
redirect_to layout_design_admin_greeting_cards_path(locale: locale, category: category_id)
|
||
end
|
||
def filter_fields(categories, tags=[])
|
||
{
|
||
:situation=> GreetingCardTicketStatus.all.map{|s| {:title=> s.title, :id=>s.key}}
|
||
}
|
||
end
|
||
|
||
# 抓取網址的狀態參數
|
||
def filter2(type)
|
||
case type
|
||
when "situation"
|
||
params[:filters][:situation].blank? ? [] : params[:filters][:situation] rescue []
|
||
when "identity"
|
||
params[:filters][:identity].blank? ? [] : params[:filters][:identity] rescue []
|
||
end
|
||
end
|
||
def setting_save
|
||
locale = I18n.locale
|
||
greeting_card_setting = GreetingCardSetting.first
|
||
p1 = greeting_card_setting_params(greeting_card_setting,'greeting_card_setting')
|
||
greeting_card_setting.update_attributes(p1)
|
||
redirect_to "/#{locale}/admin/greeting_cards/setting"
|
||
end
|
||
def switch_to_default_setting
|
||
if GreetingCardCategorySetting.where(:id=>params[:id]).update_all(:use_default=>params[:use_default] == "true").documents[0]["nModified"] != 0
|
||
render :json => {success: true}
|
||
else
|
||
render :json => {success: false}
|
||
end
|
||
end
|
||
def category_setting_save
|
||
# render :html => params and return
|
||
locale = I18n.locale
|
||
host_url = Site.first.root_url rescue "http://"
|
||
if host_url == "http://"
|
||
host_url = request.protocol + request.host_with_port
|
||
end
|
||
update_user_id = current_user.id
|
||
greeting_card_setting = GreetingCardCategorySetting.where(category_id: params['category_id']).first
|
||
greeting_card_setting = GreetingCardCategorySetting.create(category_id: params['category_id']) if greeting_card_setting.nil?
|
||
p1 = greeting_card_setting_params(greeting_card_setting,'greeting_card_category_setting', greeting_card_setting.agree_customs.map{|k| "default@#{k}"})
|
||
p1[:update_user_id] = update_user_id
|
||
p1[:host_url] = host_url
|
||
greeting_card_setting.update_attributes(p1)
|
||
redirect_to "/#{locale}/admin/greeting_cards/category_setting"
|
||
end
|
||
def setting
|
||
@default_greeting_card_setting = GreetingCardSetting.first
|
||
@url = setting_save_admin_greeting_cards_path
|
||
end
|
||
def backend_table_setting
|
||
category_id = params[:category_id].present? ? params[:category_id] : nil
|
||
@greeting_card_list_setting = GreetingCardListSetting.where(:category_id=>category_id).first || GreetingCardListSetting.create(:category_id=>category_id)
|
||
@url = greeting_card_list_setting_save_admin_greeting_cards_path
|
||
end
|
||
def greeting_card_list_setting_save
|
||
@greeting_card_list_setting = GreetingCardListSetting.find(params[:id])
|
||
greeting_card_list_setting_params = params.require('greeting_card_list_setting').permit!
|
||
@greeting_card_list_setting.update_attributes(greeting_card_list_setting_params)
|
||
redirect_to admin_greeting_cards_path(:locale=>locale)
|
||
end
|
||
def get_new_setting_index
|
||
greeting_card_setting_index = GreetingCardSettingIndex.first
|
||
greeting_card_setting_index = GreetingCardSettingIndex.create() if greeting_card_setting_index.nil?
|
||
greeting_card_setting_index.key = greeting_card_setting_index.key + 1
|
||
greeting_card_setting_index.save
|
||
render :json => {key: greeting_card_setting_index.key.to_i}
|
||
end
|
||
def get_new_category_setting_index
|
||
greeting_card_setting_index = GreetingCardCategorySettingIndex.where(category_id: params['category_id']).first
|
||
greeting_card_setting_index = GreetingCardCategorySettingIndex.create(category_id: params['category_id']) if greeting_card_setting_index.nil?
|
||
greeting_card_setting_index.key = greeting_card_setting_index.key + 1
|
||
greeting_card_setting_index.save
|
||
render :json => {key: greeting_card_setting_index.key.to_i}
|
||
end
|
||
def apply_default_custom_fields
|
||
greeting_card_setting = GreetingCardCategorySetting.where(:category_id=>params[:category]).first
|
||
if greeting_card_setting
|
||
if params[:apply_all].to_s == 'true'
|
||
apply_fields = greeting_card_setting.need_check_customs
|
||
if params[:include_reject].to_s == 'true'
|
||
apply_fields += greeting_card_setting.reject_customs
|
||
apply_fields = apply_fields.sort_by{|k| k.to_i}
|
||
end
|
||
else
|
||
apply_fields = params[:apply_fields].to_a
|
||
end
|
||
is_agree = params[:agree].to_s == 'true'
|
||
if is_agree
|
||
greeting_card_setting.agree_customs_func(apply_fields)
|
||
custom_fields = GreetingCardSetting.first.custom_fields
|
||
set_input_name_for_greeting_card('greeting_card_category_setting[custom_fields]')
|
||
view_context.set_input_name_for_greeting_card('greeting_card_category_setting[custom_fields]') #prevent not setting variables
|
||
html = apply_fields.map do |k|
|
||
view_context.custom_field_block_for_greeting_card("default@#{k}", custom_fields[k])
|
||
end.join("\n")
|
||
else
|
||
greeting_card_setting.delete_customs_func(apply_fields, true)
|
||
html = ""
|
||
end
|
||
render :json => {:success=>true, :html=>html}
|
||
else
|
||
render :json => {:success=>false}
|
||
end
|
||
end
|
||
def index
|
||
@greeting_card_setting = GreetingCardSetting.first
|
||
category_id = @category_id.present? ? @category_id : nil
|
||
@greeting_card_list_setting = GreetingCardListSetting.where(:category_id=>category_id).first || GreetingCardListSetting.create(:category_id=>category_id)
|
||
# @tags = @module_app.tags
|
||
@categories = @module_app.categories.enabled.sort_by{|category| (((@module_app.asc rescue true) ? category.sort_number.to_i : -category.sort_number.to_i) rescue category.id)}
|
||
@filter_fields = filter_fields(@categories)
|
||
# 列表欄位
|
||
@table_fields = @greeting_card_list_setting.default_fields.select{|f| @greeting_card_setting.default_setting[f].nil? || @greeting_card_setting.default_setting[f] }
|
||
if !category_id.nil?
|
||
greeting_card_setting = GreetingCardCategorySetting.where(:category_id=>@category_id, :use_default.ne=>true).first
|
||
if greeting_card_setting.nil?
|
||
greeting_card_setting = GreetingCardSetting.first
|
||
tmp = greeting_card_setting.custom_fields.map{|k,v| ["default@#{k}", v]}.to_h
|
||
else
|
||
tmp = greeting_card_setting.custom_fields.map{|k,v| ["custom@#{category_id}@#{k}", v]}.to_h
|
||
end
|
||
list_setting_custom_fields = @greeting_card_list_setting.custom_fields
|
||
else
|
||
tmp = []
|
||
default_setting = GreetingCardSetting.first
|
||
if default_setting
|
||
tmp += default_setting.custom_fields.map{|k,v| ["default@#{k}", v]}
|
||
end
|
||
GreetingCardCategorySetting.all.each do |greeting_card_setting|
|
||
tmp += greeting_card_setting.custom_fields.map{|k,v| ["custom@#{greeting_card_setting.id}@#{k}", v]}
|
||
end
|
||
tmp = tmp.to_h
|
||
list_setting_custom_fields = (tmp.keys & @greeting_card_list_setting.custom_fields)
|
||
end
|
||
@table_ext_fields = list_setting_custom_fields.map{|k| [k,tmp[k]]}.select{|k,v| v}
|
||
# 列表排序
|
||
# debugger
|
||
if filter2("situation").blank? and filter2("identity").blank?
|
||
@greeting_cards = GreetingCardRecord.order_by(sort)
|
||
.with_categories(filters("category"))
|
||
elsif filter2("situation").blank?
|
||
@greeting_cards = GreetingCardRecord.order_by(sort)
|
||
.with_categories(filters("category"))
|
||
.any_in(:identity => filter2("identity"))
|
||
elsif filter2("identity").blank?
|
||
@greeting_cards = GreetingCardRecord.order_by(sort)
|
||
.with_categories(filters("category"))
|
||
.any_in(:situation => filter2("situation"))
|
||
else
|
||
@greeting_cards = GreetingCardRecord.order_by(sort)
|
||
.with_categories(filters("category"))
|
||
.any_in(:identity => filter2("identity"))
|
||
.any_in(:situation => filter2("situation"))
|
||
end
|
||
@greeting_cards = @greeting_cards.where(:category_id=>category_id) if category_id
|
||
@greeting_cards = @greeting_cards.where(:is_hidden.ne=> true)
|
||
# 分頁
|
||
@greeting_cards = search_data(@greeting_cards,[:title]).page(params[:page]).per(10)
|
||
if request.xhr?
|
||
render :partial => "index"
|
||
end
|
||
end
|
||
|
||
def search_tag(tag)
|
||
Tag.find(tag).name_translations{}
|
||
end
|
||
def category_setting
|
||
@default_greeting_card_setting = GreetingCardSetting.first
|
||
@categories = current_user.approved_categories_for_module(@module_app).sort_by{|category| (((@module_app.asc rescue true) ? category.sort_number.to_i : -category.sort_number.to_i) rescue category.id)}
|
||
@category_ids = @categories.collect(&:id)
|
||
@category_titles = @categories.collect{|v| v.title}
|
||
@category_added = GreetingCardCategorySetting.all.asc(:created_at).map{|a| [a.category_id, a]}.to_h
|
||
@category_added_ids = @category_added.map{|k,v| k}
|
||
@url = category_setting_save_admin_greeting_cards_path
|
||
end
|
||
def get_category_setting_partial
|
||
greeting_card_setting = GreetingCardCategorySetting.where(:category_id=>params['id']).first
|
||
@default_greeting_card_setting = GreetingCardSetting.first
|
||
if greeting_card_setting.nil?
|
||
greeting_card_setting = @default_greeting_card_setting
|
||
is_default = true
|
||
else
|
||
is_default = false
|
||
end
|
||
render :partial=> "category_setting_partial", locals: {f: nil, greeting_card_setting: greeting_card_setting, is_default: is_default}
|
||
end
|
||
def get_category_setting_field
|
||
@default_greeting_card_setting = GreetingCardSetting.first
|
||
greeting_card_setting = GreetingCardCategorySetting.find(params['id'])
|
||
render partial: 'category_setting_field',locals: {greeting_card_setting: greeting_card_setting, is_default: false}
|
||
end
|
||
def category_setting_delete
|
||
greeting_card_setting = GreetingCardCategorySetting.find(params['id'])
|
||
greeting_card_setting.destroy
|
||
locale = I18n.locale
|
||
redirect_to "/#{locale}/admin/greeting_cards/category_setting"
|
||
end
|
||
def process_format_text(text,custom_fields)
|
||
customs = text.scan(/<tr(?:(?!<tr).)+\{custom\}(?:(?!<tr).)+<\/tr>/m).uniq
|
||
if customs.length != 0
|
||
custom_exist_nums = []
|
||
custom_exists = text.scan(/{custom\d+}/)
|
||
custom_exists.each do |custom_exist|
|
||
k = custom_exist[6...-1].to_i - 1
|
||
custom_exist_nums << k
|
||
end
|
||
customs.each do |custom|
|
||
tmp = custom_fields.keys.collect.with_index do |k,i|
|
||
if custom_exist_nums.exclude?(i)
|
||
tp = custom.gsub(/{custom}/,"{custom#{i+1}}")
|
||
tp = tp.gsub(/{custom_title}/,"{custom#{i+1}_title}")
|
||
tp
|
||
else
|
||
nil
|
||
end
|
||
end.compact.join
|
||
text = text.gsub(custom,tmp)
|
||
end
|
||
end
|
||
format_texts = text.scan(/{\w+\|*\w+}/).uniq
|
||
format_texts.each do |format_text|
|
||
if format_text[-7...-1] == '_title'
|
||
case format_text[1...-7]
|
||
when /custom\d+/
|
||
i = format_text.scan(/\d+/)[0].to_i - 1
|
||
k = custom_fields.keys[i] rescue nil
|
||
if !k.blank?
|
||
text_tp = custom_fields[k]['field'][I18n.locale] rescue ''
|
||
text = text.gsub(format_text,text_tp)
|
||
end
|
||
when 'title'
|
||
text = text.gsub(format_text,I18n.t('title'))
|
||
when 'greeting_card_time'
|
||
text = text.gsub(format_text,I18n.t('greeting_card.greeting_card_time'))
|
||
when 'category'
|
||
text = text.gsub(format_text,I18n.t('mongoid.attributes.greeting_card_record.greeting_card_category_id'))
|
||
when 'name','sex','mail','phone','appointment','agree_show'
|
||
text = text.gsub(format_text,I18n.t("mongoid.attributes.greeting_card_record.#{format_text[1...-7]}"))
|
||
end
|
||
else
|
||
case format_text[1...-1]
|
||
when 'greeting_card_time'
|
||
text = text.gsub(format_text,@greeting_card_record.created_at.strftime('%Y/%m/%d %H:%M'))
|
||
when 'title','name','sender_mail','recipients','appointment'
|
||
text = text.gsub(format_text,@greeting_card_record.send(format_text[1...-1]).to_s)
|
||
when 'category'
|
||
cat = Category.find(@greeting_card_record.category_id).title rescue ''
|
||
text = text.gsub(format_text,cat)
|
||
when 'name|mask'
|
||
name_tp = @greeting_card_record.name.to_s
|
||
if name_tp.length>1
|
||
if name_tp.strip.match(/^[a-zA-Z]/) # english
|
||
name_tp = name_tp.gsub(/\b\S{2}(\S{1,2})\b/,'**\1').gsub(/\b\S{2}(\S{2,})\S\b/,'**\1*')
|
||
else
|
||
name_tp = name_tp[0] + '*'*(name_tp.length-1)
|
||
end
|
||
end
|
||
text = text.gsub(format_text,name_tp)
|
||
when 'sex'
|
||
sex = @greeting_card_record.sex
|
||
if ['male','female'].include? sex.to_s
|
||
sex = I18n.t("mongoid.attributes.greeting_card_record.#{sex}")
|
||
else
|
||
sex = ''
|
||
end
|
||
text = text.gsub(format_text,sex)
|
||
when 'agree_show'
|
||
if @greeting_card_record.agree_show
|
||
text = text.gsub(format_text,I18n.t('greeting_card.yes'))
|
||
else
|
||
text = text.gsub(format_text,I18n.t('greeting_card.no'))
|
||
end
|
||
when /custom\d+\|format/
|
||
i = format_text.scan(/\d+/)[0].to_i - 1
|
||
k = custom_fields.keys[i] rescue nil
|
||
if !k.blank?
|
||
v = custom_fields[k] rescue {}
|
||
text_tp = Admin::GreetingCardsHelper.show_on_front(k,v,@greeting_card_record,true,true)
|
||
text = text.gsub(format_text,text_tp.to_s)
|
||
end
|
||
when /custom\d+/
|
||
i = format_text.scan(/\d+/)[0].to_i - 1
|
||
k = custom_fields.keys[i] rescue nil
|
||
if !k.blank?
|
||
v = custom_fields[k] rescue {}
|
||
text_tp = Admin::GreetingCardsHelper.show_on_front(k,v,@greeting_card_record,true)
|
||
text = text.gsub(format_text,text_tp.to_s)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
text
|
||
end
|
||
def print
|
||
@layout_design = GreetingCardLayoutDesign.where(category_id: @greeting_card_record.category_id.to_s).first
|
||
@layout_design = GreetingCardLayoutDesign.first if @layout_design.nil?
|
||
@save_name = @layout_design.save_name rescue ''
|
||
@print_text = @layout_design.print_format rescue ''
|
||
@print_text = "<style>img{width: 100%;}</style>"+ @print_text
|
||
greeting_card_setting = GreetingCardCategorySetting.where(category_id: @greeting_card_record.category_id.to_s, :use_default.ne=>true).first
|
||
greeting_card_setting = GreetingCardSetting.first if greeting_card_setting.nil?
|
||
custom_fields = greeting_card_setting.custom_fields
|
||
@print_text = process_format_text(@print_text,custom_fields)
|
||
@save_name = process_format_text(@save_name,custom_fields)
|
||
end
|
||
def edit
|
||
@greeting_card_setting = GreetingCardCategorySetting.where(category_id: @greeting_card_record.category_id.to_s, :use_default.ne=>true).first
|
||
@greeting_card_setting = GreetingCardSetting.first if @greeting_card_setting.nil?
|
||
@url = admin_greeting_card_path(@greeting_card_record)
|
||
end
|
||
|
||
def batch_modify_status
|
||
GreetingCardRecord.where(:id.in=>params[:ids]).update_all(:situation=>params[:status_key])
|
||
render :body => nil, :status => 204
|
||
end
|
||
|
||
def delete
|
||
GreetingCardRecord.where(:id.in=>params[:ids]).destroy
|
||
render :body => nil, :status => 204
|
||
end
|
||
|
||
def destroy
|
||
locale = I18n.locale
|
||
@greeting_card_record.destroy
|
||
redirect_to admin_greeting_cards_path(:locale=>locale)
|
||
end
|
||
|
||
def update
|
||
locale = I18n.locale
|
||
temp_params = params.require(:greeting_card_record).permit!
|
||
|
||
all_to_save = []
|
||
greeting_card_setting = GreetingCardCategorySetting.where(category_id: params['greeting_card_record']['category_id']).first
|
||
if greeting_card_setting.nil?
|
||
greeting_card_setting = GreetingCardSetting.first
|
||
end
|
||
if temp_params['custom_values'].nil?
|
||
temp_params['custom_values'] = {}
|
||
end
|
||
greeting_card_setting.custom_fields.select{|k,v| v['type']=='file' || v['type']=='image'}.each do |k,v|
|
||
file = temp_params['custom_values'][k] rescue nil
|
||
if !file.blank?
|
||
if v['type']=='image'
|
||
all_to_save += [[k,GreetingCardImage.new(file: file,greeting_card_record_id: @greeting_card_record.id)]]
|
||
else
|
||
all_to_save += [[k,GreetingCardFile.new(file: file,greeting_card_record_id: @greeting_card_record.id)]]
|
||
end
|
||
else
|
||
temp_params['custom_values'][k] = @greeting_card_record.custom_values[k] rescue nil
|
||
end
|
||
end
|
||
temp_params['custom_values'] = @greeting_card_record.custom_values.merge(temp_params['custom_values'])
|
||
flag = @greeting_card_record.save
|
||
if flag
|
||
all_to_save.each do |to_save|
|
||
flag = flag && to_save[1].save
|
||
temp_params['custom_values'][to_save[0]] = [temp_params['custom_values'][to_save[0]].original_filename ,to_save[1].file.url]
|
||
end
|
||
end
|
||
temp_params = temp_params.merge({reviewer: current_user.member_profile, review_time: DateTime.now, user: current_user})
|
||
@greeting_card_record.update_attributes(temp_params)
|
||
if @greeting_card_record.send_email?
|
||
build_email(@greeting_card_record)
|
||
end
|
||
|
||
redirect_to admin_greeting_cards_path(:locale=>locale), notice: t('greeting_card.reply_success')
|
||
end
|
||
|
||
def build_email(email_er)
|
||
email = Email.new
|
||
email.save
|
||
email_er.email_id = email.id
|
||
email_er.save
|
||
|
||
@group_mail = email_er.mail
|
||
@mail_sentdate = DateTime.now
|
||
|
||
site = Site.first
|
||
mail_from = site.title_translations[site['default_locale']]
|
||
|
||
new_history = email_er.new_history
|
||
host_url = Site.first.root_url rescue "http://"
|
||
if host_url == "http://"
|
||
host_url = request.protocol + request.host_with_port
|
||
end
|
||
|
||
email_er.email.update_attributes(
|
||
:mail_lang=> site['default_locale'],
|
||
:create_user=>current_user,
|
||
:mail_sentdate=>@mail_sentdate,
|
||
:module_app=>@module_app,
|
||
:mail_to=>@group_mail,
|
||
:mail_subject=>mail_from+" #{t('greeting_card.reply')}:",
|
||
:template=>'admin/greeting_cards/email',
|
||
:template_data=>{
|
||
"host_url" => host_url,
|
||
"reply" => email_er.reply,
|
||
"attachment" => (new_history ? new_history.file.url : nil)
|
||
}
|
||
)
|
||
end
|
||
|
||
def export
|
||
|
||
end
|
||
|
||
def do_export
|
||
def process_trans(trans)
|
||
trans.collect{|k,v| v if !v.blank?}.compact.uniq.join('/')
|
||
end
|
||
def get_fields_with_key(s)
|
||
fields_with_key = {}
|
||
fields_with_key['default_values'] = s.default_setting.collect{|k,v| [k, process_trans(s.field_name_translations(k))] if v && !['greeting_card_category_id','recaptcha'].include?(k)}.compact
|
||
fields_with_key['default_values'] = [['greeting_card_category_id', process_trans(s.field_name_translations('greeting_card_category_id'))]] + [['situation', process_trans(I18n.available_locales.map{|v| [v.to_s, I18n.with_locale(v){I18n.t('greeting_card.situation')}]}.to_h)]] + fields_with_key['default_values']
|
||
fields_with_key['default_values'] = fields_with_key['default_values'].to_h
|
||
fields_with_key['custom_values'] = s.custom_fields.collect{|k, field_setting| [k, process_trans(field_setting['field'])]}.to_h
|
||
fields_with_key
|
||
end
|
||
Rails.application.config.mongoid.use_activesupport_time_zone = true
|
||
date_start = "#{params[:export]['start(1i)']}-#{params[:export]['start(2i)']}-#{params[:export]['start(3i)']}"
|
||
date_end = "#{params[:export]['end(1i)']}-#{params[:export]['end(2i)']}-#{params[:export]['end(3i)']}"
|
||
greeting_card_records = GreetingCardRecord.where(:created_at.gte => date_start.to_datetime, :created_at.lte => date_end.to_datetime)
|
||
categories = Category.where(:id.in => greeting_card_records.collect(&:category_id).uniq).to_a
|
||
greeting_card_default_setting = GreetingCardSetting.first()
|
||
greeting_card_settings = GreetingCardCategorySetting.where(:category_id.in => categories.collect(&:id)).collect{|s| [BSON::ObjectId(s.category_id), s]}.to_h
|
||
greeting_card_category_settings = {}
|
||
fields_with_key_group = {}
|
||
categories.each do |c|
|
||
s = greeting_card_settings.fetch(c.id, greeting_card_default_setting)
|
||
greeting_card_category_settings[c.id] = s
|
||
fields_with_key_group[c.id] = get_fields_with_key(s)
|
||
end
|
||
greeting_card_category_settings[nil] = greeting_card_default_setting
|
||
fields_with_key_group[nil] = get_fields_with_key(greeting_card_default_setting)
|
||
situations = GreetingCardTicketStatus.all.collect{|situation| [situation.key, situation.get_title_translations]}.to_h
|
||
render xlsx: 'do_export.xlsx',
|
||
handlers: ['axlsx'],
|
||
filename: "Questions-#{date_start}-#{date_end}.xlsx",
|
||
locals: {
|
||
:greeting_card_category_settings => greeting_card_category_settings,
|
||
:fields_with_key_group => fields_with_key_group,
|
||
:categories => categories.collect{|c| [c.id, c]}.to_h,
|
||
:greeting_card_records => greeting_card_records,
|
||
:situations => situations
|
||
}
|
||
end
|
||
|
||
def set_greeting_cardquestion
|
||
@greeting_card_record = GreetingCardRecord.find(params[:id])
|
||
end
|
||
def order_fields
|
||
greeting_card_setting = GreetingCardCategorySetting.where(:category_id=>@category_id).first
|
||
@disp_fields_infos = GreetingCardSetting.get_disp_fields_infos(false, greeting_card_setting, (greeting_card_setting ? true : false))
|
||
end
|
||
def prepare_category_select
|
||
@cats_relations = get_categories_info_for_greeting_card
|
||
@category_id = (params[:category] || @cats_relations[0][0] rescue nil)
|
||
end
|
||
def update_order_fields
|
||
greeting_card_setting = GreetingCardCategorySetting.where(:category_id=>params[:category]).first
|
||
use_default = greeting_card_setting && greeting_card_setting.use_default
|
||
sort_number = params[:sort_number].map{|k,v| [k,v.to_i]}.to_h
|
||
if params[:category].present?
|
||
if greeting_card_setting.nil?
|
||
use_default = true
|
||
default_setting = GreetingCardSetting.first
|
||
greeting_card_setting = GreetingCardCategorySetting.create(category_id: params[:category])
|
||
p1 = default_setting.get_attrs
|
||
p1['need_check_customs'] = []
|
||
p1['agree_customs'] = p1['custom_fields'].keys rescue []
|
||
p1['reject_customs'] = []
|
||
p1['custom_fields'] = p1['custom_fields'].map{|k,v| ["default@#{k}", v]}.to_h rescue {}
|
||
greeting_card_setting.update_attributes(p1)
|
||
greeting_card_setting.update(:use_default => use_default)
|
||
greeting_card_setting_index = GreetingCardCategorySettingIndex.where(category_id: params[:category]).first
|
||
greeting_card_setting_index = GreetingCardCategorySettingIndex.create(category_id: params[:category]) if greeting_card_setting_index.nil?
|
||
greeting_card_setting_index.key = default_setting.custom_fields.keys[-1].to_i rescue 0
|
||
greeting_card_setting_index.save
|
||
end
|
||
if use_default
|
||
greeting_card_setting.update(:default_sort_number=> sort_number)
|
||
else
|
||
sort_number_was = GreetingCardSetting.get_sort_number_only(false, greeting_card_setting, true).merge(greeting_card_setting.sort_number.to_h)
|
||
greeting_card_setting.update(:sort_number=> sort_number)
|
||
default_greeting_card_setting = GreetingCardSetting.first
|
||
last_fields = ["recaptcha", "usage_rule", "agree_show", "agree_usage"]
|
||
default_sort_number = GreetingCardSetting.get_sort_number_only(false, default_greeting_card_setting, true).select{|k,v| k.exclude?('@') && last_fields.exclude?(k)}.map.with_index{|(k,v), i| [k, i]}.to_h.merge(default_greeting_card_setting.sort_number)
|
||
greeting_card_setting_id = greeting_card_setting.id.to_s
|
||
sort_number_changed = (sort_number.map.with_index{|(k,v), i| [k,i]} - sort_number_was.map.with_index{|(k,v), i| [k,i]}).to_h
|
||
part_sort_number = sort_number_changed.select{|k,v| k.start_with?('default@')}.map{|k,v| tmp=k.split('@')[1..-1].join('@');[(tmp.start_with?('default@') ? tmp : "custom@#{greeting_card_setting_id}@#{tmp}"), v]}.to_h
|
||
intersect_keys = part_sort_number.keys & default_sort_number.keys
|
||
non_intersect_keys = (part_sort_number.keys - default_sort_number.keys).select{|k| k.exclude?('default@')}
|
||
if intersect_keys.count != 0
|
||
org_order = intersect_keys.map{|k| [k, default_sort_number[k]]}.sort_by{|k,v| v}.to_h
|
||
default_sort_number = default_sort_number.merge(org_order.sort_by{|k, v| part_sort_number[k]}.map{|k,v| k}.zip(org_order.values).to_h)
|
||
end
|
||
preserve_count = GreetingCardSetting::All_default_fields.count
|
||
if non_intersect_keys.count != 0
|
||
max_sort_number = default_sort_number.map{|k,v| v.to_i}.max.to_i
|
||
max_sort_number += 1
|
||
max_sort_number += preserve_count
|
||
part_sort_number = non_intersect_keys.map.with_index{|(k,v), i| [k, max_sort_number + i]}
|
||
default_sort_number = default_sort_number.merge(part_sort_number.to_h)
|
||
end
|
||
default_greeting_card_setting.update(:sort_number=>default_sort_number)
|
||
end
|
||
else
|
||
greeting_card_setting = GreetingCardSetting.first
|
||
original_sort_info = GreetingCardSetting.get_sort_number_only(false, greeting_card_setting, true)
|
||
sort_number_was = original_sort_info.merge(greeting_card_setting.sort_number.to_h)
|
||
sort_number_changed = (sort_number.map.with_index{|(k,v), i| [k,i]} - sort_number_was.map.with_index{|(k,v), i| [k,i]}).to_h
|
||
greeting_card_setting.update(:sort_number=>sort_number)
|
||
unless use_default
|
||
default_customs_sort_number = sort_number_changed.select{|k, v| k.start_with?('default@')}.map{|k,v| ["default@#{k}",v]}
|
||
custom_sort_number = sort_number.select{|k, v| k.start_with?('custom@')}
|
||
all_custom_sort_numbers = custom_sort_number.group_by{|k, v| k.split('@')[1]}
|
||
preserve_count = GreetingCardSetting::All_default_fields.count
|
||
last_fields = ["recaptcha", "usage_rule", "agree_show", "agree_usage"]
|
||
all_custom_sort_numbers.each do |greeting_card_category_setting_id, part_sort_number|
|
||
greeting_card_setting = GreetingCardCategorySetting.find(greeting_card_category_setting_id) rescue nil
|
||
if greeting_card_setting
|
||
sort_number = GreetingCardSetting.get_sort_number_only(false, greeting_card_setting, true).select{|k,v| last_fields.exclude?(k)}.map.with_index{|(k,v), i| [k, i]}.to_h.merge(greeting_card_setting.sort_number)
|
||
tmp_default_customs_sort_number = default_customs_sort_number.select{|k, v| greeting_card_setting.agree_customs.include?(k.split('@')[-1])}
|
||
part_sort_number = (part_sort_number.map{|k,v| ["default@#{k.split('@')[-1]}", v]} + tmp_default_customs_sort_number).to_h
|
||
intersect_keys = part_sort_number.keys & sort_number.keys
|
||
non_intersect_keys = part_sort_number.keys - sort_number.keys
|
||
if intersect_keys.count != 0
|
||
org_order = intersect_keys.map{|k| [k, sort_number[k]]}.sort_by{|k,v| v}.to_h
|
||
sort_number = sort_number.merge(org_order.sort_by{|k, v| part_sort_number[k]}.map{|k,v| k}.zip(org_order.values).to_h)
|
||
end
|
||
if non_intersect_keys.count != 0
|
||
max_sort_number = sort_number.map{|k,v| v.to_i}.max.to_i
|
||
max_sort_number += 1
|
||
max_sort_number += preserve_count
|
||
part_sort_number = non_intersect_keys.map.with_index{|(k,v), i| [k, max_sort_number + i]}
|
||
sort_number = sort_number.merge(part_sort_number.to_h)
|
||
end
|
||
greeting_card_setting.update(:sort_number=>sort_number)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
render :json => {:success=>true}
|
||
end
|
||
def ticket_status
|
||
@ticket_statuses = GreetingCardTicketStatus.all
|
||
if request.xhr?
|
||
render 'ticket_status', :layout => false
|
||
end
|
||
end
|
||
def get_ticket_status
|
||
ticket_status = GreetingCardTicketStatus.where(:id=>params[:id]).first
|
||
render :json => {
|
||
"id"=>params[:id],
|
||
"title_translations"=> (ticket_status ? ticket_status.get_title_translations : {})
|
||
}
|
||
end
|
||
def update_ticket_status
|
||
if params[:id].blank?
|
||
ticket_status = GreetingCardTicketStatus.new
|
||
else
|
||
ticket_status = GreetingCardTicketStatus.where(:id=>params[:id]).first
|
||
end
|
||
ticket_status.update_attributes(params.require(:greeting_card_ticket_status).permit!)
|
||
render :json => {:success=>true}
|
||
end
|
||
def delete_ticket_status
|
||
ticket_status = GreetingCardTicketStatus.where(:id=>params[:id]).first
|
||
unless ticket_status.is_default
|
||
ticket_status.destroy
|
||
end
|
||
render :json => {:success=>true}
|
||
end
|
||
private
|
||
def greeting_card_setting_params(greeting_card_setting,collection_name, except_customs=[])
|
||
param = params.require(collection_name).except("id").permit!
|
||
if param['default_setting']
|
||
param_clone = param.clone
|
||
param_clone['default_setting'].each { |k, v| param_clone['default_setting'][k] = (v == 'true'? true : false) if param_clone['default_setting'][k].class==String}
|
||
param_clone['default_setting_required'].each { |k, v| param_clone['default_setting_required'][k] = (v == 'true'? true : false) if param_clone['default_setting_required'][k].class==String}
|
||
param_clone.delete('custom_fields')
|
||
param_clone.delete('email_regex') unless collection_name == 'greeting_card_setting'
|
||
greeting_card_setting.custom_fields_will_change!
|
||
custom_fields = params['not_clone_attrs'] ? {} : greeting_card_setting['custom_fields'].clone
|
||
params_custom_fields = (params.require(collection_name).require('custom_fields') rescue {})
|
||
params_custom_fields.each do |k,v|
|
||
next if except_customs.include?(k.to_s)
|
||
custom_fields[k] = v
|
||
end
|
||
field_to_delete = params['delete_field'].to_s.split(',').select{|v| !v.empty?}
|
||
field_to_delete.each do |k|
|
||
if custom_fields.keys.include? k
|
||
custom_fields[k]['delete'] = true
|
||
end
|
||
end
|
||
param_clone.merge({"custom_fields"=> custom_fields})
|
||
else
|
||
param
|
||
end
|
||
end
|
||
def greeting_card_thead(field, trans,center=false)
|
||
sort = field.to_s.include?('.') ? field.to_s.split('.')[1] : field.to_s
|
||
active = params[:sort].eql? sort
|
||
order = active ? (["asc", "desc"]-[params[:order]]).first : "asc"
|
||
arrow = (order.eql? "desc") ? "<b class='icons-arrow-up-3'></b>" : "<b class='icons-arrow-down-4'></b>"
|
||
klass = field.eql?(:title) ? "span5" : "span2"
|
||
|
||
th_data = "<a href='?sort=#{sort}&order=#{order}'>#{trans} #{active ? arrow : ""}</a>"
|
||
|
||
"<th class='#{klass} #{active ? "active" : ""}' style='#{center ? "text-align:center" : ""}'>#{th_data}</th>".html_safe
|
||
end
|
||
|
||
end
|