query_report 1.0.1 → 1.0.2

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.
Files changed (78) hide show
  1. data/app/helpers/query_report_filter_helper.rb +0 -8
  2. data/app/helpers/query_report_link_helper.rb +9 -0
  3. data/app/views/query_report/_chart.html.erb +10 -0
  4. data/app/views/query_report/_charts.html.erb +6 -10
  5. data/app/views/query_report/_links.html.erb +2 -0
  6. data/app/views/query_report/_records.html.erb +21 -0
  7. data/app/views/query_report/_search.html.erb +7 -5
  8. data/app/views/query_report/list.html.erb +3 -32
  9. data/lib/query_report/filter.rb +44 -26
  10. data/lib/query_report/helper.rb +6 -6
  11. data/lib/query_report/version.rb +1 -1
  12. data/test/dummy/app/controllers/invoices_controller.rb +23 -18
  13. data/test/dummy/app/models/invoice.rb +2 -1
  14. data/test/dummy/app/models/user.rb +6 -1
  15. data/test/dummy/db/development.sqlite3 +0 -0
  16. data/test/dummy/db/migrate/20130622120853_create_users.rb +2 -3
  17. data/test/dummy/db/migrate/20130630132513_create_invoices.rb +3 -0
  18. data/test/dummy/db/schema.rb +7 -5
  19. data/test/dummy/db/seed.rb +14 -3
  20. data/test/dummy/log/development.log +3848 -0
  21. data/test/dummy/tmp/miniprofiler/mp_timers_1phunlrkl040xbl9ni38 +0 -0
  22. data/test/dummy/tmp/miniprofiler/mp_timers_2jj5q0umhfjgdsr3be6r +0 -0
  23. data/test/dummy/tmp/miniprofiler/mp_timers_4nme0opawv0cuju7ycln +0 -0
  24. data/test/dummy/tmp/miniprofiler/mp_timers_4x4zy2jyybfnrfctzoll +0 -0
  25. data/test/dummy/tmp/miniprofiler/mp_timers_501n5dolb96ahn8fsdeb +0 -0
  26. data/test/dummy/tmp/miniprofiler/mp_timers_50279rze1q2oyskpd2bx +0 -0
  27. data/test/dummy/tmp/miniprofiler/mp_timers_5cx1jmk7clhq7gdqu8fj +0 -0
  28. data/test/dummy/tmp/miniprofiler/mp_timers_625nhhhlou6kji64k1v8 +0 -0
  29. data/test/dummy/tmp/miniprofiler/mp_timers_8papkqyltk3r9vdbiwlx +0 -0
  30. data/test/dummy/tmp/miniprofiler/mp_timers_as4xud3puw1vxjzm8ma3 +0 -0
  31. data/test/dummy/tmp/miniprofiler/mp_timers_cuw96wvyfzku6np7dv6u +0 -0
  32. data/test/dummy/tmp/miniprofiler/mp_timers_eml2za25qr6vmokw5tda +0 -0
  33. data/test/dummy/tmp/miniprofiler/mp_timers_f1cpnb605srbgp7u5n6l +0 -0
  34. data/test/dummy/tmp/miniprofiler/mp_timers_kcb88g8t6jcdbzy4sf40 +0 -0
  35. data/test/dummy/tmp/miniprofiler/mp_timers_oziigmt85gb8ro89h2uo +0 -0
  36. data/test/dummy/tmp/miniprofiler/mp_timers_rkitlcrj5rur9vtb25yr +0 -0
  37. data/test/dummy/tmp/miniprofiler/mp_timers_s24xgsm7sihnsifjqne0 +0 -0
  38. data/test/dummy/tmp/miniprofiler/mp_timers_v4vq4inppiedkn1mxsut +0 -0
  39. data/test/dummy/tmp/miniprofiler/mp_timers_wb62iw0f860zfkjkt42d +0 -0
  40. data/test/dummy/tmp/miniprofiler/mp_timers_yb4i2uuaxhoz5hst26bj +0 -0
  41. metadata +46 -76
  42. data/test/dummy/db/test.sqlite3 +0 -0
  43. data/test/dummy/tmp/miniprofiler/mp_timers_435onnqlkhcky6yip9mj +0 -0
  44. data/test/dummy/tmp/miniprofiler/mp_timers_5a5gcp8rj2g7cjlrh11r +0 -0
  45. data/test/dummy/tmp/miniprofiler/mp_timers_5awpjfhldzcfjkeiia3p +0 -0
  46. data/test/dummy/tmp/miniprofiler/mp_timers_5n9tm06nu8wtqem8jd9s +0 -0
  47. data/test/dummy/tmp/miniprofiler/mp_timers_83yh2jf8w7ouqnuqevws +0 -0
  48. data/test/dummy/tmp/miniprofiler/mp_timers_9scoumsixeymou0wyqwf +0 -0
  49. data/test/dummy/tmp/miniprofiler/mp_timers_9xq47956uczidwr4xqs2 +0 -0
  50. data/test/dummy/tmp/miniprofiler/mp_timers_a4mj9799k6k4r6jruzj7 +0 -0
  51. data/test/dummy/tmp/miniprofiler/mp_timers_a7ev5lal7xp2xzjj2n9p +0 -0
  52. data/test/dummy/tmp/miniprofiler/mp_timers_azffwngwstpj3o7g7zaj +0 -0
  53. data/test/dummy/tmp/miniprofiler/mp_timers_bsifeckwtz6lhx8rqwgz +0 -0
  54. data/test/dummy/tmp/miniprofiler/mp_timers_c27pz5f69skbkwfrnlr5 +0 -0
  55. data/test/dummy/tmp/miniprofiler/mp_timers_c5lzifpf785aic4t3cm8 +0 -0
  56. data/test/dummy/tmp/miniprofiler/mp_timers_dbth1ye234719bbg3xjq +0 -0
  57. data/test/dummy/tmp/miniprofiler/mp_timers_ech68w7azvs6whb6s88w +0 -0
  58. data/test/dummy/tmp/miniprofiler/mp_timers_etmdhvrbbmdadc7oyw8q +0 -0
  59. data/test/dummy/tmp/miniprofiler/mp_timers_gdb6sz9j5g8pyrobpse2 +0 -0
  60. data/test/dummy/tmp/miniprofiler/mp_timers_gnj8jwxqjl0ocjfopzmt +0 -0
  61. data/test/dummy/tmp/miniprofiler/mp_timers_hzjksutah5t2nkoe5gye +0 -0
  62. data/test/dummy/tmp/miniprofiler/mp_timers_ijm30kq0c4jrpb5coyiz +0 -0
  63. data/test/dummy/tmp/miniprofiler/mp_timers_ixj6jdcp3o0pc4vzdjoo +0 -0
  64. data/test/dummy/tmp/miniprofiler/mp_timers_l2w9vljbeofwmhmxn9lv +0 -0
  65. data/test/dummy/tmp/miniprofiler/mp_timers_m0kxxiow6jlfcjulu02t +0 -0
  66. data/test/dummy/tmp/miniprofiler/mp_timers_m2ow1xy7c6tw0f4fj2co +0 -0
  67. data/test/dummy/tmp/miniprofiler/mp_timers_meafgmjq07s2xlkm4ney +0 -0
  68. data/test/dummy/tmp/miniprofiler/mp_timers_mitzsa7y0lvka04il6an +0 -0
  69. data/test/dummy/tmp/miniprofiler/mp_timers_mxejnh24sg011tpzlq7l +0 -0
  70. data/test/dummy/tmp/miniprofiler/mp_timers_nlvpu6hg03b8cue75kkc +0 -0
  71. data/test/dummy/tmp/miniprofiler/mp_timers_ns57exo8aheow6jngknj +0 -0
  72. data/test/dummy/tmp/miniprofiler/mp_timers_pq8a5s9f7o747x14bip8 +0 -0
  73. data/test/dummy/tmp/miniprofiler/mp_timers_pvxfsf8tdy3tk7twydyc +0 -0
  74. data/test/dummy/tmp/miniprofiler/mp_timers_t5zt24mkmoq4kpcvvlrp +0 -0
  75. data/test/dummy/tmp/miniprofiler/mp_timers_tesee62zyykaxw8dbmq1 +0 -0
  76. data/test/dummy/tmp/miniprofiler/mp_timers_ujpdek4jfp8flbqp7fi3 +0 -0
  77. data/test/dummy/tmp/miniprofiler/mp_timers_wbiyljqrnox89js4m0at +0 -0
  78. data/test/dummy/tmp/miniprofiler/mp_timers_ywg973w6dqfz9nuj5qio +0 -0
