ecom_core 1.2.17 → 1.2.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4ad578f6c6d7aece965edd8d3ad059afb16ff3f90445ba63f55c6afdc530b8f
4
- data.tar.gz: a31af1754f7ccdc5669a1fe5747745bb8d98d0e82371db261bee62cd08d50f38
3
+ metadata.gz: faf0a77147b59f982b4e26d123d93a93f7f51daa2f0d47b453df22ceac084f3e
4
+ data.tar.gz: c7faa1131252a81ac43cbdd8b848c3f66f2db84cf09e64296de3fd7b490e116e
5
5
  SHA512:
6
- metadata.gz: 7720605e3fa55dd2ff8d12358a5ece0c11f11c47647b4ac1b9be6ca35d308592d3e2ffef33c9beea298c149f5abb301f0612a194934539ab357c78699529d3cb
7
- data.tar.gz: 4c1a5cf5b05c9a8f247fb0b457b9904b9e98bb884a0b5e8a8da38b8268ae7177f631c51ab905dc947042f7117b1f8bf1525a1b92b76d3b1423c24ee157f0af5f
6
+ metadata.gz: a83643810ff0d997045c7efa28da6a81f2b7c2f9b5a9cc13ed556735ab09559e6e55133f6e9412add7f8d597f1dffe705e195cfe84fa3c09ff0c4ceae5857f29
7
+ data.tar.gz: b234a2bbcaad56cf90d94d974f0d611497dd9202056cbb3103775d502a156783a52e87d04afd0373bf9c3dc852fc20a395fe0d4f4ce0bdd4fcdb3c8ac796f356
@@ -2,15 +2,15 @@ module Ecom
2
2
  module Core
3
3
  class CrewTime < ApplicationRecord
4
4
  # Time Ranges
5
- MORNING = 'Morning'.freeze
6
- AFTERNOON = 'Afternoon'.freeze
7
- BOTH = 'Both'.freeze
5
+ MORNING = :morning
6
+ AFTERNOON = :afternoon
7
+ FULL_DAY = :full_day
8
8
 
9
- TIME_RANGE = {
10
- MORNING => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('9:00 AM') },
11
- AFTERNOON => { start: Time.zone.parse('10:00 AM'), end: Time.zone.parse('2:00 PM') },
12
- BOTH => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('2:00 PM') }
13
- }.freeze
9
+ # TIME_RANGE = {
10
+ # MORNING => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('9:00 AM') },
11
+ # AFTERNOON => { start: Time.zone.parse('10:00 AM'), end: Time.zone.parse('2:00 PM') },
12
+ # BOTH => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('2:00 PM') }
13
+ # }.freeze
14
14
 
15
15
  belongs_to :attendance_sheet_entry
16
16
  belongs_to :revision_to, class_name: 'Ecom::Core::CrewTime', optional: true
@@ -47,15 +47,42 @@ module Ecom
47
47
  attendance_sheet_entry.save
48
48
  end
49
49
 
50
+ # A method to get the available time ranges at a given point.
51
+ # We cannot define the range variables as a constant because
52
+ # the parsing should be done at the exact moment we are about
53
+ # to do time range calculations to avoid errors caused by date
54
+ # mismatches
55
+ def get_range
56
+ morning = {
57
+ start: Time.zone.parse('5:00 AM'),
58
+ finish: Time.zone.parse('9:00 AM')
59
+ }
60
+ afternoon = {
61
+ start: Time.zone.parse('10:00 AM'),
62
+ finish: Time.zone.parse('2:00 PM')
63
+ }
64
+ full_day = {
65
+ start: Time.zone.parse('5:00 AM'),
66
+ finish: Time.zone.parse('2:00 PM')
67
+ }
68
+
69
+ {
70
+ morning: morning,
71
+ afternoon: afternoon,
72
+ full_day: full_day
73
+ }
74
+ end
75
+
50
76
  # A method to check if checkin and checkout range falls in the morning,
51
77
  # afternoon, or both.
52
78
  def find_range(start, finish)
53
- if start.before?(TIME_RANGE[MORNING][:end]) && finish.before?(TIME_RANGE[AFTERNOON][:start])
54
- MORNING
55
- elsif start.after?(TIME_RANGE[MORNING][:end]) && finish.after?(TIME_RANGE[AFTERNOON][:start])
56
- AFTERNOON
79
+ range = get_range
80
+ if start.before?(range[:morning][:finish]) && finish.before?(range[:afternoon][:start])
81
+ :morning
82
+ elsif start.after?(range[:morning][:finish]) && finish.after?(range[:afternoon][:start])
83
+ :afternoon
57
84
  else
58
- BOTH
85
+ :full_day
59
86
  end
60
87
  end
61
88
 
@@ -63,13 +90,14 @@ module Ecom
63
90
  # of the defined morning and afternoon ranges
64
91
  def compute_hours
65
92
  # Reparse time to avoid errors caused by date differences
93
+ range = get_range
66
94
  start = Time.zone.parse(checkin_time.strftime('%I:%M%p'))
67
95
  finish = Time.zone.parse(checkout_time.strftime('%I:%M%p'))
68
- range = find_range(start, finish)
69
- left = start.before?(TIME_RANGE[range][:start]) ? TIME_RANGE[range][:start] : start
70
- right = finish.after?(TIME_RANGE[range][:end]) ? TIME_RANGE[range][:end] : finish
96
+ day_part = find_range(start, finish)
97
+ left = start.before?(range[day_part][:start]) ? range[day_part][:start] : start
98
+ right = finish.after?(range[day_part][:finish]) ? range[day_part][:finish] : finish
71
99
  time = (right - left) / 1.hour
72
- time -= 1 if range == BOTH
100
+ time -= 1 if day_part == FULL_DAY
73
101
  time
74
102
  end
75
103
  end
@@ -1,5 +1,5 @@
1
1
  module Ecom
2
2
  module Core
3
- VERSION = '1.2.17'.freeze
3
+ VERSION = '1.2.18'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecom_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.17
4
+ version: 1.2.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-20 00:00:00.000000000 Z
11
+ date: 2020-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm