1 class PurchaseController < ApplicationController
4 redirect_to :action => :begin
8 @purchase_pages, @purchase = paginate :purchases, :per_page => 100
12 # enter a customer id here
13 render :action => 'begin'
14 session[:total] = 0.00
19 if Customer.find_by_id(params[:customer_id])
20 session[:customer_id] = params[:customer_id]
21 redirect_to :action => :menu
23 flash[:error] = "Customer ID is invalid"
24 redirect_to :action => :begin
29 @customer = Customer.find_by_id(session[:customer_id])
30 @total_price = session[:total]
31 @items = session[:items]
32 render :action => 'menu'
36 render :action => 'rent_begin'
40 @customer = Customer.find_by_id(session[:customer_id])
41 @rentable = Rentable.find_by_id(params[:rentable_id])
44 flash[:error] = "Customer ID is invalid"
45 redirect_to :action => :begin
50 flash[:error] = "Rentable ID is invalid"
51 redirect_to :action => :rent_begin
55 if @rentable.checkedout?
56 flash[:error] = "This #{@rentable.type} is already checked out!"
57 redirect_to :action => :rent_begin
61 # Check Rentable Policies
62 @maxvideos = RentablePolicy.find_by_name("MaxVideos")
63 if @rentable.class == Video and @customer.checked_out_videos >= @maxvideos.value
64 flash[:error] = "#{@maxvideos.description} LIMIT REACHED"
65 redirect_to :action => :rent_begin
69 @maxgames = RentablePolicy.find_by_name("MaxGames")
70 if @rentable.class == Game and @customer.checked_out_games >= @maxgames.value
71 flash[:error] = "#{@maxgames.description} LIMIT REACHED"
72 redirect_to :action => :rent_begin
76 @maxoverduevideos = RentablePolicy.find_by_name("MaxOverdueVideos")
77 if @rentable.class == Video and @customer.overdue_videos >= @maxoverduevideos.value
78 flash[:error] = "#{@maxoverduevideos.description} LIMIT REACHED"
79 redirect_to :action => :rent_begin
83 @maxoverduegames = RentablePolicy.find_by_name("MaxOverdueGames")
84 if @rentable.class == Game and @customer.overdue_games >= @maxoverduegames.value
85 flash[:error] = "#{@maxoverduegames.description} LIMIT REACHED"
86 redirect_to :action => :rent_begin
92 checkout.customer = @customer
93 checkout.rentable = @rentable
94 checkout.out_date = Time.now.to_date
95 checkout.due_date = @rentable.due_date
98 # Actually record the purchase
99 purchase = RentablePurchase.new
100 purchase.customer_id = session[:customer_id]
101 purchase.date = Time.now.to_date
102 purchase.price = @rentable.calculated_price
103 purchase.rentable = @rentable
106 # Add te session variables
107 session[:total] += @rentable.calculated_price
108 session[:items].push @rentable
110 flash[:notice] = "Successfully made purchase"
111 redirect_to :action => :menu
115 render :action => 'buy_begin'
119 @customer = Customer.find_by_id(session[:customer_id])
120 @merchandise = Merchandise.find_by_id(params[:merchandise_id])
123 flash[:error] = "Customer ID is invalid"
124 redirect_to :action => :begin
129 flash[:error] = "Merchandise ID is invalid"
130 redirect_to :action => :buy_begin
134 if @merchandise.quantity < 1
135 flash[:error] = "The system thinks we are out of this merchandise item!"
136 redirect_to :action => :buy_begin
140 # Actually record the purchase
141 purchase = MerchandisePurchase.new
142 purchase.customer_id = session[:customer_id]
143 purchase.date = Time.now.to_date
144 purchase.price = @merchandise.price
145 purchase.merchandise = @merchandise
146 purchase.quantity = 1
147 @merchandise.quantity -= 1
149 # Add to session variables
150 session[:total] += @merchandise.price
151 session[:items].push @merchandise
153 # Save both the merchandise (we changed the quantity) and the purchase to the log
157 flash[:notice] = "Successfully made purchase"
158 redirect_to :action => :menu