2021-02-27 04:19:24 +00:00
|
|
|
module Admin::PluginTemplatesHelper
|
2021-03-08 06:54:52 +00:00
|
|
|
include OrbitBackendHelper
|
2021-03-03 07:44:42 +00:00
|
|
|
include OrbitFormHelper
|
|
|
|
alias :org_datetime_picker :datetime_picker
|
|
|
|
def datetime_picker(*arg,**args)
|
|
|
|
org_datetime_picker(arg,args)
|
|
|
|
end
|
|
|
|
def time_iterate(start_time, end_time, step, &block)
|
|
|
|
begin
|
|
|
|
yield(start_time)
|
|
|
|
end while (start_time += step) <= end_time
|
|
|
|
end
|
|
|
|
def parse_time(time_str,timezone="+08:00")
|
|
|
|
DateTime.parse("0000-01-01 " + time_str + timezone)
|
|
|
|
end
|
2021-02-27 04:19:24 +00:00
|
|
|
def page_for_plugin_template(plugin_template_object)
|
|
|
|
page = Page.where(:module=>"personal_plugin_template").first
|
|
|
|
("/#{I18n.locale}"+page.url+'/'+plugin_template_object.to_param).gsub('//','/') rescue "#"
|
|
|
|
end
|
|
|
|
|
2021-03-03 07:44:42 +00:00
|
|
|
def get_data_for_excel(analysis_field_name_start,analysis_field_name_end,timezone)
|
|
|
|
analysis_field_name_start = parse_date_time_field("analysis_field_name",analysis_field_name_start,timezone)
|
|
|
|
analysis_field_name_end = parse_date_time_field("analysis_field_name",analysis_field_name_end,timezone)
|
2021-02-27 04:19:24 +00:00
|
|
|
data = []
|
|
|
|
roles = Role.where(:disabled => false, :title.ne => "", :title.ne => nil).asc(:key)
|
|
|
|
roles.each do |role|
|
|
|
|
d = {}
|
|
|
|
d["name"] = role.title
|
|
|
|
mps = role.member_profile_ids
|
2021-03-03 07:44:42 +00:00
|
|
|
d["data"] = PluginTemplate.where(:analysis_field_name.gte => analysis_field_name_start, :analysis_field_name.lte => analysis_field_name_end, :member_profile_id.in => mps) rescue []
|
2021-02-27 04:19:24 +00:00
|
|
|
data << d
|
|
|
|
end
|
|
|
|
return data
|
|
|
|
end
|
|
|
|
|
2021-03-03 07:44:42 +00:00
|
|
|
def get_chart_data(analysis_field_name_start,analysis_field_name_end,role,type,timezone)
|
|
|
|
analysis_field_name_start = parse_date_time_field("analysis_field_name",analysis_field_name_start,timezone)
|
|
|
|
analysis_field_name_end = parse_date_time_field("analysis_field_name",analysis_field_name_end,timezone)
|
|
|
|
main_field_name = ""
|
|
|
|
time_fields = time_fields_text
|
|
|
|
max_iterate = 20
|
|
|
|
iterate_step = iterate_step_text
|
|
|
|
iterate_count = ((analysis_field_name_end - analysis_field_name_start) / iterate_step * 1.day.second).ceil
|
|
|
|
if iterate_count > max_iterate
|
|
|
|
iterate_step = (iterate_step * (iterate_count / max_iterate.to_f).ceil).second
|
|
|
|
end
|
2021-02-27 04:19:24 +00:00
|
|
|
case type
|
2021-03-03 07:44:42 +00:00
|
|
|
when "default"
|
|
|
|
jls = []
|
|
|
|
parse_again_start
|
|
|
|
when "plugin_template_related"
|
|
|
|
jls = PluginTemplateRelated.all
|
|
|
|
main_field_name = "plugin_template_related_main_field"
|
|
|
|
parse_again_end
|
|
|
|
else
|
|
|
|
jls = []
|
2021-02-27 04:19:24 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
finaldata = []
|
|
|
|
role = Role.find(role) rescue nil
|
|
|
|
mps = []
|
|
|
|
if !role.nil?
|
|
|
|
mps = role.member_profile_ids
|
|
|
|
end
|
|
|
|
jls.each do |jl|
|
|
|
|
data = {}
|
2021-03-03 07:44:42 +00:00
|
|
|
data["name"] = jl.send(main_field_name) rescue "N/A"
|
2021-02-27 04:19:24 +00:00
|
|
|
data["data"] = {}
|
2021-03-03 07:44:42 +00:00
|
|
|
time_iterate(analysis_field_name_start,analysis_field_name_end,iterate_step) do |analysis_field_name|
|
|
|
|
next_analysis_field_name = analysis_field_name + iterate_step
|
|
|
|
current_analysis_field_name = analysis_field_name
|
|
|
|
current_analysis_field_name = analysis_field_name.strftime("%H:%M") if time_fields.include?("analysis_field_name")
|
|
|
|
next_analysis_field_name = next_analysis_field_name.strftime("%H:%M") if time_fields.include?("analysis_field_name")
|
|
|
|
t = jl.plugin_templates.where(:analysis_field_name.gte => current_analysis_field_name, :analysis_field_name.lt => next_analysis_field_name, :member_profile_id.in => mps).count rescue 0
|
|
|
|
if current_analysis_field_name.class == DateTime
|
|
|
|
current_analysis_field_name = display_date_time(current_analysis_field_name,timezone,iterate_step)
|
|
|
|
end
|
|
|
|
data["data"][current_analysis_field_name.to_s] = t
|
2021-02-27 04:19:24 +00:00
|
|
|
end
|
|
|
|
finaldata << data
|
|
|
|
end
|
|
|
|
data = {"name" => "N/A", "data" => {}}
|
2021-03-03 07:44:42 +00:00
|
|
|
time_iterate(analysis_field_name_start,analysis_field_name_end,iterate_step) do |analysis_field_name|
|
|
|
|
next_analysis_field_name = analysis_field_name + iterate_step
|
|
|
|
current_analysis_field_name = analysis_field_name
|
|
|
|
current_analysis_field_name = analysis_field_name.strftime("%H:%M") if time_fields.include?("analysis_field_name")
|
|
|
|
next_analysis_field_name = next_analysis_field_name.strftime("%H:%M") if time_fields.include?("analysis_field_name")
|
2021-02-27 04:19:24 +00:00
|
|
|
case type
|
2021-03-03 07:44:42 +00:00
|
|
|
when "default"
|
|
|
|
t = PluginTemplate.where(:analysis_field_name.gte => current_analysis_field_name, :analysis_field_name.lt => next_analysis_field_name, :member_profile_id.in => mps).count rescue 0
|
|
|
|
parse_again_start
|
|
|
|
when "plugin_template_related"
|
|
|
|
t = PluginTemplate.where(:analysis_field_name.gte => current_analysis_field_name, :analysis_field_name.lt => next_analysis_field_name, :member_profile_id.in => mps, :plugin_template_related_id => nil).count rescue 0
|
|
|
|
parse_again_end
|
|
|
|
else
|
|
|
|
t = PluginTemplate.where(:analysis_field_name.gte => current_analysis_field_name, :analysis_field_name.lt => next_analysis_field_name, :member_profile_id.in => mps).count rescue 0
|
|
|
|
end
|
|
|
|
current_analysis_field_name = current_analysis_field_name.new_offset(timezone) if current_analysis_field_name.class == DateTime
|
|
|
|
if current_analysis_field_name.class == DateTime
|
|
|
|
current_analysis_field_name = display_date_time(current_analysis_field_name,timezone,iterate_step)
|
2021-02-27 04:19:24 +00:00
|
|
|
end
|
2021-03-03 07:44:42 +00:00
|
|
|
data["data"][current_analysis_field_name.to_s] = t
|
2021-02-27 04:19:24 +00:00
|
|
|
end
|
|
|
|
finaldata << data
|
|
|
|
finaldata
|
|
|
|
end
|
2021-03-03 07:44:42 +00:00
|
|
|
def parse_date_time_field(field,value,timezone="+08:00")
|
|
|
|
time_fields = time_fields_text
|
|
|
|
if time_fields.include?(field)
|
|
|
|
parse_time(value,timezone)
|
|
|
|
elsif PluginTemplate.fields[field].type == Integer
|
|
|
|
value.to_i
|
|
|
|
elsif PluginTemplate.fields[field].type == Date
|
|
|
|
Date.parse(value)
|
|
|
|
else
|
|
|
|
DateTime.parse(value+timezone).utc
|
|
|
|
end
|
|
|
|
end
|
|
|
|
def display_date_time(date_time,timezone,iterate_step)
|
|
|
|
date_time = date_time.new_offset(timezone)
|
|
|
|
if iterate_step > 1.year
|
|
|
|
date_time = date_time.strftime("%Y")
|
|
|
|
elsif iterate_step > 1.month
|
|
|
|
date_time = date_time.strftime("%Y/%m")
|
|
|
|
elsif iterate_step > 1.day
|
|
|
|
date_time = date_time.strftime("%Y/%m/%d")
|
|
|
|
else
|
|
|
|
date_time = date_time.strftime("%Y/%m/%d %H:%M")
|
|
|
|
end
|
|
|
|
return date_time
|
|
|
|
end
|
2021-02-27 04:19:24 +00:00
|
|
|
end
|