require 'geocoder' class Venue < ActiveRecord::Base belongs_to :organization has_one :event has_many :charts validates_presence_of :name attr_accessible :name, :address1, :address2, :city, :state, :zip, :time_zone, :lat, :long geocoded_by :full_street_address, :latitude => :lat, :longitude => :long after_save :run_geocode, :if => :address1_changed? after_save :refresh_show_stats, :if => :time_zone_changed? def default_chart self.charts.first end def self.most_recently_named(organization, venue_name) organization.venues .where(:name => venue_name) .order('id desc') .first end # # MigrateChartsBackToVenues depends on this method # def update_default_chart_from(chart) new_chart = chart.dup!({:save => true}) new_chart.event = nil self.default_chart.destroy if default_chart new_chart.venue = self new_chart.save end def name_and_address_as_string string = '' string = self.name string += " -- " if (self.name? && self.address_as_string.present?) string += address_as_string string end def address_as_string street_as_string + " " + city_state_zip_as_string end def street_as_string str = (address1 || "") + " " + (address2 || "") str.strip end def city_state_zip_as_string str = (city || "") + " " + (state || "") + " " + (zip || "") str.strip end def address_as_url_query URI::escape(street_as_string + " " + city_state_zip_as_string) end def full_street_address (address1 || "") + ", " + (address2 || "") + ", " + (city || "") + ", " + (state || "") + " " + (zip || "") end def refresh_show_stats unless self.event.nil? self.event.shows.each {|s| s.delay.refresh_stats } end end private def run_geocode Delayed::Job.enqueue(GeocodeAddressJob.new(self)) end end