@@ -11,12 +11,4 @@ module QueryReportFilterHelper
11
11
  concat(label_tag options[:placeholder])
12
12
  select_tag name, options_for_select([['', ''], ['true', 'true'], ['false', 'false']], value)
13
13
  end
14
-
15
- def link_to_download_report_pdf
16
- link_to t('views.links.pdf'), export_report_url_with_format('pdf'), :target => "_blank"
17
- end
18
-
19
- def link_to_download_report_csv
20
- link_to t('views.links.csv'), export_report_url_with_format('csv'), :target => "_blank"
21
- end
22
14
  end
@@ -0,0 +1,9 @@
1
+ module QueryReportLinkHelper
2
+ def link_to_download_report_pdf
3
+ link_to t('views.links.pdf'), export_report_url_with_format('pdf'), :target => "_blank"
4
+ end
5
+
6
+ def link_to_download_report_csv
7
+ link_to t('views.links.csv'), export_report_url_with_format('csv'), :target => "_blank"
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ <div class="row-fluid">
2
+ <% report.charts.each_with_index do |chart, i| %>
3
+ <% chart_id = "chart#{i}" %>
4
+ <div class="span6">
5
+ <div id="<%= chart_id %>" style="text-align: center;"></div>
6
+ </div>
7
+ <%= render_chart(chart.prepare_visualr, chart_id) %>
8
+ <% end %>
9
+ <div class="clearfix"></div>
10
+ </div>
@@ -1,10 +1,6 @@
1
- <div class="row-fluid">
2
- <% report.charts.each_with_index do |chart, i| %>
3
- <% chart_id = "chart#{i}" %>
4
- <div class="span6">
5
- <div id="<%= chart_id %>" style="text-align: center;"></div>
6
- </div>
7
- <%= render_chart(chart.prepare_visualr, chart_id) %>
8
- <% end %>
9
- <div class="clearfix"></div>
10
- </div>
1
+ <% if report.has_chart? and report.enable_chart? and report.chart_on_web? %>
2
+ <script type="text/javascript" src="https://www.google.com/jsapi"></script>
3
+ <%= render :partial => "query_report/chart", locals: {report: report} %>
4
+ <% else %>
5
+ <br/>
6
+ <% end %>
@@ -0,0 +1,2 @@
1
+ <%= link_to_download_report_pdf %>
2
+ <%= link_to_download_report_csv %>
@@ -0,0 +1,21 @@
1
+ <% if report.records.size > 0 %>
2
+ <table class="table table-bordered table-striped">
3
+ <thead>
4
+ <% report.columns.each do |column| %>
5
+ <th><%= sort_link(report.search, column.name) %></th>
6
+ <% end %>
7
+ </thead>
8
+
9
+ <tbody>
10
+ <% report.records.each do |record| %>
11
+ <tr>
12
+ <% report.columns.each do |column| %>
13
+ <td><%= record[column.humanize] %></td>
14
+ <% end %>
15
+ </tr>
16
+ <% end %>
17
+ </tbody>
18
+ </table>
19
+ <% else %>
20
+ <p>No record found</p>
21
+ <% end %>
@@ -1,8 +1,10 @@
1
- <%= search_form_for report.search, :url => url_for, :html => {:method => :get, :class => 'form-inline'} do |f| %>
2
- <% report.filters.each do |filter| %>
3
- <% filter.comparators.each do |comparator| %>
4
- <%= query_report_render_filter(filter, comparator) %>
1
+ <% if report.has_filter? %>
2
+ <%= search_form_for report.search, :url => url_for, :html => {:method => :get, :class => 'form-inline'} do |f| %>
3
+ <% report.filters.each do |filter| %>
4
+ <% filter.comparators.each do |comparator| %>
5
+ <%= query_report_render_filter(filter, comparator) %>
6
+ <% end %>
5
7
  <% end %>
