Merge pull request #1523 from consul/budgets-polish

Budgets polish
This commit is contained in:
Raimond Garcia
2017-05-06 05:08:27 +02:00
committed by GitHub
17 changed files with 266 additions and 41 deletions

View File

@@ -114,4 +114,10 @@ class ApplicationController < ActionController::Base
store_location_for(:user, request.path)
end
end
def set_default_budget_filter
if @budget.try(:balloting?)
params[:filter] ||= "selected"
end
end
end

View File

@@ -3,6 +3,9 @@ module Budgets
load_and_authorize_resource :budget
load_and_authorize_resource :group, class: "Budget::Group"
before_action :set_default_budget_filter, only: :show
has_filters %w{not_unfeasible feasible unfeasible unselected selected}, only: [:show]
def show
end

View File

@@ -14,18 +14,20 @@ module Budgets
before_action :load_heading, only: [:index, :show]
before_action :set_random_seed, only: :index
before_action :load_categories, only: [:index, :new, :create]
before_action :set_default_budget_filter, only: :index
feature_flag :budgets
has_orders %w{most_voted newest oldest}, only: :show
has_orders ->(c) { c.instance_variable_get(:@budget).investments_orders }, only: :index
has_filters %w{not_unfeasible feasible unfeasible unselected selected}, only: [:index, :show]
invisible_captcha only: [:create, :update], honeypot: :subtitle, scope: :budget_investment
respond_to :html, :js
def index
@investments = @investments.apply_filters_and_search(@budget, params).send("sort_by_#{@current_order}").page(params[:page]).per(10).for_render
@investments = @investments.apply_filters_and_search(@budget, params, @current_filter).send("sort_by_#{@current_order}").page(params[:page]).per(10).for_render
@investment_ids = @investments.pluck(:id)
load_investment_votes(@investments)
@tag_cloud = tag_cloud
@@ -107,6 +109,7 @@ module Budgets
def tag_cloud
TagCloud.new(Budget::Investment, params[:search])
end
end
end

View File

@@ -3,6 +3,9 @@ class BudgetsController < ApplicationController
feature_flag :budgets
load_and_authorize_resource
before_action :set_default_budget_filter, only: :show
has_filters %w{not_unfeasible feasible unfeasible unselected selected}, only: :show
respond_to :html, :js
def show

View File

@@ -46,7 +46,8 @@ class Budget
scope :not_unfeasible, -> { where.not(feasibility: "unfeasible") }
scope :undecided, -> { where(feasibility: "undecided") }
scope :with_supports, -> { where('cached_votes_up > 0') }
scope :selected, -> { where(selected: true) }
scope :selected, -> { feasible.where(selected: true) }
scope :unselected, -> { feasible.where(selected: false) }
scope :last_week, -> { where("created_at >= ?", 7.days.ago)}
scope :by_group, -> (group_id) { where(group_id: group_id) }
@@ -217,6 +218,12 @@ class Budget
budget.balloting?
end
def should_show_price?
feasible? &&
selected? &&
(budget.reviewing_ballots? || budget.finished?)
end
def should_show_price_info?
feasible? &&
price_explanation.present? &&
@@ -227,13 +234,9 @@ class Budget
budget.formatted_amount(price)
end
def self.apply_filters_and_search(budget, params)
def self.apply_filters_and_search(budget, params, current_filter=nil)
investments = all
if budget.balloting?
investments = investments.selected
else
investments = params[:unfeasible].present? ? investments.unfeasible : investments.not_unfeasible
end
investments = investments.send(current_filter) if current_filter.present?
investments = investments.by_heading(params[:heading_id]) if params[:heading_id].present?
investments = investments.search(params[:search]) if params[:search].present?
investments
@@ -245,5 +248,6 @@ class Budget
self.group_id = self.heading.try(:group_id) if self.heading_id_changed?
self.budget_id ||= self.heading.try(:group).try(:budget_id)
end
end
end

View File

