Skip to content
Snippets Groups Projects
Select Git revision
  • 7ebe434a73aebfd4ac4af1a2ff02bc978d2a1f13
  • master default
  • uiUpdates
  • 1.0.0
4 results

event.rb

Blame
  • user avatar
    Tyler Lemburg authored
    7ebe434a
    History
    event.rb 2.14 KiB
    require 'active_record'
    
    class Event < ActiveRecord::Base
    	has_many :event_signups, :dependent => :destroy
    	has_one :reservation, :dependent => :destroy
    	belongs_to :location
    	belongs_to :event_type
    	belongs_to :service_space
    	alias_method :type, :event_type
    	alias_method :signups, :event_signups
    
    	scope :in_day, ->(time) {
    		today = time.in_time_zone.midnight
    		tomorrow = (time.in_time_zone.midnight + 1.day + 1.hour).in_time_zone.midnight
    		where('(start_time >= ? AND start_time < ?) OR (end_time >= ? AND end_time < ?)', today.getutc, tomorrow.getutc, today.getutc, tomorrow.getutc)
    	}
    
    	scope :in_week, ->(time) {
    		last_sunday = time.in_time_zone.week_start
    		next_sunday = (time.in_time_zone.week_start + 1.week + 1.hour).in_time_zone.week_start
    		where('(start_time >= ? AND start_time < ?) OR (end_time >= ? AND end_time < ?)', last_sunday.getutc, next_sunday.getutc, last_sunday.getutc, next_sunday.getutc)
    	}
    
    	# returns length in minutes. If start or end is nil, returns 0
    	def length
    		if end_time.nil? || start_time.nil?
    			return 0
    		end
    		((end_time - start_time) / 60).to_i
    	end
    
    	def info_link
    		"/#{service_space.url_name}/events/#{id}/"
    	end
    
    	def edit_link
    		"/#{service_space.url_name}/admin/events/#{id}/edit/"
    	end
    
    	def has_reservation
    		!self.reservation.nil?
    	end
    
    	def image_src
    		"/images/#{id}/"
    	end
    
    	def set_data(params)
    		self.title = params[:title]
    		self.description = params[:description]
    		self.start_time = calculate_time(params[:start_date], params[:start_time_hour], params[:start_time_minute], params[:start_time_am_pm])
    		self.end_time = calculate_time(params[:end_date], params[:end_time_hour], params[:end_time_minute], params[:end_time_am_pm])
    		self.event_type_id = params[:type]
    		self.location_id = params[:location]
    		self.max_signups = params[:limit_signups] == 'on' ? params[:max_signups].to_i : nil
    		self.save
    	end
    
    	def set_image_data(params)
    		if params[:imagedata]
    			self.imagemime = params[:imagedata][:type]
    			self.imagedata = params[:imagedata][:tempfile].read if params[:imagedata][:tempfile].is_a?(Tempfile)
    		end
    		self.save
    	end
    
    	def remove_image_data
    		self.imagemime = nil
    		self.imagedata = nil
    		self.save
    	end
    end