Implements graph for dashboard
Implements graph secion for dashboard. Dashboard related actions have been agrupated inside a menu in the admin section. Minor bugfixes.
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
# Place all the behaviors and hooks related to the matching controller here.
|
||||
# All this logic will automatically be available in application.js.
|
||||
# You can use CoffeeScript in this file: http://coffeescript.org/
|
||||
@@ -73,51 +73,3 @@
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
||||
// function drawProposalGraph(data) {
|
||||
// var xColumnValues = [ 'x' ],
|
||||
// progressColumnValues = [ 'Progreso' ]; // [ '<%= t('.progress') %>' ],
|
||||
// key;
|
||||
//
|
||||
// for (key in data) {
|
||||
// if (data.hasOwnProperty(key)) {
|
||||
// xColumnValues.push(key);
|
||||
// progressColumnValues.push(data[key]);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// c3.generate({
|
||||
// bindto: '#proposal-graph',
|
||||
// data: {
|
||||
// x: 'x',
|
||||
// columns: [
|
||||
// xColumnValues,
|
||||
// progressColumnValues
|
||||
// ]
|
||||
// },
|
||||
// axis: {
|
||||
// y: {
|
||||
// label: {
|
||||
// text: 'Apoyos', // '<%= t '.supports' %> ',
|
||||
// position: 'outer-middle'
|
||||
// }
|
||||
// },
|
||||
// x: {
|
||||
// type: 'category'
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// $(document).ready(function () {
|
||||
// $.ajax({
|
||||
// url: '<%= supports_proposal_dashboard_index_path(proposal, format: :json) %>',
|
||||
// cache: false,
|
||||
// success: function (data) {
|
||||
// drawProposalGraph(data);
|
||||
// },
|
||||
// data: {
|
||||
// group_by: '<%= params[:group_by] %>'
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
// Place all the styles related to the Admin::ProposalDashboardActions controller here.
|
||||
// They will automatically be included in application.css.
|
||||
// You can use Sass (SCSS) here: http://sass-lang.com/
|
||||
@@ -38,8 +38,13 @@ class Admin::ProposalDashboardActionsController < Admin::BaseController
|
||||
end
|
||||
|
||||
def destroy
|
||||
proposal_dashboard_action.destroy
|
||||
redirect_to admin_proposal_dashboard_actions_path, notice: t('admin.proposal_dashboard_actions.delete.success')
|
||||
if proposal_dashboard_action.destroy
|
||||
flash[:notice] = t('admin.proposal_dashboard_actions.delete.success')
|
||||
else
|
||||
flash[:error] = proposal_dashboard_action.errors.full_messages.join(',')
|
||||
end
|
||||
|
||||
redirect_to admin_proposal_dashboard_actions_path
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Moderation::AdministratorTasksController < Moderation::BaseController
|
||||
helper_method :administrator_task
|
||||
|
||||
def index
|
||||
authorize! :index, AdministratorTask
|
||||
@administrator_tasks = AdministratorTask.pending
|
||||
end
|
||||
|
||||
def edit
|
||||
authorize! :edit, administrator_task
|
||||
end
|
||||
|
||||
def update
|
||||
authorize! :update, administrator_task
|
||||
|
||||
administrator_task.update(user: current_user, executed_at: Time.now)
|
||||
redirect_to moderation_administrator_tasks_path, { flash: { notice: t('.success') } }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def administrator_task
|
||||
@administrator_task ||= AdministratorTask.find(params[:id])
|
||||
end
|
||||
end
|
||||
@@ -44,6 +44,10 @@ module AdminHelper
|
||||
["homepage", "cards"].include?(controller_name)
|
||||
end
|
||||
|
||||
def menu_proposals_dashboard?
|
||||
["proposal_dashboard_actions", "administrator_tasks"].include?(controller_name)
|
||||
end
|
||||
|
||||
def official_level_options
|
||||
options = [["", 0]]
|
||||
(1..5).each do |i|
|
||||
|
||||
@@ -223,10 +223,6 @@
|
||||
<%= link_to t("admin.menu.geozones"), admin_geozones_path %>
|
||||
</li>
|
||||
|
||||
<li <%= 'class=is_active' if controller_name == 'proposal_dashboard_actions' %>>
|
||||
<%= link_to ProposalDashboardAction.model_name.human(count: 2), admin_proposal_dashboard_actions_path %>
|
||||
</li>
|
||||
|
||||
<li <%= "class=is-active" if controller_name == "images" &&
|
||||
controller.class.parent != Admin::Poll::Questions::Answers %>>
|
||||
<%= link_to t("admin.menu.site_customization.images"), admin_site_customization_images_path %>
|
||||
@@ -238,5 +234,21 @@
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li class="section-title">
|
||||
<a href="#">
|
||||
<span class="icon-check"></span>
|
||||
<strong><%= t("admin.menu.proposals_dashboard") %></strong>
|
||||
</a>
|
||||
<ul <%= "class=is-active" if menu_proposals_dashboard? %>>
|
||||
<li <%= "class=is-active" if controller_name == "proposal_dashboard_actions" %>>
|
||||
<%= link_to ProposalDashboardAction.model_name.human(count: 2), admin_proposal_dashboard_actions_path %>
|
||||
</li>
|
||||
|
||||
<li <%= "class=is-active" if controller_name == "administrator_tasks" %>>
|
||||
<%= link_to admin_administrator_tasks_path do %>
|
||||
<%= t("admin.menu.administrator_tasks") %>
|
||||
<% end %>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</div>
|
||||
|
||||
@@ -42,12 +42,5 @@
|
||||
<%= t("moderation.menu.users") %>
|
||||
<% end %>
|
||||
</li>
|
||||
|
||||
<li <%= 'class=is-active' if controller_name == 'administrator_tasks' %>>
|
||||
<%= link_to moderation_administrator_tasks_path do %>
|
||||
<span class="icon-check"></span>
|
||||
<%= t 'moderation.menu.administrator_tasks' %>
|
||||
<% end %>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<%= form_for [:moderation, administrator_task] do |f| %>
|
||||
|
||||
<div class="callout">
|
||||
<h5><%=t '.proposal', title: administrator_task.source.proposal.title %></h5>
|
||||
<p><%=t '.request', title: administrator_task.source.proposal_dashboard_action.title %></p>
|
||||
<%== administrator_task.source.comments unless administrator_task.source.comments.blank? %>
|
||||
<%= link_to t('.check_details'), proposal_path(administrator_task.source.proposal), target: '_blank' %>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="actions small-12 large-3 medium-3 column">
|
||||
<%= f.submit(class: 'button expanded', value: t('.solve')) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,9 +0,0 @@
|
||||
<div class="row">
|
||||
<div class="small-12 column">
|
||||
<%= back_link_to moderation_administrator_tasks_path, t('.back') %>
|
||||
|
||||
<h1><%= t('.solving') %></h1>
|
||||
|
||||
<%= render 'form' %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,34 +0,0 @@
|
||||
<h2 class="inline-block">
|
||||
<%= AdministratorTask.model_name.human(count: 2) %>
|
||||
</h2>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><%= AdministratorTask.human_attribute_name(:source) %></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<% if @administrator_tasks.empty? %>
|
||||
<tr>
|
||||
<td colspan="100%"><%= t '.no_records' %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
||||
<% @administrator_tasks.each do |task| %>
|
||||
<tr id="<%= dom_id(task) %>">
|
||||
<td>
|
||||
<%= task.source.proposal.title %>:
|
||||
<%= task.source.proposal_dashboard_action.title %>
|
||||
</td>
|
||||
<td style="text-align: right">
|
||||
<%= link_to t('.solve'),
|
||||
edit_moderation_administrator_task_path(task),
|
||||
class: 'edit-banner button hollow' %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -545,6 +545,8 @@ en:
|
||||
title_booths: Voting booths
|
||||
legislation: Collaborative Legislation
|
||||
users: Users
|
||||
proposals_dashboard: Proposals dashboard
|
||||
administrator_tasks: Pending tasks
|
||||
administrators:
|
||||
index:
|
||||
title: Administrators
|
||||
@@ -1318,3 +1320,17 @@ en:
|
||||
submit_header: Save header
|
||||
card_title: Edit card
|
||||
submit_card: Save card
|
||||
administrator_tasks:
|
||||
index:
|
||||
solve: Solve
|
||||
no_records: There are no pending tasks
|
||||
edit:
|
||||
back: Back to pending tasks list
|
||||
solving: Solve pending task
|
||||
form:
|
||||
solve: Mark as solved
|
||||
proposal: "The proposal: %{title}"
|
||||
request: "Has requested: %{title}"
|
||||
check_details: Check the proposal details
|
||||
update:
|
||||
success: The task has been marked as solved.
|
||||
|
||||
@@ -49,7 +49,6 @@ en:
|
||||
proposals: Proposals
|
||||
proposal_notifications: Proposals notifications
|
||||
users: Block users
|
||||
administrator_tasks: Pending tasks
|
||||
proposals:
|
||||
index:
|
||||
block_authors: Block authors
|
||||
@@ -96,17 +95,3 @@ en:
|
||||
search_placeholder: email or name of user
|
||||
title: Block users
|
||||
notice_hide: User blocked. All of this user's debates and comments have been hidden.
|
||||
administrator_tasks:
|
||||
index:
|
||||
solve: Solve
|
||||
no_records: There are no pending tasks
|
||||
edit:
|
||||
back: Back to pending tasks list
|
||||
solving: Solve pending task
|
||||
form:
|
||||
solve: Mark as solved
|
||||
proposal: "The proposal: %{title}"
|
||||
request: "Has requested: %{title}"
|
||||
check_details: Check the proposal details
|
||||
update:
|
||||
success: The task has been marked as solved.
|
||||
|
||||
@@ -545,6 +545,8 @@ es:
|
||||
title_booths: Urnas de votación
|
||||
legislation: Legislación colaborativa
|
||||
users: Usuarios
|
||||
proposals_dashboard: Panel de control de propuestas
|
||||
administrator_tasks: Tareas pendientes
|
||||
administrators:
|
||||
index:
|
||||
title: Administradores
|
||||
@@ -1319,3 +1321,17 @@ es:
|
||||
submit_header: Guardar encabezado
|
||||
card_title: Editar tarjeta
|
||||
submit_card: Guardar tarjeta
|
||||
administrator_tasks:
|
||||
index:
|
||||
solve: Resolver
|
||||
no_records: No hay tareas pendientes
|
||||
edit:
|
||||
back: Volver a la lista de tareas pendientes
|
||||
solving: Resolver tarea pendiente
|
||||
form:
|
||||
solve: Marcar como resuelta
|
||||
proposal: "La propuesta: %{title}"
|
||||
request: "Ha solicitado: %{title}"
|
||||
check_details: Ver los detalles de la propuesta
|
||||
update:
|
||||
success: La tarea ha sido marcada como resuelta
|
||||
|
||||
@@ -49,7 +49,6 @@ es:
|
||||
proposals: Propuestas
|
||||
proposal_notifications: Notificaciones de propuestas
|
||||
users: Bloquear usuarios
|
||||
administrator_tasks: Tareas pendientes
|
||||
proposals:
|
||||
index:
|
||||
block_authors: Bloquear autores
|
||||
@@ -96,17 +95,3 @@ es:
|
||||
search_placeholder: email o nombre de usuario
|
||||
title: Bloquear usuarios
|
||||
notice_hide: Usuario bloqueado. Se han ocultado todos sus debates y comentarios.
|
||||
administrator_tasks:
|
||||
index:
|
||||
solve: Resolver
|
||||
no_records: No hay tareas pendientes
|
||||
edit:
|
||||
back: Volver a la lista de tareas pendientes
|
||||
solving: Resolver tarea pendiente
|
||||
form:
|
||||
solve: Marcar como resuelta
|
||||
proposal: "La propuesta: %{title}"
|
||||
request: "Ha solicitado: %{title}"
|
||||
check_details: Ver los detalles de la propuesta
|
||||
update:
|
||||
success: La tarea ha sido marcada como resuelta
|
||||
|
||||
@@ -196,5 +196,6 @@ namespace :admin do
|
||||
resources :feeds, only: [:update]
|
||||
end
|
||||
|
||||
resources :proposal_dashboard_actions, only: %i[index new create edit update destroy]
|
||||
resources :proposal_dashboard_actions, only: [:index, :new, :create, :edit, :update, :destroy]
|
||||
resources :administrator_tasks, only: [:index, :edit, :update]
|
||||
end
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe 'Administrator tasks moderation' do
|
||||
let(:moderator) { create(:moderator) }
|
||||
|
||||
before do
|
||||
login_as moderator.user
|
||||
end
|
||||
|
||||
context 'when accessing the pending task list' do
|
||||
context 'and no pending task' do
|
||||
before do
|
||||
visit moderation_administrator_tasks_path
|
||||
end
|
||||
|
||||
it 'informs that there are no pending tasks' do
|
||||
expect(page).to have_content('There are no pending tasks')
|
||||
end
|
||||
end
|
||||
|
||||
context 'and there are pending tasks' do
|
||||
let!(:task) { create :administrator_task, :pending }
|
||||
|
||||
before do
|
||||
visit moderation_administrator_tasks_path
|
||||
end
|
||||
|
||||
it 'shows the related proposal title' do
|
||||
expect(page).to have_content(task.source.proposal.title)
|
||||
end
|
||||
|
||||
it 'shows the requested action title' do
|
||||
expect(page).to have_content(task.source.proposal_dashboard_action.title)
|
||||
end
|
||||
|
||||
it 'has a link that allows solving the request' do
|
||||
expect(page).to have_link('Solve')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when solving a pending task' do
|
||||
let!(:task) { create :administrator_task, :pending }
|
||||
|
||||
before do
|
||||
visit moderation_administrator_tasks_path
|
||||
click_link 'Solve'
|
||||
end
|
||||
|
||||
it 'contains a link to the proposal' do
|
||||
expect(page).to have_link('Check the proposal details')
|
||||
end
|
||||
|
||||
it 'contains a button that solves the request' do
|
||||
expect(page).to have_button('Mark as solved')
|
||||
end
|
||||
|
||||
it 'shows the comments added by the user during the request' do
|
||||
expect(page).to have_content(task.source.comments)
|
||||
end
|
||||
|
||||
context 'and the Mark as solved button is pressed' do
|
||||
before do
|
||||
click_button 'Mark as solved'
|
||||
end
|
||||
|
||||
it 'The proposal dissapears from the list' do
|
||||
expect(page).not_to have_content(task.source.proposal.title)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -28,6 +28,8 @@ describe Abilities::Administrator do
|
||||
let(:hidden_comment) { create(:comment, :hidden) }
|
||||
let(:hidden_proposal) { create(:proposal, :hidden) }
|
||||
|
||||
let(:administrator_task) { create(:administrator_task) }
|
||||
|
||||
it { should be_able_to(:index, Debate) }
|
||||
it { should be_able_to(:show, debate) }
|
||||
it { should be_able_to(:vote, debate) }
|
||||
@@ -88,4 +90,7 @@ describe Abilities::Administrator do
|
||||
it { should_not be_able_to(:destroy, budget_investment_image) }
|
||||
it { should_not be_able_to(:destroy, budget_investment_document) }
|
||||
it { should be_able_to(:manage, ProposalDashboardAction) }
|
||||
|
||||
it { is_expected.to be_able_to :manage, AdministratorTask }
|
||||
it { is_expected.to be_able_to :manage, administrator_task }
|
||||
end
|
||||
|
||||
@@ -21,7 +21,6 @@ describe Abilities::Moderator do
|
||||
let(:hidden_debate) { create(:debate, :hidden) }
|
||||
let(:hidden_comment) { create(:comment, :hidden) }
|
||||
let(:hidden_proposal) { create(:proposal, :hidden) }
|
||||
let(:administrator_task) { create(:administrator_task) }
|
||||
|
||||
it { should be_able_to(:index, Debate) }
|
||||
it { should be_able_to(:show, debate) }
|
||||
@@ -32,9 +31,6 @@ describe Abilities::Moderator do
|
||||
|
||||
it { should be_able_to(:read, Organization) }
|
||||
|
||||
it { is_expected.to be_able_to :manage, AdministratorTask }
|
||||
it { is_expected.to be_able_to :manage, administrator_task }
|
||||
|
||||
describe "organizations" do
|
||||
let(:pending_organization) { create(:organization) }
|
||||
let(:rejected_organization) { create(:organization, :rejected) }
|
||||
|
||||
Reference in New Issue
Block a user