tomekfranek
tomekfranek

Reputation: 7099

How to create multiple records for each day in given quarter?

I have Shift model.

--- !ruby/object:Shift
attributes:
  id:
  starts_at:
  ends_at:

I want to add singelton method to create shifts for each day in given quarter.

class Shift

  def self.open_quarter(number, year)
    starts_at = "08:00"
    ends_at = "08:00"

    ...
  end
end

How to implement that in best way? I want that each shifts starts_at 8.00 am and finish 8.00 am on next day.

Upvotes: 0

Views: 56

Answers (2)

tihom
tihom

Reputation: 8003

def self.open_quarter(number, year)   
 start_time = Time.new(year, number*3 - 2, 1, 8) 

  while start_time.month <= number*3 && start_time.year == year
      Shift.create{starts_at: start_time, ends_at: start_time += 24.hours}
  end
end

make sure to set the correct timezone when using Time.new. Default is current timezone (see docs). You can also use Time.utc.

Upvotes: 1

Arjan
Arjan

Reputation: 6274

def self.open_quarter(number, year)
  starts_at = "08:00 am"
  ends_at = "08:00 pm"

  quarter_start = Date.new(year, (number * 3)).beginning_of_quarter
  quarter_end = Date.new(year, (number * 3)).end_of_quarter

  (quarter_end - quarter_start).to_i.times do |n|
    start_shift = "#{(quarter_start + n).to_s} #{starts_at}".to_datetime
    end_shift = "#{(quarter_start + n).to_s} #{ends_at}".to_datetime

    Shift.create(starts_at: start_shift, ends_at: end_shift)
  end
end

Upvotes: 1

Related Questions