Commit 39fe1dc9176fa224eb8b382c18fc2aec732a6154

Authored by Victor Costa
1 parent bde27f29
Exists in master

Improve report generation

controllers/myprofile/dialoga_plugin_myprofile_controller.rb
@@ -4,10 +4,11 @@ class DialogaPluginMyprofileController < MyProfileController @@ -4,10 +4,11 @@ class DialogaPluginMyprofileController < MyProfileController
4 before_filter :is_admin 4 before_filter :is_admin
5 5
6 def send_report 6 def send_report
7 - Delayed::Job.enqueue(DialogaPlugin::ReportJob.new(profile.id))  
8 - Delayed::Job.enqueue(DialogaPlugin::RankingJob.new(profile.id))  
9 - Delayed::Job.enqueue(DialogaPlugin::EventJob.new(profile.id))  
10 - session[:notice] = _("Favor aguardar: o relatório será criado na pasta Relatorios") 7 + report_path = Time.zone.now.strftime('%Y-%m-%d-%H-%m-%S')
  8 + Delayed::Job.enqueue(DialogaPlugin::ReportJob.new(profile.id, report_path))
  9 + Delayed::Job.enqueue(DialogaPlugin::RankingJob.new(profile.id, report_path))
  10 + Delayed::Job.enqueue(DialogaPlugin::EventJob.new(profile.id, report_path))
  11 + session[:notice] = _("Favor aguardar: o relatório será criado na pasta Relatorios/#{report_path}")
11 redirect_to :back 12 redirect_to :back
12 end 13 end
13 14
lib/dialoga_plugin/event_job.rb
@@ -10,7 +10,7 @@ class DialogaPlugin::EventJob < DialogaPlugin::ReportJob @@ -10,7 +10,7 @@ class DialogaPlugin::EventJob < DialogaPlugin::ReportJob
10 def create_event_report(profile, report_folder) 10 def create_event_report(profile, report_folder)
11 events = Event.where(:profile_id => profile.id) 11 events = Event.where(:profile_id => profile.id)
12 events.map do |event| 12 events.map do |event|
13 - filepath = '/tmp/' + DateTime.now.strftime('%Y-%m-%d-%H-%m-%S') + '-' + event.slug + '.csv' 13 + filepath = "/tmp/#{report_path}/evento-#{event.slug}.csv"
14 file = File.open(File.join(filepath), 'w+') 14 file = File.open(File.join(filepath), 'w+')
15 file.write(event.name+ "\n") 15 file.write(event.name+ "\n")
16 header = "'Nome';'Email'\n" 16 header = "'Nome';'Email'\n"
@@ -26,9 +26,8 @@ class DialogaPlugin::EventJob < DialogaPlugin::ReportJob @@ -26,9 +26,8 @@ class DialogaPlugin::EventJob < DialogaPlugin::ReportJob
26 file.write("\n") 26 file.write("\n")
27 end 27 end
28 file.close 28 file.close
29 - uploaded_file = UploadedFile.new(:uploaded_data => fixture_file_upload(filepath, 'text/csv'), :profile => profile, :parent => report_folder)  
30 - uploaded_file.save  
31 end 29 end
  30 + upload_file(compress_files('eventos', 'evento-*'), profile, report_folder)
32 end 31 end
33 32
34 end 33 end
lib/dialoga_plugin/ranking_job.rb
@@ -16,15 +16,14 @@ class DialogaPlugin::RankingJob < DialogaPlugin::ReportJob @@ -16,15 +16,14 @@ class DialogaPlugin::RankingJob < DialogaPlugin::ReportJob
16 ranking = article.ranking 16 ranking = article.ranking
17 next if ranking.empty? 17 next if ranking.empty?
18 18
19 - filepath = '/tmp/' + DateTime.now.strftime('%Y-%m-%d-%H-%m-%S') + '-' + "ranking_#{discussion.slug}_#{article.slug}.csv" 19 + filepath = "/tmp/#{report_path}/ranking-#{discussion.slug}_#{article.slug}.csv"
20 CSV.open(filepath, 'w' ) do |csv| 20 CSV.open(filepath, 'w' ) do |csv|
21 csv << ['Posição', 'Id', 'Proposta', 'Positivo', 'Negativo', 'Exibições', 'Valor'] 21 csv << ['Posição', 'Id', 'Proposta', 'Positivo', 'Negativo', 'Exibições', 'Valor']
22 ranking.each_with_index {|r, i| csv << [i+1, r.values].flatten} 22 ranking.each_with_index {|r, i| csv << [i+1, r.values].flatten}
23 end 23 end
24 - uploaded_file = UploadedFile.new(:uploaded_data => fixture_file_upload(filepath, 'text/csv'), :profile => profile, :parent => report_folder)  
25 - uploaded_file.save  
26 end 24 end
27 end 25 end
  26 + upload_file(compress_files('rankings', 'ranking-*'), profile, report_folder)
