﻿﻿??????????????
﻿﻿??????????????
<?php
include('session.php');
include 'connection.php';

// Required POST fields
$admission_no   = $_POST['admission_no'] ?? '';
$student_name   = $_POST['student_name'] ?? '';
$fathers_name   = $_POST['fathers_name'] ?? '';
$mobile_no      = $_POST['mobile_no'] ?? '';
$course_name    = $_POST['course_name'] ?? '';
$total_fee      = (float)($_POST['total_fee'] ?? 0);
$mr_no          = $_POST['mr_no'] ?? '';
$transaction_id = $_POST['transaction_id'] ?? '';
$payment_date   = $_POST['payment_date'] ?? date('Y-m-d');
$received_amount= (float)($_POST['received_amount'] ?? 0);
$bank_upi       = $_POST['bank_upi'] ?? '';
$payment_mode   = $_POST['payment_mode'] ?? '';
$addedby_manual = $_POST['addedby'] ?? '';

// Normalize cash case fields
if (strcasecmp($payment_mode, 'Cash') === 0) {
    if ($transaction_id === '') $transaction_id = 'NA';
    if ($bank_upi === '') $bank_upi = 'NA';
}

// Fetch current account snapshot
$acc_sql = "SELECT total_fees, due_amount, paid_amount, received_amount FROM accounts WHERE admission_no = '".$conn->real_escape_string($admission_no)."'";
$acc_res = $conn->query($acc_sql);

$acc_total_fees   = $total_fee; // fallback
$acc_due_amount   = $total_fee; // default if not present
$acc_paid_amount  = 0;
$acc_received_amt = 0;

if ($acc_res && $acc_res->num_rows > 0) {
    $acc = $acc_res->fetch_assoc();
    $acc_total_fees   = (float)$acc['total_fees'];
    $acc_due_amount   = (float)$acc['due_amount'];
    $acc_paid_amount  = (float)$acc['paid_amount'];
    $acc_received_amt = (float)$acc['received_amount'];
    // Keep total_fee in sync with account if present
    if ($acc_total_fees > 0) $total_fee = $acc_total_fees;
}

// Compute per-record figures for fees row
$after_increment_due = $acc_due_amount - $received_amount;
if ($after_increment_due < 0) $after_increment_due = 0;
$new_paid_for_fee = $total_fee - $after_increment_due;

// Server-side uniqueness check for MR No
if ($mr_no !== '') {
    $dup_sql = "SELECT 1 FROM fees WHERE mr_no = '".$conn->real_escape_string($mr_no)."' LIMIT 1";
    $dup_res = $conn->query($dup_sql);
    if ($dup_res && $dup_res->num_rows > 0) {
        echo "<script>alert('Receipt No already exists. Please use a different number.'); window.history.back();</script>";
        exit;
    }
}

// Insert fee row (addedby stored as manual admin name)
$hasPaymentModeCol = false;
$checkColSql = "SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'fees' AND COLUMN_NAME = 'payment_mode'";
$checkColRes = $conn->query($checkColSql);
if ($checkColRes && $checkColRes->num_rows > 0) { $hasPaymentModeCol = true; }

$columns = "admission_no, student_name, fathers_name, mobile_no, course_name, total_fee, due_amount, paid_amount, mr_no, transaction_id, payment_date, received_amount, bank_upi, addedby";
$values  = "('".$conn->real_escape_string($admission_no)."',
             '".$conn->real_escape_string($student_name)."',
             '".$conn->real_escape_string($fathers_name)."',
             '".$conn->real_escape_string($mobile_no)."',
             '".$conn->real_escape_string($course_name)."',
             '".$conn->real_escape_string($total_fee)."',
             '".$conn->real_escape_string($after_increment_due)."',
             '".$conn->real_escape_string($new_paid_for_fee)."',
             '".$conn->real_escape_string($mr_no)."',
             '".$conn->real_escape_string($transaction_id)."',
             '".$conn->real_escape_string($payment_date)."',
             '".$conn->real_escape_string($received_amount)."',
             '".$conn->real_escape_string($bank_upi)."',
             '".$conn->real_escape_string($addedby_manual)."')";

if ($hasPaymentModeCol) {
    $columns .= ", payment_mode";
    $values  = rtrim($values, ')') . ", '".$conn->real_escape_string($payment_mode)."')";
}

$sql_fees = "INSERT INTO fees (".$columns.") VALUES ".$values;

if ($conn->query($sql_fees) === TRUE) {
    // Update or insert accounts aggregate
    $new_received_total = $acc_received_amt + $received_amount;
    $new_due_total      = $total_fee - $new_received_total; if ($new_due_total < 0) $new_due_total = 0;
    $new_paid_total     = $total_fee - $new_due_total;

    // Upsert accounts
    if ($acc_res && $acc_res->num_rows > 0) {
        $upd_sql = "UPDATE accounts SET total_fees = '".$conn->real_escape_string($total_fee)."',
                                        due_amount = '".$conn->real_escape_string($new_due_total)."',
                                        paid_amount = '".$conn->real_escape_string($new_paid_total)."',
                                        received_amount = '".$conn->real_escape_string($new_received_total)."'
                     WHERE admission_no = '".$conn->real_escape_string($admission_no)."'";
        $conn->query($upd_sql);
    } else {
        $ins_sql = "INSERT INTO accounts (admission_no, total_fees, due_amount, paid_amount, received_amount)
                    VALUES ('".$conn->real_escape_string($admission_no)."',
                            '".$conn->real_escape_string($total_fee)."',
                            '".$conn->real_escape_string($new_due_total)."',
                            '".$conn->real_escape_string($new_paid_total)."',
                            '".$conn->real_escape_string($new_received_total)."')";
        $conn->query($ins_sql);
    }

    echo "<script>alert('Fee record added successfully.'); window.location.href='fee.php';</script>";
} else {
    echo "<script>alert('Error adding fee: ".addslashes($conn->error)."'); window.history.back();</script>";
}