prawn_report 1.9.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/app/controllers/ac_filter_defs_controller.rb +17 -0
  3. data/app/controllers/custom_generate_report_controller.rb +18 -0
  4. data/app/controllers/generate_report_controller.rb +24 -0
  5. data/app/controllers/report_templates_controller.rb +40 -0
  6. data/app/models/ac_filter.rb +15 -0
  7. data/app/models/ac_filter_def.rb +38 -0
  8. data/app/models/ac_filter_option.rb +5 -0
  9. data/app/models/report_template.rb +22 -0
  10. data/lib/ac_filters_utils.rb +187 -0
  11. data/lib/active_record_helpers.rb +218 -0
  12. data/lib/bands/band.rb +23 -0
  13. data/lib/bands/footer_band.rb +7 -0
  14. data/lib/bands/header_band.rb +9 -0
  15. data/lib/bands/summary_band.rb +7 -0
  16. data/lib/custom_report_controller.rb +48 -0
  17. data/lib/generators/prawn_report/install/install_generator.rb +16 -0
  18. data/lib/generators/prawn_report/install/templates/20120108210141_create_prawn_report_catalogs.rb +14 -0
  19. data/lib/generators/prawn_report/install/templates/20120124012653_add_filter_defs.rb +35 -0
  20. data/lib/generators/prawn_report/install/templates/20120209231821_add_filters_to_reports.rb +13 -0
  21. data/lib/generators/prawn_report/install/templates/20120222021437_add_order_to_filter_def.rb +9 -0
  22. data/lib/generators/prawn_report/install/templates/20120222025632_add_select_sql.rb +9 -0
  23. data/lib/generators/prawn_report/install/templates/20120222030526_create_ac_filter_joins.rb +12 -0
  24. data/lib/generators/prawn_report/install/templates/20120222122507_add_serialization_params_to_report.rb +9 -0
  25. data/lib/generators/prawn_report/install/templates/20120222134101_create_ac_filter_includes.rb +12 -0
  26. data/lib/generators/prawn_report/install/templates/20120222150029_change_includes_and_joins_to_hash.rb +21 -0
  27. data/lib/generators/prawn_report/install/templates/20120229134810_add_group_to_filter_def.rb +9 -0
  28. data/lib/generators/prawn_report/install/templates/20120229194434_add_system_criteria_to_ac_filter.rb +9 -0
  29. data/lib/generators/prawn_report/install/templates/20120301063031_change_select_sql.rb +11 -0
  30. data/lib/generators/prawn_report/install/templates/20120303104431_change_filled_criteria_unfilled_criteria.rb +15 -0
  31. data/lib/generators/prawn_report/install/templates/20120316162712_add_filled_criteria_to_options.rb +9 -0
  32. data/lib/generators/prawn_report/install/templates/20120323124446_add_fields_to_filter.rb +17 -0
  33. data/lib/generators/prawn_report/install/templates/20130122101313_add_sql_query_to_ac_filter_def.rb +5 -0
  34. data/lib/generators/prawn_report/install/templates/20131107172133_add_excluir_to_report_template.rb +9 -0
  35. data/lib/prawn_report.rb +21 -0
  36. data/lib/prawn_report/engine.rb +9 -0
  37. data/lib/prawn_report/version.rb +3 -0
  38. data/lib/prawn_report_seeds.rb +46 -0
  39. data/lib/report.rb +190 -0
  40. data/lib/report_helpers.rb +82 -0
  41. data/lib/report_info.rb +27 -0
  42. data/repo/bands/footers/footer_001.rb +20 -0
  43. data/repo/bands/headers/header_001.rb +61 -0
  44. data/repo/bands/headers/header_002.rb +31 -0
  45. data/repo/reports/column_group.rb +58 -0
  46. data/repo/reports/listing.rb +144 -0
  47. data/repo/reports/simple_listing.rb +130 -0
  48. metadata +93 -0
