<?php
// Include header
include_once 'includes/header.php';
// Get student ID from session
$student_id = $_SESSION['user_id'];
$success_message = '';
$error_message = '';
// Handle flash messages
if (isset($_SESSION['success_message'])) {
$success_message = $_SESSION['success_message'];
unset($_SESSION['success_message']);
}
if (isset($_SESSION['error_message'])) {
$error_message = $_SESSION['error_message'];
unset($_SESSION['error_message']);
}
// Handle the payment form submission
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit_payment'])) {
// Get form data
$student_id = $_SESSION['user_id'];
$course_id = $_POST['course_id'] ?? 0;
$amount = $_POST['amount'] ?? 0;
$payment_method = $_POST['payment_method'] ?? '';
$transaction_id = $_POST['transaction_id'] ?? '';
$payment_details = $_POST['payment_for'] ?? '';
// Validation
if (empty($course_id) || empty($amount) || empty($payment_method)) {
$error_message = "Please fill in all required fields.";
} else {
// Redirect to the payment process page
header("Location: payment_process.php?course_id=$course_id&amount=$amount&payment_for=$payment_details");
exit();
}
}
// Get all enrollments for the student
$enrollments_query = "
SELECT e.id, e.course_id, e.enrollment_date, e.status, e.payment_plan,
c.title as course_title, c.price, c.discount_price,
(
SELECT SUM(amount)
FROM payments
WHERE user_id = ? AND course_id = e.course_id AND status IN ('completed', 'verified')
) as course_paid
FROM enrollments e
INNER JOIN courses c ON e.course_id = c.id
WHERE e.user_id = ?
ORDER BY e.enrollment_date DESC
";
$stmt = $conn->prepare($enrollments_query);
$stmt->bind_param("ii", $student_id, $student_id);
$stmt->execute();
$enrollments_result = $stmt->get_result();
$enrollments = [];
$total_paid = 0;
$total_amount = 0;
while ($row = $enrollments_result->fetch_assoc()) {
// Calculate total fee based on payment plan
$course_fee = $row['discount_price'] > 0 ? $row['discount_price'] : $row['price'];
if ($row['payment_plan'] === 'monthly') {
$row['fee_amount'] = round($course_fee / 12, 2);
$row['total_fee'] = $course_fee;
$row['payments_count'] = 12;
$row['payment_type'] = 'Monthly';
} else if ($row['payment_plan'] === 'six_month') {
$row['fee_amount'] = round($course_fee / 6, 2);
$row['total_fee'] = $course_fee;
$row['payments_count'] = 6;
$row['payment_type'] = 'Six-Month';
} else {
$row['fee_amount'] = $course_fee;
$row['total_fee'] = $course_fee;
$row['payments_count'] = 1;
$row['payment_type'] = 'Full Payment';
}
// Calculate remaining amount
$row['course_paid'] = $row['course_paid'] ?? 0;
$row['remaining_amount'] = max(0, $row['total_fee'] - $row['course_paid']);
$row['payment_progress'] = $row['total_fee'] > 0 ? min(100, round(($row['course_paid'] / $row['total_fee']) * 100)) : 0;
$enrollments[] = $row;
$total_paid += $row['course_paid'];
$total_amount += $row['total_fee'];
}
// Get payment history
$payments_query = "
SELECT p.id, p.amount, p.payment_method, p.status as payment_status,
p.transaction_id, p.payment_date, p.payment_details,
c.title as course_title
FROM payments p
INNER JOIN courses c ON p.course_id = c.id
WHERE p.user_id = ?
ORDER BY p.payment_date DESC
";
$stmt = $conn->prepare($payments_query);
$stmt->bind_param("i", $student_id);
$stmt->execute();
$payments_result = $stmt->get_result();
$payments = [];
while ($row = $payments_result->fetch_assoc()) {
$payments[] = $row;
}
// Calculate total pending amount
$total_pending = max(0, $total_amount - $total_paid);
$payment_progress = $total_amount > 0 ? min(100, round(($total_paid / $total_amount) * 100)) : 0;
// Razorpay API Key (would normally come from a secure configuration)
$razorpay_key_id = "rzp_test_YourRazorpayKeyId";
// Get next payment amount for each course
foreach ($enrollments as &$enrollment) {
// For simplicity, we'll use the fee amount as the next payment
$enrollment['next_payment'] = min($enrollment['remaining_amount'], $enrollment['fee_amount']);
}
?>
<div class="container-fluid">
<div class="row mb-4">
<div class="col-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">Payment Management</h5>
<p class="text-muted">Manage your course fees and payments</p>
</div>
</div>
</div>
</div>
<?php if ($success_message): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<i class="fas fa-check-circle me-2"></i> <?php echo $success_message; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<?php if ($error_message): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="fas fa-exclamation-circle me-2"></i> <?php echo $error_message; ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<!-- Payment Overview -->
<div class="row">
<div class="col-md-4 mb-4">
<div class="card bg-primary text-white">
<div class="card-body">
<div class="d-flex justify-content-between">
<div>
<h6 class="text-uppercase">Total Fees</h6>
<h3 class="mb-0">₹<?php echo number_format($total_amount, 2); ?></h3>
</div>
<div class="text-white">
<i class="fas fa-money-bill-wave fa-3x opacity-50"></i>
</div>
</div>
</div>
<div class="card-footer bg-transparent border-0 text-white">
<small>For all enrolled courses</small>
</div>
</div>
</div>
<div class="col-md-4 mb-4">
<div class="card bg-success text-white">
<div class="card-body">
<div class="d-flex justify-content-between">
<div>
<h6 class="text-uppercase">Total Paid</h6>
<h3 class="mb-0">₹<?php echo number_format($total_paid, 2); ?></h3>
</div>
<div class="text-white">
<i class="fas fa-check-circle fa-3x opacity-50"></i>
</div>
</div>
</div>
<div class="card-footer bg-transparent border-0 text-white">
<div class="d-flex align-items-center">
<div class="progress flex-grow-1" style="height: 6px;">
<div class="progress-bar bg-light" role="progressbar" style="width: <?php echo $payment_progress; ?>%" aria-valuenow="<?php echo $payment_progress; ?>" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<span class="ms-2"><?php echo $payment_progress; ?>%</span>
</div>
</div>
</div>
</div>
<div class="col-md-4 mb-4">
<div class="card bg-danger text-white">
<div class="card-body">
<div class="d-flex justify-content-between">
<div>
<h6 class="text-uppercase">Due Amount</h6>
<h3 class="mb-0">₹<?php echo number_format($total_pending, 2); ?></h3>
</div>
<div class="text-white">
<i class="fas fa-exclamation-circle fa-3x opacity-50"></i>
</div>
</div>
</div>
<div class="card-footer bg-transparent border-0 text-white">
<small>Pending payments for all courses</small>
</div>
</div>
</div>
</div>
<!-- Courses & Payments -->
<div class="row">
<div class="col-lg-7 mb-4">
<div class="card">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">Enrolled Courses</h5>
</div>
<div class="card-body">
<?php if (empty($enrollments)): ?>
<div class="alert alert-info mb-0">
<i class="fas fa-info-circle me-2"></i> You are not enrolled in any courses yet.
</div>
<?php else: ?>
<?php foreach ($enrollments as $enrollment): ?>
<div class="card mb-3 enrollment-card">
<div class="card-body">
<div class="row align-items-center">
<div class="col-lg-8">
<h5 class="card-title mb-1"><?php echo htmlspecialchars($enrollment['course_title']); ?></h5>
<p class="text-muted small mb-2">
<i class="fas fa-calendar-alt me-1"></i> Enrolled: <?php echo date('d M Y', strtotime($enrollment['enrollment_date'])); ?>
<span class="mx-2">|</span>
<i class="fas fa-money-bill-alt me-1"></i> <?php echo $enrollment['payment_type']; ?> Plan
</p>
<div class="d-flex justify-content-between align-items-center mb-1">
<span class="small">Payment Progress</span>
<span class="small"><?php echo $enrollment['payment_progress']; ?>%</span>
</div>
<div class="progress mb-3" style="height: 8px;">
<div class="progress-bar bg-success" role="progressbar" style="width: <?php echo $enrollment['payment_progress']; ?>%"
aria-valuenow="<?php echo $enrollment['payment_progress']; ?>" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="row">
<div class="col-md-4 mb-2 mb-md-0">
<div class="d-flex flex-column">
<span class="text-muted small">Total Fee</span>
<span class="fw-bold">₹<?php echo number_format($enrollment['total_fee'], 2); ?></span>
</div>
</div>
<div class="col-md-4 mb-2 mb-md-0">
<div class="d-flex flex-column">
<span class="text-muted small">Paid</span>
<span class="fw-bold text-success">₹<?php echo number_format($enrollment['course_paid'], 2); ?></span>
</div>
</div>
<div class="col-md-4">
<div class="d-flex flex-column">
<span class="text-muted small">Remaining</span>
<span class="fw-bold text-danger">₹<?php echo number_format($enrollment['remaining_amount'], 2); ?></span>
</div>
</div>
</div>
</div>
<div class="col-lg-4 mt-3 mt-lg-0 text-center text-lg-end">
<?php if ($enrollment['remaining_amount'] > 0): ?>
<div class="d-grid gap-2">
<!-- Razorpay integration button -->
<button class="btn btn-primary pay-now-btn"
data-course-id="<?php echo $enrollment['course_id']; ?>"
data-amount="<?php echo $enrollment['next_payment']; ?>"
data-course-title="<?php echo htmlspecialchars($enrollment['course_title']); ?>">
<i class="fas fa-credit-card me-2"></i> Pay Online
</button>
<!-- Manual payment button -->
<a href="payment_process.php?course_id=<?php echo $enrollment['course_id']; ?>&amount=<?php echo $enrollment['next_payment']; ?>&payment_for=Installment"
class="btn btn-outline-primary">
<i class="fas fa-university me-2"></i> Manual Payment
</a>
</div>
<?php else: ?>
<div class="alert alert-success mb-0">
<i class="fas fa-check-circle me-1"></i> Payment Completed
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
</div>
<div class="col-lg-5 mb-4">
<div class="card h-100">
<div class="card-header bg-primary text-white d-flex justify-content-between align-items-center">
<h5 class="mb-0">Recent Payments</h5>
<a href="payment_history.php" class="btn btn-sm btn-light">
<i class="fas fa-history me-1"></i> View All
</a>
</div>
<div class="card-body">
<?php if (empty($payments)): ?>
<div class="alert alert-info mb-0">
<i class="fas fa-info-circle me-2"></i> No payment records found.
</div>
<?php else: ?>
<div class="table-responsive">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>Date</th>
<th>Course</th>
<th>Amount</th>
<th>Status</th>
<th>Receipt</th>
</tr>
</thead>
<tbody>
<?php
$count = 0;
foreach ($payments as $payment):
if ($count++ >= 5) break; // Show only 5 most recent payments
?>
<tr>
<td><?php echo date('d/m/Y', strtotime($payment['payment_date'])); ?></td>
<td class="text-truncate" style="max-width: 150px;" title="<?php echo htmlspecialchars($payment['course_title']); ?>">
<?php echo htmlspecialchars($payment['course_title']); ?>
</td>
<td>₹<?php echo number_format($payment['amount'], 2); ?></td>
<td>
<span class="badge bg-<?php
echo $payment['payment_status'] === 'completed' || $payment['payment_status'] === 'verified' ? 'success' :
($payment['payment_status'] === 'pending' ? 'warning' : 'danger');
?>">
<?php echo ucfirst($payment['payment_status']); ?>
</span>
</td>
<td>
<?php if ($payment['payment_status'] === 'completed' || $payment['payment_status'] === 'verified'): ?>
<a href="payment_receipt.php?id=<?php echo $payment['id']; ?>" class="btn btn-sm btn-outline-primary" target="_blank">
<i class="fas fa-file-invoice"></i>
</a>
<?php else: ?>
<span class="text-muted"><i class="fas fa-clock"></i></span>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Payment Due Notification -->
<?php if ($total_pending > 0): ?>
<div class="row">
<div class="col-12">
<div class="alert alert-warning">
<div class="d-flex">
<div class="me-3">
<i class="fas fa-bell fa-2x"></i>
</div>
<div>
<h5 class="alert-heading">Payment Reminder</h5>
<p class="mb-0">You have pending payments totaling ₹<?php echo number_format($total_pending, 2); ?>. Please make your payments on time to maintain access to all course materials.</p>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
</div>
<!-- Include Razorpay JavaScript SDK -->
<script src="https://checkout.razorpay.com/v1/checkout.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Handle online payment buttons
const payButtons = document.querySelectorAll('.pay-now-btn');
payButtons.forEach(function(button) {
button.addEventListener('click', function() {
const courseId = this.getAttribute('data-course-id');
const amount = parseFloat(this.getAttribute('data-amount'));
const courseTitle = this.getAttribute('data-course-title');
// Razorpay accepts amount in paise (multiply by 100)
const amountInPaise = Math.round(amount * 100);
const options = {
key: '<?php echo $razorpay_key_id; ?>', // Enter the Key ID generated from the Dashboard
amount: amountInPaise,
currency: 'INR',
name: '<?php echo htmlspecialchars($institution_name ?? "Institute of Technology"); ?>',
description: 'Payment for ' + courseTitle,
image: '../assets/img/logo.png',
handler: function(response) {
// After successful payment, create a form and submit to your server
const form = document.createElement('form');
form.method = 'POST';
form.action = 'process_razorpay_payment.php';
const fields = {
razorpay_payment_id: response.razorpay_payment_id,
course_id: courseId,
amount: amount,
payment_method: 'razorpay',
transaction_id: response.razorpay_payment_id,
payment_for: 'Installment'
};
for (const key in fields) {
const hiddenField = document.createElement('input');
hiddenField.type = 'hidden';
hiddenField.name = key;
hiddenField.value = fields[key];
form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
},
prefill: {
name: '<?php echo htmlspecialchars($_SESSION['first_name'] . ' ' . $_SESSION['last_name'] ?? ''); ?>',
email: '<?php echo htmlspecialchars($_SESSION['email'] ?? ''); ?>',
contact: '<?php echo htmlspecialchars($_SESSION['phone'] ?? ''); ?>'
},
theme: {
color: '#3399cc'
}
};
const rzp = new Razorpay(options);
rzp.open();
});
});
});
</script>
<?php include_once 'includes/footer.php'; ?>