Bike database interface
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.3 KiB

class Bike < ActiveRecord::Base
validates :log_number, presence: true
validates :brand, presence: true
validates :model, presence: true
validates :bike_type, presence: true
validates :color, presence: true
validates :serial_number, presence: true
has_one :client
FREECYCLERY = "Freecyclery"
SALE = "Sale"
def self.bike_types
[
["BMX", "BMX"],
["Cruiser", "Cruiser"],
["Hybrid", "Hybrid"],
["Kids", "Kids"],
["Mountain", "Mountain"],
["Road", "Road"],
["Touring", "Touring"],
["Track", "Track"],
["Utility", "Utility"],
["Youth", "Youth"]
]
end
def name
self.color + " " + self.brand + ' ' + self.model + " (" + self.log_number.to_s + ")"
end
def client
Client.find_by bike_id: self.id
end
def ready_for_pickup?
self.client && !client.application_voided && self.date_sold.nil?
end
def self.available_for_freecyclery
assigned_bikes = Client.all.includes(:bike).select{|c| !c.bike_id.nil?}.map(&:bike)
all_freecyclery_bikes = Bike.where(purpose: FREECYCLERY).order(log_number: :desc)
all_freecyclery_bikes - assigned_bikes
end
def post_to_bike_index
return true if self.bike_index_id.present?
BikeIndexLogger.perform_async(self.id)
end
end