Class: Rtt::Task

Inherits:
Object
  • Object
show all
Includes:
DataMapper::Resource
Defined in:
lib/rtt/task.rb

Constant Summary collapse

DEFAULT_NAME =
'Default task'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.task(task_name) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/rtt/task.rb', line 24

def self.task(task_name)
  base_attributes = { :name => task_name, :user => Rtt.current_user, :date => Date.today, :rate => (Rtt.current_project.rate if Rtt.current_project.present?) }
  if task_name.nil?
    existing_task = Task.first :active => true
    if existing_task
      existing_task
    else
      base_attributes.merge!(:name => DEFAULT_NAME) if task_name.blank?
      Task.create(base_attributes)
    end
  elsif (existing_task = Task.first base_attributes.merge({:start_at.gte => Date.today.beginning_of_day})).present?
    existing_task
  else
    Task.create(base_attributes)
  end
end

Instance Method Details

#add_current_spent_time_to_accumulated_spent_timeObject



48
49
50
# File 'lib/rtt/task.rb', line 48

def add_current_spent_time_to_accumulated_spent_time
  self.accumulated_spent_time = self.accumulated_spent_time + self.time_difference_since_start_at
end

#clone_task(task) ⇒ Object



52
53
54
55
56
57
# File 'lib/rtt/task.rb', line 52

def clone_task(task)
  task = Task.new
  task.attributes = self.attributes
  task.id = nil
  task
end

#durationObject



59
60
61
62
# File 'lib/rtt/task.rb', line 59

def duration
  return '-' if end_at.blank?
  convert_to_hour_and_minutes(accumulated_spent_time)
end

#duration=(d) ⇒ Object



64
65
66
67
68
69
# File 'lib/rtt/task.rb', line 64

def duration=(d)
  return unless !!/^(\d{1,2})[hH]{1,2}(\d{1,2})[mM]{1,2}$/.match(d)
  self.start_at = DateTime.parse('00:00:01', self.date)
  self.end_at = DateTime.parse('00:00:01', self.date).advance(:hours => $1.to_i, :minutes => $2.to_i, :seconds => 1)
  self.accumulated_spent_time = self.time_difference_since_start_at
end

#pauseObject



85
86
87
88
89
# File 'lib/rtt/task.rb', line 85

def pause
  split_task if span_multiple_days?
  finish(DateTime.now, true)
  self
end

#set_default_projectObject



71
72
73
# File 'lib/rtt/task.rb', line 71

def set_default_project
  self.project = Project.default if self.project.nil?
end

#set_default_userObject



75
76
77
# File 'lib/rtt/task.rb', line 75

def set_default_user
  self.user = User.default if self.user.nil?
end

#startObject



41
42
43
44
45
46
# File 'lib/rtt/task.rb', line 41

def start
  self.start_at = DateTime.now
  self.active = true
  save
  self
end

#stopObject



79
80
81
82
83
# File 'lib/rtt/task.rb', line 79

def stop
  split_task if span_multiple_days?
  finish
  self
end

#time_difference_since_start_atObject



91
92
93
94
# File 'lib/rtt/task.rb', line 91

def time_difference_since_start_at
  end_date_or_now = self.end_at ? self.end_at : DateTime.now
  end_date_or_now - self.start_at
end