public function cart_payment()
 {
     $id = "";
     if ($this->GetData('id')) {
         $id = $this->GetData('id');
     }
     $user_id = mysql_real_escape_string(Site::CurrentUser()->id);
     $cart = Cart::find("carts.user_id = {$user_id} AND carts.id = {$id}");
     if ($cart->paid) {
         Site::Flash('error', 'The cart has already been paid');
         RedirectBack('bookings');
     }
     $cart->check_discounts();
     if ($cart->cost() != 0) {
         Site::Flash('error', 'This cart still needs to be paid for');
         RedirectBack('bookings');
     }
     if ($cart->full_cart_discount()) {
         $id = mysql_real_escape_string($cart->id);
         $redemptions = DiscountRedemption::find_all("discount_redemptions.cart_id='{$id}' and discount_redemptions.cart_item_id IS NULL");
     }
     // Log the payment
     $gateway = PaymentGateway::find_by_code('discount');
     $payment = new PaymentTransaction();
     $payment->cart_id = $cart->id;
     $payment->externalid = (string) $redemptions[0];
     $payment->paymentgateway_id = $gateway->id;
     $payment->status = 'ptsTaken';
     $payment->amount = $cart->cost() / 100;
     $payment->sender = Site::CurrentUser()->email;
     $payment->save();
     $cart->mark_paid($payment, 'Discount');
     // Email staff about payment
     Email::send_payment_complete(array(), "", $cart, $redemptions);
     Redirect("payments/{$id}/complete");
 }