Class: Shift
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Shift
- Defined in:
- app/models/shift.rb
Overview
Schema Information
Table name: shifts
id :integer not null, primary key
day_of_week :integer
start_time :time
end_time :time
hours :time
schedule_id :integer
created_at :datetime
updated_at :datetime
due_date :date
absence :boolean default(FALSE)
Instance Method Summary collapse
- #avail? ⇒ Boolean
- #can_edit? ⇒ Boolean
- #formatted_due_date ⇒ Object
- #get_week_hours(user) ⇒ Object
- #has_issue? ⇒ Boolean
- #if_swap_approved(user) ⇒ Object
- #is_cancelled? ⇒ Boolean
- #is_swapped? ⇒ Boolean
- #is_timeoff? ⇒ Boolean
- #job_name ⇒ Object
- #published? ⇒ Boolean
- #shift_detail ⇒ Object
- #status ⇒ Object
- #swap_shift(dest_sch, org, date) ⇒ Object
- #timeoff_reason ⇒ Object
- #user_name ⇒ Object
Instance Method Details
#avail? ⇒ Boolean
157 158 159 |
# File 'app/models/shift.rb', line 157 def avail? self.published? && self.can_edit? end |
#can_edit? ⇒ Boolean
147 148 149 150 151 152 153 154 155 |
# File 'app/models/shift.rb', line 147 def can_edit? edit_possible = true if self.swap && swap.approved? edit_possible = true elsif self.cancellation && self.cancellation.approved? edit_possible = true end edit_possible end |
#formatted_due_date ⇒ Object
71 72 73 |
# File 'app/models/shift.rb', line 71 def formatted_due_date "#{due_date.strftime('%m')}/#{due_date.strftime('%d')}/#{due_date.strftime('%Y')}" end |
#get_week_hours(user) ⇒ Object
52 53 54 55 56 57 58 59 |
# File 'app/models/shift.rb', line 52 def get_week_hours(user) if user and user != 0 user = User.find(user) user.shifts.where("due_date >= ? AND due_date <= ?",self.due_date.beginning_of_week,self.due_date.end_of_week ).sum(:hours).to_i else self.schedule.shifts.where("due_date >= ? AND due_date <= ?",self.due_date.beginning_of_week,self.due_date.end_of_week ).sum(:hours).to_i end end |
#has_issue? ⇒ Boolean
132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'app/models/shift.rb', line 132 def has_issue? if swp = swap and swp.status == "pending" return { "status"=> true, "type"=> "swap pending" } elsif unavail = unavailable and unavail.status == "pending" return { "status"=> true, "type"=> "unavailable pending" } elsif cancel = cancellation and cancel.status == "pending" return { "status"=> true, "type"=> "cancel pending" } elsif Timeoff.where('user_id = ? AND off_date = ? AND status = ?',self.schedule.user_id, self.due_date, "pending").count > 0 return { "status"=> true, "type"=> "timeoff pending" } elsif late = lateness return { "status"=> true, "type"=> "lateness" } end return { "status"=> false } end |
#if_swap_approved(user) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'app/models/shift.rb', line 61 def if_swap_approved(user) if user and user != 0 swapped = Candidate.find_by_alert_type_id(self.id) return (get_week_hours(user) + swapped.swap.shift.hours.strftime('%H').to_i) else swapped = Candidate.find_by_alert_type_id(self.id) return (get_week_hours(0) + swapped.swap.shift.hours.strftime('%H').to_i) end end |
#is_cancelled? ⇒ Boolean
105 106 107 108 |
# File 'app/models/shift.rb', line 105 def is_cancelled? cancellation = Cancellation.where('shift_id = ? AND (status = ? OR status = ?)',self.id,"approved excused","approved unexcused") cancellation.size > 0 end |
#is_swapped? ⇒ Boolean
110 111 112 113 |
# File 'app/models/shift.rb', line 110 def is_swapped? swap = Swap.where(:shift_id=>self.id,:status=>"approved") swap.size > 0 end |
#is_timeoff? ⇒ Boolean
95 96 97 98 |
# File 'app/models/shift.rb', line 95 def is_timeoff? timeoff = Timeoff.where(:user_id => self.schedule.user_id, :off_date=>self.due_date,:status=>"approved") timeoff.size > 0 end |
#job_name ⇒ Object
44 45 46 |
# File 'app/models/shift.rb', line 44 def job_name self.job.name end |
#published? ⇒ Boolean
91 92 93 |
# File 'app/models/shift.rb', line 91 def published? self.schedule.published? end |
#shift_detail ⇒ Object
87 88 89 |
# File 'app/models/shift.rb', line 87 def shift_detail "AS #{self.job_name} from #{self.start_time.strftime('%H:%M')} to #{self.end_time.strftime('%H:%M')} on #{self.formatted_due_date}" end |
#status ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/models/shift.rb', line 74 def status state = 'normal' if swap && swap.pending? state = 'swap_pending' end if cancellation && cancellation.pending? state = 'cancellation_pending' end state end |
#swap_shift(dest_sch, org, date) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'app/models/shift.rb', line 115 def swap_shift dest_sch, org, date curr = self.schedule dates = Date.parse(dest_sch[:due_date]) if dest_sch[:schedule_id].present? new_schedule = Schedule.find_by_id(dest_sch[:schedule_id]) else new_schedule = Schedule.new(user_id: dest_sch[:employee_id], organization_id: org.id, total_hours: '0:0', start_date: curr.start_date, end_date: curr.end_date) unless new_schedule.save! return new_schedule end end self.update_attributes!(schedule_id: new_schedule.id, day_of_week: dest_sch[:day_of_week], due_date: dates) curr.destroy! if curr.shifts.count == 0 return self end |
#timeoff_reason ⇒ Object
100 101 102 103 |
# File 'app/models/shift.rb', line 100 def timeoff_reason timeoff = self.schedule.user.timeoffs.where(:off_date => self.due_date,:status=>"approved").first "The Reason : #{timeoff.reason}, All day : #{timeoff.all_day}, Vacation : #{timeoff.vacation} " if timeoff end |
#user_name ⇒ Object
48 49 50 |
# File 'app/models/shift.rb', line 48 def user_name self.schedule.user.name end |