ecom_core 1.2.17 → 1.2.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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