Class: ClarkKent::ReportEmail
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- ClarkKent::ReportEmail
show all
- Includes:
- Cloneable
- Defined in:
- app/models/clark_kent/report_email.rb
Constant Summary
collapse
- SEND_TIMES =
{
'Mondays' => 'Monday',
'Tuesdays' => 'Tuesday',
'Wednesdays' => 'Wednesday',
'Thursdays' => 'Thursday',
'Fridays' => 'Friday',
'Saturdays' => 'Saturday',
'Sundays' => 'Sunday',
'1st of the month' => 'beginning_of_month',
'End of the month' => 'end_of_month'
}
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Cloneable
#cloneable_attributes, #reset_timestamps
Class Method Details
.send_emails_for_today ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
|
# File 'app/models/clark_kent/report_email.rb', line 22
def self.send_emails_for_today
today = Date.ih_today
todays_filters = []
['beginning_of_month','end_of_month'].each do |month_bookend|
todays_filters.push month_bookend if today.send(month_bookend) == today
end
todays_filters.push Date::DAYNAMES[today.wday]
self.where(when_to_send: todays_filters).each do |report_email|
report_email.send_emails
end
end
|
Instance Method Details
#available_email_filters ⇒ Object
90
91
92
|
# File 'app/models/clark_kent/report_email.rb', line 90
def available_email_filters
self.resource_class.report_definition_options.reject{|name, label| (self.viable_report_filters.pluck(:filter_name) + self.report.viable_report_filters.pluck(:filter_name)).include? name}
end
|
#available_filter_options ⇒ Object
98
99
100
|
# File 'app/models/clark_kent/report_email.rb', line 98
def available_filter_options
self.available_filters.map{|id| [self.filter_options_for(id).label,id]}
end
|
#available_filters ⇒ Object
94
95
96
|
# File 'app/models/clark_kent/report_email.rb', line 94
def available_filters
self.available_email_filters
end
|
#collection_for(filter_name) ⇒ Object
82
83
84
|
# File 'app/models/clark_kent/report_email.rb', line 82
def collection_for(filter_name)
self.report.collection_for(filter_name)
end
|
#emails ⇒ Object
110
111
112
|
# File 'app/models/clark_kent/report_email.rb', line 110
def emails
self.users.map(&:email)
end
|
#filter_kind(filter_name) ⇒ Object
66
67
68
|
# File 'app/models/clark_kent/report_email.rb', line 66
def filter_kind(filter_name)
self.report.filter_kind(filter_name)
end
|
#filter_options_for(filter_name) ⇒ Object
78
79
80
|
# File 'app/models/clark_kent/report_email.rb', line 78
def filter_options_for(filter_name)
self.report.filter_options_for(filter_name)
end
|
#get_filter_class(params) ⇒ Object
86
87
88
|
# File 'app/models/clark_kent/report_email.rb', line 86
def get_filter_class(params)
self.report.get_filter_class(params)
end
|
#get_query(params, count = false) ⇒ Object
102
103
104
|
# File 'app/models/clark_kent/report_email.rb', line 102
def get_query(params, count = false)
self.report.resource_class.report(params,self, count)
end
|
#period_pretty ⇒ Object
106
107
108
|
# File 'app/models/clark_kent/report_email.rb', line 106
def period_pretty
self.report_date_filters.map{|filter| [filter.filter_name,filter.date_display].join(' ')}.join('<br>').html_safe
end
|
#report_filter_params ⇒ Object
61
62
63
64
|
# File 'app/models/clark_kent/report_email.rb', line 61
def report_filter_params
Hash[*self.viable_report_filters.map{|filter| filter.filter_match_params}.flatten].
merge(order: self.report.sorter).merge(self.report.report_filter_params)
end
|
#resource_class ⇒ Object
74
75
76
|
# File 'app/models/clark_kent/report_email.rb', line 74
def resource_class
self.report.resource_class
end
|
#send_email(user_id) ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'app/models/clark_kent/report_email.rb', line 40
def send_email(user_id)
user = ClarkKent.user_class.find(user_id)
params = {report_result_name: "report-#{self.id}-user-#{user_id}-#{Time.now.to_formatted_s(:number)}", report_class: 'ClarkKent::ReportEmail'}
SharingScopeKind.custom.each do |sharing_scope_kind|
unless report.report_filters.map(&:filter_name).include? sharing_scope_kind.basic_association_id_collection_name.to_s
associations = sharing_scope_kind.associated_containers_for(user)
if associations.respond_to? :map
params[sharing_scope_kind.basic_association_id_collection_name] = associations.map(&:id)
else
params[sharing_scope_kind.basic_association_id_collection_name] = associations.id
end
end
end
report_download_url = ClarkKent::Report.send_report_to_s3(self.id, params)
mail = ClarkKent::ReportMailer.report_run(self.report_id, user_id, report_download_url)
mail.deliver_now
rescue ClarkKent::ReportFilterError => e
mail = ClarkKent::ReportMailer.report_error(self.report_id, user_id, e.message)
mail.deliver_now
end
|
#send_emails ⇒ Object
34
35
36
37
38
|
# File 'app/models/clark_kent/report_email.rb', line 34
def send_emails
self.user_report_emails.each do |user_report_email|
ConeyIsland.submit(ClarkKent::ReportEmail, :send_email, instance_id: self.id, args: [user_report_email.user_id], timeout: 300, work_queue: ClarkKent.work_queue)
end
end
|
#viable_report_filters ⇒ Object
70
71
72
|
# File 'app/models/clark_kent/report_email.rb', line 70
def viable_report_filters
@viable_report_filters ||= report_filters.to_a.select{|rf| filter_options_for(rf.filter_name).present? }
end
|