effective_reports 0.2.1 → 0.2.3
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.
- checksums.yaml +4 -4
- data/app/datatables/admin/effective_reports_datatable.rb +4 -0
- data/app/datatables/effective_report_datatable.rb +4 -0
- data/app/models/concerns/acts_as_reportable.rb +5 -0
- data/app/models/effective/report.rb +29 -1
- data/app/models/effective/report_column.rb +9 -1
- data/app/models/effective/report_scope.rb +6 -0
- data/app/views/admin/reports/_form.html.haml +5 -0
- data/app/views/admin/reports/_report.html.haml +6 -0
- data/lib/effective_reports/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: 114ad37c7da77453343c93c770d85db4d7dc03a75a151e7fead6f94110ecd6e3
|
|
4
|
+
data.tar.gz: 6b0a1b43d71bef9780bffeaccb546146316dc3ce5f918fed73bfac0be0ce860c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4ab9954ca02cdd90510cfbc8c28c8554d9c17acc5014d2b8cdc502d5318cec92d325c2396e8f952df70dbbaf07d0355f3757e56b9c88582da82c5b4a266fb705
|
|
7
|
+
data.tar.gz: 25d4851233da531115e1d480a765f50a5b26c6d6f54782e631a3c26a64af45cb70d20002f3cc8b2604c574ff48f9e85cacc4124d011c3cb9ace5faf68dac0b8b
|
|
@@ -16,6 +16,10 @@ module Admin
|
|
|
16
16
|
col :report_columns, label: 'Columns', visible: false
|
|
17
17
|
col :report_scopes, label: 'Scopes', visible: false
|
|
18
18
|
|
|
19
|
+
if defined?(EffectiveMessaging)
|
|
20
|
+
col :notifications, label: 'Notifications'
|
|
21
|
+
end
|
|
22
|
+
|
|
19
23
|
col(:current_rows_count) do |report|
|
|
20
24
|
report.collection().count
|
|
21
25
|
end
|
|
@@ -8,6 +8,10 @@ class EffectiveReportDatatable < Effective::Datatable
|
|
|
8
8
|
|
|
9
9
|
col :id, visible: false
|
|
10
10
|
|
|
11
|
+
if report.reportable.column_names.include?('token')
|
|
12
|
+
col :token, visible: false
|
|
13
|
+
end
|
|
14
|
+
|
|
11
15
|
report.report_columns.each do |column|
|
|
12
16
|
col(column.name, as: column.as.to_sym)
|
|
13
17
|
end
|
|
@@ -29,6 +29,11 @@ module ActsAsReportable
|
|
|
29
29
|
{}
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
# Something that returns an email
|
|
33
|
+
def reportable_email
|
|
34
|
+
try(:email) || try(:user).try(:email) || try(:owner).try(:email) || raise("No reportable_email found")
|
|
35
|
+
end
|
|
36
|
+
|
|
32
37
|
private
|
|
33
38
|
|
|
34
39
|
def all_reportable_attributes
|
|
@@ -10,6 +10,11 @@ module Effective
|
|
|
10
10
|
has_many :report_scopes, -> { ReportScope.sorted }, inverse_of: :report, dependent: :delete_all
|
|
11
11
|
accepts_nested_attributes_for :report_scopes, allow_destroy: true, reject_if: proc { |atts| atts['name'].blank? }
|
|
12
12
|
|
|
13
|
+
if defined?(EffectiveMessaging)
|
|
14
|
+
has_many :notifications, inverse_of: :report, dependent: :delete_all
|
|
15
|
+
accepts_nested_attributes_for :notifications, allow_destroy: true
|
|
16
|
+
end
|
|
17
|
+
|
|
13
18
|
log_changes if respond_to?(:log_changes)
|
|
14
19
|
|
|
15
20
|
DATATYPES = [:boolean, :date, :decimal, :integer, :price, :string, :belongs_to, :belongs_to_polymorphic, :has_many, :has_one]
|
|
@@ -26,7 +31,7 @@ module Effective
|
|
|
26
31
|
|
|
27
32
|
scope :deep, -> { includes(:report_columns, :report_scopes) }
|
|
28
33
|
scope :sorted, -> { order(:title) }
|
|
29
|
-
scope :
|
|
34
|
+
scope :notifiable, -> { where(id: ReportColumn.notifiable.select(:report_id)) }
|
|
30
35
|
|
|
31
36
|
validates :title, presence: true, uniqueness: true
|
|
32
37
|
validates :reportable_class_name, presence: true
|
|
@@ -39,6 +44,23 @@ module Effective
|
|
|
39
44
|
reportable_class_name.constantize if reportable_class_name.present?
|
|
40
45
|
end
|
|
41
46
|
|
|
47
|
+
# Find or build
|
|
48
|
+
def col(name, atts = {})
|
|
49
|
+
atts[:name] ||= name.to_sym
|
|
50
|
+
atts[:as] ||= reportable_attributes[name]
|
|
51
|
+
|
|
52
|
+
report_columns.find { |col| atts.all? { |k, v| col.send(k).to_s == v.to_s } } || report_columns.build(atts)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def scope(name, atts = {})
|
|
56
|
+
atts[:name] ||= name.to_sym
|
|
57
|
+
report_scopes.find { |scope| scope.name == name.to_s } || report_scopes.build(atts)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def notification(atts = {})
|
|
61
|
+
notifications.find { |col| atts.all? { |k, v| col.send(k).to_s == v.to_s } } || notifications.build(atts)
|
|
62
|
+
end
|
|
63
|
+
|
|
42
64
|
def filtered_report_columns
|
|
43
65
|
report_columns.select(&:filter?)
|
|
44
66
|
end
|
|
@@ -47,6 +69,12 @@ module Effective
|
|
|
47
69
|
report_columns.find { |column| column.name == 'email' } || report_columns.find { |column| column.name.include?('email') }
|
|
48
70
|
end
|
|
49
71
|
|
|
72
|
+
def user_report_column
|
|
73
|
+
report_columns.find { |column| column.name == 'user' } ||
|
|
74
|
+
report_columns.find { |column| column.name == 'owner' } ||
|
|
75
|
+
report_columns.find { |column| column.name.include?('user') }
|
|
76
|
+
end
|
|
77
|
+
|
|
50
78
|
# Used to build the Reports form
|
|
51
79
|
# { id: :integer, archived: :boolean }
|
|
52
80
|
def reportable_attributes
|
|
@@ -27,7 +27,7 @@ module Effective
|
|
|
27
27
|
|
|
28
28
|
scope :deep, -> { includes(:report) }
|
|
29
29
|
scope :sorted, -> { order(:position) }
|
|
30
|
-
scope :
|
|
30
|
+
scope :notifiable, -> { where('name ILIKE ?', "%email%").or(where(name: 'user')).or(where(name: 'owner')) }
|
|
31
31
|
|
|
32
32
|
before_validation(if: -> { report.present? }) do
|
|
33
33
|
self.position ||= (report.report_columns.map(&:position).compact.max || -1) + 1
|
|
@@ -54,6 +54,12 @@ module Effective
|
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
+
validate(if: -> { report&.reportable }) do
|
|
58
|
+
unless report.reportable.new.reportable_attributes.key?(name.to_sym)
|
|
59
|
+
errors.add(:name, "acts_as_reportable #{report.reportable} reportable_attributes() missing :#{name} attribute")
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
57
63
|
def to_s
|
|
58
64
|
[name, operation_label, value, days_label].compact.join(' ').presence || 'report column'
|
|
59
65
|
end
|
|
@@ -119,6 +125,8 @@ module Effective
|
|
|
119
125
|
end
|
|
120
126
|
|
|
121
127
|
def days_label
|
|
128
|
+
return unless operation.present?
|
|
129
|
+
|
|
122
130
|
case operation.to_sym
|
|
123
131
|
when :days_ago_eq then 'days ago'
|
|
124
132
|
when :days_ago_gteq then 'days ago'
|
|
@@ -36,6 +36,12 @@ module Effective
|
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
+
validate(if: -> {report&.reportable }) do
|
|
40
|
+
unless report.reportable.new.reportable_scopes.key?(name.to_sym)
|
|
41
|
+
errors.add(:name, "acts_as_reportable #{report.reportable} reportable_scopes() missing :#{name} scope")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
39
45
|
def to_s
|
|
40
46
|
[name, operation_label, value].compact.join(' ').presence || 'report scope'
|
|
41
47
|
end
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
= render 'admin/reports/form_report', report: report
|
|
4
4
|
|
|
5
5
|
- if report.persisted?
|
|
6
|
+
- if report.respond_to?(:notifications)
|
|
7
|
+
= tab 'Notifications' do
|
|
8
|
+
- datatable = Admin::EffectiveNotificationsDatatable.new(report: report)
|
|
9
|
+
= render_inline_datatable(datatable)
|
|
10
|
+
|
|
6
11
|
- if report.respond_to?(:log_changes_datatable)
|
|
7
12
|
= tab 'Logs' do
|
|
8
13
|
= render_inline_datatable(report.log_changes_datatable)
|
|
@@ -13,5 +13,11 @@
|
|
|
13
13
|
= collapse('Show SQL') do
|
|
14
14
|
%p= report.collection.to_sql
|
|
15
15
|
|
|
16
|
+
- if (notifications = report.try(:notifications)).present?
|
|
17
|
+
%p.mt-3
|
|
18
|
+
The following notifications are sent based on this report:
|
|
19
|
+
- notifications.each do |notification|
|
|
20
|
+
= link_to(notification, effective_messaging.edit_admin_notification_path(notification), target: '_blank')
|
|
21
|
+
|
|
16
22
|
- datatable = EffectiveReportDatatable.new(report: report)
|
|
17
23
|
= render_datatable(datatable)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: effective_reports
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Code and Effect
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-05-
|
|
11
|
+
date: 2023-05-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|