Commit 2e0b07f0b7684047ba8086e2e2158dfb0a92ba2d
1 parent
7b733153
Exists in
master
and in
9 other branches
added feature to allow confirm proposals individually
Showing
6 changed files
with
132 additions
and
67 deletions
Show diff stats
controllers/myprofile/proposals_discussion_plugin_confirm_tasks_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,43 @@ |
1 | +class ProposalsDiscussionPluginConfirmTasksController < MyProfileController | |
2 | + protect :perform_task, :profile, :only => [:approve_proposal, :reprove_proposal] | |
3 | + | |
4 | + def approve_proposal | |
5 | + result = {} | |
6 | + if request.post? | |
7 | + result = process_decision(params, :finish) | |
8 | + end | |
9 | + render json: result | |
10 | + end | |
11 | + | |
12 | + def reprove_proposal | |
13 | + result = {} | |
14 | + if request.post? | |
15 | + result = process_decision(params, :cancel) | |
16 | + end | |
17 | + render json: result | |
18 | + end | |
19 | + | |
20 | +private | |
21 | + | |
22 | + def process_decision(params, decision) | |
23 | + result = { | |
24 | + success: false, | |
25 | + message: _('Error flagging proposal. Please, contact the system admin') | |
26 | + } | |
27 | + if params[:task_id] and request.post? | |
28 | + begin | |
29 | + task = profile.find_in_all_tasks(params[:task_id]) | |
30 | + task.tag_list = params[:tag_list] | |
31 | + task.article_parent_id = params[:article_parent_id] | |
32 | + task.email_template_id = params[:email_template_id] | |
33 | + task.send(decision, current_person) | |
34 | + result = {:success => true } | |
35 | + rescue Exception => ex | |
36 | + message = "#{task.title} (#{task.requestor ? task.requestor.name : task.author_name})" if task | |
37 | + message = "#{message} #{ex.message}" | |
38 | + result[:message] += ". #{message}" | |
39 | + end | |
40 | + return result | |
41 | + end | |
42 | + end | |
43 | +end | ... | ... |
controllers/myprofile/proposals_discussion_plugin_evaluate_tasks_controller.rb
1 | 1 | class ProposalsDiscussionPluginEvaluateTasksController < MyProfileController |
2 | + protect :view_tasks, :profile, :only => [:approve_proposal, :reprove_proposal] | |
2 | 3 | |
3 | - protect :view_tasks, :profile, :only => [:flag_approve_proposal, :flag_reject_proposal] | |
4 | - | |
5 | - def flag_approve_proposal | |
4 | + def approve_proposal | |
5 | + result = {} | |
6 | 6 | if request.post? && params[:task_id] |
7 | 7 | result = { |
8 | 8 | success: false, |
9 | 9 | message: _('Error flagging proposal. Please, contact the system admin') |
10 | 10 | } |
11 | 11 | |
12 | + | |
12 | 13 | task = Task.to(profile).find_by_id params[:task_id] |
13 | 14 | save = task.flag_accept_proposal(current_person) |
14 | 15 | |
... | ... | @@ -20,7 +21,8 @@ class ProposalsDiscussionPluginEvaluateTasksController < MyProfileController |
20 | 21 | render json: result |
21 | 22 | end |
22 | 23 | |
23 | - def flag_reprove_proposal | |
24 | + def reprove_proposal | |
25 | + result = {} | |
24 | 26 | if request.post? && params[:task_id] |
25 | 27 | result = { |
26 | 28 | success: false, | ... | ... |
public/style.css
... | ... | @@ -326,6 +326,7 @@ form .proposals-discussion-plugin .body textarea { |
326 | 326 | width: auto; |
327 | 327 | float: left; |
328 | 328 | padding: 5px; |
329 | + border: 1px solid #EEEEEE; | |
329 | 330 | } |
330 | 331 | |
331 | 332 | .evaluation_button img { |
... | ... | @@ -344,7 +345,8 @@ form .proposals-discussion-plugin .body textarea { |
344 | 345 | } |
345 | 346 | |
346 | 347 | div.evaluation_button.checked { |
347 | - border: 1px dotted black; | |
348 | + border: 1px dashed black; | |
349 | + background-color: white; | |
348 | 350 | } |
349 | 351 | |
350 | 352 | .evaluation_button.approval span { |
... | ... | @@ -367,8 +369,9 @@ div.evaluation_button.checked { |
367 | 369 | } |
368 | 370 | |
369 | 371 | div.confirm_evaluation_button a { |
370 | - text-decoration: none; | |
372 | + text-decoration: underline; | |
371 | 373 | color: #003366; |
374 | + font-size: 28px; | |
372 | 375 | } |
373 | 376 | |
374 | 377 | div.confirm_evaluation_button a:hover { | ... | ... |
views/proposals_discussion_plugin_tasks/_task.html.erb
... | ... | @@ -19,28 +19,6 @@ |
19 | 19 | </div> |
20 | 20 | <% end %> |
21 | 21 | |
22 | - <div class="task_decisions"> | |
23 | - <% unless @view_only %> | |
24 | - <%= | |
25 | - labelled_radio_button(_("Accept"), "tasks[#{task.id}][decision]", 'finish', task.flagged_for_approval? || task.default_decision == 'accept', | |
26 | - :id => "decision-finish-#{task.id}", | |
27 | - :class => 'task_accept_radio', | |
28 | - :disabled => task.accept_disabled?, | |
29 | - :task_id => "#{task.id}") + | |
30 | - labelled_radio_button(_("Reject"), "tasks[#{task.id}][decision]", 'cancel', task.flagged_for_reproval? || task.default_decision == 'reject', | |
31 | - :id => "decision-cancel-#{task.id}", | |
32 | - :class => 'task_reject_radio', | |
33 | - :disabled => task.reject_disabled?, | |
34 | - :task_id => "#{task.id}") + | |
35 | - labelled_radio_button(_("Skip"), "tasks[#{task.id}][decision]", 'skip', task.default_decision == 'skip' && task.unflagged?, | |
36 | - :id => "decision-skip-#{task.id}", | |
37 | - :class => 'task_skip_radio', | |
38 | - :disabled => task.skip_disabled?, | |
39 | - :task_id => "#{task.id}") | |
40 | - %> | |
41 | - <% end %> | |
42 | - </div><!-- class="task_decisions" --> | |
43 | - | |
44 | 22 | <div class="task_date"><%= show_time(task.created_at) %></div> |
45 | 23 | |
46 | 24 | <%= render :partial => 'task_title', :locals => {:task => task} %> |
... | ... | @@ -49,59 +27,60 @@ |
49 | 27 | <%= task_information(task) %> |
50 | 28 | </div> |
51 | 29 | |
52 | - | |
53 | - <%= fields_for "tasks[#{task.id}][task]", task do |f| %> | |
54 | - <% if task.accept_details and !@view_only %> | |
55 | - <div id="on-accept-information-<%=task.id%>" style="display: none"> | |
56 | - <%= render :partial => partial_for_class(task.class, nil, :accept_details), :locals => {:task => task, :f => f} %> | |
57 | - </div> | |
58 | - <% end %> | |
59 | - | |
60 | - <% if task.reject_details and !@view_only %> | |
61 | - <div id="on-reject-information-<%=task.id%>" style="display: none"> | |
62 | - <%= render :partial => partial_for_class(task.class, nil, :reject_details), :locals => {:task => task, :f => f} %> | |
63 | - </div> | |
64 | - <% end %> | |
65 | - | |
66 | - <% if @view_only %> | |
67 | - <div class="evaluation_toolbar"> | |
30 | + <div class="evaluation_toolbar"> | |
68 | 31 | <div class="evaluation_button approval" |
69 | 32 | data-url='<%="/myprofile/#{profile.identifier}/plugin/proposals_discussion/evaluate_tasks/flag_approve_proposal"%>' |
70 | 33 | data-task-id="<%= task.id %>" |
71 | - data-flag-action="flag_approve_proposal"> | |
34 | + data-flag-action="approve_proposal"> | |
72 | 35 | <img class="" src="/plugins/proposals_discussion/images/approval.png"> |
73 | 36 | <span>Aprovar</span> |
74 | 37 | </div> |
75 | 38 | <div id="evaluation_button_#{task.id}" class="evaluation_button reproval" |
76 | 39 | data-url='<%="/myprofile/#{profile.identifier}/plugin/proposals_discussion/evaluate_tasks/flag_reject_proposal"%>' |
77 | - data-task-id="<%= task.id %>" data-flag-action="flag_reprove_proposal"> | |
40 | + data-task-id="<%= task.id %>" data-flag-action="reprove_proposal"> | |
78 | 41 | <img class="" src="/plugins/proposals_discussion/images/reproval.png"> |
79 | 42 | <span>Reprovar</span> |
80 | 43 | </div> |
81 | 44 | </div> |
82 | - <% end %> | |
83 | - <%#= select_tag "tasks[#{task.id}][setting][evaluation_flag]", | |
84 | - options_for_select( | |
85 | - [_('FLAGGED_FOR_APPROVAL'),_('FLAGGED_FOR_REPROVAL')],(task.flagged_status.present? ? task.flagged_status : nil) | |
86 | - ), | |
87 | - { | |
88 | - :include_blank => true, | |
89 | - :onchange => "change_flagged_status(this);", | |
90 | - 'data-old-responsible' => task.flagged_status.present? ? task.flagged_status.id : nil, | |
91 | - 'data-task' => task.id, 'data-url' => 'change_flagged_status_url' | |
92 | - } %> | |
93 | - | |
94 | - | |
95 | - <div class="formfieldline"> | |
96 | - <div class="formfield tag-list-fields"> | |
97 | - <%= labelled_text_field(_('Tags'),"tasks[#{task.id}][task][tag_list]", task.tags_from(nil).to_s, :size => 36, :class => 'tag-list','data-submit-values'=>"{'task_id':'#{task.id}'}") %> | |
45 | + | |
46 | + | |
47 | + | |
48 | + | |
49 | + <%= fields_for "tasks[#{task.id}][task]", task do |f| %> | |
50 | + <% if task.accept_details %> | |
51 | + <div id="on-accept-information-<%=task.id%>" style="display: none"> | |
52 | + <%= render :partial => partial_for_class(task.class, nil, :accept_details), :locals => {:task => task, :f => f} %> | |
53 | + </div> | |
54 | + <% end %> | |
55 | + | |
56 | + <% if task.reject_details %> | |
57 | + <div id="on-reject-information-<%=task.id%>" style="display: none"> | |
58 | + <%= render :partial => partial_for_class(task.class, nil, :reject_details), :locals => {:task => task, :f => f} %> | |
59 | + </div> | |
60 | + <% end %> | |
61 | + | |
62 | + <div class="formfieldline"> | |
63 | + <div class="formfield tag-list-fields"> | |
64 | + <%= labelled_text_field(_('Tags'),"tasks[#{task.id}][task][tag_list]", task.tags_from(nil).to_s, :size => 36, :class => 'tag-list','data-submit-values'=>"{'task_id':'#{task.id}'}") %> | |
65 | + </div> | |
98 | 66 | </div> |
67 | + | |
68 | + <% end %> | |
69 | + | |
70 | + <% unless @view_only #MODERATOR VIEW %> | |
71 | + <div class="confirm_evaluation_toolbar"> | |
72 | + <div class="confirm_evaluation_button"> | |
73 | + <a data-task-id="<%= task.id %>" class="disabled" href="#task-<%= task.id %>" | |
74 | + data-href='<%="/myprofile/#{profile.identifier}/plugin/proposals_discussion/confirm_tasks"%>'>Confirmar</span> | |
99 | 75 | </div> |
76 | + </div> | |
77 | + <% end %> | |
100 | 78 | |
79 | + <% if @view_only # EVALUATOR VIEW %> | |
101 | 80 | <div class="confirm_evaluation_toolbar"> |
102 | 81 | <div class="confirm_evaluation_button"> |
103 | 82 | <a data-task-id="<%= task.id %>" class="disabled" href="#task-<%= task.id %>" |
104 | - data-href='<%="/myprofile/#{profile.identifier}/plugin/proposals_discussion/evaluate_tasks/"%>'>Confirmar</span> | |
83 | + data-href='<%="/myprofile/#{profile.identifier}/plugin/proposals_discussion/evaluate_tasks"%>'>Confirmar</span> | |
105 | 84 | </div> |
106 | 85 | </div> |
107 | 86 | ... | ... |
views/proposals_discussion_plugin_tasks/_task_accept_details.html.erb
... | ... | @@ -0,0 +1,5 @@ |
1 | +<% unless @view_only %> | |
2 | + <%= f.fields_for 'article', OpenStruct.new(task.article) do |a| %> | |
3 | + <%= select_profile_folder(_('Select the folder where the article must be published'), "tasks[#{task.id}][task][article_parent_id]", task.target, task.article[:parent_id]) %> | |
4 | + <% end %> | |
5 | +<% end %> | ... | ... |
views/proposals_discussion_plugin_tasks/index.html.erb
... | ... | @@ -128,9 +128,31 @@ |
128 | 128 | |
129 | 129 | taskElement.find('div.confirm_evaluation_button a').removeClass('disabled'); |
130 | 130 | |
131 | - $(el).addClass("checked"); | |
131 | + var checkedButton = $(el); | |
132 | + checkedButton.addClass("checked"); | |
133 | + | |
134 | + var flag_action = checkedButton.data('flag-action'); | |
135 | + var animation_options = {duration:'fast', queue: true}; | |
136 | + if(flag_action == 'approve_proposal'){ | |
137 | + $('#on-reject-information-' + task_id).hide(animation_options); | |
138 | + $('#on-skip-information-' + task_id).hide(animation_options); | |
139 | + $('#on-accept-information-' + task_id).show(animation_options); | |
140 | + | |
141 | + } else if(flag_action == 'reprove_proposal') { | |
142 | + $('#on-skip-information-' + task_id).hide(animation_options); | |
143 | + $('#on-accept-information-' + task_id) | |
144 | + .hide( | |
145 | + { | |
146 | + duration:'fast', | |
147 | + complete: function() { | |
148 | + $('#on-reject-information-' + task_id).show('fast'); | |
149 | + } | |
150 | + }); | |
151 | + | |
152 | + } | |
132 | 153 | } |
133 | 154 | |
155 | + | |
134 | 156 | function evaluate_task(el) { |
135 | 157 | |
136 | 158 | if($(el).hasClass('disabled')) { |
... | ... | @@ -147,10 +169,21 @@ |
147 | 169 | |
148 | 170 | var flag_action = checkedButton.data('flag-action'); |
149 | 171 | |
172 | + var form = $(el).closest("form"); | |
173 | + | |
174 | + var tag_list = form.find("input.tag-list[type='text']").val(); | |
175 | + | |
150 | 176 | var params = { |
151 | - task_id: task_id | |
177 | + task_id: task_id, | |
178 | + tag_list: tag_list | |
152 | 179 | }; |
153 | 180 | |
181 | + if(flag_action == 'approve_proposal'){ | |
182 | + params['article_parent_id'] = form.find('#tasks_' + task_id + '_task_article_parent_id').val(); | |
183 | + } else if(flag_action == 'reprove_proposal') { | |
184 | + params['email_template_id'] = form.find('#tasks_' + task_id + '_task_email_template_id').val(); | |
185 | + } | |
186 | + | |
154 | 187 | jQuery.post(url + "/" + flag_action, params , |
155 | 188 | function(data) { |
156 | 189 | if (data.success) { |
... | ... | @@ -159,8 +192,8 @@ |
159 | 192 | } else { |
160 | 193 | $(el).effect("highlight", {color: 'red'}); |
161 | 194 | } |
162 | - if (data.notice) { | |
163 | - display_notice(data.notice); | |
195 | + if (data.message) { | |
196 | + display_notice(data.message); | |
164 | 197 | } |
165 | 198 | }); |
166 | 199 | } | ... | ... |