8
+ <%= f.submit 'Search', :class => 'btn btn-blue' %>
6
9
  <% end %>
7
- <%= f.submit 'Search', :class => 'btn btn-blue' %>
8
10
  <% end %>
@@ -1,14 +1,7 @@
1
1
  <%= render :partial => "query_report/search", locals: {report: @report} %>
2
2
  <br/>
3
-
4
- <%= link_to_download_report_pdf %>
5
- <%= link_to_download_report_csv %>
6
-
7
- <% if @report.has_chart? and @report.enable_chart? and @report.chart_on_web? %>
8
- <script type="text/javascript" src="https://www.google.com/jsapi"></script>
9
- <%= render :partial => "query_report/charts", locals: {report: @report} %>
10
- <% end %>
11
-
3
+ <%= render :partial => "query_report/links", locals: {report: @report} %>
4
+ <%= render :partial => "query_report/charts", locals: {report: @report} %>
12
5
  <br/>
13
6
  <%# if @report.scopes.size > 0 %>
14
7
  <%#= link_to_with_scope('all', @report.current_scope) %>
@@ -16,28 +9,6 @@
16
9
  <%#= link_to_with_scope(scope, @report.current_scope) %>
17
10
  <%# end %>
18
11
  <%# end %>
19
- <br/>
20
-
21
- <% if @report.records.size > 0 %>
22
- <table class="table table-bordered table-striped">
23
- <thead>
24
- <% @report.columns.each do |column| %>
25
- <th><%= sort_link(@report.search, column.name) %></th>
26
- <% end %>
27
- </thead>
28
-
29
- <tbody>
30
- <% @report.records.each do |record| %>
31
- <tr>
32
- <% @report.columns.each do |column| %>
33
- <td><%= record[column.humanize] %></td>
34
- <% end %>
35
- </tr>
36
- <% end %>
37
- </tbody>
38
- </table>
39
- <% else %>
40
- <p>No record found</p>
41
- <% end %>
42
12
 
