ecom_core 1.1.28 → 1.2.4

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: 21ff3e5fd4fd9cccdf472a8b779a62617a627f1d7f5bd5ae394f0f2d36b94aa3
4
- data.tar.gz: 501972e9b2abcf95aa11ad02c341cc3cdca42c71d248667ebb35834eceb588f1
3
+ metadata.gz: '09b8fa70ec63b31c289bacc382fb945336e8e6a3e6930e54d415ed6ba79ec5aa'
4
+ data.tar.gz: d8cbbc31eb4718a6b4af1808810a3defa163b4b0743d235756e618e1bb37fb10
5
5
  SHA512:
6
- metadata.gz: 40e7462b2ebf07a06465f3b19c20389c3a4c8198c045f83bc153875b38270969d4bdad0fccf19581d93ccd9ea4472ae208f0edb73251114ada294c51329dfdc0
7
- data.tar.gz: 56720e59765d12b7c12c219f0b13ca942c82122b32abf573ee3c040444b458e5a3ce18c91813779665a02fdff0c9d8642bc5ddf6233d252db15864a948c3c49c
6
+ metadata.gz: 7ba2a9547ffcb1d3085b893e44bee505639abb61caa3cdc28df3cbf56f883910ac1bea7b9645d0577b0bb006dd81a4b5df661cac74f54323a224b8b1b3d7cbc8
7
+ data.tar.gz: c0eb28eb93b466d7da5dcdf05876351c721e8a541e33cd0d23a26627cf5e0f1934e1e94283f35636111e949c8095e93c58c69f8a39f648c72f622898e15a5b19
@@ -5,10 +5,11 @@ module Ecom
5
5
  SUBMITTED = 'Submitted'.freeze
6
6
  APPROVED = 'Approved'.freeze
7
7
 
8
- validates :date, :opened_at, presence: true, uniqueness: true
8
+ validates :date, presence: true, uniqueness: true
9
9
  validates :status, inclusion: [OPEN, SUBMITTED, APPROVED]
10
10
 
11
11
  has_many :attendance_sheet_entries
12
+ has_many :crew_times, through: :attendance_sheet_entries
12
13
 
13
14
  scope :open, -> { where(status: OPEN) }
14
15
  scope :current, -> { where(date: Date.today) }
@@ -20,17 +20,34 @@ module Ecom
20
20
  validates :checkin_time, presence: true, if: :checkout_time
21
21
 
22
22
  before_save :calculate_hours
23
+ after_save :calculate_total
23
24
 
24
25
  def calculate_hours
25
- self.hours = checkout_time.nil? || checkin_time.nil? ? 0 : compute_hours
26
+ self.hours = if checkout_time.nil? || checkin_time.nil?
27
+ 0
28
+ else
29
+ compute_hours
30
+ end
31
+ end
32
+
33
+ def calculate_total
34
+ compute_total_for_entry if saved_change_to_hours?
35
+ end
36
+
37
+ def compute_total_for_entry
38
+ attendance_sheet_entry.total_hours = Ecom::Core::CrewTime.where(
39
+ attendance_sheet_entry: attendance_sheet_entry,
40
+ revised: false
41
+ ).sum(:hours)
42
+ attendance_sheet_entry.save
26
43
  end
27
44
 
28
45
  # A method to check if checkin and checkout range falls in the morning,
29
46
  # afternoon, or both.
30
- def find_range
31
- if checkin_time.before?(TIME_RANGE[MORNING][:end]) && checkout_time.before?(TIME_RANGE[AFTERNOON][:start])
47
+ def find_range(start, finish)
48
+ if start.before?(TIME_RANGE[MORNING][:end]) && finish.before?(TIME_RANGE[AFTERNOON][:start])
32
49
  MORNING
33
- elsif checkin_time.after?(TIME_RANGE[MORNING][:end]) && checkout_time.after?(TIME_RANGE[AFTERNOON][:start])
50
+ elsif start.after?(TIME_RANGE[MORNING][:end]) && finish.after?(TIME_RANGE[AFTERNOON][:start])
34
51
  AFTERNOON
35
52
  else
36
53
  BOTH
@@ -40,9 +57,12 @@ module Ecom
40
57
  # A method to adjust time ranges by trimming any time value outside
41
58
  # of the defined morning and afternoon ranges
42
59
  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
60
+ # Reparse time to avoid errors caused by date differences
61
+ start = Time.zone.parse(checkin_time.strftime('%I:%M%p'))
62
+ finish = Time.zone.parse(checkout_time.strftime('%I:%M%p'))
63
+ range = find_range(start, finish)
64
+ left = start.before?(TIME_RANGE[range][:start]) ? TIME_RANGE[range][:start] : start
65
+ right = finish.after?(TIME_RANGE[range][:end]) ? TIME_RANGE[range][:end] : finish
46
66
  time = (right - left) / 1.hour
47
67
  time -= 1 if range == BOTH
48
68
  time
@@ -7,7 +7,7 @@ module Ecom
7
7
  belongs_to :project_manager, class_name: 'Ecom::Core::Stakeholder'
8
8
  belongs_to :task_template
9
9
  belongs_to :currency
10
-
10
+
11
11
  validates :name, :location, :contract_number, :date_contract_signed, :commencement_date, :completion_date,
12
12
  :contract_amount, :advance_payment, :retention, presence: true
13
13
  end
@@ -19,7 +19,7 @@ module Ecom
19
19
  end
20
20
  end
21
21
  end
22
- menu_list
22
+ { success: true, data: menu_list }
23
23
  end
24
24
  end
25
25
  end
@@ -1,5 +1,5 @@
1
1
  module Ecom
2
2
  module Core
3
- VERSION = '1.1.28'.freeze
3
+ VERSION = '1.2.4'.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.1.28
4
+ version: 1.2.4
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-24 00:00:00.000000000 Z
11
+ date: 2020-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 6.0.2
89
+ version: 6.0.3
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 6.0.2
96
+ version: 6.0.3
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: factory_bot_rails
99
99
  requirement: !ruby/object:Gem::Requirement