Class: Task

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/polymorphic/task.rb

Overview

Copyright © 2008-2013 Michael Dvorkin and contributors.

Fat Free CRM is freely distributable under the terms of MIT license. See MIT-LICENSE file or www.opensource.org/licenses/mit-license.php


Schema Information

Table name: tasks

id              :integer         not null, primary key
user_id         :integer
assigned_to     :integer
completed_by    :integer
name            :string(255)     default(""), not null
asset_id        :integer
asset_type      :string(255)
priority        :string(32)
category        :string(32)
bucket          :string(32)
due_at          :datetime
completed_at    :datetime
deleted_at      :datetime
created_at      :datetime
updated_at      :datetime
background_info :string(255)

Constant Summary collapse

ALLOWED_VIEWS =
%w(pending assigned completed)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#calendarObject

Returns the value of attribute calendar.



29
30
31
# File 'app/models/polymorphic/task.rb', line 29

def calendar
  @calendar
end

Class Method Details

.bucket_empty?(bucket, user, view = "pending") ⇒ Boolean

Returns bucket if it’s empty (i.e. we have to hide it), nil otherwise.


Returns:

  • (Boolean)


186
187
188
189
190
191
192
193
# File 'app/models/polymorphic/task.rb', line 186

def self.bucket_empty?(bucket, user, view = "pending")
  return false if bucket.blank? or !ALLOWED_VIEWS.include?(view)
  if view == "assigned"
    assigned_by(user).send(bucket).pending.count
  else
    my(user).send(bucket).send(view).count
  end == 0
end

.find_all_grouped(user, view) ⇒ Object

Returns list of tasks grouping them by due date as required by tasks/index.




174
175
176
177
178
179
180
181
182
# File 'app/models/polymorphic/task.rb', line 174

def self.find_all_grouped(user, view)
  return {} unless ALLOWED_VIEWS.include?(view)
  settings = (view == "completed" ? Setting.task_completed : Setting.task_bucket)
  Hash[
    settings.map do |key, value|
      [ key, view == "assigned" ? assigned_by(user).send(key).pending : my(user).send(key).send(view) ]
    end
  ]
end

.totals(user, view = "pending") ⇒ Object

Returns task totals for each of the views as needed by tasks sidebar.




197
198
199
200
201
202
203
204
205
# File 'app/models/polymorphic/task.rb', line 197

def self.totals(user, view = "pending")
  return {} unless ALLOWED_VIEWS.include?(view)
  settings = (view == "completed" ? Setting.task_completed : Setting.task_bucket)
  settings.inject({ :all => 0 }) do |hash, key|
    hash[key] = (view == "assigned" ? assigned_by(user).send(key).pending.count : my(user).send(key).send(view).count)
    hash[:all] += hash[key]
    hash
  end
end

Instance Method Details

#assigned_by?(user) ⇒ Boolean

Matcher for the :assigned_by named scope.


Returns:

  • (Boolean)


128
129
130
# File 'app/models/polymorphic/task.rb', line 128

def assigned_by?(user)
  self.user == user && assignee && assignee != user
end

#at_specific_time?Boolean

Check whether the due date has specific time ignoring 23:59:59 timestamp set by Time.now.end_of_week.


Returns:

  • (Boolean)


146
147
148
149
150
# File 'app/models/polymorphic/task.rb', line 146

def at_specific_time?
  self.due_at &&
  (self.due_at.hour != 0 || self.due_at.min != 0 || self.due_at.sec != 0) &&
  (self.due_at.hour != 23 && self.due_at.min != 59 && self.due_at.sec != 59)
end

#completed?Boolean


Returns:

  • (Boolean)


133
134
135
# File 'app/models/polymorphic/task.rb', line 133

def completed?
  !!self.completed_at
end

#computed_bucketObject

Convert specific due_date to “due_today”, “due_tomorrow”, etc. bucket name.




154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'app/models/polymorphic/task.rb', line 154

def computed_bucket
  return self.bucket if self.bucket != "specific_time"
  case
  when self.due_at < Time.zone.now.midnight
    "overdue"
  when self.due_at >= Time.zone.now.midnight && self.due_at < Time.zone.now.midnight.tomorrow
    "due_today"
  when self.due_at >= Time.zone.now.midnight.tomorrow && self.due_at < Time.zone.now.midnight.tomorrow + 1.day
    "due_tomorrow"
  when self.due_at >= (Time.zone.now.midnight.tomorrow + 1.day) && self.due_at < Time.zone.now.next_week
    "due_this_week"
  when self.due_at >= Time.zone.now.next_week && self.due_at < (Time.zone.now.next_week.end_of_week + 1.day)
    "due_next_week"
  else
    "due_later"
  end
end

#my?(user) ⇒ Boolean

Matcher for the :my named scope.


Returns:

  • (Boolean)


122
123
124
# File 'app/models/polymorphic/task.rb', line 122

def my?(user)
  (self.user == user && assignee.nil?) || assignee == user
end

#tracked_by?(user) ⇒ Boolean

Matcher for the :tracked_by? named scope.


Returns:

  • (Boolean)


139
140
141
# File 'app/models/polymorphic/task.rb', line 139

def tracked_by?(user)
  self.user == user || self.assignee == user
end