Class: Decidim::DecidimAwesome::ProcessGroupsQuery

Inherits:
Object
  • Object
show all
Defined in:
app/queries/decidim/decidim_awesome/process_groups_query.rb

Overview

Provides filtered and counted queries for processes within a group.

Instance Method Summary collapse

Constructor Details

#initialize(group, user = nil) ⇒ ProcessGroupsQuery

Returns a new instance of ProcessGroupsQuery.



7
8
9
10
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 7

def initialize(group, user = nil)
  @group = group
  @user = user
end

Instance Method Details

#available_taxonomy_groupsObject

Returns taxonomy groups with raw taxonomy objects, filtered to only include items used by processes in the group, and sorted hierarchically. Each group: { root_taxonomy:, items: [{ taxonomy:, depth: }] }



54
55
56
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 54

def available_taxonomy_groups
  @available_taxonomy_groups ||= build_taxonomy_groups
end

#base_relationObject



12
13
14
15
16
17
18
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 12

def base_relation
  @base_relation ||=
    Decidim::ParticipatoryProcesses::GroupPublishedParticipatoryProcesses
    .new(group, user).query
    .includes(:organization, :taxonomies, :active_step, :hero_image_attachment)
    .order(weight: :asc, start_date: :desc)
end

#filtered_relation(status: "all", taxonomy_ids: []) ⇒ Object



20
21
22
23
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 20

def filtered_relation(status: "all", taxonomy_ids: [])
  scope = filter_by_status(base_relation, status)
  filter_by_taxonomies(scope, taxonomy_ids)
end

#status_countsObject

Unfiltered counts so tab numbers stay stable regardless of active filters.



26
27
28
29
30
31
32
33
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 26

def status_counts
  @status_counts ||= {
    "active" => base_relation.active.count,
    "past" => base_relation.past.count,
    "upcoming" => base_relation.upcoming.count,
    "all" => base_relation.count
  }
end

#taxonomy_filtersObject



35
36
37
38
39
40
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 35

def taxonomy_filters
  @taxonomy_filters ||= Decidim::TaxonomyFilter
                        .for(group.organization)
                        .for_manifest(:participatory_processes)
                        .includes(:root_taxonomy, filter_items: :taxonomy_item)
end

#used_taxonomy_idsObject



42
43
44
45
46
47
48
49
# File 'app/queries/decidim/decidim_awesome/process_groups_query.rb', line 42

def used_taxonomy_ids
  ids_relation = base_relation.reselect(:id).unscope(:includes).reorder(nil)
  @used_taxonomy_ids ||= Decidim::Taxonomization
                         .where(taxonomizable_type: "Decidim::ParticipatoryProcess", taxonomizable_id: ids_relation)
                         .distinct
                         .pluck(:taxonomy_id)
                         .to_set
end