effective_reports 0.2.2 → 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 +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 +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
|
@@ -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
|