ecom_core 1.1.28 → 1.2.4

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