Class: Ecom::Core::CrewTime
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Ecom::Core::CrewTime
- Defined in:
- app/models/ecom/core/crew_time.rb
Constant Summary collapse
- MORNING =
Time Ranges
'Morning'.freeze
- AFTERNOON =
'Afternoon'.freeze
- BOTH =
'Both'.freeze
- TIME_RANGE =
{ MORNING => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('9:00 AM') }, AFTERNOON => { start: Time.zone.parse('10:00 AM'), end: Time.zone.parse('2:00 PM') }, BOTH => {start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('2:00 PM')} }.freeze
Instance Method Summary collapse
- #calculate_hours ⇒ Object
- #calculate_total ⇒ Object
-
#compute_hours ⇒ Object
A method to adjust time ranges by trimming any time value outside of the defined morning and afternoon ranges.
- #compute_total_for_entry ⇒ Object
-
#find_range(start, finish) ⇒ Object
A method to check if checkin and checkout range falls in the morning, afternoon, or both.
Instance Method Details
#calculate_hours ⇒ Object
30 31 32 33 34 35 36 |
# File 'app/models/ecom/core/crew_time.rb', line 30 def calculate_hours self.hours = if checkout_time.nil? || checkin_time.nil? 0 else compute_hours end end |
#calculate_total ⇒ Object
38 39 40 |
# File 'app/models/ecom/core/crew_time.rb', line 38 def calculate_total compute_total_for_entry if saved_change_to_hours? end |
#compute_hours ⇒ Object
A method to adjust time ranges by trimming any time value outside of the defined morning and afternoon ranges
64 65 66 67 68 69 70 71 72 73 74 |
# File 'app/models/ecom/core/crew_time.rb', line 64 def compute_hours # Reparse time to avoid errors caused by date differences start = Time.zone.parse(checkin_time.strftime('%I:%M%p')) finish = Time.zone.parse(checkout_time.strftime('%I:%M%p')) range = find_range(start, finish) left = start.before?(TIME_RANGE[range][:start]) ? TIME_RANGE[range][:start] : start right = finish.after?(TIME_RANGE[range][:end]) ? TIME_RANGE[range][:end] : finish time = (right - left) / 1.hour time -= 1 if range == BOTH time end |
#compute_total_for_entry ⇒ Object
42 43 44 45 46 47 48 |
# File 'app/models/ecom/core/crew_time.rb', line 42 def compute_total_for_entry attendance_sheet_entry.total_hours = Ecom::Core::CrewTime.where( attendance_sheet_entry: attendance_sheet_entry, revised: false ).sum(:hours) attendance_sheet_entry.save end |
#find_range(start, finish) ⇒ Object
A method to check if checkin and checkout range falls in the morning, afternoon, or both.
52 53 54 55 56 57 58 59 60 |
# File 'app/models/ecom/core/crew_time.rb', line 52 def find_range(start, finish) if start.before?(TIME_RANGE[MORNING][:end]) && finish.before?(TIME_RANGE[AFTERNOON][:start]) MORNING elsif start.after?(TIME_RANGE[MORNING][:end]) && finish.after?(TIME_RANGE[AFTERNOON][:start]) AFTERNOON else BOTH end end |