13
+ <%= render :partial => "query_report/records", locals: {report: @report} %>
43
14
  <%= paginate @report.paginated_query if @report.paginate? %>
@@ -19,38 +19,38 @@ module QueryReport
19
19
  @filters << Filter.new(@params, column, options, &block)
20
20
  end
21
21
 
22
+ def has_filter?
23
+ filters.present?
24
+ end
25
+
22
26
  def apply_filters(query, http_params)
23
27
  # apply default filter
24
28
  params = load_default_values_in_param(http_params) #need for ransack filter
25
-
26
29
  @search = query.search(params[:q])
27
30
  query = @search.result
28
31
 
29
- @filters.each do |filter|
30
- if filter.custom?
31
- ordered_custom_param_values = filter.search_keys.collect do |key|
32
- if filter.boolean?
33
- params[:custom_search][key].present? ? params[:custom_search][key] == 'true' : nil
34
- else
35
- params[:custom_search][key]
36
- end
37
- end
38
- #filter only if there is a given input
39
- query = filter.block.call(query, *ordered_custom_param_values) unless ordered_custom_param_values.all? { |p| p.nil? or p == '' }
40
- end
32
+ #apply custom filter
33
+ @filters.select(&:custom?).each do |filter|
34
+ ordered_custom_param_values = ordered_param_value_objects(filter)
35
+ has_no_user_input = ordered_custom_param_values.all? { |p| p.nil? or p == '' }
36
+ query = filter.block.call(query, *ordered_custom_param_values) unless has_no_user_input
41
37
  end
