effective_reports 0.2.2 → 0.2.4
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 +10 -0
- data/app/models/effective/report.rb +29 -1
- data/app/models/effective/report_column.rb +7 -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 +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53ea0d7fe4f751e038952802d79ac6df299468d4a2bc23de1f80e2c6877ed381
|
4
|
+
data.tar.gz: 53acffd7f4d1cf599b94565494307088a062b4e91c04555e9ef50da36e3c8010
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ccc75d73cc7e7be22b8aa935c9781d90c974a842ecd21ec7240b4db97e83caa1e2e1419485645f936740b9a068e846321fb5f1e231c71cab264e9681da0ad75
|
7
|
+
data.tar.gz: 728c067c863fb3c30b88716e5b3c6bbe46f3d9a29366b6e3f506e1089200d20e295de8dc61521ec10fd526515d1b5f6cc68e47e7c438773b4137423e8fe6e627
|
@@ -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,16 @@ 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
|
+
|
37
|
+
# Used for the notifications mailer
|
38
|
+
def reportable_view_assigns(view)
|
39
|
+
{}
|
40
|
+
end
|
41
|
+
|
32
42
|
private
|
33
43
|
|
34
44
|
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
|
@@ -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.4
|
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-
|
11
|
+
date: 2023-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name: haml
|
98
|
+
name: haml
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -221,7 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: '0'
|
223
223
|
requirements: []
|
224
|
-
rubygems_version: 3.
|
224
|
+
rubygems_version: 3.3.7
|
225
225
|
signing_key:
|
226
226
|
specification_version: 4
|
227
227
|
summary: A dynamic ActiveRecord report builder
|