smartkiosk-server 0.11.6 → 0.11.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/admin/report_results.rb +2 -2
- data/app/admin/report_templates.rb +11 -15
- data/app/admin/reports.rb +4 -13
- data/app/models/report.rb +5 -0
- data/app/models/report_result.rb +9 -0
- data/app/models/report_template.rb +36 -1
- data/app/reports/agents_report.rb +1 -1
- data/app/reports/collections_report.rb +3 -3
- data/app/reports/payments_report.rb +4 -4
- data/app/reports/terminals_report.rb +1 -1
- data/config/locales/smartkiosk.reports.ru.yml +5 -10
- data/lib/report_builder.rb +36 -2
- data/lib/smartkiosk/server/version.rb +1 -1
- metadata +3 -4
- data/app/helpers/active_admin/report_templates_helper.rb +0 -56
data/app/admin/report_results.rb
CHANGED
@@ -13,7 +13,7 @@ ActiveAdmin.register ReportResult do
|
|
13
13
|
package = Axlsx::Package.new do |p|
|
14
14
|
p.workbook.add_worksheet(:name => "Report") do |ws|
|
15
15
|
bold = ws.styles.add_style :b => true, :alignment=> {:horizontal => :center}
|
16
|
-
ws.add_row fields.map{|x|
|
16
|
+
ws.add_row fields.map{|x| report_result.human_column_name(x)}, :style => bold
|
17
17
|
|
18
18
|
result.each do |r|
|
19
19
|
row = []
|
@@ -50,7 +50,7 @@ ActiveAdmin.register ReportResult do
|
|
50
50
|
table do
|
51
51
|
tr do
|
52
52
|
fields.each do |field|
|
53
|
-
th
|
53
|
+
th report_result.human_column_name(field)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
result.each do |row|
|
@@ -63,17 +63,17 @@ ActiveAdmin.register ReportTemplate do
|
|
63
63
|
status_boolean(self, x.open?)
|
64
64
|
end
|
65
65
|
row :groupping do
|
66
|
-
|
66
|
+
report_template.human_groupping_name
|
67
67
|
end
|
68
68
|
row :fields do
|
69
69
|
unless report_template.fields.blank?
|
70
70
|
report_template.fields.select{|x| !x.blank?}.map do |x|
|
71
|
-
|
71
|
+
report_template.human_field_name x
|
72
72
|
end.join ', '
|
73
73
|
end
|
74
74
|
end
|
75
75
|
row :sorting do
|
76
|
-
|
76
|
+
report_template.human_sorting_name
|
77
77
|
end
|
78
78
|
row :sort_desc do |x|
|
79
79
|
status_boolean(self, x.sort_desc?)
|
@@ -90,14 +90,10 @@ ActiveAdmin.register ReportTemplate do
|
|
90
90
|
report_template.report_builder.conditions.each do |condition, values|
|
91
91
|
tr do
|
92
92
|
th do
|
93
|
-
|
93
|
+
report_template.human_condition_name condition
|
94
94
|
end
|
95
95
|
td do
|
96
|
-
|
97
|
-
localize_report_condition_value(report_template.report_builder, condition, report_template.conditions[condition])
|
98
|
-
else
|
99
|
-
span(I18n.t('active_admin.empty'), :class => 'empty')
|
100
|
-
end
|
96
|
+
report_template.human_condition_values(condition) || span(I18n.t('active_admin.empty'), :class => 'empty')
|
101
97
|
end
|
102
98
|
end
|
103
99
|
end
|
@@ -140,7 +136,7 @@ ActiveAdmin.register ReportTemplate do
|
|
140
136
|
if f.object.report_builder
|
141
137
|
f.inputs I18n.t('smartkiosk.admin.panels.report_templates.form.select') do
|
142
138
|
f.input :groupping, :as => :select,
|
143
|
-
:collection =>
|
139
|
+
:collection => f.object.report_builder.human_groupping_names,
|
144
140
|
:input_html => {
|
145
141
|
:class => 'chosen',
|
146
142
|
:onchange => "reportChangeGroupping($(this).val())"
|
@@ -148,7 +144,7 @@ ActiveAdmin.register ReportTemplate do
|
|
148
144
|
|
149
145
|
([''] + f.object.report_builder.groupping).each do |g|
|
150
146
|
f.input :fields, :as => :selectable_check_boxes,
|
151
|
-
:collection =>
|
147
|
+
:collection => f.object.report_builder.human_groupping_field_names(g),
|
152
148
|
:wrapper_html => {
|
153
149
|
:class => "groupping groupping-#{g.gsub '.', '-'}",
|
154
150
|
:style => ('display: none' unless f.object.groupping == g)
|
@@ -156,11 +152,11 @@ ActiveAdmin.register ReportTemplate do
|
|
156
152
|
end
|
157
153
|
|
158
154
|
f.input :calculations, :as => :selectable_check_boxes,
|
159
|
-
:collection =>
|
155
|
+
:collection => f.object.report_builder.human_calculation_names
|
160
156
|
|
161
157
|
([''] + f.object.report_builder.groupping).each do |g|
|
162
158
|
f.input :sorting, :as => :select,
|
163
|
-
:collection =>
|
159
|
+
:collection => f.object.report_builder.human_groupping_field_names(g),
|
164
160
|
:input_html => {
|
165
161
|
:id => "report_template_sorting_#{g.gsub '.', '-'}",
|
166
162
|
:style => 'min-width: 50%',
|
@@ -181,8 +177,8 @@ ActiveAdmin.register ReportTemplate do
|
|
181
177
|
f.inputs I18n.t('smartkiosk.admin.panels.report_templates.form.conditions') do
|
182
178
|
f.object.report_builder.conditions.each do |condition, values|
|
183
179
|
f.input "condition_#{condition}", :as => :select,
|
184
|
-
:label =>
|
185
|
-
:collection =>
|
180
|
+
:label => f.object.report_builder.human_condition_name(condition),
|
181
|
+
:collection => f.object.report_builder.human_condition_values(condition).invert,
|
186
182
|
:input_html => {
|
187
183
|
:class => 'chosen',
|
188
184
|
:multiple => true,
|
data/app/admin/reports.rb
CHANGED
@@ -109,24 +109,15 @@ ActiveAdmin.register Report do
|
|
109
109
|
result = report.report_results.first
|
110
110
|
|
111
111
|
panel "#{I18n.t 'smartkiosk.admin.panels.reports.last_result'} (#{result.rows})" do
|
112
|
-
|
113
|
-
|
114
|
-
fields = result.first.keys
|
112
|
+
unless result.data.blank?
|
113
|
+
fields = result.data.first.keys
|
115
114
|
table do
|
116
115
|
tr do
|
117
116
|
fields.each do |field|
|
118
|
-
|
119
|
-
|
120
|
-
if data.first == 'calculations'
|
121
|
-
field = I18n.t "smartkiosk.reports.data.#{report.report_template.kind}.calculations.#{data.last}"
|
122
|
-
else
|
123
|
-
field = localize_report_fields(field)[0]
|
124
|
-
end
|
125
|
-
|
126
|
-
th field
|
117
|
+
th result.human_column_name(field)
|
127
118
|
end
|
128
119
|
end
|
129
|
-
result.each do |row|
|
120
|
+
result.data.each do |row|
|
130
121
|
tr do
|
131
122
|
fields.each do |field|
|
132
123
|
td row[field]
|
data/app/models/report.rb
CHANGED
data/app/models/report_result.rb
CHANGED
@@ -3,9 +3,18 @@ class ReportResult < ActiveRecord::Base
|
|
3
3
|
# RELATIONS
|
4
4
|
#
|
5
5
|
belongs_to :report
|
6
|
+
has_one :report_template, :through => :report
|
6
7
|
|
7
8
|
#
|
8
9
|
# MODIFICATIONS
|
9
10
|
#
|
10
11
|
serialize :data
|
12
|
+
|
13
|
+
def human_column_name(field)
|
14
|
+
if field.starts_with?('_')
|
15
|
+
report_template.human_field_name report.decode_field(field)
|
16
|
+
else
|
17
|
+
report_template.human_calculation_name field
|
18
|
+
end
|
19
|
+
end
|
11
20
|
end
|
@@ -18,11 +18,14 @@ class ReportTemplate < ActiveRecord::Base
|
|
18
18
|
#
|
19
19
|
# MODIFCIATIONS
|
20
20
|
#
|
21
|
-
serialize :groupping
|
22
21
|
serialize :fields
|
23
22
|
serialize :calculations
|
24
23
|
serialize :conditions
|
25
24
|
|
25
|
+
before_save do
|
26
|
+
fields.select!{|x| !x.blank?}
|
27
|
+
end
|
28
|
+
|
26
29
|
#
|
27
30
|
# METHODS
|
28
31
|
#
|
@@ -53,4 +56,36 @@ class ReportTemplate < ActiveRecord::Base
|
|
53
56
|
self.conditions[name]
|
54
57
|
end
|
55
58
|
end
|
59
|
+
|
60
|
+
def human_field_name(field)
|
61
|
+
report_builder.human_field_name field
|
62
|
+
end
|
63
|
+
|
64
|
+
def human_calculation_name(field)
|
65
|
+
report_builder.human_calculation_name field
|
66
|
+
end
|
67
|
+
|
68
|
+
def human_condition_name(field)
|
69
|
+
report_builder.human_condition_name field
|
70
|
+
end
|
71
|
+
|
72
|
+
def human_groupping_name
|
73
|
+
return nil if groupping.blank?
|
74
|
+
human_field_name groupping
|
75
|
+
end
|
76
|
+
|
77
|
+
def human_sorting_name
|
78
|
+
return nil if sorting.blank?
|
79
|
+
human_field_name sorting
|
80
|
+
end
|
81
|
+
|
82
|
+
def human_condition_values(condition)
|
83
|
+
return nil if conditions[condition].blank?
|
84
|
+
|
85
|
+
values = conditions[condition].map do |v|
|
86
|
+
report_builder.human_condition_values(condition)[v]
|
87
|
+
end
|
88
|
+
|
89
|
+
values.join(', ')
|
90
|
+
end
|
56
91
|
end
|
@@ -69,7 +69,7 @@ class AgentsReport < ReportBuilder::Base
|
|
69
69
|
|
70
70
|
def calculations
|
71
71
|
{
|
72
|
-
:quantity => lambda{|q, t| t.groupping.blank? ? q : q.project('COUNT(*) AS "
|
72
|
+
:quantity => lambda{|q, t| t.groupping.blank? ? q : q.project('COUNT(*) AS "quantity"').where(tables[:agent][:agent_id].not_eq nil) }
|
73
73
|
}.with_indifferent_access
|
74
74
|
end
|
75
75
|
|
@@ -138,9 +138,9 @@ class CollectionsReport < ReportBuilder::Base
|
|
138
138
|
|
139
139
|
def calculations
|
140
140
|
{
|
141
|
-
:cash_sum => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(collections.cash_sum) AS "
|
142
|
-
:approved_payments_sum => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(collections.approved_payments_sum) AS "
|
143
|
-
:payments_sum => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(collections.payments_sum) AS "
|
141
|
+
:cash_sum => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(collections.cash_sum) AS "cash_sum"') },
|
142
|
+
:approved_payments_sum => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(collections.approved_payments_sum) AS "approved_payments_sum"') },
|
143
|
+
:payments_sum => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(collections.payments_sum) AS "payments_sum"') }
|
144
144
|
}.with_indifferent_access
|
145
145
|
end
|
146
146
|
|
@@ -172,10 +172,10 @@ class PaymentsReport < ReportBuilder::Base
|
|
172
172
|
|
173
173
|
def calculations
|
174
174
|
{
|
175
|
-
:quantity => lambda{|q, t| t.groupping.blank? ? q : q.project('COUNT(*) AS "
|
176
|
-
:enrolled => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(enrolled_amount) AS "
|
177
|
-
:paid => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(paid_amount) AS "
|
178
|
-
:commission => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(commission_amount) AS "
|
175
|
+
:quantity => lambda{|q, t| t.groupping.blank? ? q : q.project('COUNT(*) AS "quantity"') },
|
176
|
+
:enrolled => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(enrolled_amount) AS "enrolled"') },
|
177
|
+
:paid => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(paid_amount) AS "paid"') },
|
178
|
+
:commission => lambda{|q, t| t.groupping.blank? ? q : q.project('SUM(commission_amount) AS "commission"') }
|
179
179
|
}.with_indifferent_access
|
180
180
|
end
|
181
181
|
|
@@ -111,7 +111,7 @@ class TerminalsReport < ReportBuilder::Base
|
|
111
111
|
|
112
112
|
def calculations
|
113
113
|
{
|
114
|
-
:quantity => lambda{|q, t| t.groupping.blank? ? q : q.project('COUNT(*) AS "
|
114
|
+
:quantity => lambda{|q, t| t.groupping.blank? ? q : q.project('COUNT(*) AS "quantity"') }
|
115
115
|
}.with_indifferent_access
|
116
116
|
end
|
117
117
|
|
@@ -7,8 +7,7 @@ ru:
|
|
7
7
|
quantity: Количество
|
8
8
|
conditions:
|
9
9
|
agent:
|
10
|
-
agent_id:
|
11
|
-
title: Агент
|
10
|
+
agent_id: Агент
|
12
11
|
collections:
|
13
12
|
calculations:
|
14
13
|
approved_payments_sum: Сумма проведенных платежей
|
@@ -22,19 +21,15 @@ ru:
|
|
22
21
|
quantity: Количество
|
23
22
|
conditions:
|
24
23
|
payment:
|
25
|
-
state:
|
26
|
-
|
27
|
-
|
28
|
-
title: Тип
|
29
|
-
provider_id:
|
30
|
-
title: Получатели
|
24
|
+
state: Состояние
|
25
|
+
payment_type: Тип
|
26
|
+
provider_id: Получатели
|
31
27
|
terminals:
|
32
28
|
calculations:
|
33
29
|
quantity: Количество
|
34
30
|
conditions:
|
35
31
|
terminal:
|
36
|
-
condition:
|
37
|
-
title: Состояние
|
32
|
+
condition: Состояние
|
38
33
|
kinds:
|
39
34
|
# preprocessing: Предпроцессинг
|
40
35
|
agents: Агенты
|
data/lib/report_builder.rb
CHANGED
@@ -46,7 +46,7 @@ module ReportBuilder
|
|
46
46
|
'postgresql' => 'MIN'
|
47
47
|
}[ActiveRecord::Base.configurations[Rails.env]['adapter']]
|
48
48
|
|
49
|
-
fields = template.fields.
|
49
|
+
fields = template.fields.each_with_index do |field, i|
|
50
50
|
projection = arelize(field)
|
51
51
|
|
52
52
|
if !aggregate.blank? && !template.groupping.blank?
|
@@ -55,7 +55,7 @@ module ReportBuilder
|
|
55
55
|
)
|
56
56
|
end
|
57
57
|
|
58
|
-
projection = projection.as("\"#{
|
58
|
+
projection = projection.as("\"_#{i}\"")
|
59
59
|
query = query.project(projection)
|
60
60
|
end
|
61
61
|
|
@@ -84,5 +84,39 @@ module ReportBuilder
|
|
84
84
|
|
85
85
|
query.to_sql
|
86
86
|
end
|
87
|
+
|
88
|
+
def human_field_name(field)
|
89
|
+
model, name = field.split '.'
|
90
|
+
title = []
|
91
|
+
|
92
|
+
title << I18n.t("activerecord.models.#{model}", :count => 1)
|
93
|
+
title << I18n.t("activerecord.attributes.#{model}.#{name}")
|
94
|
+
|
95
|
+
title.join(': ')
|
96
|
+
end
|
97
|
+
|
98
|
+
def human_calculation_name(field)
|
99
|
+
I18n.t "smartkiosk.reports.data.#{keyword}.calculations.#{field}"
|
100
|
+
end
|
101
|
+
|
102
|
+
def human_condition_name(field)
|
103
|
+
I18n.t "smartkiosk.reports.data.#{keyword}.conditions.#{field}"
|
104
|
+
end
|
105
|
+
|
106
|
+
def human_groupping_names
|
107
|
+
groupping.map{|x| [human_field_name(x), x]}
|
108
|
+
end
|
109
|
+
|
110
|
+
def human_groupping_field_names(groupping)
|
111
|
+
fields[groupping].map{|x| [human_field_name(x), x]}
|
112
|
+
end
|
113
|
+
|
114
|
+
def human_calculation_names
|
115
|
+
calculations.keys.map{|x| [human_calculation_name(x), x]}
|
116
|
+
end
|
117
|
+
|
118
|
+
def human_condition_values(condition)
|
119
|
+
conditions[condition].call().with_indifferent_access
|
120
|
+
end
|
87
121
|
end
|
88
122
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smartkiosk-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-04-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -123,7 +123,6 @@ files:
|
|
123
123
|
- app/controllers/terminal_orders_controller.rb
|
124
124
|
- app/controllers/terminal_pings_controller.rb
|
125
125
|
- app/controllers/welcome_controller.rb
|
126
|
-
- app/helpers/active_admin/report_templates_helper.rb
|
127
126
|
- app/helpers/active_admin/views_helper.rb
|
128
127
|
- app/helpers/application_helper.rb
|
129
128
|
- app/mailers/.gitkeep
|
@@ -334,7 +333,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
334
333
|
version: '0'
|
335
334
|
segments:
|
336
335
|
- 0
|
337
|
-
hash:
|
336
|
+
hash: -3103762174964566922
|
338
337
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
339
338
|
none: false
|
340
339
|
requirements:
|
@@ -1,56 +0,0 @@
|
|
1
|
-
module ActiveAdmin::ReportTemplatesHelper
|
2
|
-
def localize_report_fields(data)
|
3
|
-
if data.is_a? Array
|
4
|
-
data.map do |x|
|
5
|
-
localize_report_entry x
|
6
|
-
end
|
7
|
-
else
|
8
|
-
localize_report_entry data
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def localize_report_entry(entry)
|
13
|
-
model, name = entry.split '.'
|
14
|
-
|
15
|
-
title = I18n.t("activerecord.models.#{model}", :count => 1)
|
16
|
-
title += ' / '
|
17
|
-
title += I18n.t("activerecord.attributes.#{model}.#{name}")
|
18
|
-
|
19
|
-
[title, entry]
|
20
|
-
end
|
21
|
-
|
22
|
-
def localize_report_calculations(builder)
|
23
|
-
builder.calculations.keys.map do |x|
|
24
|
-
title = I18n.t "smartkiosk.reports.data.#{builder.keyword}.calculations.#{x}"
|
25
|
-
[title, x]
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def localize_report_condition_title(builder, field)
|
30
|
-
I18n.t "smartkiosk.reports.data.#{builder.keyword}.conditions.#{field}.title"
|
31
|
-
end
|
32
|
-
|
33
|
-
def localize_report_condition_value(builder, field, value)
|
34
|
-
condition = builder.conditions[field]
|
35
|
-
collection = if condition.is_a?(Array)
|
36
|
-
I18n.t "smartkiosk.reports.data.#{builder.keyword}.conditions.#{field}.values"
|
37
|
-
else
|
38
|
-
condition.call().with_indifferent_access
|
39
|
-
end
|
40
|
-
|
41
|
-
return value.is_a?(Array) ? value.map{|x| collection[x]}.join(', ') : collection[value]
|
42
|
-
end
|
43
|
-
|
44
|
-
def localize_report_conditions(builder, field)
|
45
|
-
condition = builder.conditions[field]
|
46
|
-
|
47
|
-
if condition.is_a?(Array)
|
48
|
-
return condition.map do |x|
|
49
|
-
title = I18n.t "smartkiosk.reports.data.#{builder.keyword}.conditions.#{field}.values.#{x}"
|
50
|
-
[title, x]
|
51
|
-
end
|
52
|
-
elsif condition.is_a?(Proc)
|
53
|
-
return condition.call().invert
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|