@@ -0,0 +1,144 @@
1
+ #coding: utf-8
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + "/../../lib/report.rb")
4
+ require File.expand_path(File.dirname(__FILE__) + "/../bands/headers/header_001.rb")
5
+ require File.expand_path(File.dirname(__FILE__) + "/../bands/headers/header_002.rb")
6
+ require File.expand_path(File.dirname(__FILE__) + "/../bands/footers/footer_001.rb")
7
+
8
+ module PrawnReport
9
+ class Listing < Report
10
+
11
+ alias :super_new_page :new_page
12
+
13
+ def initialize(report_params = {})
14
+ super(report_params)
15
+ @header_class = PrawnReport::Header001
16
+ @header_other_pages_class = PrawnReport::Header002
17
+ @footer_class = PrawnReport::Footer001
18
+ @filling_colors = ['cccccc', 'ffffff'].cycle
19
+ @current_row = nil
20
+ @printing_internal = false
21
+ @data_end = false
22
+ @detail_name = @report_params[:detail_name] || 'items'
23
+ end
24
+
25
+ #Override line_height to calculate the proper line height for the record
26
+ #The current record can be accessed via the property @current_row
27
+ def line_height
28
+ 15
29
+ end
30
+
31
+ def before_draw_lines
32
+ @printing_internal = true
33
+ @data_end = false
34
+ end
35
+
36
+ def after_draw_lines
37
+ @data_end = true
38
+ @printing_internal = false
39
+ end
40
+
41
+ def before_render_line
42
+ new_page unless fits?(line_height)
43
+ @x = 0
44
+ end
45
+
46
+ def after_render_line
47
+ line_break(line_height-4)
48
+ run_totals(@current_row)
49
+ end
50
+
51
+ def draw_lines
52
+ @data[@detail_name].each do |row|
53
+ @current_row = row
54
+ before_render_line
55
+ render_line(@current_row)
56
+ after_render_line
57
+ end
58
+ end
59
+
60
+ def draw_internal
61
+ before_draw_lines if defined? before_draw_lines
62
+ draw_lines if defined? 'draw_lines'
63
+ after_draw_lines if defined? after_draw_lines
64
+ end
65
+
66
+ def render_line(row)
67
+ @pdf.fill_color @filling_colors.next
68
+ @pdf.fill_rectangle [x,y], max_width, line_height
69
+ @pdf.fill_color '000000'
70
+
71
+ if @report_params[:field]
72
+ render_one_column_line(row)
73
+ elsif @report_params[:columns]
74
+ render_multi_column_line(row)
75
+ end
76
+ end
77
+
78
+ def render_one_column_title
79
+ if @report_params[:title]
80
+ text(@report_params[:title], @max_width, :font_size => 12, :style => :bold)
81
+ line_break(13)
82
+ end
83
+ end
84
+
85
+ def render_multi_column_title
86
+ @report_params[:columns].each do |c|
87
+ unless c[:formatter] == :invisible
88
+ width = c[:width] || 60
89
+ align = c[:align] || :left
90
+ text(c[:title].to_s, width, :font_size => c[:font_size] || 12, :style => :bold, :align => align)
91
+ space(3)
92
+ end
93
+ end
94
+ line_break(13)
95
+ end
96
+
97
+ def render_one_column_line(row)
98
+ text(row[@report_params[:field]], 100, :font_size => 12)
99
+ end
100
+
101
+ def render_multi_column_line(row)
102
+ @report_params[:columns].each do |c|
103
+ unless c[:formatter] == :invisible
104
+ width = c[:width] || 60
105
+ formatter = c[:formatter] || :none
106
+ raw_value = get_raw_field_value(row, c[:name].to_s)
107
+ formatter_options = build_formatter_options(formatter, c)
108
+ formatted_text = format(raw_value, formatter, formatter_options)
109
+ align = c[:align] || :left
110
+ font_size = c[:font_size] || 12
111
+ text(formatted_text, width, :font_size => font_size, :align => align)
112
+ space(3)
113
+ end
114
+ end
115
+ end
116
+
117
+ #This function will build the options to be passed to the specific formatter
118
+ def build_formatter_options(formatter, column_def)
119
+ r = {}
120
+ if formatter == :function
121
+ r[:formatter_function] = column_def[:formatter_function]
122
+ end
123
+ r
124
+ end
125
+
126
+ def second_pass
127
+ 1.upto(@num_pages) do |i|
128
+ @pdf.go_to_page(i)
129
+ @pdf.move_cursor_to(10)
130
+ @x = 0
131
+ text("Página #{@pdf.page_number}/#{@pdf.page_count}", @max_width, :align => :right)
132
+ end
133
+ end
134
+
135
+ def draw_column_titles
136
+ new_page(false) unless fits?(30)
137
+ if @report_params[:field]
138
+ render_one_column_title
139
+ elsif @report_params[:columns]
140
+ render_multi_column_title
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,130 @@
1
+ #coding: utf-8
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + "/listing.rb")
4
+
5
+ module PrawnReport
6
+ #Generates a listing report with or without multiple columns.
7
+ #
8
+ #==Creating a SimpleListing Report
9
+ #To create a simple listing report you must inherit from PrawnReport::SimpleListing class
10
+ #and fill some parameters. The +report_name+ parameter is mandatory. The other parameters depends
11
+ #if you want a single or multi column listing.
12
+ #
13
+ #The parameters are filled setting the instance variable +params+ hash in initialize after calling
14
+ #super.
15
+ #
16
+ #==Single column listing
17
+ #For single column listings you must fill the +field+ parameter and, optionally, the +title+
18
+ #parameter. Like the code bellow
19
+ # class ProductTypeListing < PrawnReport::SimpleListing
20
+ # def initialize
21
+ # super
22
+ # @report_params = {
23
+ # :report_name => 'Product Type Listing',
24
+ # :field => 'name',
25
+ # :title => 'Name'
26
+ # }
27
+ # end
28
+ # end
29
+ #
30
+ #==Multiple column listing
31
+ #To have a multiple column listing you must fill the +columns+ hash inside +params+ hash. Each column
32
+ #has the following properties:
33
+ #* +name+: The name of the field
34
+ #* +title+: The title to be rendered above the first row
35
+ #* +width+: The width of the column. Default value is 60
36
+ #
37
+ #The code belloow shows a listing of people with 3 columns
38
+ #
39
+ # class PeopleListing < PrawnReport::SimpleListing
40
+ # def initialize
41
+ # super
42
+ # @report_params = {
43
+ # :report_name => 'People Listing',
44
+ # :columns => [
45
+ # {:name => 'name', :title => 'Name', :width => 200},
46
+ # {:name => 'age', :title => 'Age', :width => 30},
47
+ # {:name => 'phone_number', :title => 'Phone #', :width => 100}
48
+ # ]
49
+ # }
50
+ # end
51
+ # end
52
+ #
53
+ #==Default behaviour
54
+ #The listing bellow shows the default behaviour of this class. This is not changeable at this
55
+ #momment. Any of this behaviour can become changeable in future versions of this gem.
56
+ #
57
+ #* Font: size 12. normal. Times-Roman
58
+ #* Row background color: Alternate between white and gray (cccccc)
59
+ #* First page Header class: PrawnReport::Header001
60
+ #* Other pages Header class: PrawnReport::Header002
61
+ #* Footer class: PrawnReport::Footer001
62
+
63
+
64
+ class SimpleListing < Listing
65
+
66
+ attr_reader :grouping_info
67
+
68
+ def initialize(report_params = {})
69
+ super(report_params)
70
+ @grouping_info = {:last_group_value => nil,
71
+ :groups_running => false}
72
+ end
73
+
74
+ def new_page(print_titles = true)
75
+ super(print_titles)
76
+ draw_group_header if grouped? and @report_params[:group][:header_reprint_new_page] and !last_group_summary?
77
+ if print_titles
78
+ draw_column_titles unless (!draw_group_column_titles? && !@printing_internal) || last_group_summary?
79
+ end
80
+ end
81
+
82
+ protected
83
+
84
+ def run_groups(row)
85
+ group_value = get_raw_field_value(row, params[:group][:field])
86
+ start_new_group = !@grouping_info[:groups_running]
87
+ start_new_group |= group_value != @grouping_info[:last_group_value]
88
+ if start_new_group
89
+ if(@grouping_info[:groups_running] &&
90
+ @grouping_info[:last_group_value] != group_value)
91
+ draw_group_summary
92
+ new_page(false) if params[:group][:new_page]
93
+ end
94
+ @grouping_info[:last_group_value] = group_value
95
+ @grouping_info[:groups_running] = true
96
+ draw_group_header
97
+ draw_column_titles if draw_group_column_titles?
98
+ reset_group_totals
99
+ end
100
+ end
101
+
102
+ def grouped?
103
+ params[:group]
104
+ end
105
+
106
+ def draw_group_column_titles?
107
+ ( params[:group].nil? ? false : (params[:group][:print_group_column_title].nil? ? true :
108
+ params[:group][:print_group_column_title]))
109
+ end
110
+
111
+ def last_group_summary?
112
+ @data_end
113
+ end
114
+
115
+ def before_draw_lines
116
+ super
117
+ draw_column_titles unless draw_group_column_titles?
118
+ end
119
+
120
+ def after_draw_lines
121
+ draw_group_summary if @data[@detail_name].count > 0
122
+ end
123
+
124
+ def before_render_line
125
+ super
126
+ run_groups(@current_row) if grouped?
127
+ end
128
+
129
+ end
130
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prawn_report
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.9.18
5
+ platform: ruby
6
+ authors:
7
+ - Ricardo Acras
8
+ - Egon Hilgenstieler
9
+ - Juliano Andrade
10
+ - Wellington Torrejais
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2016-10-26 00:00:00.000000000 Z
15
+ dependencies: []
16
+ description: Prawn report is a class repository wich uses prawn gem capabilities to
17
+ generate PDF documents in order to make it easy to create real life reports.
18
+ email: ricardo@acras.com.br julianoch@gmail.com egon@acras.com.br wtds.trabalho@gmail.com
19
+ desenv2@labplus.com.br
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files: []
23
+ files:
24
+ - app/controllers/ac_filter_defs_controller.rb
25
+ - app/controllers/custom_generate_report_controller.rb
26
+ - app/controllers/generate_report_controller.rb
27
+ - app/controllers/report_templates_controller.rb
28
+ - app/models/ac_filter.rb
29
+ - app/models/ac_filter_def.rb
30
+ - app/models/ac_filter_option.rb
31
+ - app/models/report_template.rb
32
+ - lib/ac_filters_utils.rb
33
+ - lib/active_record_helpers.rb
34
+ - lib/bands/band.rb
35
+ - lib/bands/footer_band.rb
36
+ - lib/bands/header_band.rb
37
+ - lib/bands/summary_band.rb
38
+ - lib/custom_report_controller.rb
39
+ - lib/generators/prawn_report/install/install_generator.rb
40
+ - lib/generators/prawn_report/install/templates/20120108210141_create_prawn_report_catalogs.rb
41
+ - lib/generators/prawn_report/install/templates/20120124012653_add_filter_defs.rb
42
+ - lib/generators/prawn_report/install/templates/20120209231821_add_filters_to_reports.rb
43
+ - lib/generators/prawn_report/install/templates/20120222021437_add_order_to_filter_def.rb
44
+ - lib/generators/prawn_report/install/templates/20120222025632_add_select_sql.rb
45
+ - lib/generators/prawn_report/install/templates/20120222030526_create_ac_filter_joins.rb
46
+ - lib/generators/prawn_report/install/templates/20120222122507_add_serialization_params_to_report.rb
47
+ - lib/generators/prawn_report/install/templates/20120222134101_create_ac_filter_includes.rb
48
+ - lib/generators/prawn_report/install/templates/20120222150029_change_includes_and_joins_to_hash.rb
49
+ - lib/generators/prawn_report/install/templates/20120229134810_add_group_to_filter_def.rb
50
+ - lib/generators/prawn_report/install/templates/20120229194434_add_system_criteria_to_ac_filter.rb
51
+ - lib/generators/prawn_report/install/templates/20120301063031_change_select_sql.rb
52
+ - lib/generators/prawn_report/install/templates/20120303104431_change_filled_criteria_unfilled_criteria.rb
53
+ - lib/generators/prawn_report/install/templates/20120316162712_add_filled_criteria_to_options.rb
54
+ - lib/generators/prawn_report/install/templates/20120323124446_add_fields_to_filter.rb
55
+ - lib/generators/prawn_report/install/templates/20130122101313_add_sql_query_to_ac_filter_def.rb
56
+ - lib/generators/prawn_report/install/templates/20131107172133_add_excluir_to_report_template.rb
57
+ - lib/prawn_report.rb
58
+ - lib/prawn_report/engine.rb
59
+ - lib/prawn_report/version.rb
60
+ - lib/prawn_report_seeds.rb
61
+ - lib/report.rb
62
+ - lib/report_helpers.rb
63
+ - lib/report_info.rb
64
+ - repo/bands/footers/footer_001.rb
65
+ - repo/bands/headers/header_001.rb
66
+ - repo/bands/headers/header_002.rb
67
+ - repo/reports/column_group.rb
68
+ - repo/reports/listing.rb
69
+ - repo/reports/simple_listing.rb
70
+ homepage: http://www.acras.com.br/
71
+ licenses: []
72
+ metadata: {}
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubyforge_project:
89
+ rubygems_version: 2.5.1
90
+ signing_key:
91
+ specification_version: 4
92
+ summary: Prawn Report makes it easy to create PDF reports.
93
+ test_files: []