Class: Ecom::Core::AttendanceSheet

Inherits:
ApplicationRecord show all
Defined in:
app/models/ecom/core/attendance_sheet.rb

Constant Summary collapse

OPEN =
'Open'.freeze
SUBMITTED =
'Submitted'.freeze
APPROVED =
'Approved'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.create_currentObject

Attendance sheet should be created using the method below only. This is because we need to check if there is an open attendance already, and also that we have only one attendace sheet per day.



33
34
35
36
37
38
39
# File 'app/models/ecom/core/attendance_sheet.rb', line 33

def self.create_current
  raise 'Attendance sheet already created for the day.' if AttendanceSheet.exists_for_today?

  raise 'There is an open attendance sheet which needs to be submitted before creating a new one.' if AttendanceSheet.open_exists?

  AttendanceSheet.create(date: Date.today, opened_at: Time.now, status: OPEN)
end

.exists_for_today?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'app/models/ecom/core/attendance_sheet.rb', line 20

def self.exists_for_today?
  AttendanceSheet.where(date: Date.today).exists?
end

.open_exists?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'app/models/ecom/core/attendance_sheet.rb', line 16

def self.open_exists?
  AttendanceSheet.where(status: OPEN).exists?
end

.open_exists_for_today?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'app/models/ecom/core/attendance_sheet.rb', line 24

def self.open_exists_for_today?
  where(status: OPEN, date: Date.today).exists?
end

.submit_currentObject



41
42
43
44
45
46
47
48
49
50
# File 'app/models/ecom/core/attendance_sheet.rb', line 41

def self.submit_current
  sheet = AttendanceSheet.find_by(date: Date.today, status: OPEN)

  raise 'There is no open attendance sheet to submit.' if sheet.nil?

  sheet.closed_at = Time.now
  sheet.status = SUBMITTED
  sheet.save
  sheet
end

Instance Method Details

#submitObject

This method should be used by privileged users to submit the attendance sheet after the date has passed. Normally, timekeepers need to open and close an attendance sheet of a date on the specific date.



56
57
58
59
60
61
62
63
# File 'app/models/ecom/core/attendance_sheet.rb', line 56

def submit
  raise 'This attendance sheet is not open. Therefore it cannot be submitted' unless status == OPEN

  self.closed_at = Time.now
  self.status = SUBMITTED
  save
  self
end