42
38
  query
43
39
  end
44
40
 
41
+ def ordered_param_value_objects(filter)
42
+ filter.comparators.collect do |comp|
43
+ comp.objectified_param_value
44
+ end
45
+ end
46
+
45
47
  def load_default_values_in_param(http_params)
46
48
  params = http_params.clone
47
49
  params = params.merge(q: {}) unless params[:q]
48
50
  params = params.merge(custom_search: {}) unless params[:custom_search]
49
51
  @filters.each do |filter|
50
- if filter.has_default?
51
- filter.comparators.each do |comparator|
52
- params[filter.params_key][comparator.search_key] ||= comparator.default.to_s
53
- end
52
+ filter.comparators.each do |comparator|
53
+ params[filter.params_key][comparator.search_key] ||= comparator.param_value
54
54
  end
55
55
  end
56
56
  params
@@ -60,7 +60,7 @@ module QueryReport
60
60
  attr_reader :filter, :type, :name, :default
61
61
 
62
62
  def initialize(filter, type, name, default=nil)
63
- @filter, @type, @name, @default = filter, type, name, default.to_s
63
+ @filter, @type, @name, @default = filter, type, name, default
64
64
  end
65
65
 
66
66
  def search_key
@@ -72,12 +72,33 @@ module QueryReport
72
72
  end
73
73
 
74
74
  def param_value
75
- @filter.params[@filter.params_key] ? @filter.params[@filter.params_key][search_key] : default
75
+ @filter.params[@filter.params_key] ? @filter.params[@filter.params_key][search_key] : stringified_default
76
76
  end
77
77
 
78
78
  def has_default?
79
79
  !@default.nil?
80
80
  end
81
+
82
+ def stringified_default
83
+ @stringified_default ||= case @filter.type
84
+ when :date
85
+ @default.kind_of?(String) ? @default : @default.to_s(:db)
86
+ else
87
+ @default.to_s
88
+ end
89
+ end
90
+
91
+ #convert param value which is a string to object like date and boolean
92
+ def objectified_param_value
93
+ @stringified_default ||= case @filter.type
94
+ when :date
95
+ @default.to_date
96
+ when :boolean
97
+ @default.to_boolean
98
+ else
99
+ @default
100
+ end
101
+ end
81
102
  end
82
103
 
83
104
  class Filter
@@ -88,10 +109,7 @@ module QueryReport
88
109
  # +params+:: The params from the http request
89
110
  def initialize(params, column, options, &block)
90
111
  @params, @column, @options, @comparators, @block = params, column, options, [], block
91
- @type = options if options.kind_of? String
92
- if options.kind_of? Hash
93
- @type = options[:type]
94
- end
112
+ @type = options.kind_of?(String) ? options : options[:type]
95
113
  generate_comparators
96
114
  end
97
115
 
@@ -133,10 +151,10 @@ module QueryReport
133
151
  end
134
152
 
135
153
  if @options[:comp]
136
- @options[:comp].each_with_index do |(search_key, filter_name), i|
154
+ @options[:comp].each_with_index do |(ransack_search_key, filter_name), i|
137
155
  default = nil
