Add Milestone tag select filter on executions public page
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
|
||||
@@ -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 %>
|
||||
|
||||
|
||||
@@ -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 %>
|
||||
|
||||
Reference in New Issue
Block a user