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

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.



39
40
41
42
43
44
45
# File 'app/models/ecom/core/attendance_sheet.rb', line 39

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)


26
27
28
# File 'app/models/ecom/core/attendance_sheet.rb', line 26

def self.exists_for_today?
  AttendanceSheet.current.exists?
end

.open_exists?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'app/models/ecom/core/attendance_sheet.rb', line 22

def self.open_exists?
  AttendanceSheet.open.exists?
end

.open_exists_for_today?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'app/models/ecom/core/attendance_sheet.rb', line 30

def self.open_exists_for_today?
  AttendanceSheet.current_open.exists?
end

.open_for_date(date) ⇒ Object



18
19
20
# File 'app/models/ecom/core/attendance_sheet.rb', line 18

def self.open_for_date(date)
  AttendanceSheet.find_by(status: OPEN, date: date)
end

.submit(date) ⇒ Object

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.



62
63
64
65
66
67
68
69
70
# File 'app/models/ecom/core/attendance_sheet.rb', line 62

def self.submit(date)
  sheet = AttendanceSheet.open_for_date(date)
  raise 'There is no open attendance sheet to submit for the selected day.' unless sheet

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

.submit_currentObject



47
48
49
50
51
52
53
54
55
56
# File 'app/models/ecom/core/attendance_sheet.rb', line 47

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 = 
  sheet.save
  sheet
end