138
- default = @options[:default].kind_of?(Array) ? @options[:default][i] : @options[:default] if @options[:default]
139
- @comparators << Comparator.new(self, search_key, filter_name, default)
156
+ default = @options[:default].kind_of?(Array) ? @options[:default][i] : @options[:default] unless @options[:default].nil?
157
+ @comparators << Comparator.new(self, ransack_search_key, filter_name, default)
140
158
  end
141
159
  end
142
160
  end
@@ -13,26 +13,26 @@ module QueryReport
13
13
  @report ||= QueryReport::Report.new(params, view_context, options)
14
14
  @report.query = query
15
15
  @report.instance_eval &block
16
- render_report
16
+ render_report(options)
17
17
  end
18
18
 
19
- def render_report
19
+ def render_report(options)
20
20
  respond_to do |format|
21
21
  format.js { render 'query_report/list' }
22
22
  format.html { render 'query_report/list' }
23
23
  format.json { render json: @report.all_records }
24
24
  format.csv { send_data generate_csv_for_report(@report.all_records), :disposition => "attachment;" }
25
- format.pdf { send_data query_report_pdf_template_class.new(@report).to_pdf.render }
25
+ format.pdf { send_data query_report_pdf_template_class(options).new(@report).to_pdf.render }
26
26
  end
27
27
  end
28
28
 
29
- def query_report_pdf_template_class
30
- options = QueryReport.config.pdf_options
29
+ def query_report_pdf_template_class(options)
30
+ options = QueryReport.config.pdf_options.merge(options)
31
31
  if options[:template_class]
32
32
  @template_class ||= options[:template_class].to_s.constantize
33
33
  return @template_class
34
34
  end
35
- return QueryReport::ReportPdf
35
+ QueryReport::ReportPdf
36
36
  end
37
37
 
38
38
  def generate_csv_for_report(records)
@@ -1,3 +1,3 @@
1
1
  module QueryReport
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -9,8 +9,8 @@ class InvoicesController < ApplicationController
9
9
 
10
10
  reporter(@invoices) do
11
11
  filter :title, type: :text
12
- filter :created_at, type: :date, default: [5.months.ago.to_date.to_s(:db), 1.months.from_now.to_date.to_s(:db)]
13
- filter :paid, type: :boolean
12
+ filter :created_at, type: :date, default: [5.months.ago.to_date, 1.months.from_now.to_date]
13
+ filter :paid, type: :boolean, default: false
14
14
 
15
15
  column :title do |invoice|
16
16
  link_to invoice.title, invoice
@@ -18,25 +18,30 @@ class InvoicesController < ApplicationController
18
18
  column :total_paid
19
19
  column :total_charged
20
20
  column :paid
21
-
22
- column_chart('Unpaid VS Paid') do
23
- add 'Unpaid' do |query|
24
- (query.sum('total_charged').to_f - query.sum('total_paid').to_f).to_f
25
- end
26
- add 'Paid' do |query|
27
- query.sum('total_paid').to_f
28
- end
21
+ column :received_by_id do |invoice|
22
+ invoice.received_by.name
29
23
  end
30
24
 
31
- pie_chart('Unpaid VS Paid') do
32
- add 'Unpaid' do |query|
33
- (query.sum('total_charged').to_f - query.sum('total_paid').to_f).to_f
34
- end
35
- add 'Paid' do |query|
36
- query.sum('total_paid').to_f
37
- end
38
- end
25
+ #column_chart('Unpaid VS Paid') do
26
+ # add 'Unpaid' do |query|
27
+ # (query.sum('total_charged').to_f - query.sum('total_paid').to_f).to_f
28
+ # end
29
+ # add 'Paid' do |query|
30
+ # query.sum('total_paid').to_f
31
+ # end
32
+ #end
33
+ #
34
+ #pie_chart('Unpaid VS Paid') do
35
+ # add 'Unpaid' do |query|
36
+ # (query.sum('total_charged').to_f - query.sum('total_paid').to_f).to_f
37
+ # end
38
+ # add 'Paid' do |query|
39
+ # query.sum('total_paid').to_f
40
+ # end
41
+ #end
39
42
  end
