Add Milestone tag select filter on executions public page

This commit is contained in:
lalo
2019-04-03 09:51:13 +02:00
parent 63e0cd02d0
commit be8a0dbe8a
28 changed files with 180 additions and 38 deletions

View File

@@ -12,15 +12,15 @@ module Budgets
private
def investments_by_heading
base = @budget.investments.winners
base = base.joins(milestones: :translations).includes(:milestones)
base = base.tagged_with(params[:milestone_tag]) if params[:milestone_tag].present?
if params[:status].present?
@budget.investments.winners
.with_milestone_status_id(params[:status])
.uniq
.group_by(&:heading)
base = base.with_milestone_status_id(params[:status])
base.uniq.group_by(&:heading)
else
@budget.investments.winners
.joins(milestones: :translations)
.distinct.group_by(&:heading)
base.distinct.group_by(&:heading)
end
end

View File

@@ -4,6 +4,12 @@ module BudgetExecutionsHelper
@budget.investments.winners.with_milestone_status_id(status).count
end
def options_for_milestone_tags
@budget.milestone_tags.map do |tag|
["#{tag} (#{@budget.investments.winners.tagged_with(tag).count})", tag]
end
end
def first_milestone_with_image(investment)
investment.milestones.order_by_publication_date
.select{ |milestone| milestone.image.present? }.last

View File

@@ -195,6 +195,10 @@ class Budget < ApplicationRecord
investments.winners.any?
end
def milestone_tags
investments.winners.map(&:milestone_tag_list).flatten.uniq.sort
end
private
def sanitize_descriptions

View File

@@ -106,10 +106,9 @@
</div>
<div class="small-12 column">
<%= f.label :milestone_tag_list, t("admin.budget_investments.edit.milestone_tags") %>
<%= f.text_field :milestone_tag_list,
value: @investment.milestone_tag_list.sort.join(", "),
label: false %>
label: t("admin.budget_investments.edit.milestone_tags") %>
</div>

View File

@@ -6,7 +6,9 @@
<% if milestoneable.milestone_tag_list.any? %>
<div>
<b><%= t("admin.milestones.index.milestone_tags") %>:</b> <%= milestoneable.milestone_tag_list.sort.join(", ") %>
<strong>
<%= t("admin.milestones.index.milestone_tags") %>:
</strong> <%= milestoneable.milestone_tag_list.sort.join(", ") %>
</div>
<% end %>

View File

@@ -44,13 +44,24 @@
<div class="small-12 medium-9 large-10 column">
<%= form_tag(budget_executions_path(@budget), method: :get) do %>
<div class="small-12 medium-3 column">
<%= label_tag :status, t("budgets.executions.filters.label") %>
<%= label_tag :milestone_tag, t("budgets.executions.filters.milestone_tag.label") %>
<%= select_tag :milestone_tag,
options_for_select(
options_for_milestone_tags,
params[:milestone_tag]
),
class: "js-submit-on-change",
prompt: t("budgets.executions.filters.milestone_tag.all",
count: @budget.investments.winners.with_milestones.count) %>
</div>
<div class="small-12 medium-3 column">
<%= label_tag :status, t("budgets.executions.filters.status.label") %>
<%= select_tag :status,
options_from_collection_for_select(@statuses,
:id, lambda { |s| "#{s.name} (#{filters_select_counts(s.id)})" },
params[:status]),
class: "js-submit-on-change",
prompt: t("budgets.executions.filters.all",
prompt: t("budgets.executions.filters.status.all",
count: @budget.investments.winners.with_milestones.count) %>
</div>
<% end %>