ecom_core 1.1.20 → 1.1.21

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: 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