43
+ #ap @report.filters.last.comparators.first.default
44
+ #ap @report.filters.last.comparators.first.param_value
40
45
  end
41
46
 
42
47
  # GET /invoices/1
@@ -1,3 +1,4 @@
1
1
  class Invoice < ActiveRecord::Base
2
- attr_accessible :paid, :title, :total_charged, :total_paid
2
+ belongs_to :received_by, :class_name => "User"
3
+ attr_accessible :invoiced_on, :paid, :paid_on, :received_by_id, :title, :total_charged, :total_paid
3
4
  end
@@ -1,3 +1,8 @@
1
1
  class User < ActiveRecord::Base
2
- attr_accessible :dob, :email, :name, :single
2
+ has_many :invoices, :foreign_key => "received_by_id"
3
+ attr_accessible :email, :first_name, :last_name
4
+
5
+ def name
6
+ "#{first_name} #{last_name}"
7
+ end
3
8
  end
Binary file
@@ -1,10 +1,9 @@
1
1
  class CreateUsers < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :users do |t|
4
- t.string :name
4
+ t.string :first_name
5
+ t.string :last_name
5
6
  t.string :email
6
- t.boolean :single
7
- t.date :dob
8
7
 
9
8
  t.timestamps
10
9
  end
@@ -5,6 +5,9 @@ class CreateInvoices < ActiveRecord::Migration
5
5
  t.float :total_paid
6
6
  t.float :total_charged
7
7
  t.boolean :paid
8
+ t.integer :received_by_id
9
+ t.date :invoiced_on
10
+ t.date :paid_on
8
11
 
9
12
  t.timestamps
10
13
  end
@@ -18,15 +18,17 @@ ActiveRecord::Schema.define(:version => 20130630132513) do
18
18
  t.float "total_paid"
19
19
  t.float "total_charged"
20
20
  t.boolean "paid"
21
- t.datetime "created_at", :null => false
22
- t.datetime "updated_at", :null => false
21
+ t.integer "received_by_id"
22
+ t.date "invoiced_on"
23
+ t.date "paid_on"
24
+ t.datetime "created_at", :null => false
25
+ t.datetime "updated_at", :null => false
23
26
  end
24
27
 
25
28
  create_table "users", :force => true do |t|
26
- t.string "name"
29
+ t.string "first_name"
30
+ t.string "last_name"
27
31
  t.string "email"
28
- t.boolean "single"
29
- t.date "dob"
30
32
  t.datetime "created_at", :null => false
31
33
  t.datetime "updated_at", :null => false
32
34
  end
@@ -1,4 +1,15 @@
1
- r = Random.new
2
- 1.upto(100) do |i|
3
- Invoice.create(title: "Invoice ##{i}", total_paid: r.rand(100) + 200, total_charged: r.rand(500) + 200)
1
+ User.scoped.destroy_all
2
+ Invoice.scoped.destroy_all
3
+
4
+ users = []
5
+ users << User.create(first_name: 'A.K.M.', last_name: 'Ashrafuzzaman', email: 'ashraf@gmail.com')
6
+ users << User.create(first_name: 'A.K.M.', last_name: 'Zahiduzzaman', email: 'zahid@gmail.com')
7
+ users << User.create(first_name: 'Sharmin', last_name: 'Sultana', email: 'sharmin@gmail.com')
8
+
9
+ 1.upto(200) do |i|
10
+ total_paid = 100 + Random.rand(100)
11
+ total_charged = 100 + Random.rand(100)
12
+ invoiced_on = Random.rand(30).days.ago
13
+ Invoice.create!(title: "Invoice ##{i}", total_paid: total_paid, total_charged: total_charged, invoiced_on: invoiced_on,
14
+ paid: total_paid >= total_charged, received_by_id: users[Random.rand(3)].id)
4
15
  end