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 4 before_filter :is_admin
5 5  
6 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 12 redirect_to :back
12 13 end
13 14  
... ...
lib/dialoga_plugin/event_job.rb
... ... @@ -10,7 +10,7 @@ class DialogaPlugin::EventJob < DialogaPlugin::ReportJob
10 10 def create_event_report(profile, report_folder)
11 11 events = Event.where(:profile_id => profile.id)
12 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 14 file = File.open(File.join(filepath), 'w+')
15 15 file.write(event.name+ "\n")
16 16 header = "'Nome';'Email'\n"
... ... @@ -26,9 +26,8 @@ class DialogaPlugin::EventJob < DialogaPlugin::ReportJob
26 26 file.write("\n")
27 27 end
28 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 29 end
  30 + upload_file(compress_files('eventos', 'evento-*'), profile, report_folder)
32 31 end
33 32  
34 33 end
... ...
lib/dialoga_plugin/ranking_job.rb
... ... @@ -16,15 +16,14 @@ class DialogaPlugin::RankingJob < DialogaPlugin::ReportJob
16 16 ranking = article.ranking
17 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 20 CSV.open(filepath, 'w' ) do |csv|
21 21 csv << ['Posição', 'Id', 'Proposta', 'Positivo', 'Negativo', 'Exibições', 'Valor']
22 22 ranking.each_with_index {|r, i| csv << [i+1, r.values].flatten}
23 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 24 end
27 25 end
  26 + upload_file(compress_files('rankings', 'ranking-*'), profile, report_folder)
28 27 end
29 28  
30 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 3 include ActionDispatch::TestProcess
4 4  
5 5 def create_report_path(profile)
6 6 root_report_folder = profile.folders.where(:slug => 'relatorios').first
7 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 21 end
13 22  
14 23 def perform
... ... @@ -18,12 +27,12 @@ class DialogaPlugin::ReportJob &lt; Struct.new(:profile_id)
18 27 end
19 28  
20 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 31 file = File.open(filepath, 'w+')
23 32  
24 33 tasks = ProposalsDiscussionPlugin::ProposalTask.all
25 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 36 file.write(header)
28 37 status_translation = {
29 38 1 => 'Pendente de Moderacao',
... ... @@ -44,15 +53,13 @@ class DialogaPlugin::ReportJob &lt; Struct.new(:profile_id)
44 53 info.push(task.closed_by.present? ? task.closed_by.name : '')
45 54 info.push(task.closed_by.present? ? task.end_date.strftime("%d/%m/%y %H:%M") : '')
46 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 57 file.write(info.map{|i| "'" + i.to_s + "'"}.join(";"))
49 58 file.write("\n")
50 59 end
51 60  
52 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 63 end
57 64  
58 65 end
... ...