module Admin::PluginTemplatesHelper include OrbitBackendHelper 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 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 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) 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 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 [] data << d end return data end 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 case type 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 = [] end finaldata = [] role = Role.find(role) rescue nil mps = [] if !role.nil? mps = role.member_profile_ids end jls.each do |jl| data = {} data["name"] = jl.send(main_field_name) rescue "N/A" data["data"] = {} 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 end finaldata << data end data = {"name" => "N/A", "data" => {}} 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") case type 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) end data["data"][current_analysis_field_name.to_s] = t end finaldata << data finaldata end 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 end