Commit 2e0b07f0b7684047ba8086e2e2158dfb0a92ba2d

Authored by Ábner Silva de Oliveira
1 parent 7b733153

added feature to allow confirm proposals individually

controllers/myprofile/proposals_discussion_plugin_confirm_tasks_controller.rb 0 → 100644
@@ -0,0 +1,43 @@ @@ -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 class ProposalsDiscussionPluginEvaluateTasksController < MyProfileController 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 if request.post? && params[:task_id] 6 if request.post? && params[:task_id]
7 result = { 7 result = {
8 success: false, 8 success: false,
9 message: _('Error flagging proposal. Please, contact the system admin') 9 message: _('Error flagging proposal. Please, contact the system admin')
10 } 10 }
11 11
  12 +
12 task = Task.to(profile).find_by_id params[:task_id] 13 task = Task.to(profile).find_by_id params[:task_id]
13 save = task.flag_accept_proposal(current_person) 14 save = task.flag_accept_proposal(current_person)
14 15
@@ -20,7 +21,8 @@ class ProposalsDiscussionPluginEvaluateTasksController &lt; MyProfileController @@ -20,7 +21,8 @@ class ProposalsDiscussionPluginEvaluateTasksController &lt; MyProfileController
20 render json: result 21 render json: result
21 end 22 end
22 23
23 - def flag_reprove_proposal 24 + def reprove_proposal
  25 + result = {}
24 if request.post? && params[:task_id] 26 if request.post? && params[:task_id]
25 result = { 27 result = {
26 success: false, 28 success: false,
public/style.css
@@ -326,6 +326,7 @@ form .proposals-discussion-plugin .body textarea { @@ -326,6 +326,7 @@ form .proposals-discussion-plugin .body textarea {
326 width: auto; 326 width: auto;
327 float: left; 327 float: left;
328 padding: 5px; 328 padding: 5px;
  329 + border: 1px solid #EEEEEE;
329 } 330 }
330 331
331 .evaluation_button img { 332 .evaluation_button img {
@@ -344,7 +345,8 @@ form .proposals-discussion-plugin .body textarea { @@ -344,7 +345,8 @@ form .proposals-discussion-plugin .body textarea {
344 } 345 }
345 346
346 div.evaluation_button.checked { 347 div.evaluation_button.checked {
347 - border: 1px dotted black; 348 + border: 1px dashed black;
  349 + background-color: white;
348 } 350 }
349 351
350 .evaluation_button.approval span { 352 .evaluation_button.approval span {
@@ -367,8 +369,9 @@ div.evaluation_button.checked { @@ -367,8 +369,9 @@ div.evaluation_button.checked {
367 } 369 }
368 370
369 div.confirm_evaluation_button a { 371 div.confirm_evaluation_button a {
370 - text-decoration: none; 372 + text-decoration: underline;
371 color: #003366; 373 color: #003366;
  374 + font-size: 28px;
372 } 375 }
373 376
374 div.confirm_evaluation_button a:hover { 377 div.confirm_evaluation_button a:hover {
views/proposals_discussion_plugin_tasks/_task.html.erb
@@ -19,28 +19,6 @@ @@ -19,28 +19,6 @@
19 </div> 19 </div>
20 <% end %> 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 <div class="task_date"><%= show_time(task.created_at) %></div> 22 <div class="task_date"><%= show_time(task.created_at) %></div>
45 23
46 <%= render :partial => 'task_title', :locals => {:task => task} %> 24 <%= render :partial => 'task_title', :locals => {:task => task} %>
@@ -49,59 +27,60 @@ @@ -49,59 +27,60 @@
49 <%= task_information(task) %> 27 <%= task_information(task) %>
50 </div> 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 <div class="evaluation_button approval" 31 <div class="evaluation_button approval"
69 data-url='<%="/myprofile/#{profile.identifier}/plugin/proposals_discussion/evaluate_tasks/flag_approve_proposal"%>' 32 data-url='<%="/myprofile/#{profile.identifier}/plugin/proposals_discussion/evaluate_tasks/flag_approve_proposal"%>'
70 data-task-id="<%= task.id %>" 33 data-task-id="<%= task.id %>"
71 - data-flag-action="flag_approve_proposal"> 34 + data-flag-action="approve_proposal">
72 <img class="" src="/plugins/proposals_discussion/images/approval.png"> 35 <img class="" src="/plugins/proposals_discussion/images/approval.png">
73 <span>Aprovar</span> 36 <span>Aprovar</span>
74 </div> 37 </div>
75 <div id="evaluation_button_#{task.id}" class="evaluation_button reproval" 38 <div id="evaluation_button_#{task.id}" class="evaluation_button reproval"
76 data-url='<%="/myprofile/#{profile.identifier}/plugin/proposals_discussion/evaluate_tasks/flag_reject_proposal"%>' 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 <img class="" src="/plugins/proposals_discussion/images/reproval.png"> 41 <img class="" src="/plugins/proposals_discussion/images/reproval.png">
79 <span>Reprovar</span> 42 <span>Reprovar</span>
80 </div> 43 </div>
81 </div> 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 </div> 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 </div> 75 </div>
  76 + </div>
  77 + <% end %>
100 78
  79 + <% if @view_only # EVALUATOR VIEW %>
101 <div class="confirm_evaluation_toolbar"> 80 <div class="confirm_evaluation_toolbar">
102 <div class="confirm_evaluation_button"> 81 <div class="confirm_evaluation_button">
103 <a data-task-id="<%= task.id %>" class="disabled" href="#task-<%= task.id %>" 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 </div> 84 </div>
106 </div> 85 </div>
107 86
views/proposals_discussion_plugin_tasks/_task_accept_details.html.erb
@@ -0,0 +1,5 @@ @@ -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,9 +128,31 @@
128 128
129 taskElement.find('div.confirm_evaluation_button a').removeClass('disabled'); 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 function evaluate_task(el) { 156 function evaluate_task(el) {
135 157
136 if($(el).hasClass('disabled')) { 158 if($(el).hasClass('disabled')) {
@@ -147,10 +169,21 @@ @@ -147,10 +169,21 @@
147 169
148 var flag_action = checkedButton.data('flag-action'); 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 var params = { 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 jQuery.post(url + "/" + flag_action, params , 187 jQuery.post(url + "/" + flag_action, params ,
155 function(data) { 188 function(data) {
156 if (data.success) { 189 if (data.success) {
@@ -159,8 +192,8 @@ @@ -159,8 +192,8 @@
159 } else { 192 } else {
160 $(el).effect("highlight", {color: 'red'}); 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 }