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 @@
  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 &lt; 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 }
... ...