proposals_discussion_plugin_tasks_controller.rb
3.11 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
class ProposalsDiscussionPluginTasksController < TasksController
protect [:perform_task, :view_tasks], :profile, :only => [:index, :save_tags, :search_tags, :save_categories]
protect :perform_task, :profile, :except => [:index, :save_tags, :search_tags, :save_categories]
def index
@rejection_email_templates = profile.email_templates.find_all_by_template_type(:task_rejection)
@acceptance_email_templates = profile.email_templates.find_all_by_template_type(:task_acceptance)
@filter_type = params[:filter_type].presence
@filter_text = params[:filter_text].presence
@filter_responsible = params[:filter_responsible]
@filter_categories = params[:filter_categories]
@filter_status = params[:filter_status]
@view_only = !current_person.has_permission?(:perform_task, profile) || params[:view_only]
@task_categories = [OpenStruct.new(:name => _('Select a category'), :id => nil) ] + ProposalsDiscussionPlugin::TaskCategory.all
@task_types = Task.pending_types_for(profile)
# maps statuses which would be used in status filter
@task_statuses = ProposalsDiscussionPlugin::ProposalTask::Status.names.each_with_index.map { |x,i| OpenStruct.new(:id => i, :name =>x) }
@task_statuses.reject! {|status| [2,3,4].include? status.id}
# filter for evaluator profile
if @view_only
@tasks = ProposalsDiscussionPlugin::ProposalTask.pending_all_by_filter(profile, false, false).order_by('created_at', 'asc')
@tasks = @tasks.where(:responsible_id => current_person.id)
else
# filter for moderator
if @filter_status.present? && ! "0".eql?(@filter_status) && !["2","3","4"].include?(@filter_status)
@tasks = ProposalsDiscussionPlugin::ProposalTask.filter_by_status(profile, @filter_type, @filter_text, @filter_status ).order_by('created_at', 'asc')
else
@tasks = ProposalsDiscussionPlugin::ProposalTask.pending_evaluated(profile, @filter_type, @filter_text).order_by('created_at', 'asc')
end
@tasks = @tasks.where(:responsible_id => @filter_responsible.to_i != -1 ? @filter_responsible : nil) if @filter_responsible.present?
end
@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')}).order('name asc') if profile.organization?
end
def save_categories
result = {
success: false,
message: _('Error to save categories. Please, contact the system admin')
}
if request.post? && params[:tag_list]
categories_list = params[:tag_list].split(',')
task = Task.to(profile).find_by_id params[:task_id]
categories_data = []
categories_list.each do |category_name|
category = ProposalsDiscussionPlugin::TaskCategory.find_by_name(category_name)
categories_data << category
end
task.categories = categories_data
save = task.save!
if save
result = {
success: true,
message: _('Saved with success!')
}
end
end
render json: result
end
end