class Customer < ActiveRecord::Base
has_many :coitems
- has_many :bitems
-
- has_many_polymorphs :purchaseables, :from => [:coitems, :bitems], :through => :purchases
+ has_many :merchandise_purchases
+ has_many :rentable_purchases
+ has_many :bonus_purchases
+ has_many :late_fee_purchases
validates_presence_of :name, :email, :phone, :address
validates_numericality_of :debt
+ def checked_out_videos
+ coitems = Coitem.find_all_by_customer_id(id)
+ video_count = 0
+
+ for item in coitems
+ if item.rentable.class == Video
+ video_count += 1
+ end
+ end
+
+ return video_count
+ end
+
+ def checked_out_games
+ coitems = Coitem.find_all_by_customer_id(id)
+ game_count = 0
+
+ for item in coitems
+ if item.rentable.class == Game
+ game_count += 1
+ end
+ end
+
+ return game_count
+ end
+
+ def overdue_videos
+ coitems = Coitem.find_all_by_customer_id(id)
+ overdue_video_count = 0
+
+ for item in coitems
+ if item.rentable.class == Video and item.overdue?
+ overdue_video_count += 1
+ end
+ end
+
+ return overdue_video_count
+ end
+
+ def overdue_games
+ coitems = Coitem.find_all_by_customer_id(id)
+ overdue_game_count = 0
+
+ for item in coitems
+ if item.rentable.class == Game and item.overdue?
+ overdue_game_count += 1
+ end
+ end
+
+ return overdue_game_count
+ end
+
protected
def validate
errors.add(:debt, "should be non-negative") if debt.nil? || debt < 0.00
+ errors.add(:email, "is invalid") unless email =~ /.+@.+\..+/
+ errors.add(:phone, "has invalid format, use XXX-XXX-XXXX") unless phone =~ /^\d{3}-\d{3}-\d{4}$/
end
end