From 3e6cbc95058c7a5f12420dbc416b5b959d6c361a Mon Sep 17 00:00:00 2001 From: Angel Perez Date: Thu, 28 Jun 2018 09:26:50 -0400 Subject: [PATCH] Add basic frontend for budget executions list --- .../budgets/executions_controller.rb | 39 +++++++++++ app/models/abilities/everyone.rb | 2 +- app/views/budgets/executions/show.html.erb | 64 +++++++++++++++++++ config/locales/en/budgets.yml | 3 + config/locales/es/budgets.yml | 3 + config/routes/budget.rb | 1 + 6 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 app/controllers/budgets/executions_controller.rb create mode 100644 app/views/budgets/executions/show.html.erb diff --git a/app/controllers/budgets/executions_controller.rb b/app/controllers/budgets/executions_controller.rb new file mode 100644 index 000000000..d513c3924 --- /dev/null +++ b/app/controllers/budgets/executions_controller.rb @@ -0,0 +1,39 @@ +module Budgets + class ExecutionsController < ApplicationController + before_action :load_budget + before_action :load_heading + before_action :load_investments + + load_and_authorize_resource :budget + + def show + authorize! :read_executions, @budget + @statuses = ::Budget::Investment::Status.all + end + + private + + def load_budget + @budget = Budget.find_by(slug: params[:id]) || Budget.find_by(id: params[:id]) + end + + def load_heading + @heading = if params[:heading_id].present? + @budget.headings.find_by(slug: params[:heading_id]) + else + @heading = @budget.headings.first + end + end + + def load_investments + @investments = Budget::Result.new(@budget, @heading).investments.joins(:milestones) + + if params[:status].present? + @investments.where('budget_investment_milestones.status_id = ?', params[:status]) + else + @investments + end + end + + end +end diff --git a/app/models/abilities/everyone.rb b/app/models/abilities/everyone.rb index 23cfdc971..18927cc80 100644 --- a/app/models/abilities/everyone.rb +++ b/app/models/abilities/everyone.rb @@ -22,7 +22,7 @@ module Abilities can [:read], Budget can [:read], Budget::Group can [:read, :print, :json_data], Budget::Investment - can :read_results, Budget, phase: "finished" + can [:read_results, :read_executions], Budget, phase: "finished" can :new, DirectMessage can [:read, :debate, :draft_publication, :allegations, :result_publication, :proposals], Legislation::Process, published: true can [:read, :changes, :go_to_version], Legislation::DraftVersion diff --git a/app/views/budgets/executions/show.html.erb b/app/views/budgets/executions/show.html.erb new file mode 100644 index 000000000..8cab9ba10 --- /dev/null +++ b/app/views/budgets/executions/show.html.erb @@ -0,0 +1,64 @@ +<% provide :title, t('budgets.executions.page_title', budget: @budget.name) %> +<% content_for :meta_description do %><%= @budget.description_for_phase('finished') %><% end %> +<% provide :social_media_meta_tags do %> +<%= render 'shared/social_media_meta_tags', + social_url: budget_executions_url(@budget), + social_title: @budget.name, + social_description: @budget.description_for_phase('finished') %> +<% end %> + +<% content_for :canonical do %> + <%= render 'shared/canonical', href: budget_executions_url(@budget) %> +<% end %> + +
+
+
+
+ <%= back_link_to budgets_path %> +

+ <%= t('budgets.executions.heading') %>
+ <%= @budget.name %> +

+
+
+
+
+ +
+
+
    +
  • + <%= link_to t('budgets.results.link'), budget_results_path(@budget) %> +
  • +
  • + <%= link_to t('budgets.executions.link'), budget_executions_path(@budget), class: 'is-active' %> +
  • +
+
+
+ +
+
+

+ <%= t('budgets.executions.heading_selection_title') %> +

+ +
+ +
+ <%= form_tag(budget_executions_path(budget: @budget), method: :get) do %> +
+ <%= select_tag 'status', options_from_collection_for_select(@statuses, 'id', 'name') %> +
+ <% end %> +
+
diff --git a/config/locales/en/budgets.yml b/config/locales/en/budgets.yml index 6147af785..59cf697be 100644 --- a/config/locales/en/budgets.yml +++ b/config/locales/en/budgets.yml @@ -176,6 +176,9 @@ en: not_selected_investment_proyects: List of all investment projects not selected for balloting executions: link: "Execution" + page_title: "%{budget} - Executions" + heading: "Participatory budget executions" + heading_selection_title: "By district" phases: errors: dates_range_invalid: "Start date can't be equal or later than End date" diff --git a/config/locales/es/budgets.yml b/config/locales/es/budgets.yml index 1674dce06..90aed7ed8 100644 --- a/config/locales/es/budgets.yml +++ b/config/locales/es/budgets.yml @@ -176,6 +176,9 @@ es: not_selected_investment_proyects: Ver lista de proyectos de gasto no seleccionados para la votación final executions: link: "Ejecución" + page_title: "%{budget} - Ejecuciones" + heading: "Ejecuciones presupuestos participativos" + heading_selection_title: "Ámbito de actuación" phases: errors: dates_range_invalid: "La fecha de comienzo no puede ser igual o superior a la de finalización" diff --git a/config/routes/budget.rb b/config/routes/budget.rb index b3422744f..475d5496a 100644 --- a/config/routes/budget.rb +++ b/config/routes/budget.rb @@ -15,6 +15,7 @@ resources :budgets, only: [:show, :index] do end resource :results, only: :show, controller: "budgets/results" + resource :executions, only: :show, controller: 'budgets/executions' end scope '/participatory_budget' do