1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- require "csv"
- class Petition < ActiveRecord::Base
- has_one :action_page
- has_many :signatures
- after_initialize :set_goal
- def percent_complete
- [signatures.count.to_f / goal.to_f, 1].min * 100
- end
- def recent_signatures(num)
- recent = []
- signatures.last(num).reverse.each do |s|
- if s.anonymous
- recent.push(s.as_json(only: [], methods: [:time_ago, :location]))
- else
- recent.push(s.as_json(only: [:first_name, :last_name, :city], methods: [:time_ago, :location]))
- end
- end
- recent
- end
- def signatures_by_institution(institution)
- signatures.includes(affiliations: :institution)
- .where(institutions: { id: institution })
- end
- def location_required?
- !enable_affiliations
- end
- def to_csv(options = {})
- column_names =
- %w[first_name last_name email zipcode country_code created_at]
- CSV.generate(options) do |csv|
- csv << column_names
- signatures.each do |sub|
- csv << sub.attributes.values_at(*column_names)
- end
- end
- end
- def to_presentable_csv(options = {})
- column_names =
- %w[full_name email city state country]
- CSV.generate(options) do |csv|
- csv << column_names
- signatures.each do |signature|
- csv << signature.to_csv_line
- end
- end
- end
- def to_affiliation_csv(institution, options = {})
- column_names = %w[full_name, institution, affiliation_type]
- CSV.generate(options) do |csv|
- signatures_by_institution(institution).each do |s|
- affiliation = s.affiliations.first
- csv << [s.name,
- affiliation.institution.name,
- affiliation.affiliation_type.name]
- end
- end
- end
- def to_s
- "#{title}-exported_on-#{DateTime.now.strftime("%Y-%m-%d")}"
- end
- private
- def set_goal
- if new_record?
- goal = 100
- end
- end
- end
|