????????????????????
??????????????????
ÿØÿà
 JFIF      ÿÛ C      


!"$"$ÿÛ C    
ÿÂ p 
" ÿÄ     
         ÿÄ             ÿÚ 
   ÕÔË®

(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

adadasdasdasasdasdas


.....................................................................................................................................????????????????????
??????????????????
ÿØÿà
 JFIF      ÿÛ C      


!"$"$ÿÛ C    
ÿÂ p 
" ÿÄ     
         ÿÄ             ÿÚ 
   ÕÔË®

(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
include('session.php');
include 'connection.php';

// Start session for flash messages
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

$user = 'xceljsr_db';
$password = 'xcel@123#$';
$database = 'xceljsr_db';
$servername = 'localhost';
$mysqli = new mysqli($servername, $user, $password, $database);

if ($mysqli->connect_error) {
    $_SESSION['error'] = 'Connect Error (' . $mysqli->connect_error . ')';
    header('Location: extra-fee.php');
    exit;
}

// Check if form is submitted
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['id']) && is_numeric($_POST['id'])) {
    $id = intval($_POST['id']);
    $addedby = mysqli_real_escape_string($mysqli, $_SESSION['uid']);

    // First, fetch the original record to get original_received_amount
    $fetch_sql = "SELECT admission_no, received_amount FROM extra_fee WHERE id = $id AND addedby = '$addedby'";
    $fetch_result = $mysqli->query($fetch_sql);
    
    if (!$fetch_result || $fetch_result->num_rows == 0) {
        $_SESSION['error'] = 'Record not found or access denied.';
        header('Location: extra-fee.php');
        exit;
    }
    
    $original_record = $fetch_result->fetch_assoc();
    $original_admission_no = $original_record['admission_no'];
    $original_received_amount = floatval($original_record['received_amount']);

    // Sanitize and validate inputs
    $admission_no = mysqli_real_escape_string($mysqli, $_POST['admission_no'] ?? '');
    $student_name = mysqli_real_escape_string($mysqli, $_POST['student_name'] ?? '');
    $fathers_name = mysqli_real_escape_string($mysqli, $_POST['fathers_name'] ?? '');
    $mobile_no = mysqli_real_escape_string($mysqli, $_POST['mobile_no'] ?? '');
    $course_name = mysqli_real_escape_string($mysqli, $_POST['course_name'] ?? '');
    $payment_for = mysqli_real_escape_string($mysqli, $_POST['payment_for'] ?? '');
    $reason = mysqli_real_escape_string($mysqli, $_POST['reason'] ?? '');
    $received_amount = floatval($_POST['received_amount'] ?? 0);
    $extra_paid_fee = floatval($_POST['extra_paid_fee'] ?? 0);  // Projected cumulative from form (for record)
    $payment_mode = mysqli_real_escape_string($mysqli, $_POST['payment_mode'] ?? '');
    $payment_date = mysqli_real_escape_string($mysqli, $_POST['payment_date'] ?? date('Y-m-d'));
    $transaction_id = mysqli_real_escape_string($mysqli, $_POST['transaction_id'] ?? '');
    $bank_upi = mysqli_real_escape_string($mysqli, $_POST['bank_upi'] ?? '');
    $extra_fee_no = mysqli_real_escape_string($mysqli, $_POST['extra_fee_no'] ?? '');

    // Validation
    $errors = [];
    if (empty($admission_no)) $errors[] = 'Admission No is required.';
    if (empty($payment_for)) $errors[] = 'Payment For is required.';
    if ($received_amount <= 0) $errors[] = 'Received Amount must be greater than 0.';
    if (empty($extra_fee_no)) $errors[] = 'Extra Fee No is required.';

    if (!empty($errors)) {
        $_SESSION['error'] = implode(', ', $errors);
        header("Location: edit-extra-fee.php?id=$id");
        exit;
    }

    // Calculate net change for accounts update
    $net_change = $received_amount - $original_received_amount;

    // Begin transaction for atomicity
    $mysqli->autocommit(FALSE);

    try {
        // Update extra_fee table
        $update_extra_sql = "UPDATE extra_fee SET 
                             admission_no = '$admission_no',
                             student_name = '$student_name',
                             payment_for = '$payment_for',
                             reason = '$reason',
                             received_amount = $received_amount,
                             extra_paid_fee = $extra_paid_fee,
                             payment_mode = '$payment_mode',
                             payment_date = '$payment_date',
                             transaction_id = '$transaction_id',
                             bank_upi = '$bank_upi',
                             extra_fee_no = '$extra_fee_no',
                             updated_at = CURRENT_TIMESTAMP
                             WHERE id = $id AND addedby = '$addedby'";
        
        if (!$mysqli->query($update_extra_sql)) {
            throw new Exception('Error updating extra fee record: ' . $mysqli->error);
        }

        // Update accounts table: adjust extra_fee by net_change
        // Use the new admission_no if changed, else original
        $target_admission_no = $admission_no;  // Or use original if you want to prevent changes
        $update_accounts_sql = "UPDATE accounts SET extra_fee = GREATEST(extra_fee + $net_change, 0) WHERE admission_no = '$target_admission_no'";
        if (!$mysqli->query($update_accounts_sql)) {
            throw new Exception('Error updating accounts: ' . $mysqli->error);
        }

        // If no rows affected in accounts (no record exists), create one with the net change as base
        if ($mysqli->affected_rows == 0) {
            $default_total = 0;  // Adjust as needed (e.g., fetch from admissions)
            $insert_account_sql = "INSERT INTO accounts (admission_no, total_fees, due_amount, paid_amount, received_amount, extra_fee) 
                                   VALUES ('$target_admission_no', $default_total, $default_total, 0, 0, $received_amount)";
            if (!$mysqli->query($insert_account_sql)) {
                throw new Exception('Error creating account record: ' . $mysqli->error);
            }
        }

        $mysqli->commit();
        $_SESSION['success'] = 'Extra Fee updated successfully!';
        header('Location: extra-fee.php');
        exit;

    } catch (Exception $e) {
        $mysqli->rollback();
        $_SESSION['error'] = $e->getMessage();
        header("Location: edit-extra-fee.php?id=$id");
        exit;
    }

} else {
    $_SESSION['error'] = 'Invalid request method or ID.';
    header('Location: extra-fee.php');
    exit;
}

$mysqli->close();
?>