28 end 27 end
29 28
30 end 29 end
lib/dialoga_plugin/report_job.rb
1 -class DialogaPlugin::ReportJob < Struct.new(:profile_id) 1 +class DialogaPlugin::ReportJob < Struct.new(:profile_id, :report_path)
2 2
3 include ActionDispatch::TestProcess 3 include ActionDispatch::TestProcess
4 4
5 def create_report_path(profile) 5 def create_report_path(profile)
6 root_report_folder = profile.folders.where(:slug => 'relatorios').first 6 root_report_folder = profile.folders.where(:slug => 'relatorios').first
7 root_report_folder ||= Folder.create!(:profile => profile, :name => 'Relatorios') 7 root_report_folder ||= Folder.create!(:profile => profile, :name => 'Relatorios')
  8 + FileUtils.mkdir_p "/tmp/#{report_path}"
  9 + report_folder = Folder.find_by_slug(report_path)
  10 + report_folder ||= Folder.create!(:profile => profile, :name => report_path, :parent => root_report_folder)
  11 + end
8 12
9 - report_folder = Folder.find_by_slug(DateTime.now.strftime('%Y-%m-%d')) 13 + def upload_file(filepath, profile, report_folder)
  14 + UploadedFile.create!(:uploaded_data => fixture_file_upload(filepath, 'text/csv'), :profile => profile, :parent => report_folder)
  15 + end
10 16
11 - report_folder ||= Folder.create!(:profile => profile, :name => DateTime.now.strftime('%Y-%m-%d'), :parent => root_report_folder) 17 + def compress_files(filename, pattern)
  18 + filepath = "/tmp/#{report_path}/#{filename}.tar.gz"
  19 + system("cd /tmp/#{report_path} && tar -zcvf #{filepath} #{pattern}")
  20 + filepath
12 end 21 end
13 22
14 def perform 23 def perform
@@ -18,12 +27,12 @@ class DialogaPlugin::ReportJob &lt; Struct.new(:profile_id) @@ -18,12 +27,12 @@ class DialogaPlugin::ReportJob &lt; Struct.new(:profile_id)
18 end 27 end
19 28
20 def create_proposals_report(profile, report_folder) 29 def create_proposals_report(profile, report_folder)
21 - filepath = '/tmp/' + DateTime.now.strftime('%Y-%m-%d-%H-%m-%S') + '-' + 'propostas.csv' 30 + filepath = "/tmp/#{report_path}/propostas.csv"
22 file = File.open(filepath, 'w+') 31 file = File.open(filepath, 'w+')
23 32
24 tasks = ProposalsDiscussionPlugin::ProposalTask.all 33 tasks = ProposalsDiscussionPlugin::ProposalTask.all
25 count = 0 34 count = 0
26 - header = "'Origem';'Status';'Criada em';'Moderado por';'Data de Moderado';'Validado por';'Data de Validado';'Autor';'Proposta'\n" 35 + header = "'Origem';'Status';'Criada em';'Moderado por';'Data de Moderado';'Validado por';'Data de Validado';'Autor';'Proposta';'Categorias'\n"
27 file.write(header) 36 file.write(header)
28 status_translation = { 37 status_translation = {
29 1 => 'Pendente de Moderacao', 38 1 => 'Pendente de Moderacao',
@@ -44,15 +53,13 @@ class DialogaPlugin::ReportJob &lt; Struct.new(:profile_id) @@ -44,15 +53,13 @@ class DialogaPlugin::ReportJob &lt; Struct.new(:profile_id)
44 info.push(task.closed_by.present? ? task.closed_by.name : '') 53 info.push(task.closed_by.present? ? task.closed_by.name : '')
45 info.push(task.closed_by.present? ? task.end_date.strftime("%d/%m/%y %H:%M") : '') 54 info.push(task.closed_by.present? ? task.end_date.strftime("%d/%m/%y %H:%M") : '')
46 info.push(task.requestor.present? ? task.requestor.name : '') 55 info.push(task.requestor.present? ? task.requestor.name : '')
47 - info.push(task.abstract.present? ? task.abstract.gsub(/\s+/, ' ').strip : '') 56 + info.push(task.categories.map {|c| c.name}.join(', '))
48 file.write(info.map{|i| "'" + i.to_s + "'"}.join(";")) 57 file.write(info.map{|i| "'" + i.to_s + "'"}.join(";"))
49 file.write("\n") 58 file.write("\n")
50 end 59 end
51 60
52 file.close 61 file.close
53 -  
54 - uploaded_file = UploadedFile.new(:uploaded_data => fixture_file_upload(filepath, 'text/csv'), :profile => profile, :parent => report_folder)  
55 - uploaded_file.save 62 + upload_file(filepath, profile, report_folder)
56 end 63 end
57 64
58 end 65 end