simple_drilldown 0.9.1 → 0.9.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/simple_drilldown/application.css +0 -1
- data/app/views/drilldown/_chart.html.erb +22 -6
- data/app/views/drilldown/_excel_record_list_xlsx.xlsx.axlsx +1 -1
- data/app/views/drilldown/_field.html.erb +1 -1
- data/app/views/drilldown/_record_list.html.erb +1 -1
- data/app/views/drilldown/_row_header.html.erb +4 -2
- data/app/views/drilldown/_summary_row.html.erb +9 -0
- data/app/views/drilldown/_summary_table.html.erb +1 -1
- data/app/views/drilldown/index.html.erb +1 -1
- data/lib/generators/drilldown_controller/templates/drilldown_controller.rb.erb +9 -0
- data/lib/simple_drilldown/controller.rb +2 -11
- data/lib/simple_drilldown/helper.rb +2 -1
- data/lib/simple_drilldown/search.rb +2 -4
- data/lib/simple_drilldown/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3144b3e6cb99f07f654f2045836172d74c29bca1016787fcc9de9dd4bbdff211
|
4
|
+
data.tar.gz: d18da3c55b9ee565dadd892f14d4feae817094c7f100ada2d4aaebd975e80a1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af25dfcb777c5d1f01d854a456a3b7ce954e9715244d71bb6dd69681df9a15f81e1b73853e59c3bb4abe1eee6bdd33a09be9393bfd35e8eb8d2227a1b3d4788a
|
7
|
+
data.tar.gz: b3f6706f4024d14b5d248083ca922374b2710ec012bed7f7af4cb65a8e854a735473793097210391ac0c52ecdb02a78898211e29b1e0ac106036b53c98378723
|
@@ -2,14 +2,14 @@
|
|
2
2
|
data =
|
3
3
|
case @dimensions.size
|
4
4
|
when 0
|
5
|
-
{ @result[:value] => @result[
|
5
|
+
{ @result[:value] => @result[@search.select_value] }
|
6
6
|
when 1
|
7
|
-
@result[:rows].map { |r| [@dimensions[0][:label_method] ? @dimensions[0][:label_method].call(r[:value]) : r[:value], r[
|
7
|
+
@result[:rows].map { |r| [@dimensions[0][:label_method] ? @dimensions[0][:label_method].call(r[:value]) : r[:value], r[@search.select_value]] }
|
8
8
|
when 2
|
9
9
|
@result[:rows].map do |r|
|
10
10
|
{
|
11
11
|
name: r[:value],
|
12
|
-
data: r[:rows].map { |r2| [r2[:value], r2[
|
12
|
+
data: r[:rows].map { |r2| [r2[:value], r2[@search.select_value]] }
|
13
13
|
}
|
14
14
|
end
|
15
15
|
when 3
|
@@ -56,6 +56,22 @@
|
|
56
56
|
<%= form.radio_button 'display_type', SimpleDrilldown::Search::DisplayType::NONE, { :onChange => 'form.submit()' } %>
|
57
57
|
<%= form.label :display_type_none, t(:none) %>
|
58
58
|
|
59
|
+
<% if controller.c_summary_fields.present? && @search.display_type != SimpleDrilldown::Search::DisplayType::NONE %>
|
60
|
+
<div class="text-center">
|
61
|
+
<label style="margin-bottom:0;margin-right:1em" for="search_select_value">Value: </label>
|
62
|
+
<div class="form-check form-check-inline">
|
63
|
+
<%= form.radio_button :select_value, SimpleDrilldown::Search::SelectValue::COUNT, class: "form-check-input", onChange: 'form.submit()' %>
|
64
|
+
<label class="form-check-label mr-3" for="search_select_value_count"><%= t(:count) %></label>
|
65
|
+
</div>
|
66
|
+
<% controller.c_summary_fields.each do |field| %>
|
67
|
+
<div class="form-check form-check-inline">
|
68
|
+
<%= form.radio_button :select_value, field, class: "form-check-input", onChange: 'form.submit()' %>
|
69
|
+
<label class="form-check-label mr-3" for="search_select_value_<%= field %>"><%= t(:field, default: field.to_s.titleize) %></label>
|
70
|
+
</div>
|
71
|
+
<% end %>
|
72
|
+
</div>
|
73
|
+
<% end %>
|
74
|
+
|
59
75
|
<%= form.check_box :order_by_value, { :onChange => 'form.submit()' } %>
|
60
76
|
<%= form.label :order_by_value, t(:order_by_value) %>
|
61
77
|
|
@@ -68,10 +84,10 @@
|
|
68
84
|
<%= javascript_tag do %>
|
69
85
|
$('#chart-1').on('click', function(e){
|
70
86
|
chart = Chartkick.charts['chart-1'].getChartObject();
|
71
|
-
firstPoint = chart.
|
87
|
+
firstPoint = chart.getElementsAtEventForMode(e, 'nearest', { intersect: true }, false)[0]
|
72
88
|
if (firstPoint) {
|
73
|
-
label = chart.data.labels[firstPoint.
|
74
|
-
value = chart.data.datasets[firstPoint.
|
89
|
+
label = chart.data.labels[firstPoint.index];
|
90
|
+
value = chart.data.datasets[firstPoint.datasetIndex].data[firstPoint._index];
|
75
91
|
console.log("Label: " + label + ", Value: " + value);
|
76
92
|
new_location = window.location.toString();
|
77
93
|
new_location = new_location.replace(/#.*$/, '');
|
@@ -3,7 +3,7 @@
|
|
3
3
|
def excel_header_row(sheet)
|
4
4
|
padding_cells = @dimensions.empty? ? 1 : @dimensions.size
|
5
5
|
row = (1...(padding_cells - 1)).map { |_n| nil }
|
6
|
-
@search.fields.each_with_index { |field, _i| row << t(field) }
|
6
|
+
@search.fields.each_with_index { |field, _i| row << t(field, default: field.titleize) }
|
7
7
|
sheet.add_row row
|
8
8
|
end
|
9
9
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
</div>
|
15
15
|
<% else %>
|
16
16
|
<div class="form-group">
|
17
|
-
<%= form.label "filter[#{dimension_name}]", t(dimension_name, default: :"activerecord.models.#{dimension_name}") %>
|
17
|
+
<%= form.label "filter[#{dimension_name}]", t(dimension_name, default: [:"activerecord.models.#{dimension_name}", dimension_name.titleize]) %>
|
18
18
|
<%= select :search, :filter,
|
19
19
|
choices,
|
20
20
|
{ :selected => @search.filter[dimension_name] },
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<tr>
|
3
3
|
<td colspan="<%= controller.c_summary_fields.size + 1 %>">
|
4
4
|
<table id="drilldown-records-<%= result[:value] %>" class="table table-condensed table-bordered" style="padding-bottom: 10px;">
|
5
|
-
<%= render
|
5
|
+
<%= render '/drilldown/row_header', records: result[:records] %>
|
6
6
|
<tbody>
|
7
7
|
<% result[:records].each do |t| %>
|
8
8
|
<%= render :partial => '/drilldown/row', :locals => { :transaction => t, :previous_transaction => nil, :errors => [], :error_row => false, :meter1_errors => false } %>
|
@@ -1,8 +1,10 @@
|
|
1
1
|
<thead>
|
2
2
|
<tr>
|
3
3
|
<% @search.fields.each do |field| %>
|
4
|
-
<th><%=t field, default: :"attributes.#{field}" %></th>
|
4
|
+
<th><%= t field, default: :"attributes.#{field}" %></th>
|
5
5
|
<% end %>
|
6
|
-
<th
|
6
|
+
<th>
|
7
|
+
<%= render 'drilldown/export_links', records: records %>
|
8
|
+
</th>
|
7
9
|
</tr>
|
8
10
|
</thead>
|
@@ -1,3 +1,4 @@
|
|
1
|
+
<% row_class = dimension > 0 && @dimensions[dimension - 1]&.[](:row_class)&.call(result[:value]) %>
|
1
2
|
<% if new_row -%>
|
2
3
|
<tr class="<%= cycle("odd", "even", :name => "dim#{dimension}") %>">
|
3
4
|
<% ((dimension + 1)..(@dimensions.size)).each { |i| cycle("odd", "even", :name => "dim#{i}") if current_cycle("dim#{i}") != current_cycle("dim#{dimension}") } -%>
|
@@ -14,5 +15,13 @@
|
|
14
15
|
(<%= 100 * result[:count] / parent_result[:count] %>%)
|
15
16
|
<% end %>
|
16
17
|
</td>
|
18
|
+
<% controller.c_summary_fields.each do |summary_field| %>
|
19
|
+
<td class="<%=row_class%>" align="right">
|
20
|
+
<%= result[summary_field] %>
|
21
|
+
<% if @search.percent && parent_result && parent_result[summary_field] > 0 %>
|
22
|
+
(<%= 100 * result[summary_field] / parent_result[summary_field] %>%)
|
23
|
+
<% end %>
|
24
|
+
</td>
|
25
|
+
<% end %>
|
17
26
|
</tr>
|
18
27
|
<% end %>
|
@@ -43,7 +43,7 @@
|
|
43
43
|
<div class="row">
|
44
44
|
<div class="col-md-12" valign="top">
|
45
45
|
<div style="float: right; clear: both;">
|
46
|
-
<%= render '/drilldown/export_links' %>
|
46
|
+
<%= render '/drilldown/export_links', records: @result[:records] %>
|
47
47
|
</div>
|
48
48
|
<%= render '/drilldown/summary_table' %>
|
49
49
|
</div>
|
@@ -12,6 +12,15 @@ class <%= class_name %>DrilldownController < SimpleDrilldown::Controller
|
|
12
12
|
# How should we count the reords?
|
13
13
|
# select 'count(*) as count'
|
14
14
|
|
15
|
+
# Multiple select values:
|
16
|
+
# select <<~SQL
|
17
|
+
# COUNT(*) as count,
|
18
|
+
# sum(hours) as hours,
|
19
|
+
# sum(billable_hours) as billable_hours
|
20
|
+
# SQL
|
21
|
+
# summary_fields :hours, :billable_hours
|
22
|
+
# default_select_value :billable_hours
|
23
|
+
|
15
24
|
# When selecting records, what relations should be included for optimization?
|
16
25
|
# Other relations can be included for specific dimensions and fields.
|
17
26
|
# base_includes :user, :comments # TODO(uwe): Read relations from schema?
|
@@ -58,7 +58,7 @@ module SimpleDrilldown
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def default_select_value(default_select_value)
|
61
|
-
self.c_default_select_value = default_select_value
|
61
|
+
self.c_default_select_value = default_select_value.to_sym
|
62
62
|
end
|
63
63
|
|
64
64
|
def target_class(target_class)
|
@@ -327,16 +327,7 @@ module SimpleDrilldown
|
|
327
327
|
includes.flatten!
|
328
328
|
includes.keep_if(&:present?).uniq!
|
329
329
|
if @search.order_by_value && @dimensions.size <= 1
|
330
|
-
order =
|
331
|
-
when Search::SelectValue::VOLUME
|
332
|
-
'volume DESC'
|
333
|
-
when Search::SelectValue::VOLUME_COMPENSATED
|
334
|
-
'volume_compensated DESC'
|
335
|
-
when Search::SelectValue::COUNT
|
336
|
-
'count DESC'
|
337
|
-
else
|
338
|
-
'count DESC'
|
339
|
-
end
|
330
|
+
order = "#{c_summary_fields.find { |f| f == @search.select_value } || 'count'} DESC"
|
340
331
|
else
|
341
332
|
order = (1..@dimensions.size).map { |i| "value#{i}" }.join(',')
|
342
333
|
order = nil if order.empty?
|
@@ -89,7 +89,8 @@ module SimpleDrilldown
|
|
89
89
|
private
|
90
90
|
|
91
91
|
def caption_txt
|
92
|
-
"#{controller.c_target_class} #{I18n.t(@search.select_value.downcase
|
92
|
+
"#{controller.c_target_class} #{I18n.t(@search.select_value.downcase,
|
93
|
+
default: @search.select_value.to_s.titleize)}" +
|
93
94
|
(@dimensions && @dimensions.any? ? " by #{@dimensions.map { |d| d[:pretty_name] }.join(' and ')}" : '')
|
94
95
|
end
|
95
96
|
end
|
@@ -14,9 +14,7 @@ module SimpleDrilldown
|
|
14
14
|
end
|
15
15
|
|
16
16
|
module SelectValue
|
17
|
-
COUNT =
|
18
|
-
VOLUME = 'VOLUME'
|
19
|
-
VOLUME_COMPENSATED = 'VOLUME_COMPENSATED'
|
17
|
+
COUNT = :count
|
20
18
|
end
|
21
19
|
|
22
20
|
attr_reader :dimensions, :display_type, :fields, :filter, :list_change_times, :order_by_value,
|
@@ -62,7 +60,7 @@ module SimpleDrilldown
|
|
62
60
|
@display_type = DisplayType::BAR if @dimensions.size >= 2 && @display_type == DisplayType::PIE
|
63
61
|
|
64
62
|
@order_by_value = attributes && (attributes[:order_by_value] == '1')
|
65
|
-
@select_value = attributes&.dig(:select_value).
|
63
|
+
@select_value = attributes&.dig(:select_value).presence&.to_sym || @default_select_value
|
66
64
|
@list = attributes&.[](:list) == '1'
|
67
65
|
@percent = attributes&.[](:percent) == '1'
|
68
66
|
@list_change_times = attributes&.[](:list_change_times) == '1'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_drilldown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uwe Kubosch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: caxlsx_rails
|