@@ -7,15 +7,21 @@
</div>
</div>
<% if params[:unfeasible] %>
<% if @current_filter == "unfeasible" %>
<div class="row margin-top">
<div class="small-12 column">
<h3><%= t("budgets.groups.show.unfeasible_title") %></h3>
</div>
</div>
<% elsif @current_filter == "unselected" %>
<div class="row margin-top">
<div class="small-12 column">
<h3><%= t("budgets.groups.show.unselected_title") %></h3>
</div>
</div>
<% end %>
<div class="row margin-top">
<div class="row margin">
<div id="select-district" class="small-12 medium-7 column select-district">
<div class="row">
<% @group.headings.each_slice(7) do |slice| %>
@@ -25,7 +31,7 @@
class="<%= css_for_ballot_heading(heading) %>">
<%= link_to heading.name,
budget_investments_path(heading_id: heading.id,
unfeasible: params[:unfeasible]),
filter: @current_filter),
data: { no_turbolink: true } %><br>
</span>
<% end %>
@@ -39,11 +45,24 @@
</div>
</div>
<% if params[:unfeasible].blank? %>
<div class="row margin-top">
<% unless @current_filter == "unfeasible" %>
<div class="row">
<div class="small-12 column">
<small><%= link_to t("budgets.groups.show.unfeasible"),
budget_path(@budget, unfeasible: 1) %></small>
<small>
<%= link_to t("budgets.groups.show.unfeasible"),
budget_path(@budget, filter: "unfeasible") %>
</small>
</div>
</div>
<% end %>
<% unless @current_filter == "unselected" %>
<div class="row">
<div class="small-12 column">
<small>
<%= link_to t("budgets.groups.show.unselected"),
budget_path(@budget, filter: "unselected") %>
</small>
</div>
</div>
<% end %>

View File

@@ -73,6 +73,13 @@
ballot: ballot
} %>
</div>
<% elsif investment.should_show_price? %>
<div id="<%= dom_id(investment) %>_price"
class="supports small-12 medium-3 column text-center">
<p class="investment-project-amount margin-top">
<%= investment.formatted_price %>
</p>
</div>
<% end %>
<% end %>

View File

@@ -98,6 +98,15 @@
</div>
<br>
<% end %>
<% if investment.should_show_price? %>
<div class="sidebar-divider"></div>
<h2><%= t("budgets.investments.show.price") %></h2>
<div class="supports text-center">
<p class="investment-project-amount">
<%= investment.formatted_price %>
</p>
</div>
<% end %>
<div id="social-share" class="sidebar-divider"></div>
<h2><%= t("budgets.investments.show.share") %></h2>
<div class="social-share-full">

View File

@@ -16,7 +16,7 @@
<div class="small-12 search-results margin-bottom">
<% if params[:unfeasible].present? %>
<% if @current_filter == "unfeasible" %>
<h2><%= t("budgets.investments.index.unfeasible") %>: <%= @heading.name %></h2>
<div class="callout primary margin">
<%= t("budgets.investments.index.unfeasible_text",
@@ -34,7 +34,7 @@
<% end %>
</div>
<%= render('shared/order_links', i18n_namespace: "budgets.investments.index") unless params[:unfeasible].present? %>
<%= render('shared/order_links', i18n_namespace: "budgets.investments.index") unless @current_filter == "unfeasible" %>
<% @investments.each do |investment| %>
<%= render partial: '/budgets/investments/investment', locals: {

View File

@@ -35,10 +35,12 @@
</div>
</div>
<div class="row margin-top">
<div class="row margin">
<div class="small-12 medium-9 column">
<% if params[:unfeasible] %>
<% if @current_filter == "unfeasible" %>
<h3 class="margin-bottom"><%= t("budgets.show.unfeasible_title") %></h3>
<% elsif @current_filter == "unselected" %>
<h3 class="margin-bottom"><%= t("budgets.show.unselected_title") %></h3>
<% end %>
<table class="table-fixed">
<thead>
@@ -52,12 +54,12 @@
<%= link_to group.name,
budget_investments_path(@budget,
heading_id: group.headings.first.id,
unfeasible: params[:unfeasible]),
filter: @current_filter),
data: { no_turbolink: true } %>
<% else %>
<%= link_to group.name,
budget_group_path(@budget, group,
unfeasible: params[:unfeasible]) %>
filter: @current_filter) %>
<% end %>
<br>
</td>
@@ -68,11 +70,24 @@
</div>
</div>
<% unless params[:unfeasible] %>
<div class="row margin-top">
<% unless @current_filter == "unfeasible" %>
<div class="row">
<div class="small-12 column">
<small><%= link_to t("budgets.show.unfeasible"),
budget_path(@budget, unfeasible: 1) %></small>
<small>
<%= link_to t("budgets.show.unfeasible"),
budget_path(@budget, filter: "unfeasible") %>
</small>
</div>
</div>
<% end %>
<% unless @current_filter == "unselected" %>
<div class="row">
<div class="small-12 column">
<small>
<%= link_to t("budgets.show.unselected"),
budget_path(@budget, filter: "unselected") %>
</small>
</div>
</div>
<% end %>