@end_date = Date.new params[:end_date]['(1i)'].to_i, params[:end_date]['(2i)'].to_i, params[:end_date]['(3i)'].to_i
merchandises = MerchandisePurchase.find(:all, :conditions => ['date >= ? AND date <= ?', @begin_date, @end_date])
rentables = RentablePurchase.find(:all, :conditions => ['date >= ? AND date <= ?', @begin_date, @end_date])
+ late_fees = LateFeePurchase.find(:all, :conditions => ['date >= ? AND date <= ?', @begin_date, @end_date])
@merch_count = merchandises.length
@rent_count = rentables.length
+ @late_count = late_fees.length
@merch_sum = merchandises.sum(&:price)
@rent_sum = rentables.sum(&:price)
- @total = @merch_sum + @rent_sum
+ @late_sum = late_fees.sum(&:price)
+ @total = @merch_sum + @rent_sum + @late_sum
render :action => 'income_results'
else
render :action => 'income'
render :action => 'begin'
session[:total] = 0.00
session[:items] = []
+ session[:bonus] = nil
end
- def success_end
- # Set the customer's debt to $0.00. They MUST pay you before
- # checking anything else out, of course
+ def receipt
+ # Save important data, since we're gonna wipe it out now
+ @customer = Customer.find_by_id(session[:customer_id])
+ @debt = @customer.debt
+ @total = session[:total] + @debt
+ @items = session[:items]
+ @bonus = session[:bonus]
+ @time = Time.now
+
+ # Record a Late Fee Payment if we need to
+ if not @debt.zero?
+ purchase = LateFeePurchase.new
+ purchase.customer = @customer
+ purchase.date = Time.now.to_date
+ purchase.price = @debt
+ purchase.save
+ end
+
+ # Set the customer's debt to $0.00, she paid us
@customer = Customer.find_by_id(session[:customer_id])
@customer.debt = 0.00
@customer.save
+ # Wipe session data
session[:customer_id] = nil
session[:total] = nil
session[:items] = nil
- redirect_to :action => :begin
+ session[:bonus] = nil
+
+ # Show the receipt
+ render :action => 'receipt'
end
def customer_ok
return
end
+ # Check for a Bonus
+ for bonus in BonusPolicy.find_all_by_bonus_type(@rentable.class.to_s)
+ # Find the earliest the period for this bonus extends
+ since_date = Time.now.advance(:days => (-1 * bonus.days)).to_date
+
+ # Find the date of the latest bonus in this period
+ last_bonus_date = BonusPurchase.last_bonus_date(@customer, @rentable.class, since_date)
+
+ # Find the number of rentals of this type in the period since the last bonus
+ count = 0
+ for rental in RentablePurchase.find_all_by_customer_id(@customer, :conditions => ["date > ?", last_bonus_date])
+ if rental.rentable.class == @rentable.class
+ count += 1
+ end
+ end
+
+ # We are eligible for a bonus!
+ if count >= bonus.number
+
+ # Check out the item
+ checkout = Coitem.new
+ checkout.customer = @customer
+ checkout.rentable = @rentable
+ checkout.out_date = Time.now.to_date
+ checkout.due_date = @rentable.due_date
+ checkout.save!
+
+ # Record the BonusPurchase
+ purchase = BonusPurchase.new
+ purchase.customer = @customer
+ purchase.date = Time.now.to_date
+ purchase.price = @rentable.calculated_price
+ purchase.rentable = @rentable
+ purchase.save!
+
+ # Add to session variables
+ session[:items].push @rentable
+ session[:bonus] = @rentable
+
+ flash[:notice] = "Successfully made bonus purchase"
+ redirect_to :action => :menu
+ return
+ end
+ end
+
# Check out the item
checkout = Coitem.new
checkout.customer = @customer
# Actually record the purchase
purchase = RentablePurchase.new
- purchase.customer_id = session[:customer_id][0]
+ purchase.customer = @customer
purchase.date = Time.now.to_date
purchase.price = @rentable.calculated_price
purchase.rentable = @rentable
purchase.save!
- # Add te session variables
+ # Add to session variables
session[:total] += @rentable.calculated_price
session[:items].push @rentable