tasks_controller.rb
4.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class TasksController < MyProfileController
protect [:perform_task, :view_tasks], :profile, :only => [:index]
protect :perform_task, :profile, :except => [:index]
def index
@filter_type = params[:filter_type].presence
@filter_text = params[:filter_text].presence
@filter_responsible = params[:filter_responsible]
@task_types = Task.pending_types_for(profile)
@tasks = Task.pending_all(profile, @filter_type, @filter_text).order_by('created_at', 'asc')
@tasks = @tasks.where(:responsible_id => @filter_responsible.to_i != -1 ? @filter_responsible : nil) if @filter_responsible.present?
@tasks = @tasks.paginate(:per_page => Task.per_page, :page => params[:page])
@failed = params ? params[:failed] : {}
@responsible_candidates = profile.members.by_role(profile.roles.reject {|r| !r.has_permission?('perform_task')}) if profile.organization?
@view_only = !current_person.has_permission?(:perform_task, profile)
end
def processed
@tasks = Task.to(profile).without_spam.closed.order('tasks.created_at DESC')
@filter = params[:filter] || {}
@tasks = filter_tasks(@filter, @tasks)
@tasks = @tasks.paginate(:per_page => Task.per_page, :page => params[:page])
@task_types = Task.closed_types_for(profile)
end
def change_responsible
task = profile.tasks.find(params[:task_id])
if task.responsible.present? && task.responsible.id != params[:old_responsible_id].to_i
return render :json => {:notice => _('Task already assigned!'), :success => false, :current_responsible => task.responsible.id}
end
responsible = profile.members.find(params[:responsible_id]) if params[:responsible_id].present?
task.responsible = responsible
task.save!
render :json => {:notice => _('Task responsible successfully updated!'), :success => true, :new_responsible => {:id => responsible.present? ? responsible.id : nil}}
end
VALID_DECISIONS = [ 'finish', 'cancel', 'skip' ]
def close
failed = {}
if params[:tasks]
params[:tasks].each do |id, value|
decision = value[:decision]
if request.post? && VALID_DECISIONS.include?(decision) && id && decision != 'skip'
task = profile.find_in_all_tasks(id)
begin
task.update_attributes(value[:task])
task.send(decision, current_person)
rescue Exception => ex
message = "#{task.title} (#{task.requestor ? task.requestor.name : task.author_name})"
failed[ex.message] ? failed[ex.message] << message : failed[ex.message] = [message]
end
end
end
end
url = { :action => 'index' }
if failed.blank?
session[:notice] = _("All decisions were applied successfully.")
else
session[:notice] = _("Some decisions couldn't be applied.")
url[:failed] = failed
end
redirect_to url
end
def new
@ticket = Ticket.new(params[:ticket])
if params[:target_id]
@ticket.target = profile.friends.find(params[:target_id])
end
@ticket.requestor = profile
if request.post?
if @ticket.save
redirect_to :action => 'index'
end
end
end
def list_requested
@tasks = Task.without_spam.find_all_by_requestor_id(profile.id)
end
def ticket_details
@ticket = Ticket.find(:first, :conditions => ['(requestor_id = ? or target_id = ?) and id = ?', profile.id, profile.id, params[:id]])
end
protected
def filter_by_closed_date(filter, tasks)
filter[:closed_from] = Date.parse(filter[:closed_from]) unless filter[:closed_from].blank?
filter[:closed_until] = Date.parse(filter[:closed_until]) unless filter[:closed_until].blank?
tasks = tasks.where('tasks.end_date >= ?', filter[:closed_from].beginning_of_day) unless filter[:closed_from].blank?
tasks = tasks.where('tasks.end_date <= ?', filter[:closed_until].end_of_day) unless filter[:closed_until].blank?
tasks
end
def filter_by_creation_date(filter, tasks)
filter[:created_from] = Date.parse(filter[:created_from]) unless filter[:created_from].blank?
filter[:created_until] = Date.parse(filter[:created_until]) unless filter[:created_until].blank?
tasks = tasks.where('tasks.created_at >= ?', filter[:created_from].beginning_of_day) unless filter[:created_from].blank?
tasks = tasks.where('tasks.created_at <= ?', filter[:created_until].end_of_day) unless filter[:created_until].blank?
tasks
end
def filter_tasks(filter, tasks)
tasks = tasks.includes(:requestor, :closed_by)
tasks = tasks.of(filter[:type].presence)
tasks = tasks.where(:status => filter[:status]) unless filter[:status].blank?
tasks = filter_by_creation_date(filter, tasks)
tasks = filter_by_closed_date(filter, tasks)
tasks = tasks.like('profiles.name', filter[:requestor]) unless filter[:requestor].blank?
tasks = tasks.like('closed_bies_tasks.name', filter[:closed_by]) unless filter[:closed_by].blank?
tasks = tasks.like('tasks.data', filter[:text]) unless filter[:text].blank?
tasks
end
end