ecom_core 1.1.20 → 1.1.21

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: 672b1f9f1a955dcac03f793da08b27a24f387497ecfee9184167910442549657
4
- data.tar.gz: d3cadc37e590e75eef9d644f324c31056f840d38660880888331f9f6a24ec5a7
3
+ metadata.gz: 20baeb3e84b28e3138d9d2b64cc0f91afe5e3e79361baa4564b280eca1d7db92
4
+ data.tar.gz: 714499d1b00181a32b8ac85dd2a469d3474ec590ac4c0bb958d655285420647a
5
5
  SHA512:
6
- metadata.gz: 5e0d2a1571d1a8f620c62f5fad07ed9c556d9b64a6f01a38956ff45dc7a62e5d8ba0eceede147bcb6f4248a6b05f25561c56bc41f05779aa676f72fee831c7b8
7
- data.tar.gz: f01a205f8a37a0d97468ec5e0b97cbf5fde5b8e5aaa06da4b77854a3fb51890c7ee910b191b1cd19b4f01b285834ddd00c6b1c6e528011a8f94e284c0c7486f0
6
+ metadata.gz: 99fa344c2db5b7a704eed5cf9191c9f620f95b0f74cb1e38da9c121e91b6d3b477b1b8bea16387647f0bda528054f8b6ae55276a74944bf08998c070d660a4a7
7
+ data.tar.gz: 1959a1648e993edd98fa846391b38bc967c8844fde3b85ab9c99dde4bbbed683bcb9c57ce215fc2657348a36eb3b539a7dfdb878dd73df022a21d4bcdc4bee6b
@@ -8,13 +8,13 @@ module Ecom
8
8
 
9
9
  has_one :revision, class_name: 'Ecom::Core::CrewOvertime', foreign_key: :revision_to_id
10
10
 
11
- validates :hours, :converted_hours, presence: true
11
+ validates :hours, :raw_hours, presence: true
12
12
 
13
- before_save :calculate_converted_hours
13
+ before_save :calculate_hours
14
14
 
15
- def calculate_converted_hours
15
+ def calculate_hours
16
16
  rate = OvertimeType.find(overtime_type_id).rate
17
- self.converted_hours = hours * rate
17
+ self.hours = raw_hours * rate
18
18
  end
19
19
  end
20
20
  end
@@ -1,12 +1,52 @@
1
1
  module Ecom
2
2
  module Core
3
3
  class CrewTime < ApplicationRecord
4
+ # Time Ranges
5
+ MORNING = 'Morning'.freeze
6
+ AFTERNOON = 'Afternoon'.freeze
7
+ BOTH = 'Both'.freeze
8
+
9
+ TIME_RANGE = {
10
+ MORNING => {start: Time.parse('8:00 AM'), end: Time.parse('12:00 PM')},
11
+ AFTERNOON => {start: Time.parse('1:00 PM'), end: Time.parse('5:00 PM')},
12
+ BOTH => {start: Time.parse('8:00 AM'), end: Time.parse('5:00 PM')}
13
+ }.freeze
14
+
4
15
  belongs_to :attendance_sheet_entry
5
16
  belongs_to :revision_to, class_name: 'Ecom::Core::CrewTime', optional: true
6
17
  belongs_to :created_by, class_name: 'Ecom::Core::User'
7
- has_one :revision, class_name: 'Ecom::Core::CrewOvertime', foreign_key: :revision_to_id
18
+ has_one :revision, class_name: 'Ecom::Core::CrewTime', foreign_key: :revision_to_id
8
19
 
9
20
  validates :hours, presence: true
21
+
22
+ before_save :calculate_hours
23
+
24
+ def calculate_hours
25
+ self.hours = checkout_time.nil? ? 0 : compute_hours
26
+ end
27
+
28
+ # A method to check if checkin and checkout range falls in the morning,
29
+ # afternoon, or both.
30
+ def find_range
31
+ if checkin_time.before?(TIME_RANGE[MORNING][:end]) && checkout_time.before?(TIME_RANGE[AFTERNOON][:start])
32
+ MORNING
33
+ elsif checkin_time.after?(TIME_RANGE[MORNING][:end]) && checkout_time.after?(TIME_RANGE[AFTERNOON][:start])
34
+ AFTERNOON
35
+ else
36
+ BOTH
37
+ end
38
+ end
39
+
40
+ # A method to adjust time ranges by trimming any time value outside
41
+ # of the defined morning and afternoon ranges
42
+ def compute_hours
43
+ range = find_range
44
+ left = checkin_time.before?(TIME_RANGE[range][:start]) ? TIME_RANGE[range][:start] : checkin_time
45
+ right = checkout_time.after?(TIME_RANGE[range][:end]) ? TIME_RANGE[range][:end] : checkout_time
46
+ time = (right - left) / 1.hour
47
+ time -= 1 if range == BOTH
48
+ time
49
+ end
10
50
  end
11
51
  end
12
52
  end
@@ -0,0 +1,6 @@
1
+ class AdjustCrewOvertimeColumnNames < ActiveRecord::Migration[6.0]
2
+ def change
3
+ rename_column :ecom_core_crew_overtimes, :hours, :raw_hours
4
+ rename_column :ecom_core_crew_overtimes, :converted_hours, :hours
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class ChangeTimeColumnsToDatetime < ActiveRecord::Migration[6.0]
2
+ def change
3
+ change_column :ecom_core_crew_times, :checkin_time, :datetime
4
+ change_column :ecom_core_crew_times, :checkout_time, :datetime
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
1
  module Ecom
2
2
  module Core
3
- VERSION = '1.1.20'.freeze
3
+ VERSION = '1.1.21'.freeze
4
4
  end
5
5
  end
@@ -1,7 +1,7 @@
1
1
  FactoryBot.define do
2
2
  factory :crew_overtime, class: 'Ecom::Core::CrewOvertime' do
3
+ raw_hours { 2 }
3
4
  hours { 2 }
4
- converted_hours { 2 }
5
5
  remark { FFaker::Name.name }
6
6
  association :overtime_type
7
7
  association :overtime_sheet_entry
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.1.20
4
+ version: 1.1.21
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-04-13 00:00:00.000000000 Z
11
+ date: 2020-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -295,6 +295,8 @@ files:
295
295
  - db/migrate/20200410100035_create_ecom_core_overtime_sheet_entries.rb
296
296
  - db/migrate/20200410111827_create_ecom_core_crew_overtimes.rb
297
297
  - db/migrate/20200413144023_fix_crew_time_columns.rb
298
+ - db/migrate/20200414044144_adjust_crew_overtime_column_names.rb
299
+ - db/migrate/20200414185248_change_time_columns_to_datetime.rb
298
300
  - lib/ecom/core.rb
299
301
  - lib/ecom/core/engine.rb
300
302
  - lib/ecom/core/version.rb