app/helpers/report_helper/timer.rb
module ReportHelper
TIMER_DAYS = [
[N_("Day"), "1"],
[N_("2 Days"), "2"],
[N_("3 Days"), "3"],
[N_("4 Days"), "4"],
[N_("5 Days"), "5"],
[N_("6 Days"), "6"],
].freeze
TIMER_HOURS = [
[N_("Hour"), "1"],
[N_("2 Hours"), "2"],
[N_("3 Hours"), "3"],
[N_("4 Hours"), "4"],
[N_("6 Hours"), "6"],
[N_("8 Hours"), "8"],
[N_("12 Hours"), "12"],
].freeze
TIMER_WEEKS = [
[N_("Week"), "1"],
[N_("2 Weeks"), "2"],
[N_("3 Weeks"), "3"],
[N_("4 Weeks"), "4"],
].freeze
TIMER_MONTHS = [
[N_("Month"), "1"],
[N_("2 Months"), "2"],
[N_("3 Months"), "3"],
[N_("4 Months"), "4"],
[N_("5 Months"), "5"],
[N_("6 Months"), "6"],
].freeze
Timer = Struct.new(
:typ,
:months,
:weeks,
:days,
:hours,
:start_date,
:start_hour,
:start_min,
) do
def initialize(typ = nil, months = 1, weeks = 1, days = 1, hours = 1, start_date = nil, start_hour = '00',
start_min = '00')
super
end
def update_from_hash(params)
%w[typ moths weeks days hours].each do |i|
self[i] = params[:"timer_#{i}"] if params[:"timer_#{i}"]
end
%w[start_hour start_min].each do |i|
self[i] = params[i.to_sym] if params[i.to_sym]
end
self.start_date = params[:miq_date_1] if params[:miq_date_1]
if params[:time_zone]
t = Time.now.in_time_zone(params[:timezone]) + 1.day # Default date/time to tomorrow in selected time zone
self.start_date = "#{t.month}/#{t.day}/#{t.year}" # Reset the start date
self.start_hour = '00' # Reset time to midnight
self.start_min = '00'
end
end
def update_from_miq_schedule(run_at, timezone)
self.typ = run_at[:interval][:unit].titleize
self.months = run_at[:interval][:value] if run_at[:interval][:unit] == 'monthly'
self.weeks = run_at[:interval][:value] if run_at[:interval][:unit] == 'weekly'
self.days = run_at[:interval][:value] if run_at[:interval][:unit] == 'daily'
self.hours = run_at[:interval][:value] if run_at[:interval][:unit] == 'hourly'
t = run_at[:start_time].utc.in_time_zone(timezone)
self.start_hour = t.strftime("%H")
self.start_min = t.strftime("%M")
self.start_date = "#{t.month}/#{t.day}/#{t.year}"
end
def flush_to_miq_schedule(run_at, timezone)
run_at ||= {}
run_at[:start_time] = "#{start_time_in_utc(timezone)} Z"
run_at[:tz] = timezone
run_at[:interval] ||= {}
run_at[:interval][:unit] = typ.downcase
case typ.downcase
when 'monthly' then run_at[:interval][:value] = months
when 'weekly' then run_at[:interval][:value] = weeks
when 'daily' then run_at[:interval][:value] = days
when 'hourly' then run_at[:interval][:value] = hours
else run_at[:interval].delete(:value)
end
run_at
end
private
def start_time_in_utc(timezone)
create_time_in_utc("#{start_date} #{start_hour}:#{start_min}:00", timezone)
end
end
class Timer
include Mixins::TimeHelper
end
end