query("INSERT INTO fee_collections (student_id, category_id, fee_amount, paid_amount, due_amount, payment_mode, transaction_no, payment_date, remarks, status) VALUES ('$student_id', '$category_id', '$fee_amount', '$paid_amount', '$due_amount', '$payment_mode', '$transaction_no', '$payment_date', '$remarks', '$status')"); echo ''; exit(); } // Search student by enrollment/roll number $student_data = null; $fee_breakdown = []; $show_debug = false; if(isset($_POST['search_student']) && !empty($_POST['enrollment_no'])) { $enrollment_no = mysqli_real_escape_string($con, $_POST['enrollment_no']); $stu_query = $con->query("SELECT s.*, c.course_name, c.id as course_id, ce.institute_name FROM students s LEFT JOIN courses c ON s.course_id = c.id LEFT JOIN centers ce ON s.center_id = ce.id WHERE s.enrollment_no = '$enrollment_no' AND s.status = 1"); if($stu_query->num_rows > 0) { $student_data = $stu_query->fetch_assoc(); $course_name = $student_data['course_name']; $course_id = $student_data['course_id']; $show_debug = true; // Debug ON // Try multiple queries to find matching fees // 1. Exact match $fee_structures = $con->query("SELECT fs.*, fc.category_name FROM fee_structure fs LEFT JOIN fee_categories fc ON fs.category_id = fc.id WHERE fs.class_name = '$course_name' AND fs.status = 1 ORDER BY fc.id ASC"); // 2. If no exact match, try LIKE if($fee_structures->num_rows == 0) { $fee_structures = $con->query("SELECT fs.*, fc.category_name FROM fee_structure fs LEFT JOIN fee_categories fc ON fs.category_id = fc.id WHERE fs.class_name LIKE '%$course_name%' AND fs.status = 1 ORDER BY fc.id ASC"); } // 3. If still no match, try matching by course_id pattern if($fee_structures->num_rows == 0) { // Extract number from course name (e.g., "9th" from "9th Class") preg_match('/(\d+)/', $course_name, $matches); if(!empty($matches[1])) { $class_num = $matches[1]; $fee_structures = $con->query("SELECT fs.*, fc.category_name FROM fee_structure fs LEFT JOIN fee_categories fc ON fs.category_id = fc.id WHERE fs.class_name LIKE '%$class_num%' AND fs.status = 1 ORDER BY fc.id ASC"); } } $total_fee = 0; $total_paid = 0; if($fee_structures && $fee_structures->num_rows > 0) { while($fs = $fee_structures->fetch_assoc()) { $paid_query = $con->query("SELECT SUM(paid_amount) as paid FROM fee_collections WHERE student_id = '".$student_data['id']."' AND category_id = '".$fs['category_id']."'"); $paid_for_category = $paid_query->fetch_assoc()['paid'] ?? 0; $due = $fs['fee_amount'] - $paid_for_category; $fee_breakdown[] = [ 'category_id' => $fs['category_id'], 'category_name' => $fs['category_name'], 'fee_amount' => $fs['fee_amount'], 'frequency' => $fs['frequency'], 'paid' => $paid_for_category, 'due' => max(0, $due), 'status' => ($due <= 0) ? 'Paid' : (($paid_for_category > 0) ? 'Partial' : 'Due') ]; $total_fee += $fs['fee_amount']; $total_paid += $paid_for_category; } } $student_data['total_fee'] = $total_fee; $student_data['total_paid'] = $total_paid; $student_data['balance'] = $total_fee - $total_paid; } else { echo ''; } } // Fetch fee categories $categories = $con->query("SELECT * FROM fee_categories WHERE status = 1 ORDER BY category_name ASC"); // Fetch fee collections $collections = $con->query("SELECT fc.*, s.name, s.enrollment_no, s.father, fct.category_name FROM fee_collections fc LEFT JOIN students s ON fc.student_id = s.id LEFT JOIN fee_categories fct ON fc.category_id = fct.id ORDER BY fc.id DESC"); ?>

Search Student by Enrollment No.

Debug Info:

Course Name: | Course ID:

Fee Records Found:

Photo
Total Course Fee
Total Paid
Balance Due
0): ?>

Fee Structure Breakdown

Fee Category Total Amount Frequency Paid Due Status Action
0): ?> Paid
Total

No fee structure found for course:

Please add fee structure for this class in Fee Structure Management.

Fee Collection History

num_rows > 0): ?> fetch_assoc()): ?>
#IDStudent NameEnroll. No.Category Fee AmountPaidDueModeDateStatus
#
No fee collections found