ecom_core 1.1.19 → 1.1.24

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: dcebadd1810f6eea78c0ac3507080297092400114d9bc9eefdeda30361e9eb92
4
- data.tar.gz: efde6b5cea91a56d8a7cf87e5fb58650fb5bffa5b3a5e8a849915e0a89713665
3
+ metadata.gz: 43649f2f5ecfe9e10c080162f8012873222a5eea61c6cb75840a94e819548c38
4
+ data.tar.gz: 6736abfac57029838c79f8623c37ec2cebab489b4e721d379f78ad94e3766ed7
5
5
  SHA512:
6
- metadata.gz: 50c886b4ea192ff7addd00bbb21d88dcc022b91e428c8a8776d3a298ac6f8443c4ce8790ebd3968af2ad1e7a5e1037429090455d81f98dac4f2b7fece6b3cee1
7
- data.tar.gz: '058f44af017d5cb20b7bd5da50f859d6cb8e494b9ed1e11c494b1f49e6681ee2d9f3d2c04b1895d1553f53448bb6ac9139e3f72b0c351f678732998210345a4e'
6
+ metadata.gz: f67c03ae25ccf2023c99dcc22d242699838cbb65d6c0067004fc252f1335a1dd4a48d38c08eb661e611448ed6d7c4c255da2e3ea4440edf6609bd27440b66bf0
7
+ data.tar.gz: 7620733d29d4368346da16e39fa369abe8baa989fa3a43c9be0d0542051713cc3f53916118b51214393812b4ea09bf9ae7a70c187375fdcbad573a0c5ca0bb6e
@@ -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.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
+
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,8 @@
1
+ class ChangeTimeColumnsToDatetime < ActiveRecord::Migration[6.0]
2
+ def change
3
+ remove_column :ecom_core_crew_times, :checkin_time, :time
4
+ add_column :ecom_core_crew_times, :checkin_time, :datetime
5
+ remove_column :ecom_core_crew_times, :checkout_time, :time
6
+ add_column :ecom_core_crew_times, :checkout_time, :datetime
7
+ end
8
+ end
@@ -1,5 +1,5 @@
1
1
  module Ecom
2
2
  module Core
3
- VERSION = '1.1.19'.freeze
3
+ VERSION = '1.1.24'.freeze
4
4
  end
5
5
  end
@@ -3,4 +3,3 @@ require 'ecom/core/engine'
3
3
  require 'ancestry'
4
4
  require 'aasm'
5
5
  require 'active_model_serializers'
6
- require 'data_migrate'
@@ -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.19
4
+ version: 1.1.24
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-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -25,21 +25,21 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: ancestry
28
+ name: active_model_serializers
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.10.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.10.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: bcrypt
42
+ name: ancestry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: active_model_serializers
56
+ name: bcrypt
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 0.10.0
61
+ version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 0.10.0
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jwt
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,20 +94,6 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 6.0.2
97
- - !ruby/object:Gem::Dependency
98
- name: data_migrate
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: factory_bot_rails
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -264,7 +250,6 @@ files:
264
250
  - app/services/ecom/core/token_auth_service.rb
265
251
  - config/database.ci.yml
266
252
  - config/routes.rb
267
- - db/data/20200401064242_move_date_to_attendance_sheet.rb
268
253
  - db/migrate/20190101112620_create_ecom_core_lookups.rb
269
254
  - db/migrate/20190101112625_create_ecom_core_overtime_types.rb
270
255
  - db/migrate/20191119010518_create_ecom_core_task_template_types.rb
@@ -310,6 +295,8 @@ files:
310
295
  - db/migrate/20200410100035_create_ecom_core_overtime_sheet_entries.rb
311
296
  - db/migrate/20200410111827_create_ecom_core_crew_overtimes.rb
312
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
313
300
  - lib/ecom/core.rb
314
301
  - lib/ecom/core/engine.rb
315
302
  - lib/ecom/core/version.rb
@@ -1,20 +0,0 @@
1
- class MoveDateToAttendanceSheet < ActiveRecord::Migration[6.0]
2
- def up
3
- dates = Ecom::Core::CrewTime.pluck('DISTINCT date(date)')
4
-
5
- return if dates.count.zero?
6
-
7
- attendances = []
8
- dates.each do |date|
9
- attendances << Ecom::Core::AttendanceSheet.new(date: date)
10
- end
11
-
12
- Ecom::Core::AttendanceSheet.transaction do
13
- attendances.each(&:save)
14
- end
15
- end
16
-
17
- def down
18
- raise ActiveRecord::IrreversibleMigration
19
- end
20
- end